/** * */ package jalview.ws.dbsources; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import org.exolab.castor.xml.Unmarshaller; 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.datamodel.UniprotFile; import jalview.io.FormatAdapter; import jalview.io.IdentifyFile; import jalview.ws.DBRefFetcher; import jalview.ws.ebi.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, new Integer(50)); } /* * (non-Javadoc) * * @see jalview.ws.DbSourceProxy#getAccessionSeparator() */ public String getAccessionSeparator() { return null; // ";"; } /* * (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; public Vector getUniprotEntries(File file) { UniprotFile uni = new UniprotFile(); try { // 1. Load the mapping information from the file org.exolab.castor.mapping.Mapping map = new org.exolab.castor.mapping.Mapping(uni.getClass().getClassLoader()); java.net.URL url = getClass().getResource("/uniprot_mapping.xml"); map.loadMapping(url); // 2. Unmarshal the data Unmarshaller unmar = new Unmarshaller(uni); unmar.setIgnoreExtraElements(true); unmar.setMapping(map); uni = (UniprotFile) unmar.unmarshal(new FileReader(file)); } catch (Exception e) { System.out.println("Error getUniprotEntries() " + e); } return uni.getUniprotEntries(); } /* * (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(); // uniprotxml parameter required since december 2007 File file = ebi.fetchDataAsFile("uniprot:" + queries, "uniprotxml", null); Vector entries = 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 && entry.getProtein().getName()!=null) { for (int nm=0,nmSize=entry.getProtein().getName().size(); nm