X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fdbsources%2FEmblXmlSource.java;h=b2fb8081b0d74ee0155dadc25bf06824548e9277;hb=48f7c55f44b0526c5f7be8ebf986052ca7dae245;hp=fe67b21283031201f83c1212c255489c85534ed1;hpb=865a855a4ca87eadb3e5ff284ed32ed307d9c34b;p=jalview.git
diff --git a/src/jalview/ws/dbsources/EmblXmlSource.java b/src/jalview/ws/dbsources/EmblXmlSource.java
index fe67b21..b2fb808 100644
--- a/src/jalview/ws/dbsources/EmblXmlSource.java
+++ b/src/jalview/ws/dbsources/EmblXmlSource.java
@@ -1,19 +1,21 @@
/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
*
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License along with Jalview. If not, see .
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.ws.dbsources;
@@ -22,18 +24,20 @@ import jalview.datamodel.Alignment;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.SequenceI;
import jalview.datamodel.xdb.embl.EmblEntry;
+import jalview.datamodel.xdb.embl.EmblFile;
+import jalview.util.MessageManager;
import jalview.ws.ebi.EBIFetchClient;
import java.io.File;
-import java.util.Iterator;
+import java.util.ArrayList;
+import java.util.List;
public abstract class EmblXmlSource extends EbiFileRetrievedProxy
{
-
- /**
- * Last properly parsed embl file.
+ /*
+ * JAL-1856 Embl returns this text for query not found
*/
- public jalview.datamodel.xdb.embl.EmblFile efile = null;
+ private static final String EMBL_NOT_FOUND_REPLY = "ERROR 12 No entries found.";
public EmblXmlSource()
{
@@ -59,12 +63,14 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
try
{
reply = dbFetch.fetchDataAsFile(
- emprefx.toLowerCase() + ":" + query.trim(), "emblxml", null);
+ emprefx.toLowerCase() + ":" + query.trim(), "display=xml",
+ "xml");
} catch (Exception e)
{
stopQuery();
- throw new Exception("EBI EMBL XML retrieval failed on "
- + emprefx.toLowerCase() + ":" + query.trim(), e);
+ throw new Exception(MessageManager.formatMessage(
+ "exception.ebiembl_retrieval_failed_on", new String[] {
+ emprefx.toLowerCase(), query.trim() }), e);
}
return getEmblSequenceRecords(emprefx, query, reply);
}
@@ -84,79 +90,50 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
public AlignmentI getEmblSequenceRecords(String emprefx, String query,
File reply) throws Exception
{
- SequenceI seqs[] = null;
- StringBuffer result = new StringBuffer();
+ EmblFile efile = null;
+ List seqs = new ArrayList();
+
if (reply != null && reply.exists())
{
- efile = null;
file = reply.getAbsolutePath();
- if (reply.length() > 25)
+ if (reply.length() > EMBL_NOT_FOUND_REPLY.length())
{
- efile = jalview.datamodel.xdb.embl.EmblFile.getEmblFile(reply);
- }
- else
- {
- result.append("# No EMBL record retrieved for "
- + emprefx.toLowerCase() + ":" + query.trim());
+ efile = EmblFile.getEmblFile(reply);
}
}
- if (efile != null)
+
+ /*
+ * invalid accession gets a reply with no elements, text content of
+ * EmbFile reads something like (e.g.) this ungrammatical phrase
+ * Entry: display type is either not supported or entry is not found.
+ */
+ List peptides = new ArrayList();
+ if (efile != null && efile.getEntries() != null)
{
- for (Iterator i = efile.getEntries().iterator(); i.hasNext();)
+ for (EmblEntry entry : efile.getEntries())
{
- EmblEntry entry = (EmblEntry) i.next();
- SequenceI[] seqparts = entry.getSequences(false, true, emprefx); // TODO:
- // use
- // !fetchNa,!fetchPeptide
- // here
- // instead
- // -
- // see
- // todo
- // in
- // emblEntry
- if (seqparts != null)
+ SequenceI seq = entry.getSequence(emprefx, peptides);
+ if (seq != null)
{
- SequenceI[] newseqs = null;
- int si = 0;
- if (seqs == null)
- {
- newseqs = new SequenceI[seqparts.length];
- }
- else
- {
- newseqs = new SequenceI[seqs.length + seqparts.length];
-
- for (; si < seqs.length; si++)
- {
- newseqs[si] = seqs[si];
- seqs[si] = null;
- }
- }
- for (int j = 0; j < seqparts.length; si++, j++)
- {
- newseqs[si] = seqparts[j].deriveSequence(); // place DBReferences on
- // dataset and refer
- }
- seqs = newseqs;
-
+ seqs.add(seq.deriveSequence());
+ // place DBReferences on dataset and refer
}
}
}
- else
- {
- result = null;
- }
+
AlignmentI al = null;
- if (seqs != null && seqs.length > 0)
+ if (!seqs.isEmpty())
{
- al = new Alignment(seqs);
- result.append("# Successfully parsed the " + emprefx
- + " queries into an Alignment");
- results = result;
+ al = new Alignment(seqs.toArray(new SequenceI[seqs.size()]));
}
stopQuery();
return al;
}
+ @Override
+ public boolean isDnaCoding()
+ {
+ return true;
+ }
+
}