X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Forg%2Fbiojava%2Fdasobert%2Fdas%2FFeatureThread.java;h=e7c9df98eb56d4f965e54b1990683351d2157d8d;hb=54e003f9b2fff47dbfea6401c3944afdb7bd37b3;hp=7435cdb8b6b604916732f48a322e26e57c05d43b;hpb=ac8acb905e84708b759ae1e87eaf6691d9376d57;p=jalview.git diff --git a/src/org/biojava/dasobert/das/FeatureThread.java b/src/org/biojava/dasobert/das/FeatureThread.java index 7435cdb..e7c9df9 100755 --- a/src/org/biojava/dasobert/das/FeatureThread.java +++ b/src/org/biojava/dasobert/das/FeatureThread.java @@ -22,14 +22,14 @@ * */ -package org.biojava.dasobert.das ; +package org.biojava.dasobert.das; -import java.util.*; import java.net.*; -import java.util.logging.* ; -import org.biojava.dasobert.eventmodel.FeatureListener; -import org.biojava.dasobert.eventmodel.FeatureEvent; -import org.biojava.dasobert.dasregistry.Das1Source; +import java.util.*; +import java.util.logging.*; + +import org.biojava.dasobert.dasregistry.*; +import org.biojava.dasobert.eventmodel.*; /** a thread that connects to a DAS - Feature service and gets the features * @@ -42,138 +42,154 @@ public class FeatureThread implements Runnable { - /** number of times the client tries to reconnect to the server if a "come back later" is returned. - * the server should provide a reasonable estimation how long it will take him to create results. - * if this number of requests is still not successfull, give up. - */ - public static int MAX_COME_BACK_ITERATIONS = 5; - - public static int MAX_NR_FEATURES = 300; - - static Logger logger = Logger.getLogger("org.biojava.spice"); - - Das1Source dasSource; - String ac ; - List featureListeners; - Thread thread; - - public FeatureThread (String accessionCode, Das1Source dasSource) { - this.dasSource = dasSource; - this.ac = accessionCode; - featureListeners = new ArrayList(); - } - - public void addFeatureListener(FeatureListener li) { - featureListeners.add(li); - } - - public void clearFeatureListeners() { - featureListeners.clear(); - } - - public synchronized void stop(){ - thread = null; - notify(); - } - - - - - public void run() { - Thread me = Thread.currentThread(); - while ( thread == me) { - String url = dasSource.getUrl(); - String queryString = url + "features?segment="+ ac ; - URL cmd = null ; - try { - cmd = new URL(queryString); - } catch (MalformedURLException e ) { - logger.warning("got MalformedURL from das source " +dasSource); - e.printStackTrace(); - } + /** number of times the client tries to reconnect to the server if a "come back later" is returned. + * the server should provide a reasonable estimation how long it will take him to create results. + * if this number of requests is still not successfull, give up. + */ + public static int MAX_COME_BACK_ITERATIONS = 5; + + public static int MAX_NR_FEATURES = 300; + + static Logger logger = Logger.getLogger("org.biojava.spice"); + + Das1Source dasSource; + String ac; + List featureListeners; + Thread thread; + + public FeatureThread(String accessionCode, Das1Source dasSource) + { + this.dasSource = dasSource; + this.ac = accessionCode; + featureListeners = new ArrayList(); + } + + public void addFeatureListener(FeatureListener li) + { + featureListeners.add(li); + } + + public void clearFeatureListeners() + { + featureListeners.clear(); + } + + public synchronized void stop() + { + thread = null; + notify(); + } + + public void run() + { + Thread me = Thread.currentThread(); + while (thread == me) + { + String url = dasSource.getUrl(); + String queryString = url + "features?segment=" + ac; + URL cmd = null; + try + { + cmd = new URL(queryString); + } + catch (MalformedURLException e) + { + logger.warning("got MalformedURL from das source " + dasSource); + e.printStackTrace(); + + } + + logger.info("requesting features from " + cmd); + DAS_FeatureRetrieve ftmp = new DAS_FeatureRetrieve(cmd); + + int comeBackLater = ftmp.getComeBackLater(); + int securityCounter = 0; + while ( (thread == me) && (comeBackLater > 0)) + { + securityCounter++; + if (securityCounter >= MAX_COME_BACK_ITERATIONS) + { + comeBackLater = -1; + break; - logger.info("requesting features from " + cmd); - DAS_FeatureRetrieve ftmp = new DAS_FeatureRetrieve(cmd); - - - int comeBackLater = ftmp.getComeBackLater(); - int securityCounter = 0; - while ( (thread == me) && ( comeBackLater > 0 )) { - securityCounter++; - if ( securityCounter >= MAX_COME_BACK_ITERATIONS){ - comeBackLater = -1; - break; - - } - notifyComeBackLater(comeBackLater); - // server is still calculating - asks us to come back later - try { - wait (comeBackLater); - } catch (InterruptedException e){ - comeBackLater = -1; - break; - } - - ftmp.reload(); - comeBackLater = ftmp.getComeBackLater(); - } - - if ( ! (thread == me ) ) { - break; - } - - List features = ftmp.get_features(); - - // a fallback mechanism to prevent DAS sources from bringing down spice - if ( features.size() > MAX_NR_FEATURES){ - logger.warning("DAS source returned more than " + MAX_NR_FEATURES + "features. " + - " throwing away excess features at " +cmd); - features = features.subList(0,MAX_NR_FEATURES); - } + } + notifyComeBackLater(comeBackLater); + // server is still calculating - asks us to come back later + try + { + wait(comeBackLater); + } + catch (InterruptedException e) + { + comeBackLater = -1; + break; + } + ftmp.reload(); + comeBackLater = ftmp.getComeBackLater(); + } - // notify FeatureListeners - Map[] feats = (Map[])features.toArray(new Map[features.size()]); - notifyFeatureListeners(feats); + if (! (thread == me)) + { + break; + } - break; + List features = ftmp.get_features(); + String version = ftmp.getVersion(); + // a fallback mechanism to prevent DAS sources from bringing down spice + if (features.size() > MAX_NR_FEATURES) + { + logger.warning("DAS source returned more than " + MAX_NR_FEATURES + + "features. " + + " throwing away excess features at " + cmd); + features = features.subList(0, MAX_NR_FEATURES); + } - } - thread = null; + // notify FeatureListeners + Map[] feats = (Map[]) features.toArray(new Map[features.size()]); + notifyFeatureListeners(feats, version); - } + break; - public void start() { - thread = new Thread(this); - thread.start(); } - - private void notifyFeatureListeners(Map[] feats){ - logger.finest("FeatureThread found " + feats.length + " features"); - FeatureEvent fevent = new FeatureEvent(feats,dasSource); - Iterator fiter = featureListeners.iterator(); - while (fiter.hasNext()){ - FeatureListener fi = (FeatureListener)fiter.next(); - fi.newFeatures(fevent); - } + thread = null; + + } + + public void start() + { + thread = new Thread(this); + thread.start(); + } + + private void notifyFeatureListeners(Map[] feats, String version) + { + logger.finest("FeatureThread found " + feats.length + " features"); + FeatureEvent fevent = new FeatureEvent(feats, dasSource, version); + Iterator fiter = featureListeners.iterator(); + while (fiter.hasNext()) + { + FeatureListener fi = (FeatureListener) fiter.next(); + fi.newFeatures(fevent); } - - /** the Annotation server requested to be queried again in a while - * - * @param comeBackLater - */ - private void notifyComeBackLater(int comeBackLater){ - FeatureEvent event = new FeatureEvent(new HashMap[0],dasSource); - event.setComeBackLater(comeBackLater); - Iterator fiter = featureListeners.iterator(); - while (fiter.hasNext()){ - FeatureListener fi = (FeatureListener)fiter.next(); - fi.comeBackLater(event); - } - + } + + /** the Annotation server requested to be queried again in a while + * + * @param comeBackLater + */ + private void notifyComeBackLater(int comeBackLater) + { + FeatureEvent event = new FeatureEvent(new HashMap[0], dasSource, ""); + event.setComeBackLater(comeBackLater); + Iterator fiter = featureListeners.iterator(); + while (fiter.hasNext()) + { + FeatureListener fi = (FeatureListener) fiter.next(); + fi.comeBackLater(event); } + } } -