JAL-2245 Castor mapping and code changes for change to ENA XML format
[jalview.git] / src / jalview / ws / dbsources / EmblXmlSource.java
index 58ee42d..73e67aa 100644 (file)
@@ -24,19 +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()
   {
@@ -62,13 +63,16 @@ 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(MessageManager.formatMessage("exception.ebiembl_retrieval_failed_on", new String[]{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);
+    return getEmblSequenceRecords(emprefx, reply);
   }
 
   /**
@@ -77,86 +81,46 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy
    * @param emprefx
    *          either EMBL or EMBLCDS strings are allowed - anything else will
    *          not retrieve emblxml
-   * @param query
    * @param file
    *          the EMBL XML file containing the results of a query
    * @return
    * @throws Exception
    */
-  public AlignmentI getEmblSequenceRecords(String emprefx, String query,
-          File reply) throws Exception
+  public AlignmentI getEmblSequenceRecords(String emprefx, File reply)
+          throws Exception
   {
-    SequenceI seqs[] = null;
-    StringBuffer result = new StringBuffer();
+    EmblEntry entry = null;
+
     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(MessageManager.formatMessage("label.no_embl_record_found", new String[]{emprefx.toLowerCase(),query.trim()}));
+        entry = EmblFile.getEmblEntry(reply);
       }
     }
-    if (efile != null)
-    {
-      for (Iterator i = efile.getEntries().iterator(); i.hasNext();)
-      {
-        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[] 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;
 
-        }
-      }
-    }
-    else
-    {
-      result = null;
-    }
+    // TODO don't need peptides any more?
+    List<SequenceI> peptides = new ArrayList<SequenceI>();
     AlignmentI al = null;
-    if (seqs != null && seqs.length > 0)
+    if (entry != null)
     {
-      al = new Alignment(seqs);
-      result.append(MessageManager.formatMessage("label.embl_successfully_parsed", new String[]{emprefx}));
-      results = result;
+      SequenceI seq = entry.getSequence(emprefx, peptides);
+      if (seq != null)
+      {
+        seq.deriveSequence();
+        // place DBReferences on dataset and refer
+        al = new Alignment(new SequenceI[] { seq });
+      }
     }
     stopQuery();
     return al;
   }
 
+  @Override
+  public boolean isDnaCoding()
+  {
+    return true;
+  }
+
 }