X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fdbsources%2FEmblXmlSource.java;h=ca90d6085bb23c37339ba31a94bf3a2cf40a20ad;hb=92389e0816624da2c0530b0a7477c70f8da6ec4d;hp=73e67aa2ea377c7a912ee4885174cf685cea5ac6;hpb=30b2b47cbdfa35b127b0fb09e911815cddd9ed7b;p=jalview.git diff --git a/src/jalview/ws/dbsources/EmblXmlSource.java b/src/jalview/ws/dbsources/EmblXmlSource.java index 73e67aa..ca90d60 100644 --- a/src/jalview/ws/dbsources/EmblXmlSource.java +++ b/src/jalview/ws/dbsources/EmblXmlSource.java @@ -64,15 +64,15 @@ public abstract class EmblXmlSource extends EbiFileRetrievedProxy { reply = dbFetch.fetchDataAsFile( emprefx.toLowerCase() + ":" + query.trim(), "display=xml", - ".xml"); + "xml"); } catch (Exception e) { stopQuery(); throw new Exception(MessageManager.formatMessage( - "exception.ebiembl_retrieval_failed_on", new String[] { - emprefx.toLowerCase(), query.trim() }), e); + "exception.ebiembl_retrieval_failed_on", new String[] + { emprefx.toLowerCase(), query.trim() }), e); } - return getEmblSequenceRecords(emprefx, reply); + return getEmblSequenceRecords(emprefx, query, reply); } /** @@ -81,38 +81,51 @@ 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, File reply) - throws Exception + public AlignmentI getEmblSequenceRecords(String emprefx, String query, + File reply) throws Exception { - EmblEntry entry = null; + EmblFile efile = null; + List seqs = new ArrayList<>(); if (reply != null && reply.exists()) { file = reply.getAbsolutePath(); if (reply.length() > EMBL_NOT_FOUND_REPLY.length()) { - entry = EmblFile.getEmblEntry(reply); + efile = EmblFile.getEmblFile(reply); } } - // TODO don't need peptides any more? - List peptides = new ArrayList(); - AlignmentI al = null; - if (entry != 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) { - SequenceI seq = entry.getSequence(emprefx, peptides); - if (seq != null) + for (EmblEntry entry : efile.getEntries()) { - seq.deriveSequence(); - // place DBReferences on dataset and refer - al = new Alignment(new SequenceI[] { seq }); + SequenceI seq = entry.getSequence(emprefx, peptides); + if (seq != null) + { + seqs.add(seq.deriveSequence()); + // place DBReferences on dataset and refer + } } } + + AlignmentI al = null; + if (!seqs.isEmpty()) + { + al = new Alignment(seqs.toArray(new SequenceI[seqs.size()])); + } stopQuery(); return al; }