merge from 2_4_Release branch
[jalview.git] / src / org / biojava / dasobert / das / SequenceThread.java
index 8f54a9f..76008b6 100755 (executable)
@@ -16,7 +16,7 @@
  * at:
  *
  *      http://www.biojava.org/
- *
+ * 
  * Created on Nov 20, 2005
  *
  */
@@ -41,221 +41,253 @@ import org.xml.sax.SAXNotRecognizedException;
 import org.xml.sax.XMLReader;
 import java.util.*;
 
-/** a thread that gets the sequence from a DAS server
- *
+/**
+ * a thread that gets the sequence from a DAS server
+ * 
  * @author Andreas Prlic
- *
+ * 
  */
-public class SequenceThread
-extends Thread {
-
-    Das1Source[] sequenceServers;
-    String sp_accession;
-    List seqListeners;
-    static Logger logger = Logger.getLogger("org.biojava.spice");
-
-     public SequenceThread(String sp_accession,Das1Source ds ) {
-        super();
-        Das1Source[] dss =new Das1Source[1];
-       dss[0] = ds;
-        this.sp_accession = sp_accession;
-        this.sequenceServers =dss ;
-        clearSequenceListeners();
-    }
-    public SequenceThread(String sp_accession,Das1Source[] ds ) {
-        super();
+public class SequenceThread extends Thread
+{
 
-        this.sp_accession = sp_accession;
-        this.sequenceServers =ds ;
-        clearSequenceListeners();
-    }
+  Das1Source[] sequenceServers;
 
-    public void clearSequenceListeners(){
-        seqListeners = new ArrayList();
-    }
+  String sp_accession;
 
-    public void addSequenceListener(SequenceListener lis){
-        seqListeners.add(lis);
-    }
+  List seqListeners;
 
-    public void run() {
-        getSequence();
-    }
+  String version;
 
-    public void getSequence( ){
+  static Logger logger = Logger.getLogger("org.biojava.spice");
 
-        boolean gotSequence = false ;
+  public SequenceThread(String sp_accession, Das1Source ds)
+  {
+    super();
+    Das1Source[] dss = new Das1Source[1];
+    dss[0] = ds;
+    this.sp_accession = sp_accession;
+    this.sequenceServers = dss;
+    clearSequenceListeners();
+    version = "";
+  }
 
-        for ( int i = 0 ; i< sequenceServers.length; i++){
+  public SequenceThread(String sp_accession, Das1Source[] ds)
+  {
+    super();
 
-            if ( gotSequence ) break ;
+    this.sp_accession = sp_accession;
+    this.sequenceServers = ds;
+    clearSequenceListeners();
+  }
 
-            Das1Source ds = sequenceServers[i];
-            String url = ds.getUrl() ;
-            char lastChar = url.charAt(url.length()-1);
-            if ( ! (lastChar == '/') )
-                url +="/" ;
-            String dascmd = url + "sequence?segment=";
-            String connstr = dascmd + sp_accession ;
+  public void clearSequenceListeners()
+  {
+    seqListeners = new ArrayList();
+  }
 
-            try {
+  public void addSequenceListener(SequenceListener lis)
+  {
+    seqListeners.add(lis);
+  }
 
-                String sequence = retrieveSequence(connstr);
-                // bug in aristotle das source?
-                sequence.replaceAll(" ","");
-                gotSequence = true ;
-                // set the sequence ...
+  public void run()
+  {
+    getSequence();
+  }
 
-                triggerNewSequence(sp_accession,sequence);
+  public void getSequence()
+  {
 
+    boolean gotSequence = false;
 
-                return;
-            }
-            catch (Exception ex) {
-                ex.printStackTrace();
-                logger.warning(ex.getMessage());
+    for (int i = 0; i < sequenceServers.length; i++)
+    {
 
-                //triggerException(ex);
+      if (gotSequence)
+        break;
 
-            }
-        }
+      Das1Source ds = sequenceServers[i];
+      String url = ds.getUrl();
+      char lastChar = url.charAt(url.length() - 1);
+      if (!(lastChar == '/'))
+        url += "/";
+      String dascmd = url + "sequence?segment=";
+      String connstr = dascmd + sp_accession;
 
-        logger.log(Level.WARNING,"could not retreive UniProt sequence from any available DAS sequence server");
+      try
+      {
+        version = "";
 
-        triggerNoSequence(sp_accession);
+        String sequence = retrieveSequence(connstr);
+        // bug in aristotle das source?
+        sequence.replaceAll(" ", "");
+        gotSequence = true;
+        // set the sequence ...
 
-    }
+        triggerNewSequence(sp_accession, sequence, ds, version);
 
+        return;
+      } catch (Exception ex)
+      {
+        ex.printStackTrace();
+        logger.warning(ex.getMessage());
 
+        // triggerException(ex);
 
-//    private void triggerException(Exception e){
-//        Iterator iter = seqListeners.iterator();
-//        while (iter.hasNext()){
-//           SequenceListener li = (SequenceListener)iter.next();
-//           li.exceptionOccured(e);
-//        }
-//    }
+      }
+    }
 
-    private void triggerNewSequence(String sp_accession,String sequence){
+    logger
+            .log(
+                    Level.WARNING,
+                    "could not retreive UniProt sequence from any available DAS sequence server");
 
-        Iterator iter = seqListeners.iterator();
-        while (iter.hasNext()){
-           SequenceListener li = (SequenceListener)iter.next();
-            //SequenceEvent event = new SequenceEvent(sequence);
-           SequenceEvent event = new SequenceEvent(sp_accession,sequence);
-           li.newSequence(event);
-        }
-    }
+    triggerNoSequence(sp_accession);
+
+  }
 
-    private void triggerNoSequence(String ac){
+  // private void triggerException(Exception e){
+  // Iterator iter = seqListeners.iterator();
+  // while (iter.hasNext()){
+  // SequenceListener li = (SequenceListener)iter.next();
+  // li.exceptionOccured(e);
+  // }
+  // }
 
-        Iterator iter = seqListeners.iterator();
-        while (iter.hasNext()){
-            SequenceListener li = (SequenceListener)iter.next();
-            li.noObjectFound(ac);
-        }
+  private void triggerNewSequence(String sp_accession, String sequence,
+          Das1Source source, String version)
+  {
 
+    Iterator iter = seqListeners.iterator();
+    while (iter.hasNext())
+    {
+      SequenceListener li = (SequenceListener) iter.next();
+      // SequenceEvent event = new SequenceEvent(sequence);
+      SequenceEvent event = new SequenceEvent(sp_accession, sequence,
+              version);
+      event.setSource(source);
+      li.newSequence(event);
     }
+  }
+
+  private void triggerNoSequence(String ac)
+  {
 
-    /** retrieve the Sequence from a DAS server.
-     *
-     * @param connstr - the DAS - request string. e.g. http://www.ebi.ac.uk/das-srv/uniprot/das/aristotle/sequence?segment=P00280
-     * @return the requested Sequence
-     * @throws Exception
-     */
-    public String retrieveSequence( String connstr)
-    throws Exception
+    Iterator iter = seqListeners.iterator();
+    while (iter.hasNext())
     {
+      SequenceListener li = (SequenceListener) iter.next();
+      li.noObjectFound(ac);
+    }
 
-        //logger.finest("trying: " + connstr) ;
-        URL dasUrl = new URL(connstr);
-        //DAS_httpConnector dhtp = new DAS_httpConnector() ;
-        logger.info("requesting sequence from " + connstr);
-        InputStream dasInStream =open(dasUrl);
-
-
-        SAXParserFactory spfactory =
-            SAXParserFactory.newInstance();
-
-       // never do this
-        //String vali = System.getProperty("XMLVALIDATION");
-        String vali = "false";
-        boolean validate = false ;
-        if ((vali != null) && ( vali.equals("true")) )
-            validate = true ;
-        spfactory.setValidating(validate);
-
-        SAXParser saxParser = null ;
-
-        try{
-            saxParser =
-                spfactory.newSAXParser();
-        } catch (ParserConfigurationException e) {
-            //e.printStackTrace();
-            logger.log(Level.FINER,"Uncaught exception", e);
-        }
-
-        XMLReader xmlreader = saxParser.getXMLReader();
-
-        try {
-            xmlreader.setFeature("http://xml.org/sax/features/validation", validate);
-        } catch (SAXException e) {
-            logger.finer("Cannot set validation to " + validate);
-            logger.log(Level.FINER,"Uncaught exception", e);
-        }
-
-        try {
-            xmlreader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd",validate);
-        } catch (SAXNotRecognizedException e){
-            //e.printStackTrace();
-            logger.finer("Cannot set load-external-dtd to" + validate);
-            logger.log(Level.FINER,"Uncaught exception", e);
-            //System.err.println("Cannot set load-external-dtd to" + validate);
-        }
-
-
-        //DAS_DNA_Handler cont_handle = new DAS_DNA_Handler() ;
-        DAS_Sequence_Handler cont_handle = new DAS_Sequence_Handler() ;
-        xmlreader.setContentHandler(cont_handle);
-        xmlreader.setErrorHandler(new org.xml.sax.helpers.DefaultHandler());
-        InputSource insource = new InputSource() ;
-        insource.setByteStream(dasInStream);
-
-        xmlreader.parse(insource);
-        String sequence = cont_handle.get_sequence();
-        //logger.finest("Got sequence from DAS: " +sequence);
-        logger.exiting(this.getClass().getName(), "retreiveSequence",  sequence);
-        return sequence ;
+  }
+
+  /**
+   * retrieve the Sequence from a DAS server.
+   * 
+   * @param connstr -
+   *                the DAS - request string. e.g.
+   *                http://www.ebi.ac.uk/das-srv/uniprot/das/aristotle/sequence?segment=P00280
+   * @return the requested Sequence
+   * @throws Exception
+   */
+  public String retrieveSequence(String connstr) throws Exception
+  {
+
+    // logger.finest("trying: " + connstr) ;
+    URL dasUrl = new URL(connstr);
+    // DAS_httpConnector dhtp = new DAS_httpConnector() ;
+    logger.info("requesting sequence from " + connstr);
+    InputStream dasInStream = open(dasUrl);
+
+    SAXParserFactory spfactory = SAXParserFactory.newInstance();
+
+    // never do this
+    // String vali = System.getProperty("XMLVALIDATION");
+    String vali = "false";
+    boolean validate = false;
+    if ((vali != null) && (vali.equals("true")))
+      validate = true;
+    spfactory.setValidating(validate);
+
+    SAXParser saxParser = null;
+
+    try
+    {
+      saxParser = spfactory.newSAXParser();
+    } catch (ParserConfigurationException e)
+    {
+      // e.printStackTrace();
+      logger.log(Level.FINER, "Uncaught exception", e);
     }
 
-    private InputStream open(URL url) {
-        {
+    XMLReader xmlreader = saxParser.getXMLReader();
 
-            InputStream inStream = null;
-            try{
+    try
+    {
+      xmlreader.setFeature("http://xml.org/sax/features/validation",
+              validate);
+    } catch (SAXException e)
+    {
+      logger.finer("Cannot set validation to " + validate);
+      logger.log(Level.FINER, "Uncaught exception", e);
+    }
 
+    try
+    {
+      xmlreader
+              .setFeature(
+                      "http://apache.org/xml/features/nonvalidating/load-external-dtd",
+                      validate);
+    } catch (SAXNotRecognizedException e)
+    {
+      // e.printStackTrace();
+      logger.finer("Cannot set load-external-dtd to" + validate);
+      logger.log(Level.FINER, "Uncaught exception", e);
+      // System.err.println("Cannot set load-external-dtd to" + validate);
+    }
 
+    // DAS_DNA_Handler cont_handle = new DAS_DNA_Handler() ;
+    DAS_Sequence_Handler cont_handle = new DAS_Sequence_Handler();
+    xmlreader.setContentHandler(cont_handle);
+    xmlreader.setErrorHandler(new org.xml.sax.helpers.DefaultHandler());
+    InputSource insource = new InputSource();
+    insource.setByteStream(dasInStream);
 
+    xmlreader.parse(insource);
+    String sequence = cont_handle.get_sequence();
+    version = cont_handle.getVersion();
+    // logger.finest("Got sequence from DAS: " +sequence);
 
-                HttpURLConnection huc = null;
+    logger.exiting(this.getClass().getName(), "retreiveSequence", sequence);
+    return sequence;
+  }
 
-                huc = DAS_FeatureRetrieve.openHttpURLConnection(url);
+  private InputStream open(URL url)
+  {
+    {
 
+      InputStream inStream = null;
+      try
+      {
 
-                logger.finest(huc.getResponseMessage());
+        HttpURLConnection huc = null;
 
-                inStream = huc.getInputStream();
+        huc = DAS_FeatureRetrieve.openHttpURLConnection(url);
 
+        logger.finest(huc.getResponseMessage());
 
-            }
-            catch ( Exception ex){
-                ex.printStackTrace();
-                logger.log(Level.WARNING,"exception occured", ex);
-            }
+        inStream = huc.getInputStream();
 
-            return inStream;
-        }
+      } catch (Exception ex)
+      {
+        ex.printStackTrace();
+        logger.log(Level.WARNING, "exception occured", ex);
+      }
 
+      return inStream;
     }
 
+  }
+
 }