X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSequenceFetcher.java;h=64d88afbcafd3b106136615096be1478f5822030;hb=c68e9ccf989105f9c79b80e173417f99a126c25e;hp=f594554800e1a25150a1144820feb467e98f2d3e;hpb=04794fd0028bd18c6b514a79a4de1dc1710a3e03;p=jalview.git diff --git a/src/jalview/gui/SequenceFetcher.java b/src/jalview/gui/SequenceFetcher.java index f594554..64d88af 100755 --- a/src/jalview/gui/SequenceFetcher.java +++ b/src/jalview/gui/SequenceFetcher.java @@ -1,17 +1,17 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) + * Copyright (C) 2008 AM Waterhouse, J Procter, 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 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. - * + * * 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 @@ -58,37 +58,42 @@ public class SequenceFetcher extends JPanel implements Runnable private static jalview.ws.SequenceFetcher sfetch = null; private static String dasRegistry = null; + /** - * Blocking method that initialises and returns the shared instance of the SequenceFetcher client - * @param guiWindow - where the initialisation delay message should be shown + * Blocking method that initialises and returns the shared instance of the + * SequenceFetcher client + * + * @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(final IProgressIndicator guiWindow) { + public static jalview.ws.SequenceFetcher getSequenceFetcherSingleton( + final IProgressIndicator guiWindow) + { if (sfetch == null || dasRegistry != DasSourceBrowser.getDasRegistryURL()) { /** - * give a visual indication that sequence fetcher construction is - * occuring + * give a visual indication that sequence fetcher construction is occuring */ if (guiWindow != null) { - guiWindow.setProgressBar( - "Initialising Sequence Database Fetchers", Thread.currentThread() - .hashCode()); + guiWindow.setProgressBar("Initialising Sequence Database Fetchers", + Thread.currentThread().hashCode()); } dasRegistry = DasSourceBrowser.getDasRegistryURL(); jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher(); if (guiWindow != null) { - guiWindow.setProgressBar( - "Initialising Sequence Database Fetchers", Thread.currentThread().hashCode()); + guiWindow.setProgressBar("Initialising Sequence Database Fetchers", + Thread.currentThread().hashCode()); } sfetch = sf; } return sfetch; } + public SequenceFetcher(IProgressIndicator guiIndic) { final IProgressIndicator guiWindow = guiIndic; @@ -99,20 +104,25 @@ public class SequenceFetcher extends JPanel implements Runnable public void run() { - if (getSequenceFetcherSingleton(guiWindow)!=null) + if (getSequenceFetcherSingleton(guiWindow) != null) { us.initGui(guiWindow); - } else { + } + else + { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { - JOptionPane.showInternalMessageDialog(Desktop.desktop, - "Could not create the sequence fetcher client. Check error logs for details.", - "Couldn't create SequenceFetcher", JOptionPane.ERROR_MESSAGE); + JOptionPane + .showInternalMessageDialog( + Desktop.desktop, + "Could not create the sequence fetcher client. Check error logs for details.", + "Couldn't create SequenceFetcher", + JOptionPane.ERROR_MESSAGE); } }); - + // raise warning dialog } } @@ -375,14 +385,60 @@ public class SequenceFetcher extends JPanel implements Runnable return; } AlignmentI aresult = null; + Object source = database.getSelectedItem(); + Enumeration en = new StringTokenizer(textArea.getText(), ";"); try { guiWindow.setProgressBar("Fetching Sequences from " + database.getSelectedItem(), Thread.currentThread() .hashCode()); - aresult = sfetch.getSourceProxy( - (String) sources.get(database.getSelectedItem())) - .getSequenceRecords(textArea.getText()); + 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 { + // give the server a chance to breathe + Thread.sleep(5); + } catch (Exception e) + { + // + } + + } + AlignmentI indres = proxy.getSequenceRecords(item); + if (indres!=null) + { + if (aresult == null) + { + aresult = indres; + } else { + aresult.append(indres); + } + } + } catch (Exception e) + { + jalview.bin.Cache.log.info("Error retrieving "+item+" from "+source,e); + } + } + } else { + StringBuffer multiacc = new StringBuffer(); + while (en.hasMoreElements()) + { + multiacc.append(en.nextElement()); + if (en.hasMoreElements()) + { + multiacc.append(proxy.getAccessionSeparator()); + } + } + aresult = proxy + .getSequenceRecords(multiacc.toString()); + } } catch (Exception e) { @@ -395,6 +451,7 @@ public class SequenceFetcher extends JPanel implements Runnable e.printStackTrace(); } catch (OutOfMemoryError e) { + // resets dialog box - so we don't use OOMwarning here. showErrorMessage("Out of Memory when retrieving " + textArea.getText() + " from " @@ -407,11 +464,12 @@ public class SequenceFetcher extends JPanel implements Runnable + " from " + database.getSelectedItem()); e.printStackTrace(); } - guiWindow.setProgressBar(null, Thread.currentThread().hashCode()); if (aresult != null) { parseResult(aresult, null, null); } + // only remove visual delay after we finished parsing. + guiWindow.setProgressBar(null, Thread.currentThread().hashCode()); resetDialog(); } @@ -443,11 +501,10 @@ public class SequenceFetcher extends JPanel implements Runnable * for (;si0) { if (parseResult(new Alignment(seqs), null, null)!=null) { - * result.append("# Successfully parsed the "+database.getSelectedItem()+" - * Queries into an Alignment"); } } } else if + * seqs=newseqs; } } } else { result.append("# no response for "+qry); } } if + * (seqs!=null && seqs.length>0) { if (parseResult(new Alignment(seqs), null, + * null)!=null) { result.append("# Successfully parsed the + * "+database.getSelectedItem()+" Queries into an Alignment"); } } } else if * (database.getSelectedItem().equals("PDB")) { StringTokenizer qset = new * StringTokenizer(textArea.getText(), ";"); String query; SequenceI[] seqs = * null; while (qset.hasMoreTokens() && ((query = qset.nextToken())!=null)) { @@ -465,8 +522,8 @@ public class SequenceFetcher extends JPanel implements Runnable * textArea.getText().toUpperCase(), "URL").print() ); * * if(result.length()>0) { parseResult( result.toString(), - * textArea.getText().toUpperCase() ); } - * } catch (java.io.IOException ex) { result = null; } } + * textArea.getText().toUpperCase() ); } } catch (java.io.IOException ex) { + * result = null; } } * * if (result == null || result.length() == 0) { showErrorMessage("Error * retrieving " + textArea.getText() + " from " + database.getSelectedItem()); } @@ -493,8 +550,7 @@ public class SequenceFetcher extends JPanel implements Runnable * entry.getProtein().getName().elementAt(0)); } * * result.append(name + "\n" + entry.getUniprotSequence().getContent() + - * "\n"); - * } + * "\n"); } * * //Then read in the features and apply them to the dataset Alignment al = * parseResult(result.toString(), null); for (int i = 0; i < entries.size(); @@ -538,10 +594,10 @@ public class SequenceFetcher extends JPanel implements Runnable * Construct the PDBEntry entry.setId(id); if (entry.getProperty() == null) * 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 information DBRefEntry dbentry = new + * 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 + * 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()); } } @@ -599,16 +655,28 @@ public class SequenceFetcher extends JPanel implements Runnable if (currentFileFormat != null) { af.currentFileFormat = currentFileFormat; // WHAT IS THE DEFAULT - // FORMAT FOR - // NON-FormatAdapter Sourced - // Alignments? + // FORMAT FOR + // NON-FormatAdapter Sourced + // Alignments? } if (title == null) { title = "Retrieved from " + database.getSelectedItem(); } - + SequenceFeature[] sfs=null; + for (Enumeration sq=al.getSequences().elements(); sq.hasMoreElements();) + { + if ((sfs=((SequenceI)sq.nextElement()).getDatasetSequence().getSequenceFeatures())!=null) + { + if (sfs.length>0) + { + af.setShowSeqFeatures(true); + break; + } + } + + } Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); @@ -627,11 +695,11 @@ public class SequenceFetcher extends JPanel implements Runnable for (int i = 0; i < al.getHeight(); i++) { alignFrame.viewport.alignment.addSequence(al.getSequenceAt(i)); // this - // also - // creates - // dataset - // sequence - // entries + // also + // creates + // dataset + // sequence + // entries } alignFrame.viewport.setEndSeq(alignFrame.viewport.alignment .getHeight());