X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fdbsources%2FEmblXmlSource.java;h=73e67aa2ea377c7a912ee4885174cf685cea5ac6;hb=30b2b47cbdfa35b127b0fb09e911815cddd9ed7b;hp=89d9f0571c28daad59e1fd32d3b6e8f04e633f78;hpb=b2f9a8d7bce642ff4011bc6d49e02bb0569fbb11;p=jalview.git diff --git a/src/jalview/ws/dbsources/EmblXmlSource.java b/src/jalview/ws/dbsources/EmblXmlSource.java index 89d9f05..73e67aa 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.1) - * 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,14 +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("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); + return getEmblSequenceRecords(emprefx, reply); } /** @@ -75,88 +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("# No EMBL record retrieved for " - + 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 peptides = new ArrayList(); AlignmentI al = null; - if (seqs != null && seqs.length > 0) + if (entry != null) { - al = new Alignment(seqs); - result.append("# Successfully parsed the " + emprefx - + " queries into an Alignment"); - 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; + } + }