1 package jalview.ws.dbsources;
\r
3 import jalview.datamodel.Alignment;
\r
4 import jalview.datamodel.AlignmentI;
\r
5 import jalview.datamodel.SequenceI;
\r
6 import jalview.datamodel.xdb.embl.EmblEntry;
\r
7 import jalview.ws.EBIFetchClient;
\r
10 import java.util.Iterator;
\r
11 import java.util.Vector;
\r
13 public abstract class EmblXmlSource extends EbiFileRetrievedProxy
\r
17 * Last properly parsed embl file.
\r
19 public jalview.datamodel.xdb.embl.EmblFile efile = null;
\r
21 public EmblXmlSource()
\r
26 * set this to false to *not* add protein products to alignment dataset.
\r
28 public boolean getProteinProducts=false;
\r
30 * retrieve and parse an emblxml file
\r
31 * @param emprefx either EMBL or EMBLCDS strings are allowed - anything else will not retrieve emblxml
\r
36 public AlignmentI getEmblSequenceRecords(String emprefx, String query) throws Exception
\r
39 SequenceI seqs[] = null;
\r
40 Vector alseq = new Vector(); // the sequences that will actually be presented in the alignment
\r
41 StringBuffer result = new StringBuffer();
\r
42 EBIFetchClient dbFetch = new EBIFetchClient();
\r
45 reply = dbFetch.fetchDataAsFile(
\r
46 emprefx.toLowerCase() + ":" + query.trim(),
\r
52 throw new Exception("EBI EMBL XML retrieval failed on "+emprefx.toLowerCase()+":"+query.trim(),e);
\r
54 if (reply != null && reply.exists())
\r
56 file = reply.getAbsolutePath();
\r
57 efile = jalview.datamodel.xdb.embl.EmblFile.getEmblFile(reply);
\r
60 for (Iterator i=efile.getEntries().iterator(); i.hasNext(); ) {
\r
61 EmblEntry entry = (EmblEntry) i.next();
\r
62 SequenceI[] seqparts = entry.getSequences(false,!getProteinProducts, emprefx);
\r
63 if (seqparts!=null) {
\r
64 SequenceI[] newseqs = null;
\r
67 newseqs = new SequenceI[seqparts.length];
\r
69 newseqs = new SequenceI[seqs.length+seqparts.length];
\r
71 for (;si<seqs.length; si++) {
\r
72 newseqs[si] = seqs[si];
\r
76 for (int j=0;j<seqparts.length; si++, j++) {
\r
77 newseqs[si] = seqparts[j].deriveSequence(); // place DBReferences on dataset and refer
\r
86 AlignmentI al =null;
\r
87 if (seqs!=null && seqs.length>0)
\r
89 al = new Alignment(seqs);
\r
90 result.append("# Successfully parsed the "+emprefx+" queries into an Alignment");
\r