X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fws%2FDasSequenceFeatureFetcher.java;h=1220df7cd8be854031c24233a19b3ce136fe12bf;hb=1335a93a7eb656ab1bd08572d4be2b386a9043c9;hp=2d4e73fe51370c261a21a824df0824c14eb39c49;hpb=5d88ae6bbf1ea113cefcb43b7918b5baf560a76e;p=jalview.git
diff --git a/src/jalview/ws/DasSequenceFeatureFetcher.java b/src/jalview/ws/DasSequenceFeatureFetcher.java
index 2d4e73f..1220df7 100644
--- a/src/jalview/ws/DasSequenceFeatureFetcher.java
+++ b/src/jalview/ws/DasSequenceFeatureFetcher.java
@@ -1,78 +1,158 @@
/*
- * Jalview - A Sequence Alignment Editor and Viewer
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with Jalview. If not, see .
*/
package jalview.ws;
-import java.net.*;
-import java.util.*;
-
-import javax.swing.*;
-
-import org.biojava.dasobert.das.*;
-import org.biojava.dasobert.das2.*;
-import org.biojava.dasobert.das2.io.*;
-import org.biojava.dasobert.dasregistry.*;
-import org.biojava.dasobert.eventmodel.*;
import jalview.bin.Cache;
-import jalview.datamodel.*;
-import jalview.gui.*;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+import jalview.gui.Desktop;
+import jalview.gui.FeatureSettings;
+import jalview.util.UrlLink;
+import jalview.ws.dbsources.das.api.DasSourceRegistryI;
+import jalview.ws.dbsources.das.api.jalviewSourceI;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.swing.JOptionPane;
+
+import org.biodas.jdas.client.adapters.features.DasGFFAdapter;
+import org.biodas.jdas.client.adapters.features.DasGFFAdapter.GFFAdapter;
+import org.biodas.jdas.client.threads.FeaturesClientMultipleSources;
+import org.biodas.jdas.schema.features.ERRORSEGMENT;
+import org.biodas.jdas.schema.features.FEATURE;
+import org.biodas.jdas.schema.features.LINK;
+import org.biodas.jdas.schema.features.SEGMENT;
+import org.biodas.jdas.schema.features.TYPE;
+import org.biodas.jdas.schema.features.UNKNOWNFEATURE;
+import org.biodas.jdas.schema.features.UNKNOWNSEGMENT;
+import org.biodas.jdas.schema.sources.COORDINATES;
/**
* DOCUMENT ME!
- *
+ *
* @author $author$
* @version $Revision$
*/
public class DasSequenceFeatureFetcher
{
SequenceI[] sequences;
+
AlignFrame af;
+
FeatureSettings fsettings;
+
StringBuffer sbuffer = new StringBuffer();
- Vector selectedSources;
+
+ List selectedSources;
+
boolean cancelled = false;
+ private void debug(String mesg)
+ {
+ debug(mesg, null);
+ }
+
+ private void debug(String mesg, Exception e)
+ {
+ if (Cache.log != null)
+ {
+ Cache.log.debug(mesg, e);
+ }
+ else
+ {
+ System.err.println(mesg);
+ if (e != null)
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
long startTime;
+ private DasSourceRegistryI sourceRegistry;
+
/**
- * Creates a new SequenceFeatureFetcher object.
- * Uses default
- *
- * @param align DOCUMENT ME!
- * @param ap DOCUMENT ME!
+ * Creates a new SequenceFeatureFetcher object. Uses default
+ *
+ * @param align
+ * DOCUMENT ME!
+ * @param ap
+ * DOCUMENT ME!
*/
public DasSequenceFeatureFetcher(SequenceI[] sequences,
- FeatureSettings fsettings,
- Vector selectedSources)
+ FeatureSettings fsettings, Vector selectedSources)
{
- this.selectedSources = selectedSources;
- this.sequences = sequences;
- this.af = fsettings.af;
- this.fsettings = fsettings;
+ this(sequences, fsettings, selectedSources, true, true);
+ }
+ public DasSequenceFeatureFetcher(SequenceI[] oursequences,
+ FeatureSettings fsettings, List selectedSources2,
+ boolean checkDbrefs, boolean promptFetchDbrefs)
+ {
+ this.selectedSources = new ArrayList();
+ // filter both sequences and sources to eliminate duplicates
+ for (jalviewSourceI src : selectedSources2)
+ {
+ if (!selectedSources.contains(src))
+ {
+ selectedSources.add(src);
+ }
+ ;
+ }
+ Vector sqs = new Vector();
+ for (int i = 0; i < oursequences.length; i++)
+ {
+ if (!sqs.contains(oursequences[i]))
+ {
+ sqs.addElement(oursequences[i]);
+ }
+ }
+ sequences = new SequenceI[sqs.size()];
+ for (int i = 0; i < sequences.length; i++)
+ {
+ sequences[i] = (SequenceI) sqs.elementAt(i);
+ }
+ if (fsettings != null)
+ {
+ this.fsettings = fsettings;
+ this.af = fsettings.af;
+ af.setShowSeqFeatures(true);
+ }
int uniprotCount = 0;
- for (int i = 0; i < selectedSources.size(); i++)
+ for (jalviewSourceI source : selectedSources)
{
- DasSource source = (DasSource) selectedSources.elementAt(i);
- DasCoordinateSystem[] coords = source.getCoordinateSystem();
- for (int c = 0; c < coords.length; c++)
+ for (COORDINATES coords : source.getVersion().getCOORDINATES())
{
- if (coords[c].getName().indexOf("UniProt") > -1)
+ // TODO: match UniProt coord system canonically (?) - does
+ // UniProt==uniprot==UNIPROT ?
+ if (coords.getAuthority().toLowerCase().equals("uniprot"))
{
uniprotCount++;
break;
@@ -88,8 +168,8 @@ public class DasSequenceFeatureFetcher
{
for (int j = 0; j < dbref.length; j++)
{
- if (dbref[j].getSource()
- .equals(jalview.datamodel.DBRefSource.UNIPROT))
+ if (dbref[j].getSource().equals(
+ jalview.datamodel.DBRefSource.UNIPROT))
{
refCount++;
break;
@@ -98,15 +178,21 @@ public class DasSequenceFeatureFetcher
}
}
- if (refCount < sequences.length && uniprotCount > 0)
+ if (checkDbrefs && refCount < sequences.length && uniprotCount > 0)
{
- 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);
+ int reply = JOptionPane.YES_OPTION;
+ if (promptFetchDbrefs)
+ {
+ 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)
{
@@ -115,400 +201,575 @@ public class DasSequenceFeatureFetcher
}
else
{
- startFetching();
- }
+ _startFetching();
+ }
}
else
{
- startFetching();
+ _startFetching();
}
+ }
+ private void _startFetching()
+ {
+ new Thread(new FetchSeqFeatures()).start();
+ }
+ class FetchSeqFeatures implements Runnable
+ {
+ public void run()
+ {
+ startFetching();
+ setGuiFetchComplete();
}
-
- class FetchDBRefs
- implements Runnable
+ }
+ class FetchDBRefs implements Runnable
{
public void run()
{
new DBRefFetcher(sequences, af).fetchDBRefs(true);
startFetching();
+ setGuiFetchComplete();
}
}
-
- /**
- * Spawns a number of dasobert Fetcher threads to add features to sequences in the dataset
- */
- void startFetching()
- {
- cancelled = false;
- startTime = System.currentTimeMillis();
- af.setProgressBar("Fetching DAS Sequence Features", startTime);
-
- DasSource[] sources = new jalview.gui.DasSourceBrowser().getDASSource();
-
- if (selectedSources == null || selectedSources.size() == 0)
- {
- 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())
- {
- token = st.nextToken();
- for (int i = 0; i < sources.length; i++)
- {
- if (sources[i].getNickname().equals(token))
- {
- selectedSources.addElement(sources[i]);
- break;
- }
- }
- }
- }
-
- if (selectedSources == null || selectedSources.size() == 0)
- {
- System.out.println("No DAS Sources active");
- af.setProgressBar("No DAS Sources Active", startTime);
- cancelled = true;
- fsettings.noDasSourceActive();
- return;
- }
-
- sourcesRemaining = selectedSources.size();
- //Now sending requests one at a time to each server
- for (int sourceIndex = 0;
- sourceIndex < selectedSources.size()
- && !cancelled;
- sourceIndex++)
- {
- DasSource dasSource = (DasSource) selectedSources.elementAt(
- sourceIndex);
-
- nextSequence(dasSource, sequences[0]);
- }
- }
-
- public void cancel()
- {
- af.setProgressBar("DAS Feature Fetching Cancelled", startTime);
- cancelled = true;
- }
-
- int sourcesRemaining=0;
- void responseComplete(DasSource dasSource, SequenceI seq)
- {
- if (seq != null)
- {
- for (int seqIndex = 0;
- seqIndex < sequences.length-1
- && !cancelled; seqIndex++)
- {
- if (sequences[seqIndex] == seq)
- {
- nextSequence(dasSource, sequences[++seqIndex]);
- return;
- }
- }
- }
-
- sourcesRemaining --;
-
- if(sourcesRemaining==0)
- {
- af.setProgressBar("DAS Feature Fetching Complete", startTime);
-
- if(af.featureSettings!=null)
- {
- af.featureSettings.setTableData();
+ /**
+ * Spawns Fetcher threads to add features to sequences in the dataset
+ */
+ void startFetching()
+ {
+ cancelled = false;
+ startTime = System.currentTimeMillis();
+ if (af != null)
+ {
+ af.setProgressBar("Fetching DAS Sequence Features", startTime);
+ }
+ if (sourceRegistry == null)
+ {
+ sourceRegistry = Cache.getDasSourceRegistry();
+ }
+ if (selectedSources == null || selectedSources.size() == 0)
+ {
+ try
+ {
+ jalviewSourceI[] sources = sourceRegistry.getSources().toArray(
+ new jalviewSourceI[0]);
+ String active = jalview.bin.Cache.getDefault("DAS_ACTIVE_SOURCE",
+ "uniprot");
+ StringTokenizer st = new StringTokenizer(active, "\t");
+ selectedSources = new Vector();
+ String token;
+ while (st.hasMoreTokens())
+ {
+ token = st.nextToken();
+ for (int i = 0; i < sources.length; i++)
+ {
+ if (sources[i].getTitle().equals(token))
+ {
+ selectedSources.add(sources[i]);
+ break;
+ }
+ }
+ }
+ } catch (Exception ex)
+ {
+ debug("Exception whilst setting default feature sources from registry and local preferences.",
+ ex);
}
+ }
- fsettings.complete();
- }
+ if (selectedSources == null || selectedSources.size() == 0)
+ {
+ System.out.println("No DAS Sources active");
+ cancelled = true;
+ setGuiNoDassourceActive();
+ return;
+ }
- }
+ sourcesRemaining = selectedSources.size();
+ FeaturesClientMultipleSources fc = new FeaturesClientMultipleSources();
+ fc.setConnProps(sourceRegistry.getSessionHandler());
+ // Now sending requests one at a time to each server
+ ArrayList srcobj = new ArrayList();
+ ArrayList src = new ArrayList();
+ List> ids = new ArrayList>();
+ List> idobj = new ArrayList>();
+ List