/** * */ package jalview.ws.dbsources; import java.util.Hashtable; import com.stevesoft.pat.Regex; import jalview.datamodel.AlignmentI; import jalview.datamodel.DBRefEntry; import jalview.io.AppletFormatAdapter; import jalview.io.FastaFile; import jalview.io.StockholmFile; import jalview.ws.seqfetcher.DbSourceProxy; import jalview.ws.seqfetcher.DbSourceProxyImpl; /** * TODO: later PFAM is a complex datasource - it could return a tree in addition to an alignment * TODO: create interface to pass alignment properties and tree back to sequence fetcher * @author JimP * */ abstract public class Pfam extends DbSourceProxyImpl implements DbSourceProxy { public Pfam() { super(); // all extensions of this PFAM source base class are DOMAINDB sources addDbSourceProperty(jalview.datamodel.DBRefSource.DOMAINDB); } /* (non-Javadoc) * @see jalview.ws.DbSourceProxy#getAccessionSeparator() */ public String getAccessionSeparator() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see jalview.ws.DbSourceProxy#getAccessionValidator() */ public Regex getAccessionValidator() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see jalview.ws.DbSourceProxy#getDbSource() public String getDbSource() { ** this doesn't work - DbSource is key for the hash of DbSourceProxy instances - 1:many mapping for DbSource to proxy will be lost. ** suggest : PFAM is an 'alignment' source - means proxy is higher level than a sequence source. return jalview.datamodel.DBRefSource.PFAM; } */ /* (non-Javadoc) * @see jalview.ws.DbSourceProxy#getDbSourceProperties() public Hashtable getDbSourceProperties() { return null; } */ /* (non-Javadoc) * @see jalview.ws.DbSourceProxy#getDbVersion() */ public String getDbVersion() { // TODO Auto-generated method stub return null; } /** * * @return PFAM URL stub for this DbSource */ protected abstract String getPFAMURL(); /* (non-Javadoc) * @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[]) */ public AlignmentI getSequenceRecords(String queries) throws Exception { // 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. startQuery(); AlignmentI rcds = new jalview.io.FormatAdapter().readFile(getPFAMURL()+queries.trim().toUpperCase(), jalview.io.FormatAdapter.URL,"STH"); for (int s=0,sNum=rcds.getHeight(); s