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;
- String version ;
-
- 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 class SequenceThread extends Thread
+{
+
+ Das1Source[] sequenceServers;
+
+ String sp_accession;
+
+ List seqListeners;
+
+ String version;
+
+ 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();
+ version = "";
+ }
+
+ public SequenceThread(String sp_accession, Das1Source[] ds)
+ {
+ super();
+
+ this.sp_accession = sp_accession;
+ this.sequenceServers = ds;
+ clearSequenceListeners();
+ }
+
+ public void clearSequenceListeners()
+ {
+ seqListeners = new ArrayList();
+ }
+
+ public void addSequenceListener(SequenceListener lis)
+ {
+ seqListeners.add(lis);
+ }
+
+ public void run()
+ {
+ getSequence();
+ }
+
+ public void getSequence()
+ {
+
+ boolean gotSequence = false;
+
+ for (int i = 0; i < sequenceServers.length; i++)
+ {
+
+ 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;
+
+ try
+ {
version = "";
+
+ String sequence = retrieveSequence(connstr);
+ // TODO: discriminate exceptions caused by connection/server errors and ones caused by the sequence not being found in the reference source.
+ if (sequence!=null)
+ {
+ // 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);
+
+ }
}
- public SequenceThread(String sp_accession,Das1Source[] ds ) {
- super();
-
- this.sp_accession = sp_accession;
- this.sequenceServers =ds ;
- clearSequenceListeners();
- }
-
- public void clearSequenceListeners(){
- seqListeners = new ArrayList();
- }
-
- public void addSequenceListener(SequenceListener lis){
- seqListeners.add(lis);
+
+ logger
+ .log(
+ Level.WARNING,
+ "could not retreive UniProt sequence from any available DAS sequence server");
+
+ triggerNoSequence(sp_accession);
+
+ }
+
+ // 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,
+ 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);
}
-
- public void run() {
- getSequence();
+ }
+
+ private void triggerNoSequence(String ac)
+ {
+
+ Iterator iter = seqListeners.iterator();
+ while (iter.hasNext())
+ {
+ SequenceListener li = (SequenceListener) iter.next();
+ li.noObjectFound(ac);
}
-
- public void getSequence( ){
-
- boolean gotSequence = false ;
-
- for ( int i = 0 ; i< sequenceServers.length; i++){
-
- 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 ;
-
- try {
- version = "";
-
- 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);
-
- }
- }
-
- logger.log(Level.WARNING,"could not retreive UniProt sequence from any available DAS sequence server");
-
- triggerNoSequence(sp_accession);
-
+
+ }
+
+ /**
+ * 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 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,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);
- }
+ 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);
}
-
- private void triggerNoSequence(String ac){
- Iterator iter = seqListeners.iterator();
- while (iter.hasNext()){
- SequenceListener li = (SequenceListener)iter.next();
- li.noObjectFound(ac);
- }
-
+ 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);
}
-
- /** 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
+ if (dasInStream==null)
{
-
- //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();
- version = cont_handle.getVersion();
- //logger.finest("Got sequence from DAS: " +sequence);
-
- logger.exiting(this.getClass().getName(), "retreiveSequence", sequence);
- return sequence ;
+ return null;
}
-
- private InputStream open(URL url) {
- {
-
- InputStream inStream = null;
- try{
-
-
-
-
- HttpURLConnection huc = null;
-
- huc = DAS_FeatureRetrieve.openHttpURLConnection(url);
-
-
- logger.finest(huc.getResponseMessage());
-
- inStream = huc.getInputStream();
-
-
- }
- catch ( Exception ex){
- ex.printStackTrace();
- logger.log(Level.WARNING,"exception occured", ex);
- }
-
- return inStream;
- }
-
+ // 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);
+
+ logger.exiting(this.getClass().getName(), "retreiveSequence", sequence);
+ return sequence;
+ }
+
+ private InputStream open(URL url)
+ {
+ {
+
+ InputStream inStream = null;
+ try
+ {
+
+ HttpURLConnection huc = null;
+
+ huc = DAS_FeatureRetrieve.openHttpURLConnection(url);
+
+ logger.finest(huc.getResponseMessage());
+
+ inStream = huc.getInputStream();
+
+ } catch (Exception ex)
+ {
+ ex.printStackTrace();
+ logger.log(Level.WARNING, "exception occured", ex);
+ }
+
+ return inStream;
}
-
+
+ }
+
}