X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPDBSearchPanel.java;h=77626054fa98dd599f20e5707714edaf94d28f85;hb=5f41f83d0c156c08b3d4c550760b971cd5a6cc27;hp=2d46714ce1892c2730e856e6bc5eb47ed54c8eb3;hpb=be32c14cd8e48fe0a207cd7030cb9cd46f894678;p=jalview.git diff --git a/src/jalview/gui/PDBSearchPanel.java b/src/jalview/gui/PDBSearchPanel.java index 2d46714..7762605 100644 --- a/src/jalview/gui/PDBSearchPanel.java +++ b/src/jalview/gui/PDBSearchPanel.java @@ -33,6 +33,7 @@ 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.table.DefaultTableModel; @@ -60,6 +61,7 @@ public class PDBSearchPanel extends GPDBSearchPanel @Override public void txt_search_ActionPerformed() { + btn_ok.setEnabled(false); boolean allowEmptySequence = false; mainFrame.setTitle(MessageManager .getString("label.pdb_sequence_getcher")); @@ -74,13 +76,16 @@ public class PDBSearchPanel extends GPDBSearchPanel 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(txt_search.getText()); + request.setFieldToSearchBy("(" + searchTarget + ":"); + request.setSearchTerm(searchTerm + ")"); request.setWantedFields(wantedFields); - + // System.out.println(">>>>>>>>>>>>>> " + request.getQuery()); PDBRestClient pdbRestCleint = new PDBRestClient(); PDBRestResponse resultList = pdbRestCleint.executeRequest(request); if (resultList.getSearchSummary() != null) @@ -99,6 +104,43 @@ public class PDBSearchPanel extends GPDBSearchPanel } } + public static String decodeSearchTerm(String enteredText, + String targetField) + { + String foundSearchTerms = enteredText; + StringBuilder foundSearchTermsBuilder = new StringBuilder(); + if (enteredText.contains(";")) + { + String[] searchTerms = enteredText.split(";"); + for (String searchTerm : searchTerms) + { + if (searchTerm.contains(":")) + { + foundSearchTermsBuilder.append(targetField).append(":") + .append(searchTerm.split(":")[0]).append(" OR "); + } + else + { + foundSearchTermsBuilder.append(targetField).append(":") + .append(searchTerm).append(" OR "); + } + } + 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 public void btn_ok_ActionPerformed() { @@ -125,21 +167,55 @@ public class PDBSearchPanel extends GPDBSearchPanel { mainFrame.dispose(); StringBuilder selectedIds = new StringBuilder(); + 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(); - selectedIds.append(";").append(pdbIdStr); + String searchTerm = txt_search.getText(); + selectedIdsSet.add(getPDBIdwithSpecifiedChain(pdbIdStr, searchTerm)); } - String ids = selectedIds.deleteCharAt(0).toString(); + for (String selectedId : selectedIdsSet) + { + selectedIds.append(selectedId).append(";"); + } + + String ids = selectedIds.toString(); + System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids); seqFetcher.textArea.setText(ids); Thread worker = new Thread(seqFetcher); worker.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 */