X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSequenceFetcher.java;h=f9d7760fcfb37863cc980e8c53ec51a341ac2bbb;hb=0d3ab54f8c983e5c0b5ce0d354024268d323b6af;hp=afe6754f913391ce94597aef803d020763cd3980;hpb=ba7cba06e47fd8f46aafb04c5f2b33718db4f320;p=jalview.git diff --git a/src/jalview/gui/SequenceFetcher.java b/src/jalview/gui/SequenceFetcher.java index afe6754..f9d7760 100755 --- a/src/jalview/gui/SequenceFetcher.java +++ b/src/jalview/gui/SequenceFetcher.java @@ -24,15 +24,15 @@ import jalview.api.FeatureSettingsModelI; import jalview.bin.Cache; import jalview.datamodel.AlignmentI; import jalview.datamodel.DBRefEntry; -import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; +import jalview.fts.core.GFTSPanel; import jalview.fts.service.pdb.PDBFTSPanel; import jalview.fts.service.uniprot.UniprotFTSPanel; +import jalview.io.FileFormatI; import jalview.io.gff.SequenceOntologyI; import jalview.util.DBRefUtils; import jalview.util.MessageManager; import jalview.util.Platform; -import jalview.ws.dbsources.das.api.DasSourceRegistryI; import jalview.ws.seqfetcher.DbSourceProxy; import java.awt.BorderLayout; @@ -43,57 +43,46 @@ import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import javax.swing.JButton; import javax.swing.JCheckBox; +import javax.swing.JComboBox; import javax.swing.JInternalFrame; import javax.swing.JLabel; -import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingConstants; -import javax.swing.tree.DefaultMutableTreeNode; +/** + * A panel where the use may choose a database source, and enter one or more + * accessions, to retrieve entries from the database. + *

+ * If the selected source is Uniprot or PDB, a free text search panel is opened + * instead to perform the search and selection. + */ public class SequenceFetcher extends JPanel implements Runnable { - JLabel dbeg = new JLabel(); - - JDatabaseTree database; - - JButton databaseButt; - - JLabel jLabel1 = new JLabel(); - - JCheckBox replacePunctuation = new JCheckBox(); - - JButton ok = new JButton(); - - JButton clear = new JButton(); - - JButton example = new JButton(); - - JButton close = new JButton(); - - JPanel jPanel1 = new JPanel(); + private static jalview.ws.SequenceFetcher sfetch = null; - JTextArea textArea = new JTextArea(); + JLabel exampleAccession; - JScrollPane jScrollPane1 = new JScrollPane(); + JComboBox database; - JPanel jPanel2 = new JPanel(); + JCheckBox replacePunctuation; - JPanel jPanel3 = new JPanel(); + JButton okBtn; - JPanel jPanel4 = new JPanel(); + JButton exampleBtn; - BorderLayout borderLayout1 = new BorderLayout(); + JButton closeBtn; - BorderLayout borderLayout2 = new BorderLayout(); + JButton backBtn; - BorderLayout borderLayout3 = new BorderLayout(); + JTextArea textArea; JInternalFrame frame; @@ -101,213 +90,131 @@ public class SequenceFetcher extends JPanel implements Runnable AlignFrame alignFrame; - StringBuffer result; - - final String noDbSelected = "-- Select Database --"; - - private static jalview.ws.SequenceFetcher sfetch = null; + GFTSPanel parentSearchPanel; - private static long lastDasSourceRegistry = -3; + IProgressIndicator progressIndicator; - private static DasSourceRegistryI dasRegistry = null; - - private static boolean _initingFetcher = false; - - private static Thread initingThread = null; - - public JTextArea getTextArea() - { - return textArea; - } + volatile boolean _isConstructing = false; /** - * Blocking method that initialises and returns the shared instance of the - * SequenceFetcher client + * 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 + * @return */ - public static jalview.ws.SequenceFetcher getSequenceFetcherSingleton( - final IProgressIndicator guiWindow) + public static jalview.ws.SequenceFetcher getSequenceFetcherSingleton() { - if (_initingFetcher && initingThread != null && initingThread.isAlive()) - { - if (guiWindow != null) - { - guiWindow - .setProgressBar( - MessageManager - .getString("status.waiting_sequence_database_fetchers_init"), - Thread.currentThread().hashCode()); - } - // initting happening on another thread - so wait around to see if it - // finishes. - while (_initingFetcher && initingThread != null - && initingThread.isAlive()) - { - try - { - Thread.sleep(10); - } catch (Exception e) - { - } - ; - } - if (guiWindow != null) - { - guiWindow - .setProgressBar( - MessageManager - .getString("status.waiting_sequence_database_fetchers_init"), - Thread.currentThread().hashCode()); - } - } - if (sfetch == null - || dasRegistry != Cache.getDasSourceRegistry() - || lastDasSourceRegistry != (Cache.getDasSourceRegistry() - .getDasRegistryURL() + Cache - .getDasSourceRegistry().getLocalSourceString()) - .hashCode()) + if (sfetch == null) { - _initingFetcher = true; - initingThread = Thread.currentThread(); - /** - * give a visual indication that sequence fetcher construction is occuring - */ - if (guiWindow != null) - { - guiWindow.setProgressBar(MessageManager - .getString("status.init_sequence_database_fetchers"), - Thread.currentThread().hashCode()); - } - dasRegistry = Cache.getDasSourceRegistry(); - dasRegistry.refreshSources(); - - jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher(); - if (guiWindow != null) - { - guiWindow.setProgressBar(null, Thread.currentThread().hashCode()); - } - lastDasSourceRegistry = (dasRegistry.getDasRegistryURL() + dasRegistry - .getLocalSourceString()).hashCode(); - sfetch = sf; - _initingFetcher = false; - initingThread = null; + sfetch = new jalview.ws.SequenceFetcher(); } return sfetch; } - private IProgressIndicator progressIndicator; - + /** + * Constructor given a client to receive any status or progress messages + * (currently either the Desktop, or an AlignFrame panel) + * + * @param guiIndic + */ public SequenceFetcher(IProgressIndicator guiIndic) { - this.progressIndicator = guiIndic; - final SequenceFetcher us = this; - // launch initialiser thread - Thread sf = new Thread(new Runnable() - { - - @Override - public void run() - { - if (getSequenceFetcherSingleton(progressIndicator) != null) - { - us.initGui(progressIndicator); - } - else - { - javax.swing.SwingUtilities.invokeLater(new Runnable() - { - @Override - public void run() - { - JOptionPane - .showInternalMessageDialog( - Desktop.desktop, - MessageManager - .getString("warn.couldnt_create_sequence_fetcher_client"), - MessageManager - .getString("label.couldnt_create_sequence_fetcher"), - JOptionPane.ERROR_MESSAGE); - } - }); - - // raise warning dialog - } - } - }); - sf.start(); + this(guiIndic, null, null); } - private class DatabaseAuthority extends DefaultMutableTreeNode - { - - }; - - private class DatabaseSource extends DefaultMutableTreeNode - { - - }; - /** - * called by thread spawned by constructor + * Constructor with specified database and accession(s) to retrieve * - * @param guiWindow + * @param guiIndic + * @param selectedDb + * @param queryString */ - private void initGui(IProgressIndicator guiWindow) + public SequenceFetcher(IProgressIndicator guiIndic, + final String selectedDb, final String queryString) { - this.guiWindow = guiWindow; - if (guiWindow instanceof AlignFrame) - { - alignFrame = (AlignFrame) guiWindow; - } - database = new JDatabaseTree(sfetch); - try - { - jbInit(); - } catch (Exception ex) + this.progressIndicator = guiIndic; + getSequenceFetcherSingleton(); + this.guiWindow = progressIndicator; + + if (progressIndicator instanceof AlignFrame) { - ex.printStackTrace(); + alignFrame = (AlignFrame) progressIndicator; } + jbInit(selectedDb); + textArea.setText(queryString); + frame = new JInternalFrame(); frame.setContentPane(this); - if (Platform.isAMac()) - { - Desktop.addInternalFrame(frame, getFrameTitle(), false, 400, 240); - } - else - { - Desktop.addInternalFrame(frame, getFrameTitle(), false, 400, 180); - } + int height = Platform.isAMac() ? 240 : 180; + Desktop.addInternalFrame(frame, getFrameTitle(), true, 400, height); } private String getFrameTitle() { - return ((alignFrame == null) ? MessageManager - .getString("label.new_sequence_fetcher") : MessageManager - .getString("label.additional_sequence_fetcher")); + return ((alignFrame == null) + ? MessageManager.getString("label.new_sequence_fetcher") + : MessageManager + .getString("label.additional_sequence_fetcher")); } - private void jbInit() throws Exception + private void jbInit(String selectedDb) { - this.setLayout(borderLayout2); + this.setLayout(new BorderLayout()); + database = new JComboBox<>(); database.setFont(JvSwingUtils.getLabelFont()); - 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(MessageManager + database.setPrototypeDisplayValue("ENSEMBLGENOMES "); + String[] sources = new jalview.ws.SequenceFetcher().getSupportedDb(); + Arrays.sort(sources, String.CASE_INSENSITIVE_ORDER); + database.addItem(MessageManager.getString("action.select_ddbb")); + for (String source : sources) + { + database.addItem(source); + } + database.setSelectedItem(selectedDb); + if (database.getSelectedIndex() == -1) + { + database.setSelectedIndex(0); + } + database.setMaximumRowCount(database.getItemCount()); + database.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + String currentSelection = (String) database.getSelectedItem(); + updateExampleQuery(currentSelection); + + if ("pdb".equalsIgnoreCase(currentSelection)) + { + new PDBFTSPanel(SequenceFetcher.this); + frame.dispose(); + } + else if ("uniprot".equalsIgnoreCase(currentSelection)) + { + new UniprotFTSPanel(SequenceFetcher.this); + frame.dispose(); + } + else + { + otherSourceAction(); + } + } + }); + + exampleAccession = new JLabel(""); + exampleAccession.setFont(new Font("Verdana", Font.BOLD, 11)); + JLabel jLabel1 = new JLabel(MessageManager .getString("label.separate_multiple_accession_ids")); + jLabel1.setFont(new Font("Verdana", Font.ITALIC, 11)); + jLabel1.setHorizontalAlignment(SwingConstants.CENTER); + replacePunctuation = new JCheckBox( + MessageManager.getString("label.replace_commas_semicolons")); replacePunctuation.setHorizontalAlignment(SwingConstants.CENTER); - replacePunctuation - .setFont(new java.awt.Font("Verdana", Font.ITALIC, 11)); - replacePunctuation.setText(MessageManager - .getString("label.replace_commas_semicolons")); - ok.setText(MessageManager.getString("action.ok")); - ok.addActionListener(new ActionListener() + replacePunctuation.setFont(new Font("Verdana", Font.ITALIC, 11)); + okBtn = new JButton(MessageManager.getString("action.ok")); + okBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -315,7 +222,7 @@ public class SequenceFetcher extends JPanel implements Runnable ok_actionPerformed(); } }); - clear.setText(MessageManager.getString("action.clear")); + JButton clear = new JButton(MessageManager.getString("action.clear")); clear.addActionListener(new ActionListener() { @Override @@ -325,8 +232,8 @@ public class SequenceFetcher extends JPanel implements Runnable } }); - example.setText(MessageManager.getString("label.example")); - example.addActionListener(new ActionListener() + exampleBtn = new JButton(MessageManager.getString("label.example")); + exampleBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -334,8 +241,8 @@ public class SequenceFetcher extends JPanel implements Runnable example_actionPerformed(); } }); - close.setText(MessageManager.getString("action.close")); - close.addActionListener(new ActionListener() + closeBtn = new JButton(MessageManager.getString("action.cancel")); + closeBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -343,167 +250,193 @@ public class SequenceFetcher extends JPanel implements Runnable close_actionPerformed(e); } }); - textArea.setFont(JvSwingUtils.getLabelFont()); - textArea.setLineWrap(true); - textArea.addKeyListener(new KeyAdapter() + backBtn = new JButton(MessageManager.getString("action.back")); + backBtn.addActionListener(new ActionListener() { @Override - public void keyPressed(KeyEvent e) + public void actionPerformed(ActionEvent e) { - if (e.getKeyCode() == KeyEvent.VK_ENTER) - { - ok_actionPerformed(); - } + parentSearchPanel.btn_back_ActionPerformed(); } }); - jPanel3.setLayout(borderLayout1); - borderLayout1.setVgap(5); - jPanel1.add(ok); - jPanel1.add(example); - jPanel1.add(clear); - jPanel1.add(close); - jPanel2.setLayout(borderLayout3); - databaseButt = /*database.getDatabaseSelectorButton(); - final JButton viewdbs =*/new JButton( - MessageManager.getString("action.select_ddbb")); - databaseButt.addActionListener(new ActionListener() - { + // back not visible unless embedded + backBtn.setVisible(false); - @Override - public void actionPerformed(ActionEvent arg0) - { - hidePanel(); - database.showDialog(); - } - }); - databaseButt.setFont(JvSwingUtils.getLabelFont()); - database.addActionListener(new ActionListener() + textArea = new JTextArea(); + textArea.setFont(JvSwingUtils.getLabelFont()); + textArea.setLineWrap(true); + textArea.addKeyListener(new KeyAdapter() { @Override - public void actionPerformed(ActionEvent e) + public void keyPressed(KeyEvent e) { - String currentSelection = database.getSelectedItem(); - if (currentSelection == null) - { - close_actionPerformed(null); - } - - showPanel(); - - if ("pdb".equalsIgnoreCase(currentSelection)) - { - pdbSourceAction(); - } - else if ("uniprot".equalsIgnoreCase(currentSelection)) - { - uniprotSourceAction(); - } - else + if (e.getKeyCode() == KeyEvent.VK_ENTER) { - otherSourceAction(); + ok_actionPerformed(); } - database.action = -1; } }); - dbeg.setText(""); - jPanel2.add(databaseButt, java.awt.BorderLayout.NORTH); - jPanel2.add(dbeg, java.awt.BorderLayout.CENTER); + JPanel actionPanel = new JPanel(); + actionPanel.add(backBtn); + actionPanel.add(exampleBtn); + actionPanel.add(clear); + actionPanel.add(okBtn); + actionPanel.add(closeBtn); + + JPanel databasePanel = new JPanel(); + databasePanel.setLayout(new BorderLayout()); + databasePanel.add(database, BorderLayout.NORTH); + databasePanel.add(exampleAccession, BorderLayout.CENTER); JPanel jPanel2a = new JPanel(new BorderLayout()); - jPanel2a.add(jLabel1, java.awt.BorderLayout.NORTH); - jPanel2a.add(replacePunctuation, java.awt.BorderLayout.SOUTH); - jPanel2.add(jPanel2a, java.awt.BorderLayout.SOUTH); - // jPanel2.setPreferredSize(new Dimension()) - jPanel3.add(jScrollPane1, java.awt.BorderLayout.CENTER); - this.add(jPanel1, java.awt.BorderLayout.SOUTH); - this.add(jPanel3, java.awt.BorderLayout.CENTER); - this.add(jPanel2, java.awt.BorderLayout.NORTH); + jPanel2a.add(jLabel1, BorderLayout.NORTH); + jPanel2a.add(replacePunctuation, BorderLayout.SOUTH); + databasePanel.add(jPanel2a, BorderLayout.SOUTH); + + JPanel idsPanel = new JPanel(); + idsPanel.setLayout(new BorderLayout(0, 5)); + JScrollPane jScrollPane1 = new JScrollPane(); jScrollPane1.getViewport().add(textArea); + idsPanel.add(jScrollPane1, BorderLayout.CENTER); - /* - * open the database tree - */ - database.waitForInput(); + this.add(actionPanel, BorderLayout.SOUTH); + this.add(idsPanel, BorderLayout.CENTER); + this.add(databasePanel, BorderLayout.NORTH); } - private void pdbSourceAction() + /** + * Answers a semi-colon-delimited string with the example query or queries for + * the selected database + * + * @param db + * @return + */ + protected String getExampleQueries(String db) { - databaseButt.setText(database.getSelectedItem()); - new PDBFTSPanel(this); - frame.dispose(); + StringBuilder sb = new StringBuilder(); + HashSet hs = new HashSet<>(); + for (DbSourceProxy dbs : sfetch.getSourceProxy(db)) + { + String tq = dbs.getTestQuery(); + if (hs.add(tq)) // not a duplicate source + { + if (sb.length() > 0) + { + sb.append(";"); + } + sb.append(tq); + } + } + return sb.toString(); } - private void uniprotSourceAction() - { - databaseButt.setText(database.getSelectedItem()); - new UniprotFTSPanel(this); - frame.dispose(); - } - private void otherSourceAction() + /** + * Action on selecting a database other than Uniprot or PDB is to enable or + * disable 'Replace commas', and await input in the query field + */ + protected void otherSourceAction() { try { - 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 })); + String eq = exampleAccession.getText(); + // TODO this should be a property of the SequenceFetcher whether commas + // are allowed in the IDs... + 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(""); + exampleAccession.setText(""); replacePunctuation.setEnabled(true); } - jPanel2.repaint(); + repaint(); + } + + /** + * Sets the text of the example query to incorporate the example accession + * provided by the selected database source + * + * @param selectedDatabase + * @return + */ + protected String updateExampleQuery(String selectedDatabase) + { + String eq = getExampleQueries(selectedDatabase); + exampleAccession.setText(MessageManager + .formatMessage("label.example_query_param", new String[] + { eq })); + return eq; } + /** + * Action on clicking the 'Example' button is to write the example accession + * as the query text field value + */ protected void example_actionPerformed() { - DbSourceProxy db = null; - try - { - textArea.setText(database.getExampleQueries()); - } catch (Exception ex) - { - } - jPanel3.repaint(); + String eq = getExampleQueries((String) database.getSelectedItem()); + textArea.setText(eq); + repaint(); } + /** + * Clears the query input field + */ protected void clear_actionPerformed() { textArea.setText(""); - jPanel3.repaint(); + repaint(); } - public void close_actionPerformed(ActionEvent e) + /** + * Action on Close button is to close this frame, and also (if it is embedded + * in a search panel) to close the search panel + * + * @param e + */ + protected void close_actionPerformed(ActionEvent e) { try { frame.setClosed(true); + if (parentSearchPanel != null) + { + parentSearchPanel.btn_cancel_ActionPerformed(); + } } catch (Exception ex) { } } + /** + * Action on OK is to start the fetch for entered accession(s) + */ public void ok_actionPerformed() { - databaseButt.setEnabled(false); - example.setEnabled(false); + /* + * tidy inputs and check there is something to search for + */ + String text = textArea.getText(); + if (replacePunctuation.isEnabled() && replacePunctuation.isSelected()) + { + text = text.replace(",", ";"); + } + text = text.replaceAll("(\\s|[,; ])+", ";"); + textArea.setText(text); + if (text.isEmpty()) + { + // todo i18n + showErrorMessage( + "Please enter a (semi-colon separated list of) database id(s)"); + resetDialog(); + return; + } + exampleBtn.setEnabled(false); textArea.setEnabled(false); - ok.setEnabled(false); - close.setEnabled(false); + okBtn.setEnabled(false); + closeBtn.setEnabled(false); + backBtn.setEnabled(false); Thread worker = new Thread(this); worker.start(); @@ -511,59 +444,27 @@ public class SequenceFetcher extends JPanel implements Runnable private void resetDialog() { - databaseButt.setEnabled(true); - example.setEnabled(true); + exampleBtn.setEnabled(true); textArea.setEnabled(true); - ok.setEnabled(true); - close.setEnabled(true); + okBtn.setEnabled(true); + closeBtn.setEnabled(true); + backBtn.setEnabled(parentSearchPanel != null); } @Override public void run() { - String error = ""; - if (!database.hasSelection()) - { - error += "Please select the source database\n"; - } - // TODO: make this transformation more configurable - com.stevesoft.pat.Regex empty; - if (replacePunctuation.isEnabled() && replacePunctuation.isSelected()) - { - empty = new com.stevesoft.pat.Regex( - // replace commas and spaces with a semicolon - "(\\s|[,; ])+", ";"); - } - else - { - // just turn spaces and semicolons into single semicolons - empty = new com.stevesoft.pat.Regex("(\\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())) - { - error += "Please enter a (semi-colon separated list of) database id(s)"; - } - if (error.length() > 0) - { - showErrorMessage(error); - resetDialog(); - return; - } - // TODO: Refactor to GUI independent code and write tests. - // indicate if successive sources should be merged into one alignment. boolean addToLast = false; - List aresultq = new ArrayList(); - List presultTitle = new ArrayList(); - List presult = new ArrayList(); - List aresult = new ArrayList(); - Iterator proxies = database.getSelectedSources() - .iterator(); + List aresultq = new ArrayList<>(); + List presultTitle = new ArrayList<>(); + List presult = new ArrayList<>(); + List aresult = new ArrayList<>(); + List sources = sfetch + .getSourceProxy((String) database.getSelectedItem()); + Iterator proxies = sources.iterator(); String[] qries; - List nextFetch = Arrays.asList(qries = textArea.getText() - .split(";")); + List nextFetch = Arrays + .asList(qries = textArea.getText().split(";")); Iterator en = Arrays.asList(new String[0]).iterator(); int nqueries = qries.length; @@ -576,20 +477,18 @@ public class SequenceFetcher extends JPanel implements Runnable nqueries = nextFetch.size(); // save the remaining queries in the original array qries = nextFetch.toArray(new String[nqueries]); - nextFetch = new ArrayList(); + nextFetch = new ArrayList<>(); } DbSourceProxy proxy = proxies.next(); try { // update status - guiWindow - .setProgressBar(MessageManager.formatMessage( - "status.fetching_sequence_queries_from", - new String[] { - Integer.valueOf(nqueries).toString(), - proxy.getDbName() }), Thread.currentThread() - .hashCode()); + guiWindow.setProgressBar(MessageManager.formatMessage( + "status.fetching_sequence_queries_from", new String[] + { Integer.valueOf(nqueries).toString(), + proxy.getDbName() }), + Thread.currentThread().hashCode()); if (proxy.getMaximumQueryCount() == 1) { /* @@ -613,8 +512,8 @@ public class SequenceFetcher extends JPanel implements Runnable } } catch (Exception e) { - showErrorMessage("Error retrieving " + textArea.getText() - + " from " + database.getSelectedItem()); + showErrorMessage("Error retrieving " + textArea.getText() + " from " + + database.getSelectedItem()); // error // +="Couldn't retrieve sequences from "+database.getSelectedItem(); System.err.println("Retrieval failed for source ='" @@ -624,9 +523,7 @@ public class SequenceFetcher extends JPanel implements Runnable } catch (OutOfMemoryError e) { showErrorMessage("Out of Memory when retrieving " - + textArea.getText() - + " from " - + database.getSelectedItem() + + 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) @@ -654,8 +551,8 @@ public class SequenceFetcher extends JPanel implements Runnable while (aresult.size() > 0) { presult.add(aresult.remove(0)); - presultTitle.add(aresultq.remove(0) + " " - + getDefaultRetrievalTitle()); + presultTitle.add( + aresultq.remove(0) + " " + getDefaultRetrievalTitle()); } } else @@ -683,15 +580,17 @@ public class SequenceFetcher extends JPanel implements Runnable presultTitle.add(titl); } } - guiWindow.setProgressBar(MessageManager - .getString("status.finshed_querying"), Thread.currentThread() - .hashCode()); + guiWindow.setProgressBar( + MessageManager.getString("status.finshed_querying"), + Thread.currentThread().hashCode()); } - guiWindow.setProgressBar( - (presult.size() > 0) ? MessageManager - .getString("status.parsing_results") : MessageManager - .getString("status.processing"), Thread.currentThread() - .hashCode()); + guiWindow + .setProgressBar( + (presult.size() > 0) + ? MessageManager + .getString("status.parsing_results") + : MessageManager.getString("status.processing"), + Thread.currentThread().hashCode()); // process results while (presult.size() > 0) { @@ -704,8 +603,9 @@ public class SequenceFetcher extends JPanel implements Runnable { StringBuffer sb = new StringBuffer(); sb.append("Didn't retrieve the following " - + (nextFetch.size() == 1 ? "query" : nextFetch.size() - + " queries") + ": \n"); + + (nextFetch.size() == 1 ? "query" + : nextFetch.size() + " queries") + + ": \n"); int l = sb.length(), lr = 0; for (String s : nextFetch) { @@ -740,11 +640,10 @@ public class SequenceFetcher extends JPanel implements Runnable */ void fetchMultipleAccessions(DbSourceProxy proxy, Iterator accessions, List aresultq, - List aresult, List nextFetch) - throws Exception + List aresult, List nextFetch) throws Exception { StringBuilder multiacc = new StringBuilder(); - List tosend = new ArrayList(); + List tosend = new ArrayList<>(); while (accessions.hasNext()) { String nel = accessions.next(); @@ -816,8 +715,9 @@ public class SequenceFetcher extends JPanel implements Runnable indres = proxy.getSequenceRecords(accession); } catch (OutOfMemoryError oome) { - new OOMWarning("fetching " + accession + " from " - + proxy.getDbName(), oome, this); + new OOMWarning( + "fetching " + accession + " from " + proxy.getDbName(), + oome, this); } if (indres != null) { @@ -827,9 +727,8 @@ public class SequenceFetcher extends JPanel implements Runnable } } catch (Exception e) { - Cache.log.info( - "Error retrieving " + accession - + " from " + proxy.getDbName(), e); + Cache.log.info("Error retrieving " + accession + " from " + + proxy.getDbName(), e); } return success; } @@ -888,7 +787,7 @@ public class SequenceFetcher extends JPanel implements Runnable } AlignmentI parseResult(AlignmentI al, String title, - String currentFileFormat, + FileFormatI currentFileFormat, FeatureSettingsModelI preferredFeatureColours) { @@ -904,27 +803,19 @@ public class SequenceFetcher extends JPanel implements Runnable AlignFrame.DEFAULT_HEIGHT); if (currentFileFormat != null) { - af.currentFileFormat = currentFileFormat; // WHAT IS THE DEFAULT - // FORMAT FOR - // NON-FormatAdapter Sourced - // Alignments? + af.currentFileFormat = currentFileFormat; } - SequenceFeature[] sfs = null; - List alsqs; - synchronized (alsqs = al.getSequences()) + List alsqs = al.getSequences(); + synchronized (alsqs) { for (SequenceI sq : alsqs) { - if ((sfs = sq.getSequenceFeatures()) != null) + if (sq.getFeatures().hasFeatures()) { - if (sfs.length > 0) - { - af.setShowSeqFeatures(true); - break; - } + af.setShowSeqFeatures(true); + break; } - } } @@ -936,17 +827,15 @@ public class SequenceFetcher extends JPanel implements Runnable { af.hideFeatureColumns(SequenceOntologyI.EXON, false); } - Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); - af.statusBar.setText(MessageManager + af.setStatus(MessageManager .getString("label.successfully_pasted_alignment_file")); try { - af.setMaximum(Cache.getDefault("SHOW_FULLSCREEN", - false)); + af.setMaximum(Cache.getDefault("SHOW_FULLSCREEN", false)); } catch (Exception ex) { } @@ -967,9 +856,9 @@ public class SequenceFetcher extends JPanel implements Runnable @Override public void run() { - JOptionPane.showInternalMessageDialog(Desktop.desktop, error, + JvOptionPane.showInternalMessageDialog(Desktop.desktop, error, MessageManager.getString("label.error_retrieving_data"), - JOptionPane.WARNING_MESSAGE); + JvOptionPane.WARNING_MESSAGE); } }); } @@ -985,20 +874,31 @@ public class SequenceFetcher extends JPanel implements Runnable } /** - * Make this panel visible (after a selection has been made in the database + * Hide this panel (on clicking the database button to open the database * chooser) */ - void showPanel() + void hidePanel() { - frame.setVisible(true); + frame.setVisible(false); + } + + public void setQuery(String ids) + { + textArea.setText(ids); } /** - * Hide this panel (on clicking the database button to open the database - * chooser) + * Called to modify the search panel for embedding as an alternative tab of a + * free text search panel. The database choice list is hidden (since the + * choice has been made), and a Back button is made visible (which reopens the + * Sequence Fetcher panel). + * + * @param parentPanel */ - void hidePanel() + public void embedIn(GFTSPanel parentPanel) { - frame.setVisible(false); + database.setVisible(false); + backBtn.setVisible(true); + parentSearchPanel = parentPanel; } }