X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSequenceFetcher.java;h=7b42a3d3a1586849fa1958041d00e50f94a1fd49;hb=d701b2130b4363f33b8ecd426fd40d99241a190e;hp=34e81432dd83d9ac748447cc8b38d6176709d23c;hpb=39de674fc1a9ae1336846433f16cbf22e60e0a8c;p=jalview.git diff --git a/src/jalview/gui/SequenceFetcher.java b/src/jalview/gui/SequenceFetcher.java index 34e8143..7b42a3d 100755 --- a/src/jalview/gui/SequenceFetcher.java +++ b/src/jalview/gui/SequenceFetcher.java @@ -1,20 +1,19 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) - * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * - * This program 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 2 - * of the License, or (at your option) any later version. + * This file is part of Jalview. * - * This program 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. + * 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. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * 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.gui; @@ -63,8 +62,8 @@ public class SequenceFetcher extends JPanel implements Runnable * Blocking method that initialises and returns the shared instance of the * SequenceFetcher client * - * @param guiWindow - - * where the initialisation delay message should be shown + * @param guiWindow + * - where the initialisation delay message should be shown * @return the singleton instance of the sequence fetcher client */ public static jalview.ws.SequenceFetcher getSequenceFetcherSingleton( @@ -373,10 +372,12 @@ public class SequenceFetcher extends JPanel implements Runnable error += "Please select the source database\n"; } // TODO: make this transformation optional and configurable - com.stevesoft.pat.Regex empty = new com.stevesoft.pat.Regex("(\\s|[,; ])+",";"); //\\s+", ""); + com.stevesoft.pat.Regex empty = new com.stevesoft.pat.Regex( + "(\\s|[,; ])+", ";"); // \\s+", ""); textArea.setText(empty.replaceAll(textArea.getText())); // see if there's anthing to search with - if (!new com.stevesoft.pat.Regex("[A-Za-z0-9_.]").search(textArea.getText())) + if (!new com.stevesoft.pat.Regex("[A-Za-z0-9_.]").search(textArea + .getText())) { error += "Please enter a (semi-colon separated list of) database id(s)"; } @@ -394,17 +395,19 @@ public class SequenceFetcher extends JPanel implements Runnable guiWindow.setProgressBar("Fetching Sequences from " + database.getSelectedItem(), Thread.currentThread() .hashCode()); - DbSourceProxy proxy = sfetch.getSourceProxy( - (String) sources.get(source)); - if (proxy.getAccessionSeparator()==null) + DbSourceProxy proxy = sfetch.getSourceProxy((String) sources + .get(source)); + if (proxy.getAccessionSeparator() == null) { while (en.hasMoreElements()) { String item = (String) en.nextElement(); - try { - if (aresult!=null) + try + { + if (aresult != null) { - try { + try + { // give the server a chance to breathe Thread.sleep(5); } catch (Exception e) @@ -413,22 +416,38 @@ public class SequenceFetcher extends JPanel implements Runnable } } - AlignmentI indres = proxy.getSequenceRecords(item); - if (indres!=null) + + AlignmentI indres = null; + try + { + indres = proxy.getSequenceRecords(item); + } catch (OutOfMemoryError oome) + { + new OOMWarning( + "fetching " + item + " from " + + database.getSelectedItem(),oome, + this); + } + if (indres != null) { if (aresult == null) { aresult = indres; - } else { + } + else + { aresult.append(indres); } } } catch (Exception e) { - jalview.bin.Cache.log.info("Error retrieving "+item+" from "+source,e); + jalview.bin.Cache.log.info("Error retrieving " + item + + " from " + source, e); } } - } else { + } + else + { StringBuffer multiacc = new StringBuffer(); while (en.hasMoreElements()) { @@ -438,8 +457,18 @@ public class SequenceFetcher extends JPanel implements Runnable multiacc.append(proxy.getAccessionSeparator()); } } - aresult = proxy - .getSequenceRecords(multiacc.toString()); + try + { + aresult = proxy.getSequenceRecords(multiacc.toString()); + } catch (OutOfMemoryError oome) + { + new OOMWarning( + "fetching " + multiacc + " from " + + database.getSelectedItem(),oome, + this); + } + + } } catch (Exception e) @@ -485,15 +514,15 @@ public class SequenceFetcher extends JPanel implements Runnable * jalview.datamodel.DBRefSource.EMBLCDS : jalview.datamodel.DBRefSource.EMBL; * * StringTokenizer st = new StringTokenizer(textArea.getText(), ";"); - * SequenceI[] seqs = null; while(st.hasMoreTokens()) { EBIFetchClient dbFetch = - * new EBIFetchClient(); String qry = + * SequenceI[] seqs = null; while(st.hasMoreTokens()) { EBIFetchClient dbFetch + * = new EBIFetchClient(); String qry = * database.getSelectedItem().toString().toLowerCase( ) + ":" + * st.nextToken(); File reply = dbFetch.fetchDataAsFile( qry, "emblxml",null); * * jalview.datamodel.xdb.embl.EmblFile efile=null; if (reply != null && * reply.exists()) { efile = - * jalview.datamodel.xdb.embl.EmblFile.getEmblFile(reply); } if (efile!=null) { - * for (Iterator i=efile.getEntries().iterator(); i.hasNext(); ) { EmblEntry + * jalview.datamodel.xdb.embl.EmblFile.getEmblFile(reply); } if (efile!=null) + * { for (Iterator i=efile.getEntries().iterator(); i.hasNext(); ) { EmblEntry * entry = (EmblEntry) i.next(); SequenceI[] seqparts = * entry.getSequences(false,true, DBRefSource); if (seqparts!=null) { * SequenceI[] newseqs = null; int si=0; if (seqs==null) { newseqs = new @@ -513,11 +542,12 @@ public class SequenceFetcher extends JPanel implements Runnable * SequenceI[] seqparts = getPDBFile(query.toUpperCase()); if (seqparts != * null) { if (seqs == null) { seqs = seqparts; } else { SequenceI[] newseqs = * new SequenceI[seqs.length+seqparts.length]; int i=0; for (; i < - * seqs.length; i++) { newseqs[i] = seqs[i]; seqs[i] = null; } for (int j=0;j 0) { if (parseResult(new Alignment(seqs), null, null)!=null) { - * result.append( "# Successfully parsed the PDB File Queries into an + * seqs.length; i++) { newseqs[i] = seqs[i]; seqs[i] = null; } for (int + * j=0;j 0) { if (parseResult(new + * Alignment(seqs), null, null)!=null) { result.append( "# Successfully parsed + * the PDB File Queries into an * Alignment"); } } } else if( database.getSelectedItem().equals("PFAM")) { * try { result.append(new FastaFile( * "http://www.sanger.ac.uk/cgi-bin/Pfam/getalignment.pl?format=fal&acc=" + @@ -528,7 +558,8 @@ public class SequenceFetcher extends JPanel implements Runnable * result = null; } } * * if (result == null || result.length() == 0) { showErrorMessage("Error - * retrieving " + textArea.getText() + " from " + database.getSelectedItem()); } + * retrieving " + textArea.getText() + " from " + database.getSelectedItem()); + * } * * resetDialog(); return; } * @@ -575,15 +606,16 @@ public class SequenceFetcher extends JPanel implements Runnable * (entry.getFeature() != null) { e = entry.getFeature().elements(); while * (e.hasMoreElements()) { SequenceFeature sf = (SequenceFeature) * e.nextElement(); sf.setFeatureGroup("Uniprot"); - * al.getSequenceAt(i).getDatasetSequence().addSequenceFeature( sf ); } } } } } + * al.getSequenceAt(i).getDatasetSequence().addSequenceFeature( sf ); } } } } + * } * * SequenceI[] getPDBFile(String id) { Vector result = new Vector(); String * chain = null; if (id.indexOf(":") > -1) { chain = * id.substring(id.indexOf(":") + 1); id = id.substring(0, id.indexOf(":")); } * * EBIFetchClient ebi = new EBIFetchClient(); String file = - * ebi.fetchDataAsFile("pdb:" + id, "pdb", "raw"). getAbsolutePath(); if (file == - * null) { return null; } try { PDBfile pdbfile = new PDBfile(file, + * ebi.fetchDataAsFile("pdb:" + id, "pdb", "raw"). getAbsolutePath(); if (file + * == null) { return null; } try { PDBfile pdbfile = new PDBfile(file, * jalview.io.AppletFormatAdapter.FILE); for (int i = 0; i < * pdbfile.chains.size(); i++) { if (chain == null || ( (PDBChain) * pdbfile.chains.elementAt(i)).id. toUpperCase().equals(chain)) { PDBChain @@ -597,16 +629,16 @@ public class SequenceFetcher extends JPanel implements Runnable * entry.setProperty(new Hashtable()); entry.getProperty().put("chains", * pdbchain.id + "=" + sq.getStart() + "-" + sq.getEnd()); * sq.getDatasetSequence().addPDBId(entry); // Add PDB DB Refs // We make a - * DBRefEtntry because we have obtained the PDB file from a verifiable source // - * JBPNote - PDB DBRefEntry should also carry the chain and mapping + * DBRefEtntry because we have obtained the PDB file from a verifiable source + * // JBPNote - PDB DBRefEntry should also carry the chain and mapping * information DBRefEntry dbentry = new * DBRefEntry(jalview.datamodel.DBRefSource.PDB, "0", id + pdbchain.id); * sq.addDBRef(dbentry); // and add seuqence to the retrieved set * result.addElement(sq.deriveSequence()); } } * * if (result.size() < 1) { throw new Exception("WsDBFetch for PDB id resulted - * in zero result size"); } } catch (Exception ex) // Problem parsing PDB file { - * jalview.bin.Cache.log.warn("Exception when retrieving " + + * in zero result size"); } } catch (Exception ex) // Problem parsing PDB file + * { jalview.bin.Cache.log.warn("Exception when retrieving " + * textArea.getText() + " from " + database.getSelectedItem(), ex); return * null; } * @@ -666,18 +698,20 @@ public class SequenceFetcher extends JPanel implements Runnable { title = "Retrieved from " + database.getSelectedItem(); } - SequenceFeature[] sfs=null; - for (Enumeration sq=al.getSequences().elements(); sq.hasMoreElements();) + SequenceFeature[] sfs = null; + for (Enumeration sq = al.getSequences().elements(); sq + .hasMoreElements();) { - if ((sfs=((SequenceI)sq.nextElement()).getDatasetSequence().getSequenceFeatures())!=null) + if ((sfs = ((SequenceI) sq.nextElement()).getDatasetSequence() + .getSequenceFeatures()) != null) { - if (sfs.length>0) + if (sfs.length > 0) { af.setShowSeqFeatures(true); break; } } - + } Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);