/** * */ package jalview.ws.dbsources; import java.io.File; import java.io.IOException; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import com.stevesoft.pat.Regex; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; import jalview.datamodel.DBRefEntry; import jalview.datamodel.DBRefSource; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; import jalview.datamodel.UniprotEntry; import jalview.io.FormatAdapter; import jalview.io.IdentifyFile; import jalview.ws.DBRefFetcher; import jalview.ws.EBIFetchClient; import jalview.ws.seqfetcher.DbSourceProxy; import jalview.ws.seqfetcher.DbSourceProxyImpl; /** * @author JimP * */ public class Uniprot extends DbSourceProxyImpl implements DbSourceProxy { public Uniprot() { super(); addDbSourceProperty(DBRefSource.SEQDB, DBRefSource.SEQDB); addDbSourceProperty(DBRefSource.PROTSEQDB); addDbSourceProperty(DBRefSource.MULTIACC); } /* * (non-Javadoc) * * @see jalview.ws.DbSourceProxy#getAccessionSeparator() */ public String getAccessionSeparator() { return ";"; } /* * (non-Javadoc) * * @see jalview.ws.DbSourceProxy#getAccessionValidator() */ public Regex getAccessionValidator() { return null; } /* * (non-Javadoc) * * @see jalview.ws.DbSourceProxy#getDbSource() */ public String getDbSource() { return DBRefSource.UNIPROT; } /* * (non-Javadoc) * * @see jalview.ws.DbSourceProxy#getDbVersion() */ public String getDbVersion() { return "0"; // we really don't know what version we're on. } private EBIFetchClient ebi = null; /* * (non-Javadoc) * * @see jalview.ws.DbSourceProxy#getSequenceRecords(java.lang.String[]) */ public AlignmentI getSequenceRecords(String queries) throws Exception { startQuery(); try { Alignment al=null; ebi = new EBIFetchClient(); StringBuffer result=new StringBuffer(); File file = ebi.fetchDataAsFile("uniprot:" + queries, "xml", null); DBRefFetcher dbref = new DBRefFetcher(); Vector entries = dbref.getUniprotEntries(file); if (entries != null) { // First, make the new sequences Enumeration en = entries.elements(); while (en.hasMoreElements()) { UniprotEntry entry = (UniprotEntry) en.nextElement(); StringBuffer name = new StringBuffer(">UniProt/Swiss-Prot"); Enumeration en2 = entry.getAccession().elements(); while (en2.hasMoreElements()) { name.append("|"); name.append(en2.nextElement()); } en2 = entry.getName().elements(); while (en2.hasMoreElements()) { name.append("|"); name.append(en2.nextElement()); } if (entry.getProtein() != null) { name.append(" " + entry.getProtein().getName().elementAt(0)); } result.append(name + "\n" + entry.getUniprotSequence().getContent() + "\n"); } // Then read in the features and apply them to the dataset al = parseResult(result.toString()); if (al!=null) { // Decorate the alignment with database entries. addUniprotXrefs(al, entries); } else { results = result; } } stopQuery(); return al; } catch (Exception e) { stopQuery(); throw(e); } } /** * add an ordered set of UniprotEntry objects to an ordered set of seuqences. * * @param al - * a sequence of n sequences * @param entries * a seuqence of n uniprot entries to be analysed. */ public void addUniprotXrefs(Alignment al, Vector entries) { for (int i = 0; i < entries.size(); i++) { UniprotEntry entry = (UniprotEntry) entries.elementAt(i); Enumeration e = entry.getDbReference().elements(); Vector onlyPdbEntries = new Vector(); while (e.hasMoreElements()) { PDBEntry pdb = (PDBEntry) e.nextElement(); if (!pdb.getType().equals("PDB")) { continue; } onlyPdbEntries.addElement(pdb); } SequenceI sq = al.getSequenceAt(i); while (sq.getDatasetSequence()!=null) { sq = sq.getDatasetSequence(); } Enumeration en2 = entry.getAccession().elements(); while (en2.hasMoreElements()) { sq.addDBRef( new DBRefEntry(getDbSource(), getDbVersion(), en2.nextElement() .toString())); } sq.setPDBId(onlyPdbEntries); if (entry.getFeature() != null) { e = entry.getFeature().elements(); while (e.hasMoreElements()) { SequenceFeature sf = (SequenceFeature) e.nextElement(); sf.setFeatureGroup("Uniprot"); sq.addSequenceFeature(sf); } } } } /* * (non-Javadoc) * * @see jalview.ws.DbSourceProxy#isValidReference(java.lang.String) */ public boolean isValidReference(String accession) { return true; } /** * return LDHA_CHICK uniprot entry */ public String getTestQuery() { return "P00340"; } }