X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPDBSearchPanel.java;h=9b94c2713303272ee50925ab0adf39ee12cb8a66;hb=9b881d499996272c2a9063016836e9b5f6f66d60;hp=1441e0895201da5ce7d937ce2f2786e7d02f79c4;hpb=d9cedb863c0d5b665b8cdde3f8791d8a96030c6b;p=jalview.git diff --git a/src/jalview/gui/PDBSearchPanel.java b/src/jalview/gui/PDBSearchPanel.java index 1441e08..9b94c27 100644 --- a/src/jalview/gui/PDBSearchPanel.java +++ b/src/jalview/gui/PDBSearchPanel.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -22,20 +22,21 @@ package jalview.gui; import jalview.jbgui.GPDBSearchPanel; +import jalview.jbgui.PDBDocFieldPreferences; import jalview.util.MessageManager; import jalview.ws.dbsources.PDBRestClient; import jalview.ws.dbsources.PDBRestClient.PDBDocField; import jalview.ws.uimodel.PDBRestRequest; import jalview.ws.uimodel.PDBRestResponse; -import jalview.ws.uimodel.PDBRestResponse.PDBResponseSummary; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.List; -import javax.swing.DefaultListModel; -import javax.swing.SwingUtilities; +import javax.swing.table.DefaultTableModel; @SuppressWarnings("serial") public class PDBSearchPanel extends GPDBSearchPanel @@ -44,6 +45,8 @@ public class PDBSearchPanel extends GPDBSearchPanel private IProgressIndicator progressIdicator; + private Collection wantedFields; + public PDBSearchPanel(SequenceFetcher seqFetcher) { this.seqFetcher = seqFetcher; @@ -51,60 +54,113 @@ public class PDBSearchPanel extends GPDBSearchPanel .getProgressIndicator(); } - public static void main(String[] args) + /** + * Action performed when an input is detected on txt_search field. + */ + @Override + public void txt_search_ActionPerformed() { - SwingUtilities.invokeLater(new Runnable() + new Thread() { + @Override public void run() { - new PDBSearchPanel(null); + lbl_loading.setVisible(false); + errorWarning.setLength(0); + lbl_warning.setVisible(false); + btn_ok.setEnabled(false); + boolean allowEmptySequence = false; + mainFrame.setTitle(MessageManager + .getString("label.pdb_sequence_getcher")); + tbl_summary.setModel(new DefaultTableModel()); + if (txt_search.getText().trim().length() > 0) + { + lbl_loading.setVisible(true); + long startTime = System.currentTimeMillis(); + + String searchTarget = ((PDBDocField) cmb_searchTarget + .getSelectedItem()).getCode(); + + wantedFields = PDBDocFieldPreferences.getSearchSummaryFields(); + + String searchTerm = decodeSearchTerm(txt_search.getText(), + searchTarget); + + PDBRestRequest request = new PDBRestRequest(); + request.setAllowEmptySeq(allowEmptySequence); + request.setResponseSize(100); + request.setFieldToSearchBy("(" + searchTarget + ":"); + request.setSearchTerm(searchTerm + ")"); + request.setWantedFields(wantedFields); + // System.out.println(">>>>>>>>>>>>>> " + request.getQuery()); + PDBRestClient pdbRestCleint = new PDBRestClient(); + PDBRestResponse resultList; + try + { + resultList = pdbRestCleint.executeRequest(request); + } catch (Exception e) + { + // e.printStackTrace(); + errorWarning.append(e.getMessage()); + checkForErrors(); + return; + } + + if (resultList.getSearchSummary() != null) + { + tbl_summary.setModel(PDBRestResponse.getTableModel(request, + resultList.getSearchSummary())); + } + + PDBRestResponse.configureTableColumn(tbl_summary, wantedFields); + + long endTime = System.currentTimeMillis(); + int resultSetCount = resultList.getNumberOfItemsFound(); + String result = (resultSetCount > 1) ? MessageManager + .getString("label.results") : MessageManager + .getString("label.result"); + mainFrame.setTitle(frameTitle + " - " + resultSetCount + " " + + result + " (" + (endTime - startTime) + " milli secs)"); + lbl_loading.setVisible(false); + } } - }); + }.start(); } - @Override - public void txt_search_ActionPerformed() + public static String decodeSearchTerm(String enteredText, + String targetField) { - boolean allowEmptySequence = false; - lst_searchResult.setModel(new DefaultListModel()); - mainFrame.setTitle(MessageManager - .getString("label.pdb_sequence_getcher")); - if (txt_search.getText().trim().length() > 0) + String foundSearchTerms = enteredText; + StringBuilder foundSearchTermsBuilder = new StringBuilder(); + if (enteredText.contains(";")) { - long startTime = System.currentTimeMillis(); - PDBRestClient pdbRestCleint = new PDBRestClient(); - String searchTarget = ((PDBDocField) cmb_searchTarget - .getSelectedItem()).getCode(); - - PDBRestRequest request = new PDBRestRequest(); - request.setAllowEmptySeq(allowEmptySequence); - request.setResponseSize(100); - request.setFieldToSearchBy(searchTarget + ":"); - request.setSearchTerm(txt_search.getText()); - List wantedFields = new ArrayList(); - wantedFields.add(PDBDocField.MOLECULE_TYPE); - wantedFields.add(PDBDocField.PDB_ID); - // wantedFields.add(PDBDocField.GENUS); - wantedFields.add(PDBDocField.GENE_NAME); - wantedFields.add(PDBDocField.TITLE); - // wantedFields.add(PDBDocField.RESOLUTION); - // wantedFields.add(PDBDocField.EXPERIMENTAL_METHOD); - request.setWantedFields(wantedFields); - PDBRestResponse resultList = pdbRestCleint.executeRequest(request); - if (resultList.getSearchSummary() != null) + String[] searchTerms = enteredText.split(";"); + for (String searchTerm : searchTerms) { - lst_searchResult.setModel(PDBRestResponse - .getListModel(resultList.getSearchSummary())); + if (searchTerm.contains(":")) + { + foundSearchTermsBuilder.append(targetField).append(":") + .append(searchTerm.split(":")[0]).append(" OR "); + } + else + { + foundSearchTermsBuilder.append(targetField).append(":") + .append(searchTerm).append(" OR "); + } } - - long endTime = System.currentTimeMillis(); - int resultSetCount = resultList.getNumberOfItemsFound(); - String result = (resultSetCount > 1) ? MessageManager - .getString("label.results") : MessageManager - .getString("label.result"); - mainFrame.setTitle(frameTitle + " - " + resultSetCount + " " + result - + " (" + (endTime - startTime) + " milli secs)"); + int endIndex = foundSearchTermsBuilder.lastIndexOf(" OR "); + foundSearchTerms = foundSearchTermsBuilder.toString(); + if (foundSearchTerms.contains(" OR ")) + { + foundSearchTerms = foundSearchTerms.substring( + targetField.length() + 1, endIndex); + } + } + else if (enteredText.contains(":")) + { + foundSearchTerms = foundSearchTerms.split(":")[0]; } + return foundSearchTerms; } @Override @@ -126,21 +182,106 @@ public class PDBSearchPanel extends GPDBSearchPanel mainFrame.dispose(); } + @Override + public void transferToSequenceFetcher(String ids) + { + // mainFrame.dispose(); + seqFetcher.textArea.setText(ids); + Thread worker = new Thread(seqFetcher); + worker.start(); + } + + /** + * Add the discovered/selected sequences to a target alignment window + */ public void loadSelectedPDBSequencesToAlignment() { - mainFrame.dispose(); + // mainFrame.dispose(); + disableActionButtons(); StringBuilder selectedIds = new StringBuilder(); - for (PDBResponseSummary dataSelected : lst_searchResult - .getSelectedValuesList()) + HashSet selectedIdsSet = new HashSet(); + int pdbIdCol = PDBRestClient.getPDBIdColumIndex(wantedFields, false); + int[] selectedRows = tbl_summary.getSelectedRows(); + for (int summaryRow : selectedRows) + { + String pdbIdStr = tbl_summary.getValueAt(summaryRow, pdbIdCol) + .toString(); + String searchTerm = txt_search.getText(); + selectedIdsSet.add(getPDBIdwithSpecifiedChain(pdbIdStr, searchTerm)); + } + + for (String selectedId : selectedIdsSet) { - selectedIds.append(";").append(dataSelected.getPdbId()); + selectedIds.append(selectedId).append(";"); } - String ids = selectedIds.deleteCharAt(0).toString(); + + String ids = selectedIds.toString(); + // System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids); seqFetcher.textArea.setText(ids); Thread worker = new Thread(seqFetcher); worker.start(); + delayAndEnableActionButtons(); + + } + + private void disableActionButtons() + { + btn_ok.setEnabled(false); + btn_back.setEnabled(false); + btn_cancel.setEnabled(false); } + private void delayAndEnableActionButtons() + { + new Thread() + { + @Override + public void run() + { + try + { + Thread.sleep(1500); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + btn_ok.setEnabled(true); + btn_back.setEnabled(true); + btn_cancel.setEnabled(true); + } + }.start(); + } + + public static String getPDBIdwithSpecifiedChain(String pdbId, + String searchTerm) + { + String pdbIdWithChainCode = ""; + if (searchTerm.contains(";")) + { + String[] foundTerms = searchTerm.split(";"); + for (String foundTerm : foundTerms) + { + if (foundTerm.contains(pdbId)) + { + pdbIdWithChainCode = foundTerm; + } + } + } + else if (searchTerm.contains(pdbId)) + { + pdbIdWithChainCode = searchTerm; + } + else + { + pdbIdWithChainCode = pdbId; + } + return pdbIdWithChainCode; + } + + /** + * Populates search target combo-box options + */ + @Override public void populateCmbSearchTargetOptions() { List searchableTargets = new ArrayList(); @@ -168,4 +309,15 @@ public class PDBSearchPanel extends GPDBSearchPanel } } + public void checkForErrors() + { + lbl_warning.setVisible(false); + if (errorWarning.length() > 0) + { + lbl_loading.setVisible(false); + lbl_warning.setToolTipText(JvSwingUtils.wrapTooltip(true, + errorWarning.toString())); + lbl_warning.setVisible(true); + } + } }