StringBuffer result;
final String noDbSelected = "-- Select Database --";
Hashtable sources = new Hashtable();
- private static ASequenceFetcher sfetch=null;
+ private static jalview.ws.SequenceFetcher sfetch=null;
public SequenceFetcher(IProgressIndicator guiIndic)
{
final IProgressIndicator guiWindow = guiIndic;
{
guiWindow.setProgressBar("Initialising Sequence Database Fetchers", this.hashCode());
}
- ASequenceFetcher sf = new jalview.ws.SequenceFetcher();
+ jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher();
if ( guiWindow!=null )
{
guiWindow.setProgressBar("Initialising Sequence Database Fetchers", this.hashCode());
* and should be collapsed.
*/
- String dbs[] = sfetch.getSupportedDb();
+ String dbs[] = sfetch.getOrderedSupportedSources();
for (int i=0; i<dbs.length;i++)
{
if (!sources.containsValue(dbs[i]))
package jalview.ws;\r
\r
+import java.util.ArrayList;\r
import java.util.Enumeration;\r
import java.util.Vector;\r
\r
addDBRefSourceImpl(jalview.ws.dbsources.Uniprot.class);\r
addDBRefSourceImpl(jalview.ws.dbsources.UnprotName.class);\r
addDBRefSourceImpl(jalview.ws.dbsources.Pdb.class);\r
- addDBRefSourceImpl(jalview.ws.dbsources.Pfam.class);\r
+ addDBRefSourceImpl(jalview.ws.dbsources.PfamFull.class);\r
+ addDBRefSourceImpl(jalview.ws.dbsources.PfamSeed.class); // ensures Seed alignment is 'default' for PFAM\r
registerDasSequenceSources();\r
}\r
/**\r
+ * return an ordered list of database sources suitable for using in a GUI element\r
+ */\r
+ public String[] getOrderedSupportedSources() {\r
+ String[] srcs = this.getSupportedDb();\r
+ ArrayList dassrc = new ArrayList(),\r
+ nondas=new ArrayList();\r
+ for (int i=0;i<srcs.length;i++)\r
+ {\r
+ String nm = getSourceProxy(srcs[i]).getDbName();\r
+ if (getSourceProxy(srcs[i]) instanceof jalview.ws.dbsources.DasSequenceSource)\r
+ {\r
+ if (nm.startsWith("das:"))\r
+ {\r
+ nm = nm.substring(4);\r
+ }\r
+ dassrc.add(new String[] { srcs[i], nm.toUpperCase()} );\r
+ } else {\r
+ nondas.add(new String[] { srcs[i], nm.toUpperCase()} );\r
+ }\r
+ }\r
+ Object[] sorted = nondas.toArray();\r
+ String[] tosort = new String[sorted.length];\r
+ nondas.clear();\r
+ for (int j=0;j<sorted.length;j++)\r
+ {\r
+ tosort[j] = ((String[]) sorted[j])[1];\r
+ }\r
+ jalview.util.QuickSort.sort(tosort, sorted);\r
+ int i=0;\r
+ for (int j=sorted.length-1;j>=0; j--,i++)\r
+ {\r
+ srcs[i] = ((String[]) sorted[j])[0];\r
+ sorted[j] = null;\r
+ }\r
+\r
+ sorted = dassrc.toArray();\r
+ tosort = new String[sorted.length];\r
+ dassrc.clear();\r
+ for (int j=0;j<sorted.length;j++)\r
+ {\r
+ tosort[j] = ((String[]) sorted[j])[1];\r
+ }\r
+ jalview.util.QuickSort.sort(tosort, sorted);\r
+ for (int j=sorted.length-1;j>=0; j--,i++)\r
+ {\r
+ srcs[i] = ((String[]) sorted[j])[0];\r
+ sorted[j] = null;\r
+ }\r
+ return srcs;\r
+ }\r
+ /**\r
* simple run method to test dbsources.\r
* @param argv\r
*/\r
\r
import jalview.datamodel.AlignmentI;\r
import jalview.datamodel.DBRefEntry;\r
+import jalview.io.AppletFormatAdapter;\r
import jalview.io.FastaFile;\r
+import jalview.io.StockholmFile;\r
import jalview.ws.seqfetcher.DbSourceProxy;\r
import jalview.ws.seqfetcher.DbSourceProxyImpl;\r
/**\r
- * TODO: later PFAM is a complex datasource - it currently returns a seed alignment, but could optionally return a full alignment.\r
* TODO: later PFAM is a complex datasource - it could return a tree in addition to an alignment\r
- * TODO: HP: Incorporate jalview.gui.SequenceFetcher retrieval code here.\r
+ * TODO: create interface to pass alignment properties and tree back to sequence fetcher\r
* @author JimP\r
*\r
*/\r
-public class Pfam extends DbSourceProxyImpl implements DbSourceProxy\r
+abstract public class Pfam extends DbSourceProxyImpl implements DbSourceProxy\r
{\r
\r
public Pfam()\r
{\r
super();\r
- \r
+ // all extensions of this PFAM source base class are DOMAINDB sources \r
+ addDbSourceProperty(jalview.datamodel.DBRefSource.DOMAINDB);\r
}\r
\r
/* (non-Javadoc)\r
\r
/* (non-Javadoc)\r
* @see jalview.ws.DbSourceProxy#getDbSource()\r
- */\r
public String getDbSource()\r
{\r
+ ** this doesn't work - DbSource is key for the hash of DbSourceProxy instances - 1:many mapping for DbSource to proxy will be lost.\r
+ ** suggest : PFAM is an 'alignment' source - means proxy is higher level than a sequence source.\r
return jalview.datamodel.DBRefSource.PFAM;\r
}\r
+ */\r
\r
+ \r
/* (non-Javadoc)\r
* @see jalview.ws.DbSourceProxy#getDbSourceProperties()\r
- */\r
public Hashtable getDbSourceProperties()\r
{\r
- // TODO Auto-generated method stub\r
+ \r
return null;\r
}\r
-\r
+ */\r
+ \r
/* (non-Javadoc)\r
* @see jalview.ws.DbSourceProxy#getDbVersion()\r
*/\r
// TODO Auto-generated method stub\r
return null;\r
}\r
- public static String PFAMURL = "http://www.sanger.ac.uk/cgi-bin/Pfam/getalignment.pl?format=fal&acc=";\r
+ /**\r
+ * \r
+ * @return PFAM URL stub for this DbSource\r
+ */\r
+ protected abstract String getPFAMURL();\r
/* (non-Javadoc)\r
* @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[])\r
*/\r
{\r
// TODO: this is not a perfect implementation. We need to be able to add individual references to each sequence in each family alignment that's retrieved. \r
startQuery();\r
- results = new StringBuffer();\r
- // split queries into many little ones.\r
- results.append(new FastaFile(\r
- PFAMURL+queries.trim().toUpperCase(), "URL").print());\r
- stopQuery();\r
- AlignmentI rcds = parseResult(results.toString());\r
+ AlignmentI rcds = new jalview.io.FormatAdapter().readFile(getPFAMURL()+queries.trim().toUpperCase(), jalview.io.FormatAdapter.URL,"STH");\r
for (int s=0,sNum=rcds.getHeight(); s<sNum;s++)\r
{\r
- rcds.getSequenceAt(s).addDBRef(new DBRefEntry(getDbSource(), getDbVersion(), queries.trim().toUpperCase()));\r
+ rcds.getSequenceAt(s).addDBRef(new DBRefEntry(jalview.datamodel.DBRefSource.PFAM,\r
+ // getDbSource(), \r
+ getDbVersion(), queries.trim().toUpperCase()));\r
+ if (!getDbSource().equals(jalview.datamodel.DBRefSource.PFAM))\r
+ { // add the specific ref too\r
+ rcds.getSequenceAt(s).addDBRef(\r
+ new DBRefEntry( getDbSource(), \r
+ getDbVersion(), queries.trim().toUpperCase()));\r
+ }\r
}\r
+ stopQuery();\r
return rcds;\r
}\r
\r
return accession.indexOf("PF")==0;\r
}\r
\r
- public String getTestQuery()\r
- {\r
- return "PF00535";\r
- }\r
\r
- public String getDbName()\r
+ /*public String getDbName()\r
{\r
return "PFAM"; // getDbSource();\r
- }\r
+ } */\r
}\r
--- /dev/null
+/**\r
+ * \r
+ */\r
+package jalview.ws.dbsources;\r
+\r
+import jalview.ws.seqfetcher.DbSourceProxy;\r
+\r
+/**\r
+ * flyweight class specifying retrieval of Full family alignments from PFAM\r
+ *\r
+ */\r
+public class PfamFull extends Pfam implements DbSourceProxy\r
+{\r
+ public PfamFull()\r
+ {\r
+ super();\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see jalview.ws.dbsources.Pfam#getPFAMURL()\r
+ */\r
+ protected String getPFAMURL()\r
+ {\r
+ return "http://pfam.sanger.ac.uk/family/alignment/download/format?alnType=full&format=stockholm&order=t&case=l&gaps=default&entry=";\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see jalview.ws.seqfetcher.DbSourceProxy#getDbName()\r
+ */\r
+ public String getDbName()\r
+ {\r
+ return "PFAM (Full)";\r
+ }\r
+ public String getDbSource()\r
+ {\r
+ return getDbName(); // so we have unique DbSource string.\r
+ }\r
+ public String getTestQuery()\r
+ {\r
+ return "PF00535"; // TODO: Pick a better full alignment to retrieve.\r
+ }\r
+\r
+}\r
--- /dev/null
+/**\r
+ * \r
+ */\r
+package jalview.ws.dbsources;\r
+\r
+import jalview.ws.seqfetcher.DbSourceProxy;\r
+\r
+/**\r
+ * flyweight class specifying retrieval of Seed alignments from PFAM\r
+ * @author JimP\r
+ *\r
+ */\r
+public class PfamSeed extends Pfam implements DbSourceProxy\r
+{\r
+ public PfamSeed()\r
+ {\r
+ super();\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see jalview.ws.dbsources.Pfam#getPFAMURL()\r
+ */\r
+ protected String getPFAMURL()\r
+ {\r
+ return "http://pfam.sanger.ac.uk/family/alignment/download/format?alnType=seed&format=stockholm&order=t&case=l&gaps=default&entry=";\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see jalview.ws.seqfetcher.DbSourceProxy#getDbName()\r
+ */\r
+ public String getDbName()\r
+ {\r
+ return "PFAM (Seed)";\r
+ }\r
+ public String getDbSource()\r
+ {\r
+ return jalview.datamodel.DBRefSource.PFAM; // archetype source\r
+ }\r
+ public String getTestQuery()\r
+ {\r
+ return "PF00535";\r
+ }\r
+\r
+}\r
}\r
}\r
\r
+ /**\r
+ * test if the database handler for dbName contains the given dbProperty\r
+ * @param dbName\r
+ * @param dbProperty\r
+ * @return true if proxy has the given property\r
+ */\r
+ public boolean hasDbSourceProperty(String dbName, String dbProperty)\r
+ {\r
+ // TODO: decide if invalidDbName exception is thrown here.\r
+ DbSourceProxy proxy = getSourceProxy(dbName);\r
+ if (proxy!=null)\r
+ {\r
+ if (proxy.getDbSourceProperties()!=null)\r
+ {\r
+ return proxy.getDbSourceProperties().containsKey(dbProperty);\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
}
\ No newline at end of file