X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FDasSequenceFeatureFetcher.java;h=b4dd1f66ddb0472f9eed4f09d03da4ea77760de3;hb=4f24ef0848cf3c43ba0467f31fce1baa5c57aad5;hp=8f104c5fed6cf5ed7bd46cd76cde182a03f4feb6;hpb=91416b3038a6f3fc655791512770da07cb6cb251;p=jalview.git diff --git a/src/jalview/io/DasSequenceFeatureFetcher.java b/src/jalview/io/DasSequenceFeatureFetcher.java index 8f104c5..b4dd1f6 100755 --- a/src/jalview/io/DasSequenceFeatureFetcher.java +++ b/src/jalview/io/DasSequenceFeatureFetcher.java @@ -30,13 +30,19 @@ import org.biojava.dasobert.das.FeatureThread; import org.biojava.dasobert.dasregistry.Das1Source; import org.biojava.dasobert.eventmodel.FeatureEvent; import org.biojava.dasobert.eventmodel.FeatureListener; -import org.biojava.services.das.registry.DasRegistryAxisClient; -import org.biojava.services.das.registry.DasSource; +import org.biojava.dasobert.dasregistry.DasSource; +import org.biojava.dasobert.das2.io.DasSourceReaderImpl; +import org.biojava.dasobert.dasregistry.Das1Source; +import org.biojava.dasobert.dasregistry.DasSource; +import org.biojava.dasobert.das2.Das2Source; +import org.biojava.dasobert.das2.DasSourceConverter; -import jalview.bin.Cache; +import jalview.bin.Cache; +import org.biojava.dasobert.dasregistry.DasCoordinateSystem; +import javax.swing.*; /** * DOCUMENT ME! @@ -46,22 +52,92 @@ import jalview.bin.Cache; */ public class DasSequenceFeatureFetcher implements Runnable { - final AlignmentI dataset; - final AlignmentPanel ap; + SequenceI [] sequences; + AlignFrame af; StringBuffer sbuffer = new StringBuffer(); + Vector selectedSources; + long startTime; + int threadsRunning = 0; /** * Creates a new SequenceFeatureFetcher object. + * Uses default * * @param align DOCUMENT ME! * @param ap DOCUMENT ME! */ - public DasSequenceFeatureFetcher(AlignmentI align, AlignmentPanel ap) + public DasSequenceFeatureFetcher(SequenceI [] sequences, + final AlignFrame af, + Vector selectedSources) { - this.dataset = align.getDataset(); - this.ap = ap; + this.selectedSources = selectedSources; + this.sequences = sequences; + this.af = af; + + int uniprotCount = 0; + for (int i = 0; i < selectedSources.size(); i++) + { + DasSource source = (DasSource) selectedSources.elementAt(i); + DasCoordinateSystem[] coords = source.getCoordinateSystem(); + for (int c = 0; c < coords.length; c++) + { + System.out.println(coords[c].getName()); + if (coords[c].getName().indexOf("UniProt")>-1) + { + uniprotCount++; + break; + } + } + } + + int refCount = 0; + for(int i=0; i0) + { + + int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop, + "Do you want Jalview to find\n" + +"Uniprot Accession ids for given sequence names?", + "Find Uniprot Accession Ids", + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + + if(reply == JOptionPane.YES_OPTION) + { + new DBRefFetcher( + af.getViewport().getAlignment(), af).fetchDBRefs(true); + + } + } + + System.out.println("User selection is " + + + ( ( (float) uniprotCount / (float) selectedSources.size()) * 100) + + " % Uniprot, and "+refCount+" / " +sequences.length+" have uniprot accession"); + Thread thread = new Thread(this); thread.start(); @@ -134,10 +210,11 @@ public class DasSequenceFeatureFetcher implements Runnable * @param SourceUrl * @param id */ - protected void createFeatureFetcher(final Sequence seq, + protected void createFeatureFetcher(final SequenceI seq, final String sourceUrl, String id, - String nickname) { + String nickname) + { ////////////// /// fetch DAS features final Das1Source source = new Das1Source(); @@ -147,15 +224,33 @@ public class DasSequenceFeatureFetcher implements Runnable Cache.log.debug("new Das Feature Fetcher for " + id + " querying " + sourceUrl); + if (id != null && id.length() > 0) { - FeatureThread fetcher = new FeatureThread(id + ":" + seq.getStart() + "," +seq.getEnd() - , source); + setThreadsRunning(+1); + + int start=seq.getStart(), end = seq.getEnd(); + + if(af.getViewport().getSelectionGroup()!=null) + { + SequenceI tmp = af.getViewport().getAlignment().findName(seq.getName()); + start = tmp.findPosition( + af.getViewport().getSelectionGroup().getStartRes() + ); + + end = tmp.findPosition( + af.getViewport().getSelectionGroup().getEndRes() + ); + } + + FeatureThread fetcher = new FeatureThread(id + + ":" + start + "," + end, source); fetcher.addFeatureListener(new FeatureListener() { public void comeBackLater(FeatureEvent e) { + setThreadsRunning(-1); Cache.log.debug("das source " + e.getDasSource().getNickname() + " asked us to come back in " + e.getComeBackLater() + " secs."); @@ -163,6 +258,7 @@ public class DasSequenceFeatureFetcher implements Runnable public void newFeatures(FeatureEvent e) { + setThreadsRunning(-1); Das1Source ds = e.getDasSource(); Map[] features = e.getFeatures(); @@ -170,88 +266,85 @@ public class DasSequenceFeatureFetcher implements Runnable Cache.log.debug("das source " + ds.getUrl() + " returned " + features.length + " features"); - if (features.length > 0) { for (int i = 0; i < features.length; i++) { - - SequenceFeature f = newSequenceFeature(features[i], + SequenceFeature f = newSequenceFeature(features[i], source.getNickname()); - if (seq.sequenceFeatures != null) - { - for (int j = 0; (f != null) && j < seq.sequenceFeatures.length; - j++) - { - if (seq.sequenceFeatures[j].equals(f)) - { - f = null; - } - } - } - if (f != null) - { seq.addSequenceFeature(f); - } } } - } + else + { + System.out.println("No features found for sequence " +seq.getName() + +" from: "+ e.getDasSource().getNickname()); + } + } } ); //NOTE alignPanel listener will be called after the previous //anonymous listener!!! - fetcher.addFeatureListener(ap); + fetcher.addFeatureListener(af); fetcher.start(); } } + + synchronized void setThreadsRunning(int i) + { + threadsRunning += i; + if(threadsRunning<1) + af.setProgressBar("DAS Feature Fetching Complete", startTime); + } + /** * Spawns a number of dasobert Fetcher threads to add features to sequences in the dataset */ public void run() { + startTime = System.currentTimeMillis(); + af.setProgressBar("Fetching DAS Sequence Features", startTime); + DasSource [] sources = new jalview.gui.DasSourceBrowser().getDASSource(); - String active = jalview.bin.Cache.getDefault("DAS_ACTIVE_SOURCE", "uniprot"); - StringTokenizer st = new StringTokenizer(active, "\t"); - Vector selectedSources = new Vector(); - String token; - while (st.hasMoreTokens()) + if(selectedSources==null || selectedSources.size()==0) { - token = st.nextToken(); - for(int i=0; i -1) + if (sequences[seqIndex].getName().indexOf("|") > -1) { - id = sequence.getName().substring( - sequence.getName().lastIndexOf("|") + 1); + id = sequences[seqIndex].getName().substring( + sequences[seqIndex].getName().lastIndexOf("|") + 1); } else { - id = sequence.getName(); + id = sequences[seqIndex].getName(); } if (id != null) { // Should try to call a general feature fetcher that queries many sources with name to discover applicable ID references - createFeatureFetcher(sequence, + createFeatureFetcher(sequences[seqIndex], dasSource.getUrl(), id, dasSource.getNickname()); @@ -316,30 +413,49 @@ public class DasSequenceFeatureFetcher implements Runnable } - public static DasSource[] getDASSources() + public static DasSource[] getDASSources() { - try - { - String registryURL = jalview.bin.Cache.getDefault("DAS_REGISTRY_URL", - "http://servlet.sanger.ac.uk/dasregistry/services/das_registry"); + DasSourceReaderImpl reader = new DasSourceReaderImpl(); + String registryURL =jalview.bin.Cache.getDefault("DAS_REGISTRY_URL", + "http://das.sanger.ac.uk/registry/das1/sources/" + ); + try + { URL url = new URL(registryURL); - DasRegistryAxisClient client = new DasRegistryAxisClient(url); + DasSource[] sources = reader.readDasSource(url); - DasSource[] services = client.listServices(); + List das1sources = new ArrayList(); + for (int i = 0; i < sources.length; i++) + { + DasSource ds = sources[i]; + if (ds instanceof Das2Source) + { + Das2Source d2s = (Das2Source) ds; + if (d2s.hasDas1Capabilities()) + { + Das1Source d1s = DasSourceConverter.toDas1Source(d2s); + das1sources.add(d1s); + } + + } + else if (ds instanceof Das1Source) + { + das1sources.add( (Das1Source) ds); + } + } - return services; + return (Das1Source[]) das1sources.toArray(new Das1Source[das1sources.size()]); } catch (Exception ex) { ex.printStackTrace(); + return null; } - return null; } - }