X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fdbsources%2FEmblXmlSource.java;h=e99206ff663305e079d3d66d1e922a16cd224643;hb=c19d2a91ca05e052e3408bf5852d88eb5d0608f1;hp=80206c09a64a1c6b02694e70da891d7fb6c2932c;hpb=a45774ee31d9f35d4eff46d54d7deab719afb092;p=jalview.git diff --git a/src/jalview/ws/dbsources/EmblXmlSource.java b/src/jalview/ws/dbsources/EmblXmlSource.java index 80206c0..e99206f 100644 --- a/src/jalview/ws/dbsources/EmblXmlSource.java +++ b/src/jalview/ws/dbsources/EmblXmlSource.java @@ -1,162 +1,158 @@ -/* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) - * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle - * - * 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. - * - * 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 . - */ -package jalview.ws.dbsources; - -import jalview.datamodel.Alignment; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.SequenceI; -import jalview.datamodel.xdb.embl.EmblEntry; -import jalview.ws.ebi.EBIFetchClient; - -import java.io.File; -import java.util.Iterator; -import java.util.Vector; - -public abstract class EmblXmlSource extends EbiFileRetrievedProxy -{ - - /** - * Last properly parsed embl file. - */ - public jalview.datamodel.xdb.embl.EmblFile efile = null; - - public EmblXmlSource() - { - super(); - } - - /** - * retrieve and parse an emblxml file - * - * @param emprefx - * either EMBL or EMBLCDS strings are allowed - anything else will - * not retrieve emblxml - * @param query - * @return - * @throws Exception - */ - public AlignmentI getEmblSequenceRecords(String emprefx, String query) - throws Exception - { - startQuery(); - EBIFetchClient dbFetch = new EBIFetchClient(); - File reply; - try - { - reply = dbFetch.fetchDataAsFile( - emprefx.toLowerCase() + ":" + query.trim(), "emblxml", null); - } catch (Exception e) - { - stopQuery(); - throw new Exception("EBI EMBL XML retrieval failed on " - + emprefx.toLowerCase() + ":" + query.trim(), e); - } - return getEmblSequenceRecords(emprefx, query, reply); - } - - /** - * parse an emblxml file stored locally - * - * @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 - { - SequenceI seqs[] = null; - StringBuffer result = new StringBuffer(); - if (reply != null && reply.exists()) - { - efile = null; - file = reply.getAbsolutePath(); - if (reply.length() > 25) - { - efile = jalview.datamodel.xdb.embl.EmblFile.getEmblFile(reply); - } - else - { - result.append("# No EMBL record retrieved for " - + emprefx.toLowerCase() + ":" + query.trim()); - } - } - 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; - } - AlignmentI al = null; - if (seqs != null && seqs.length > 0) - { - al = new Alignment(seqs); - result.append("# Successfully parsed the " + emprefx - + " queries into an Alignment"); - results = result; - } - stopQuery(); - return al; - } - -} +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2) + * Copyright (C) 2015 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. + * + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.ws.dbsources; + +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; + +public abstract class EmblXmlSource extends EbiFileRetrievedProxy +{ + + /** + * Last properly parsed embl file. + */ + public EmblFile efile = null; + + public EmblXmlSource() + { + super(); + } + + /** + * retrieve and parse an emblxml file + * + * @param emprefx + * either EMBL or EMBLCDS strings are allowed - anything else will + * not retrieve emblxml + * @param query + * @return + * @throws Exception + */ + public AlignmentI getEmblSequenceRecords(String emprefx, String query) + throws Exception + { + startQuery(); + EBIFetchClient dbFetch = new EBIFetchClient(); + File reply; + try + { + reply = dbFetch.fetchDataAsFile( + emprefx.toLowerCase() + ":" + query.trim(), "emblxml", null); + } catch (Exception e) + { + stopQuery(); + throw new Exception(MessageManager.formatMessage( + "exception.ebiembl_retrieval_failed_on", new String[] { + emprefx.toLowerCase(), query.trim() }), e); + } + return getEmblSequenceRecords(emprefx, query, reply); + } + + /** + * parse an emblxml file stored locally + * + * @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 + { + SequenceI seqs[] = null; + StringBuffer result = new StringBuffer(); + if (reply != null && reply.exists()) + { + efile = null; + file = reply.getAbsolutePath(); + if (reply.length() > 25) + { + efile = EmblFile.getEmblFile(reply); + } + else + { + result.append(MessageManager.formatMessage( + "label.no_embl_record_found", + new String[] { emprefx.toLowerCase(), query.trim() })); + } + } + if (efile != null) + { + for (EmblEntry entry : efile.getEntries()) + { + 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; + } + AlignmentI al = null; + if (seqs != null && seqs.length > 0) + { + al = new Alignment(seqs); + result.append(MessageManager.formatMessage( + "label.embl_successfully_parsed", new String[] { emprefx })); + results = result; + } + stopQuery(); + return al; + } + +}