X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSequenceFetcher.java;h=71348ef9bf5349dc212d042d9ec6c9d5842aad14;hb=ab43013b7e357b84b4abade0dba949668dfb2a0e;hp=d596183b28d12732a9dfe69b144c0858441d67d1;hpb=d053a3c980cf4318b9a19a255f9fc870e74de989;p=jalview.git diff --git a/src/jalview/gui/SequenceFetcher.java b/src/jalview/gui/SequenceFetcher.java index d596183..71348ef 100755 --- a/src/jalview/gui/SequenceFetcher.java +++ b/src/jalview/gui/SequenceFetcher.java @@ -1,43 +1,43 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) - * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1) + * Copyright (C) 2014 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.gui; -import java.io.*; import java.util.*; +import java.util.List; import java.awt.*; import java.awt.event.*; import javax.swing.*; +import javax.swing.tree.DefaultMutableTreeNode; + +import com.stevesoft.pat.Regex; -import MCview.*; import jalview.datamodel.*; -import jalview.datamodel.xdb.embl.*; -import java.io.File; import jalview.io.*; -import jalview.ws.DBRefFetcher; -import jalview.ws.ebi.EBIFetchClient; -import jalview.ws.seqfetcher.ASequenceFetcher; +import jalview.util.DBRefUtils; +import jalview.util.MessageManager; +import jalview.ws.dbsources.das.api.DasSourceRegistryI; import jalview.ws.seqfetcher.DbSourceProxy; - -import java.awt.Rectangle; import java.awt.BorderLayout; -import java.awt.Dimension; public class SequenceFetcher extends JPanel implements Runnable { @@ -52,11 +52,11 @@ public class SequenceFetcher extends JPanel implements Runnable final String noDbSelected = "-- Select Database --"; - Hashtable sources = new Hashtable(); - private static jalview.ws.SequenceFetcher sfetch = null; - private static String dasRegistry = null; + private static long lastDasSourceRegistry = -3; + + private static DasSourceRegistryI dasRegistry = null; private static boolean _initingFetcher = false; @@ -78,7 +78,7 @@ public class SequenceFetcher extends JPanel implements Runnable if (guiWindow != null) { guiWindow.setProgressBar( - "Waiting for Sequence Database Fetchers to initialise", + MessageManager.getString("status.waiting_sequence_database_fetchers_init"), Thread.currentThread().hashCode()); } // initting happening on another thread - so wait around to see if it @@ -97,12 +97,16 @@ public class SequenceFetcher extends JPanel implements Runnable if (guiWindow != null) { guiWindow.setProgressBar( - "Waiting for Sequence Database Fetchers to initialise", + MessageManager.getString("status.waiting_sequence_database_fetchers_init"), Thread.currentThread().hashCode()); } } if (sfetch == null - || dasRegistry != DasSourceBrowser.getDasRegistryURL()) + || dasRegistry != jalview.bin.Cache.getDasSourceRegistry() + || lastDasSourceRegistry != (jalview.bin.Cache + .getDasSourceRegistry().getDasRegistryURL() + jalview.bin.Cache + .getDasSourceRegistry().getLocalSourceString()) + .hashCode()) { _initingFetcher = true; initingThread = Thread.currentThread(); @@ -111,16 +115,20 @@ public class SequenceFetcher extends JPanel implements Runnable */ if (guiWindow != null) { - guiWindow.setProgressBar("Initialising Sequence Database Fetchers", + guiWindow.setProgressBar(MessageManager.getString("status.init_sequence_database_fetchers"), Thread.currentThread().hashCode()); } - dasRegistry = DasSourceBrowser.getDasRegistryURL(); + dasRegistry = jalview.bin.Cache.getDasSourceRegistry(); + dasRegistry.refreshSources(); + jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher(); if (guiWindow != null) { - guiWindow.setProgressBar("Initialising Sequence Database Fetchers", + guiWindow.setProgressBar(MessageManager.getString("status.init_sequence_database_fetchers"), Thread.currentThread().hashCode()); } + lastDasSourceRegistry = (dasRegistry.getDasRegistryURL() + dasRegistry + .getLocalSourceString()).hashCode(); sfetch = sf; _initingFetcher = false; initingThread = null; @@ -136,6 +144,7 @@ public class SequenceFetcher extends JPanel implements Runnable Thread sf = new Thread(new Runnable() { + @Override public void run() { if (getSequenceFetcherSingleton(guiWindow) != null) @@ -146,13 +155,14 @@ public class SequenceFetcher extends JPanel implements Runnable { javax.swing.SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { JOptionPane .showInternalMessageDialog( Desktop.desktop, - "Could not create the sequence fetcher client. Check error logs for details.", - "Couldn't create SequenceFetcher", + MessageManager.getString("warn.couldnt_create_sequence_fetcher_client"), + MessageManager.getString("label.couldnt_create_sequence_fetcher"), JOptionPane.ERROR_MESSAGE); } }); @@ -164,6 +174,16 @@ public class SequenceFetcher extends JPanel implements Runnable sf.start(); } + private class DatabaseAuthority extends DefaultMutableTreeNode + { + + }; + + private class DatabaseSource extends DefaultMutableTreeNode + { + + }; + /** * called by thread spawned by constructor * @@ -176,29 +196,7 @@ public class SequenceFetcher extends JPanel implements Runnable { alignFrame = (AlignFrame) guiWindow; } - - database.addItem(noDbSelected); - /* - * Dynamically generated database list will need a translation function from - * internal source to externally distinct names. UNIPROT and UP_NAME are - * identical DB sources, and should be collapsed. - */ - - String dbs[] = sfetch.getOrderedSupportedSources(); - for (int i = 0; i < dbs.length; i++) - { - if (!sources.containsValue(dbs[i])) - { - String name = sfetch.getSourceProxy(dbs[i]).getDbName(); - // duplicate source names are thrown away, here. - if (!sources.containsKey(name)) - { - database.addItem(name); - } - // overwrite with latest version of the retriever for this source - sources.put(name, dbs[i]); - } - } + database = new JDatabaseTree(sfetch); try { jbInit(); @@ -221,8 +219,7 @@ public class SequenceFetcher extends JPanel implements Runnable private String getFrameTitle() { - return ((alignFrame == null) ? "New " : "Additional ") - + "Sequence Fetcher"; + return ((alignFrame == null) ? MessageManager.getString("label.new_sequence_fetcher") : MessageManager.getString("label.additional_sequence_fetcher")); } private void jbInit() throws Exception @@ -233,40 +230,46 @@ public class SequenceFetcher extends JPanel implements Runnable dbeg.setFont(new java.awt.Font("Verdana", Font.BOLD, 11)); jLabel1.setFont(new java.awt.Font("Verdana", Font.ITALIC, 11)); jLabel1.setHorizontalAlignment(SwingConstants.CENTER); - jLabel1.setText("Separate multiple accession ids with semi colon \";\""); + jLabel1.setText(MessageManager + .getString("label.separate_multiple_accession_ids")); replacePunctuation.setHorizontalAlignment(SwingConstants.CENTER); replacePunctuation .setFont(new java.awt.Font("Verdana", Font.ITALIC, 11)); - replacePunctuation.setText("Replace commas with semi-colons"); - ok.setText("OK"); + replacePunctuation.setText(MessageManager + .getString("label.replace_commas_semicolons")); + ok.setText(MessageManager.getString("action.ok")); ok.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { ok_actionPerformed(); } }); - clear.setText("Clear"); + clear.setText(MessageManager.getString("action.clear")); clear.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { clear_actionPerformed(); } }); - example.setText("Example"); + example.setText(MessageManager.getString("label.example")); example.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { example_actionPerformed(); } }); - close.setText("Close"); + close.setText(MessageManager.getString("action.close")); close.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { close_actionPerformed(e); @@ -276,6 +279,7 @@ public class SequenceFetcher extends JPanel implements Runnable textArea.setLineWrap(true); textArea.addKeyListener(new KeyAdapter() { + @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) @@ -290,20 +294,35 @@ public class SequenceFetcher extends JPanel implements Runnable jPanel1.add(close); jPanel3.add(jPanel2, java.awt.BorderLayout.CENTER); jPanel2.setLayout(borderLayout3); - + databaseButt = database.getDatabaseSelectorButton(); + databaseButt.setFont(JvSwingUtils.getLabelFont()); database.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { - DbSourceProxy db = null; try { - db = sfetch.getSourceProxy((String) sources.get(database - .getSelectedItem())); - String eq = db.getTestQuery(); - dbeg.setText("Example query: " + eq); - replacePunctuation.setEnabled(!(eq != null && eq.indexOf(",") > -1)); + databaseButt.setText(database.getSelectedItem() + + (database.getSelectedSources().size() > 1 ? " (and " + + database.getSelectedSources().size() + + " others)" : "")); + String eq = database.getExampleQueries(); + dbeg.setText(MessageManager.formatMessage( + "label.example_query_param", new String[] + { eq })); + boolean enablePunct = !(eq != null && eq.indexOf(",") > -1); + for (DbSourceProxy dbs : database.getSelectedSources()) + { + if (dbs instanceof jalview.ws.dbsources.das.datamodel.DasSequenceSource) + { + enablePunct = false; + break; + } + } + replacePunctuation.setEnabled(enablePunct); + } catch (Exception ex) { dbeg.setText(""); @@ -313,7 +332,7 @@ public class SequenceFetcher extends JPanel implements Runnable } }); dbeg.setText(""); - jPanel2.add(database, java.awt.BorderLayout.NORTH); + jPanel2.add(databaseButt, java.awt.BorderLayout.NORTH); jPanel2.add(dbeg, java.awt.BorderLayout.CENTER); JPanel jPanel2a = new JPanel(new BorderLayout()); jPanel2a.add(jLabel1, java.awt.BorderLayout.NORTH); @@ -333,9 +352,7 @@ public class SequenceFetcher extends JPanel implements Runnable DbSourceProxy db = null; try { - db = sfetch.getSourceProxy((String) sources.get(database - .getSelectedItem())); - textArea.setText(db.getTestQuery()); + textArea.setText(database.getExampleQueries()); } catch (Exception ex) { } @@ -350,7 +367,9 @@ public class SequenceFetcher extends JPanel implements Runnable JLabel dbeg = new JLabel(); - JComboBox database = new JComboBox(); + JDatabaseTree database; + + JButton databaseButt; JLabel jLabel1 = new JLabel(); @@ -394,7 +413,8 @@ public class SequenceFetcher extends JPanel implements Runnable public void ok_actionPerformed() { - database.setEnabled(false); + databaseButt.setEnabled(false); + example.setEnabled(false); textArea.setEnabled(false); ok.setEnabled(false); close.setEnabled(false); @@ -405,16 +425,18 @@ public class SequenceFetcher extends JPanel implements Runnable private void resetDialog() { - database.setEnabled(true); + databaseButt.setEnabled(true); + example.setEnabled(true); textArea.setEnabled(true); ok.setEnabled(true); close.setEnabled(true); } + @Override public void run() { String error = ""; - if (database.getSelectedItem().equals(noDbSelected)) + if (!database.hasSelection()) { error += "Please select the source database\n"; } @@ -444,274 +466,267 @@ public class SequenceFetcher extends JPanel implements Runnable resetDialog(); return; } - ArrayList aresultq=new ArrayList(); - ArrayList aresult = new ArrayList(); - Object source = database.getSelectedItem(); - Enumeration en = new StringTokenizer(textArea.getText(), ";"); - boolean isAliSource=false; - try - { - guiWindow.setProgressBar( - "Fetching Sequences from " + database.getSelectedItem(), - Thread.currentThread().hashCode()); - DbSourceProxy proxy = sfetch.getSourceProxy((String) sources - .get(source)); - isAliSource = proxy.isA(DBRefSource.ALIGNMENTDB); - if (proxy.getAccessionSeparator() == null) + // indicate if successive sources should be merged into one alignment. + boolean addToLast = false; + ArrayList aresultq = new ArrayList(), presultTitle = new ArrayList(); + ArrayList presult = new ArrayList(), aresult = new ArrayList(); + Iterator proxies = database.getSelectedSources() + .iterator(); + String[] qries; + List nextfetch = Arrays.asList(qries = textArea.getText() + .split(";")); + Iterator en = Arrays.asList(new String[0]).iterator(); + int nqueries = qries.length; + while (proxies.hasNext() && (en.hasNext() || nextfetch.size() > 0)) + { + if (!en.hasNext() && nextfetch.size() > 0) { - while (en.hasMoreElements()) + en = nextfetch.iterator(); + nqueries = nextfetch.size(); + // save the remaining queries in the original array + qries = nextfetch.toArray(new String[nqueries]); + nextfetch = new ArrayList(); + } + + DbSourceProxy proxy = proxies.next(); + boolean isAliSource = false; + try + { + // update status + guiWindow.setProgressBar(MessageManager.formatMessage("status.fetching_sequence_queries_from", new String[]{Integer.valueOf(nqueries).toString(),proxy.getDbName()}), Thread + .currentThread().hashCode()); + isAliSource = proxy.isA(DBRefSource.ALIGNMENTDB); + if (proxy.getAccessionSeparator() == null) { - String item = (String) en.nextElement(); - try + while (en.hasNext()) { - if (aresult != null) + String item = en.next(); + try { + if (aresult != null) + { + try + { + // give the server a chance to breathe + Thread.sleep(5); + } catch (Exception e) + { + // + } + + } + + AlignmentI indres = null; try { - // give the server a chance to breathe - Thread.sleep(5); - } catch (Exception e) + indres = proxy.getSequenceRecords(item); + } catch (OutOfMemoryError oome) { - // + new OOMWarning("fetching " + item + " from " + + proxy.getDbName(), oome, this); } - + if (indres != null) + { + aresultq.add(item); + aresult.add(indres); + } + else + { + nextfetch.add(item); + } + } catch (Exception e) + { + jalview.bin.Cache.log.info("Error retrieving " + item + + " from " + proxy.getDbName(), e); + nextfetch.add(item); } - - AlignmentI indres = null; - try + } + } + else + { + StringBuffer multiacc = new StringBuffer(); + ArrayList tosend = new ArrayList(); + while (en.hasNext()) + { + String nel = en.next(); + tosend.add(nel); + multiacc.append(nel); + if (en.hasNext()) { - indres = proxy.getSequenceRecords(item); - } catch (OutOfMemoryError oome) + multiacc.append(proxy.getAccessionSeparator()); + } + } + try + { + AlignmentI rslt; + SequenceI[] rs; + List nores = new ArrayList(); + rslt = proxy.getSequenceRecords(multiacc.toString()); + if (rslt == null || rslt.getHeight() == 0) { - new OOMWarning("fetching " + item + " from " - + database.getSelectedItem(), oome, this); + // no results - pass on all queries to next source + nextfetch.addAll(tosend); } - if (indres != null) + else { - aresultq.add(item); - aresult.add(indres); + aresultq.add(multiacc.toString()); + aresult.add(rslt); + + rs = rslt.getSequencesArray(); + // search for each query in the dbrefs associated with each + // sequence + // returned. + // ones we do not find will be used to query next source (if any) + for (String q : tosend) + { + DBRefEntry dbr = new DBRefEntry(), found[] = null; + dbr.setSource(proxy.getDbSource()); + dbr.setVersion(null); + if (proxy.getAccessionValidator() != null) + { + Regex vgr = proxy.getAccessionValidator(); + vgr.search(q); + if (vgr.numSubs() > 0) + { + dbr.setAccessionId(vgr.stringMatched(1)); + } + else + { + dbr.setAccessionId(vgr.stringMatched()); + } + } + else + { + dbr.setAccessionId(q); + } + boolean rfound = false; + for (int r = 0; r < rs.length; r++) + { + if (rs[r] != null + && (found = DBRefUtils.searchRefs( + rs[r].getDBRef(), dbr)) != null + && found.length > 0) + { + rfound = true; + rs[r] = null; + continue; + } + } + if (!rfound) + { + nextfetch.add(q); + } + } } - } catch (Exception e) + } catch (OutOfMemoryError oome) { - jalview.bin.Cache.log.info("Error retrieving " + item - + " from " + source, e); + new OOMWarning("fetching " + multiacc + " from " + + database.getSelectedItem(), oome, this); } } + + } catch (Exception e) + { + showErrorMessage("Error retrieving " + textArea.getText() + + " from " + database.getSelectedItem()); + // error + // +="Couldn't retrieve sequences from "+database.getSelectedItem(); + System.err.println("Retrieval failed for source ='" + + database.getSelectedItem() + "' and query\n'" + + textArea.getText() + "'\n"); + e.printStackTrace(); + } catch (OutOfMemoryError e) + { + // resets dialog box - so we don't use OOMwarning here. + showErrorMessage("Out of Memory when retrieving " + + textArea.getText() + + " from " + + database.getSelectedItem() + + "\nPlease see the Jalview FAQ for instructions for increasing the memory available to Jalview.\n"); + e.printStackTrace(); + } catch (Error e) + { + showErrorMessage("Serious Error retrieving " + textArea.getText() + + " from " + database.getSelectedItem()); + e.printStackTrace(); } - else + // Stack results ready for opening in alignment windows + if (aresult != null && aresult.size() > 0) { - StringBuffer multiacc = new StringBuffer(); - while (en.hasMoreElements()) + AlignmentI ar = null; + if (isAliSource) { - multiacc.append(en.nextElement()); - if (en.hasMoreElements()) + addToLast = false; + // new window for each result + while (aresult.size() > 0) { - multiacc.append(proxy.getAccessionSeparator()); + presult.add(aresult.remove(0)); + presultTitle.add(aresultq.remove(0) + " " + + getDefaultRetrievalTitle()); } } - try - { - aresultq.add(multiacc.toString()); - aresult.add(proxy.getSequenceRecords(multiacc.toString())); - } catch (OutOfMemoryError oome) + else { - new OOMWarning("fetching " + multiacc + " from " - + database.getSelectedItem(), oome, this); + String titl = null; + if (addToLast && presult.size() > 0) + { + ar = presult.remove(presult.size() - 1); + titl = presultTitle.remove(presultTitle.size() - 1); + } + // concatenate all results in one window + while (aresult.size() > 0) + { + if (ar == null) + { + ar = aresult.remove(0); + } + else + { + ar.append(aresult.remove(0)); + } + ; + } + addToLast = true; + presult.add(ar); + presultTitle.add(titl); } - } - - } catch (Exception e) - { - showErrorMessage("Error retrieving " + textArea.getText() + " from " - + database.getSelectedItem()); - // error +="Couldn't retrieve sequences from "+database.getSelectedItem(); - System.err.println("Retrieval failed for source ='" - + database.getSelectedItem() + "' and query\n'" - + textArea.getText() + "'\n"); - e.printStackTrace(); - } catch (OutOfMemoryError e) - { - // resets dialog box - so we don't use OOMwarning here. - showErrorMessage("Out of Memory when retrieving " - + textArea.getText() - + " from " - + database.getSelectedItem() - + "\nPlease see the Jalview FAQ for instructions for increasing the memory available to Jalview.\n"); - e.printStackTrace(); - } catch (Error e) - { - showErrorMessage("Serious Error retrieving " + textArea.getText() - + " from " + database.getSelectedItem()); - e.printStackTrace(); + guiWindow.setProgressBar(MessageManager.getString("status.finshed_querying"), Thread.currentThread() + .hashCode()); } - if (aresult != null && aresult.size()>0) + guiWindow.setProgressBar((presult.size() > 0) ? MessageManager.getString("status.parsing_results") + : MessageManager.getString("status.processing"), Thread.currentThread().hashCode()); + // process results + while (presult.size() > 0) { - AlignmentI ar=null; - if (isAliSource) { - // new window for each result - while (aresult.size()>0) + parseResult(presult.remove(0), presultTitle.remove(0), null); + } + // only remove visual delay after we finished parsing. + guiWindow.setProgressBar(null, Thread.currentThread().hashCode()); + if (nextfetch.size() > 0) + { + StringBuffer sb = new StringBuffer(); + sb.append("Didn't retrieve the following " + + (nextfetch.size() == 1 ? "query" : nextfetch.size() + + " queries") + ": \n"); + int l = sb.length(), lr = 0; + for (String s : nextfetch) + { + if (l != sb.length()) { - parseResult(aresult.remove(0), aresultq.remove(0)+" "+getDefaultRetrievalTitle(), null); + sb.append("; "); } - } else { - // concatenate all results in one window - while (aresult.size()>0) + if (lr - sb.length() > 40) { - if (ar==null) { ar = aresult.remove(0);} - else { ar.append(aresult.remove(0)); }; + sb.append("\n"); } - parseResult(ar, null, null); - } + sb.append(s); + } + showErrorMessage(sb.toString()); } - // only remove visual delay after we finished parsing. - guiWindow.setProgressBar(null, Thread.currentThread().hashCode()); resetDialog(); } - /* - * result = new StringBuffer(); if - * (database.getSelectedItem().equals("Uniprot")) { - * getUniprotFile(textArea.getText()); } else if - * (database.getSelectedItem().equals("EMBL") || - * database.getSelectedItem().equals("EMBLCDS")) { String DBRefSource = - * database.getSelectedItem().equals("EMBLCDS") ? - * 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 = - * 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 - * 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 - * SequenceI[seqparts.length]; } else { newseqs = new - * SequenceI[seqs.length+seqparts.length]; - * - * for (;si0) { 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)) { - * 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 - * 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=" + - * textArea.getText().toUpperCase(), "URL").print() ); - * - * if(result.length()>0) { parseResult( result.toString(), - * textArea.getText().toUpperCase() ); } } catch (java.io.IOException ex) { - * result = null; } } - * - * if (result == null || result.length() == 0) { showErrorMessage("Error - * retrieving " + textArea.getText() + " from " + database.getSelectedItem()); - * } - * - * resetDialog(); return; } - * - * void getUniprotFile(String id) { EBIFetchClient ebi = new EBIFetchClient(); - * File file = ebi.fetchDataAsFile("uniprot:" + id, "xml", null); - * - * DBRefFetcher dbref = new DBRefFetcher(); Vector entries = - * dbref.getUniprotEntries(file); - * - * if (entries != null) { //First, make the new sequences Enumeration en = - * entries.elements(); while (en.hasMoreElements()) { UniprotEntry entry = - * (UniprotEntry) en.nextElement(); - * - * StringBuffer name = new StringBuffer(">UniProt/Swiss-Prot"); Enumeration - * en2 = entry.getAccession().elements(); while (en2.hasMoreElements()) { - * name.append("|"); name.append(en2.nextElement()); } en2 = - * entry.getName().elements(); while (en2.hasMoreElements()) { - * name.append("|"); name.append(en2.nextElement()); } - * - * if (entry.getProtein() != null) { name.append(" " + - * entry.getProtein().getName().elementAt(0)); } - * - * result.append(name + "\n" + entry.getUniprotSequence().getContent() + - * "\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(); - * i++) { UniprotEntry entry = (UniprotEntry) entries.elementAt(i); - * Enumeration e = entry.getDbReference().elements(); Vector onlyPdbEntries = - * new Vector(); while (e.hasMoreElements()) { PDBEntry pdb = (PDBEntry) - * e.nextElement(); if (!pdb.getType().equals("PDB")) { continue; } - * - * onlyPdbEntries.addElement(pdb); } - * - * Enumeration en2 = entry.getAccession().elements(); while - * (en2.hasMoreElements()) { - * al.getSequenceAt(i).getDatasetSequence().addDBRef(new DBRefEntry( - * DBRefSource.UNIPROT, "0", en2.nextElement().toString())); } - * - * - * - * - * al.getSequenceAt(i).getDatasetSequence().setPDBId(onlyPdbEntries); if - * (entry.getFeature() != null) { e = entry.getFeature().elements(); while - * (e.hasMoreElements()) { SequenceFeature sf = (SequenceFeature) - * e.nextElement(); sf.setFeatureGroup("Uniprot"); - * 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, - * 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 - * pdbchain = (PDBChain) pdbfile.chains.elementAt(i); // Get the Chain's - * Sequence - who's dataset includes any special features added from the PDB - * file SequenceI sq = pdbchain.sequence; // Specially formatted name for the - * PDB chain sequences retrieved from the PDB - * sq.setName("PDB|"+id+"|"+sq.getName()); // Might need to add more metadata - * to the PDBEntry object // like below /* PDBEntry entry = new PDBEntry(); // - * 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 - * 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 " + - * textArea.getText() + " from " + database.getSelectedItem(), ex); return - * null; } - * - * - * SequenceI[] results = new SequenceI[result.size()]; for (int i = 0, j = - * result.size(); i < j; i++) { results[i] = (SequenceI) result.elementAt(i); - * result.setElementAt(null,i); } return results; } - */ AlignmentI parseResult(String result, String title) { String format = new IdentifyFile().Identify(result, "Paste"); @@ -743,11 +758,14 @@ public class SequenceFetcher extends JPanel implements Runnable /** * - * @return a standard title for any results retrieved using the currently selected source and settings + * @return a standard title for any results retrieved using the currently + * selected source and settings */ - public String getDefaultRetrievalTitle() { + public String getDefaultRetrievalTitle() + { return "Retrieved from " + database.getSelectedItem(); } + AlignmentI parseResult(AlignmentI al, String title, String currentFileFormat) { @@ -771,24 +789,27 @@ public class SequenceFetcher extends JPanel implements Runnable title = getDefaultRetrievalTitle(); } SequenceFeature[] sfs = null; - for (Enumeration sq = al.getSequences().elements(); sq - .hasMoreElements();) + List alsqs; + synchronized (alsqs = al.getSequences()) { - if ((sfs = ((SequenceI) sq.nextElement()).getDatasetSequence() - .getSequenceFeatures()) != null) + for (SequenceI sq : alsqs) { - if (sfs.length > 0) + if ((sfs = (sq).getDatasetSequence().getSequenceFeatures()) != null) { - af.setShowSeqFeatures(true); - break; + if (sfs.length > 0) + { + af.setShowSeqFeatures(true); + break; + } } - } + } } Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); - af.statusBar.setText("Successfully pasted alignment file"); + af.statusBar.setText(MessageManager + .getString("label.successfully_pasted_alignment_file")); try { @@ -802,7 +823,8 @@ public class SequenceFetcher extends JPanel implements Runnable { for (int i = 0; i < al.getHeight(); i++) { - alignFrame.viewport.getAlignment().addSequence(al.getSequenceAt(i)); // this + alignFrame.viewport.getAlignment().addSequence( + al.getSequenceAt(i)); // this // also // creates // dataset @@ -824,10 +846,12 @@ public class SequenceFetcher extends JPanel implements Runnable resetDialog(); javax.swing.SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { JOptionPane.showInternalMessageDialog(Desktop.desktop, error, - "Error Retrieving Data", JOptionPane.WARNING_MESSAGE); + MessageManager.getString("label.error_retrieving_data"), + JOptionPane.WARNING_MESSAGE); } }); }