mev-4.0.01/source/org/tigr/microarray/mev/cluster/clusterUtil/submit/RepositoryConfigParser.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2004, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: RepositoryConfigParser.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.4 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 15:48:03 $
2 26 Feb 07 jari 9  * $Author: braistedj $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12 /*
2 26 Feb 07 jari 13  * RepositoryConfigParser.java
2 26 Feb 07 jari 14  *
2 26 Feb 07 jari 15  * Created on June 25, 2004, 10:31 AM
2 26 Feb 07 jari 16  */
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 package org.tigr.microarray.mev.cluster.clusterUtil.submit;
2 26 Feb 07 jari 19
2 26 Feb 07 jari 20 import java.io.File;
2 26 Feb 07 jari 21 import java.net.URL;
2 26 Feb 07 jari 22 import java.util.Hashtable;
2 26 Feb 07 jari 23 import java.util.Iterator;
2 26 Feb 07 jari 24 import java.util.Set;
2 26 Feb 07 jari 25
2 26 Feb 07 jari 26 import javax.swing.JFrame;
2 26 Feb 07 jari 27 import javax.swing.JOptionPane;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 import org.apache.xerces.parsers.DOMParser;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.TMEV;
2 26 Feb 07 jari 31 import org.w3c.dom.Document;
2 26 Feb 07 jari 32 import org.w3c.dom.Element;
2 26 Feb 07 jari 33 import org.w3c.dom.NodeList;
2 26 Feb 07 jari 34 import org.xml.sax.SAXException;
2 26 Feb 07 jari 35 import org.xml.sax.SAXParseException;
2 26 Feb 07 jari 36 import org.xml.sax.helpers.DefaultHandler;
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38 /**
2 26 Feb 07 jari 39  *
2 26 Feb 07 jari 40  * @author  braisted
2 26 Feb 07 jari 41  */
2 26 Feb 07 jari 42 public class RepositoryConfigParser extends DefaultHandler {
2 26 Feb 07 jari 43     /** XML Document
2 26 Feb 07 jari 44      */
2 26 Feb 07 jari 45     Document document;
2 26 Feb 07 jari 46     
2 26 Feb 07 jari 47     /** Root Element */
2 26 Feb 07 jari 48     private Element root;
2 26 Feb 07 jari 49     
2 26 Feb 07 jari 50     /** Hashtable with repository name keys and repository Element values */
2 26 Feb 07 jari 51     private Hashtable repositoryHash;
2 26 Feb 07 jari 52     
2 26 Feb 07 jari 53     /** Creates a new instance of RepositoryConfigParser */
2 26 Feb 07 jari 54     public RepositoryConfigParser() {
2 26 Feb 07 jari 55         
2 26 Feb 07 jari 56     }
2 26 Feb 07 jari 57     
2 26 Feb 07 jari 58     /** Parses config file
2 26 Feb 07 jari 59      */
2 26 Feb 07 jari 60     public boolean parseSubmissionConfigFile() {
2 26 Feb 07 jari 61         
2 26 Feb 07 jari 62         try {
2 26 Feb 07 jari 63             File file = TMEV.getConfigurationFile("archive_submission_config.xml");
2 26 Feb 07 jari 64
2 26 Feb 07 jari 65             if(file == null || !file.exists()) {
2 26 Feb 07 jari 66                 JOptionPane.showMessageDialog(new JFrame(), "Error during submission configuration.  The file archive_submission_config.xml which contains\n"+
2 26 Feb 07 jari 67                 "cluter repository information was missing or not in MeV's config folder.\n", "Cluster Submission Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 68                 return false;
2 26 Feb 07 jari 69             }
2 26 Feb 07 jari 70             
2 26 Feb 07 jari 71             URL url = file.toURL();
2 26 Feb 07 jari 72             
2 26 Feb 07 jari 73             DOMParser parser = new DOMParser();
2 26 Feb 07 jari 74             
2 26 Feb 07 jari 75             parser.setFeature("http://xml.org/sax/features/validation", true);
2 26 Feb 07 jari 76             parser.setErrorHandler(this);
2 26 Feb 07 jari 77             parser.parse(url.toString());
2 26 Feb 07 jari 78             document = parser.getDocument();
2 26 Feb 07 jari 79             root = document.getDocumentElement();
2 26 Feb 07 jari 80         } catch ( NullPointerException e ) {
2 26 Feb 07 jari 81             e.printStackTrace();
2 26 Feb 07 jari 82             JOptionPane.showMessageDialog(new JFrame(), "Error parsing archive_submission_config.xml which contains repository information.", "Cluster Submission Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 83             return false;
2 26 Feb 07 jari 84         } catch (Exception e) {
2 26 Feb 07 jari 85             e.printStackTrace();
2 26 Feb 07 jari 86             JOptionPane.showMessageDialog(new JFrame(), "Error parsing archive_submission_config.xml which contains repository information.", "Cluster Submission Error", JOptionPane.ERROR_MESSAGE);
2 26 Feb 07 jari 87             return false;
2 26 Feb 07 jari 88         }
2 26 Feb 07 jari 89         
2 26 Feb 07 jari 90         initializeRepositoryHash();
2 26 Feb 07 jari 91         
2 26 Feb 07 jari 92         return true;
2 26 Feb 07 jari 93     }
2 26 Feb 07 jari 94     
2 26 Feb 07 jari 95     
2 26 Feb 07 jari 96     /** Returns the root element
2 26 Feb 07 jari 97      */
2 26 Feb 07 jari 98     public Element getRoot() {
2 26 Feb 07 jari 99         return root;
2 26 Feb 07 jari 100     }
2 26 Feb 07 jari 101
2 26 Feb 07 jari 102     
2 26 Feb 07 jari 103     /** Returns available repository names
2 26 Feb 07 jari 104      */
2 26 Feb 07 jari 105     public String [] getRepositoryNames() {
2 26 Feb 07 jari 106         if(repositoryHash == null)
2 26 Feb 07 jari 107             return null;
2 26 Feb 07 jari 108
2 26 Feb 07 jari 109         Set keys = repositoryHash.keySet();
2 26 Feb 07 jari 110         String [] names = new String[keys.size()];
2 26 Feb 07 jari 111         Iterator iter = keys.iterator();
2 26 Feb 07 jari 112         for(int i = 0; i < names.length; i++)
2 26 Feb 07 jari 113             names[i] = (String)(iter.next());
2 26 Feb 07 jari 114         return names;
2 26 Feb 07 jari 115     }
2 26 Feb 07 jari 116     
2 26 Feb 07 jari 117             
2 26 Feb 07 jari 118     /** returns a repository description given a repository name.
2 26 Feb 07 jari 119      * @param repName name of the repository
2 26 Feb 07 jari 120      */
2 26 Feb 07 jari 121     public String getRepositoryDescription(String repName) {
2 26 Feb 07 jari 122         if(repositoryHash == null)
2 26 Feb 07 jari 123             return null;
2 26 Feb 07 jari 124         
2 26 Feb 07 jari 125         Element elem = getRepositoryXMLElement(repName);
2 26 Feb 07 jari 126         NodeList list = elem.getElementsByTagName("description");
2 26 Feb 07 jari 127
2 26 Feb 07 jari 128         return list.item(0).getChildNodes().item(0).getNodeValue();
2 26 Feb 07 jari 129     }
2 26 Feb 07 jari 130     
2 26 Feb 07 jari 131     /** returns a repository's DOM Element given a repository name
2 26 Feb 07 jari 132      * @param repName name of the repository
2 26 Feb 07 jari 133      */
2 26 Feb 07 jari 134     public Element getRepositoryXMLElement(String repName) {
2 26 Feb 07 jari 135         if(repositoryHash == null)
2 26 Feb 07 jari 136             return null;
2 26 Feb 07 jari 137         
2 26 Feb 07 jari 138         return (Element)(repositoryHash.get(repName));
2 26 Feb 07 jari 139     }
2 26 Feb 07 jari 140
2 26 Feb 07 jari 141     
2 26 Feb 07 jari 142     /** Returns all available repository names
2 26 Feb 07 jari 143      */
2 26 Feb 07 jari 144     private void initializeRepositoryHash() {
2 26 Feb 07 jari 145         this.repositoryHash = new Hashtable();
2 26 Feb 07 jari 146         NodeList nameList = root.getElementsByTagName("submit_entry");
2 26 Feb 07 jari 147         String [] names = new String[nameList.getLength()];
2 26 Feb 07 jari 148         for(int i = 0; i < names.length; i++) {            
2 26 Feb 07 jari 149             repositoryHash.put(((Element)(nameList.item(i))).getAttribute("name"), (Element)(nameList.item(i)));
2 26 Feb 07 jari 150         }         
2 26 Feb 07 jari 151     }
2 26 Feb 07 jari 152     
2 26 Feb 07 jari 153     
2 26 Feb 07 jari 154     /**
2 26 Feb 07 jari 155      * Returns a table of repository specifications
2 26 Feb 07 jari 156      */
2 26 Feb 07 jari 157     public String getRepositorySpecifications(String repName) {
2 26 Feb 07 jari 158        String table = new String();
2 26 Feb 07 jari 159        String key, value;
2 26 Feb 07 jari 160        table += "<table cellpadding=5><tr><th colspan=2 align=left>Additional Submission Details</th></tr>";
2 26 Feb 07 jari 161        Element elem = getRepositoryXMLElement(repName);
2 26 Feb 07 jari 162        elem = (Element)(elem.getElementsByTagName("submission").item(0));
2 26 Feb 07 jari 163        elem = (Element)(elem.getElementsByTagName("specification_table").item(0));
2 26 Feb 07 jari 164        NodeList list = elem.getElementsByTagName("spec");  //get spects
2 26 Feb 07 jari 165        for(int i = 0; i < list.getLength(); i++) {
2 26 Feb 07 jari 166            key = ((Element)(list.item(i))).getAttribute("key");
2 26 Feb 07 jari 167            value = ((Element)(list.item(i))).getAttribute("value");
2 26 Feb 07 jari 168            table += "<tr><td><b>"+key+":</b></td><td>"+value+"</td></tr>";
2 26 Feb 07 jari 169        }
2 26 Feb 07 jari 170        table += "</table>";
2 26 Feb 07 jari 171        return table;
2 26 Feb 07 jari 172     }
2 26 Feb 07 jari 173     
2 26 Feb 07 jari 174     
2 26 Feb 07 jari 175     /**
2 26 Feb 07 jari 176      * Constructs a repository description page
2 26 Feb 07 jari 177      */
2 26 Feb 07 jari 178     public String getRepositoryPage(String repName) {
2 26 Feb 07 jari 179         String text = new String();
2 26 Feb 07 jari 180         text += "<html><body><h2>"+repName+"</h2><hr size=3>"+
2 26 Feb 07 jari 181         "<b>Repository Name:&nbsp&nbsp</b>"+ repName +"<br><br>"+
2 26 Feb 07 jari 182         "<b>Repository Web Site:&nbsp&nbsp</b>"+ getRepositoryURL(repName) +"<br><br>"+
2 26 Feb 07 jari 183         "<b>Description:&nbsp&nbsp</b>"+ getRepositoryDescription(repName) +"<br><br>";
2 26 Feb 07 jari 184         text += getRepositorySpecifications(repName);
2 26 Feb 07 jari 185         text += "</body></html>";
2 26 Feb 07 jari 186         return text;
2 26 Feb 07 jari 187     }
2 26 Feb 07 jari 188     
2 26 Feb 07 jari 189     
2 26 Feb 07 jari 190     /** Returns user information in a Hashtable with possible, user_name, password, and email
2 26 Feb 07 jari 191      */
2 26 Feb 07 jari 192     public Hashtable getUserInfo(String repName) {
2 26 Feb 07 jari 193         Hashtable table = new Hashtable();
2 26 Feb 07 jari 194         Element elem = getRepositoryXMLElement(repName);
2 26 Feb 07 jari 195         NodeList list = elem.getElementsByTagName("user");        
2 26 Feb 07 jari 196         elem = (Element)(list.item(0));
2 26 Feb 07 jari 197         
2 26 Feb 07 jari 198         String value = elem.getAttribute("user_name");        
2 26 Feb 07 jari 199         table.put("user_name", value);        
2 26 Feb 07 jari 200         value = elem.getAttribute("password");
2 26 Feb 07 jari 201         table.put("password", value);
2 26 Feb 07 jari 202         value = elem.getAttribute("email");        
2 26 Feb 07 jari 203         table.put("email", value);
2 26 Feb 07 jari 204         
2 26 Feb 07 jari 205         return table;
2 26 Feb 07 jari 206     }
2 26 Feb 07 jari 207     
2 26 Feb 07 jari 208     /** Returns the implementation class for the repository
2 26 Feb 07 jari 209      */
2 26 Feb 07 jari 210     public String getRepositorySubmissionClass(String repName) {
2 26 Feb 07 jari 211         Element elem = getRepositoryXMLElement(repName);
2 26 Feb 07 jari 212         NodeList list = elem.getElementsByTagName("impl");
2 26 Feb 07 jari 213         return ((Element)(list.item(0))).getAttribute("impl_class");        
2 26 Feb 07 jari 214     }
2 26 Feb 07 jari 215      
2 26 Feb 07 jari 216     /** Returns the repository's URL if available, else null
2 26 Feb 07 jari 217      * @param repName repository name
2 26 Feb 07 jari 218      */
2 26 Feb 07 jari 219     public String getRepositoryURL(String repName) {
2 26 Feb 07 jari 220         Element elem = getRepositoryXMLElement(repName);
2 26 Feb 07 jari 221         if(elem != null)
2 26 Feb 07 jari 222             return elem.getAttribute("url");
2 26 Feb 07 jari 223         return null;
2 26 Feb 07 jari 224     }
2 26 Feb 07 jari 225     
2 26 Feb 07 jari 226     //  WARNING Event Handler
2 26 Feb 07 jari 227     /** Reports Parser Exceptions (Warning level exp.)
2 26 Feb 07 jari 228      * @param e reported exception
2 26 Feb 07 jari 229      * @throws SAXException
2 26 Feb 07 jari 230      */
2 26 Feb 07 jari 231     public void warning(SAXParseException e)
2 26 Feb 07 jari 232     throws SAXException {
2 26 Feb 07 jari 233         System.err.println("Warning:  "+e);
2 26 Feb 07 jari 234         
2 26 Feb 07 jari 235       //  parseErrors++;
2 26 Feb 07 jari 236       //  errorLog.recordWarning(e);
2 26 Feb 07 jari 237     }
2 26 Feb 07 jari 238     
2 26 Feb 07 jari 239     //  ERROR Event Handler
2 26 Feb 07 jari 240     /** Parse error reporting.
2 26 Feb 07 jari 241      */
2 26 Feb 07 jari 242     public void error(SAXParseException e)
2 26 Feb 07 jari 243     throws SAXException {
2 26 Feb 07 jari 244         System.err.println("Error:  "+e);
2 26 Feb 07 jari 245     //    errorLog.recordError(e);
2 26 Feb 07 jari 246      //   parseErrors++;
2 26 Feb 07 jari 247     }
2 26 Feb 07 jari 248     
2 26 Feb 07 jari 249     //  FATAL ERROR Event Handler
2 26 Feb 07 jari 250     /** Parse Fatal errors
2 26 Feb 07 jari 251      */
2 26 Feb 07 jari 252     public void fatalError(SAXParseException e)
2 26 Feb 07 jari 253     throws SAXException {
2 26 Feb 07 jari 254         System.err.println("Fatal Error:  "+e);
2 26 Feb 07 jari 255       //  errorLog.recordFatalError(e);
2 26 Feb 07 jari 256       //  parseErrors++;
2 26 Feb 07 jari 257     }
2 26 Feb 07 jari 258
2 26 Feb 07 jari 259 }