2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
3 * Copyright (C) 2014 The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
24 import jalview.jbgui.GPDBSearchPanel;
25 import jalview.jbgui.PDBDocFieldPreferences;
26 import jalview.util.MessageManager;
27 import jalview.ws.dbsources.PDBRestClient;
28 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
29 import jalview.ws.uimodel.PDBRestRequest;
30 import jalview.ws.uimodel.PDBRestResponse;
32 import java.util.ArrayList;
33 import java.util.Collection;
34 import java.util.Collections;
35 import java.util.Comparator;
36 import java.util.HashSet;
37 import java.util.List;
39 import javax.swing.JOptionPane;
40 import javax.swing.table.DefaultTableModel;
42 @SuppressWarnings("serial")
43 public class PDBSearchPanel extends GPDBSearchPanel
45 private SequenceFetcher seqFetcher;
47 private IProgressIndicator progressIdicator;
49 private Collection<PDBDocField> wantedFields;
51 public PDBSearchPanel(SequenceFetcher seqFetcher)
53 this.seqFetcher = seqFetcher;
54 this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
55 .getProgressIndicator();
60 * Action performed when an input is detected on txt_search field.
63 public void txt_search_ActionPerformed()
65 btn_ok.setEnabled(false);
66 boolean allowEmptySequence = false;
67 mainFrame.setTitle(MessageManager
68 .getString("label.pdb_sequence_getcher"));
69 tbl_summary.setModel(new DefaultTableModel());
70 if (txt_search.getText().trim().length() > 0)
72 long startTime = System.currentTimeMillis();
74 String searchTarget = ((PDBDocField) cmb_searchTarget
75 .getSelectedItem()).getCode();
77 wantedFields = PDBDocFieldPreferences
78 .getSearchSummaryFields();
80 String searchTerm = decodeSearchTerm(txt_search.getText(),
83 PDBRestRequest request = new PDBRestRequest();
84 request.setAllowEmptySeq(allowEmptySequence);
85 request.setResponseSize(100);
86 request.setFieldToSearchBy("(" + searchTarget + ":");
87 request.setSearchTerm(searchTerm + ")");
88 request.setWantedFields(wantedFields);
89 // System.out.println(">>>>>>>>>>>>>> " + request.getQuery());
90 PDBRestClient pdbRestCleint = new PDBRestClient();
91 PDBRestResponse resultList;
94 resultList = pdbRestCleint.executeRequest(request);
97 // System.out.println(">>>>>>>>>>>>>>>" + e.getMessage());
98 JOptionPane.showMessageDialog(this, e.getMessage(),
99 "PDB Web-service Error", JOptionPane.ERROR_MESSAGE);
103 if (resultList.getSearchSummary() != null)
105 tbl_summary.setModel(PDBRestResponse.getTableModel(request,
106 resultList.getSearchSummary()));
109 long endTime = System.currentTimeMillis();
110 int resultSetCount = resultList.getNumberOfItemsFound();
111 String result = (resultSetCount > 1) ? MessageManager
112 .getString("label.results") : MessageManager
113 .getString("label.result");
114 mainFrame.setTitle(frameTitle + " - " + resultSetCount + " " + result
115 + " (" + (endTime - startTime) + " milli secs)");
119 public static String decodeSearchTerm(String enteredText,
122 String foundSearchTerms = enteredText;
123 StringBuilder foundSearchTermsBuilder = new StringBuilder();
124 if (enteredText.contains(";"))
126 String[] searchTerms = enteredText.split(";");
127 for (String searchTerm : searchTerms)
129 if (searchTerm.contains(":"))
131 foundSearchTermsBuilder.append(targetField).append(":")
132 .append(searchTerm.split(":")[0]).append(" OR ");
136 foundSearchTermsBuilder.append(targetField).append(":")
137 .append(searchTerm).append(" OR ");
140 int endIndex = foundSearchTermsBuilder.lastIndexOf(" OR ");
141 foundSearchTerms = foundSearchTermsBuilder.toString();
142 if (foundSearchTerms.contains(" OR "))
144 foundSearchTerms = foundSearchTerms.substring(
145 targetField.length() + 1, endIndex);
148 else if (enteredText.contains(":"))
150 foundSearchTerms = foundSearchTerms.split(":")[0];
152 return foundSearchTerms;
157 public void btn_ok_ActionPerformed()
159 loadSelectedPDBSequencesToAlignment();
163 public void btn_back_ActionPerformed()
166 new SequenceFetcher(progressIdicator);
170 public void btn_cancel_ActionPerformed()
176 * Add the discovered/selected sequences to a target alignment window
178 public void loadSelectedPDBSequencesToAlignment()
181 StringBuilder selectedIds = new StringBuilder();
182 HashSet<String> selectedIdsSet = new HashSet<String>();
183 int pdbIdCol = PDBRestClient.getPDBIdColumIndex(wantedFields, false);
184 int[] selectedRows = tbl_summary.getSelectedRows();
185 for (int summaryRow : selectedRows)
187 String pdbIdStr = tbl_summary.getValueAt(summaryRow, pdbIdCol)
189 String searchTerm = txt_search.getText();
190 selectedIdsSet.add(getPDBIdwithSpecifiedChain(pdbIdStr, searchTerm));
193 for (String selectedId : selectedIdsSet)
195 selectedIds.append(selectedId).append(";");
198 String ids = selectedIds.toString();
199 System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids);
200 seqFetcher.textArea.setText(ids);
201 Thread worker = new Thread(seqFetcher);
205 public static String getPDBIdwithSpecifiedChain(String pdbId,
208 String pdbIdWithChainCode = "";
209 if (searchTerm.contains(";"))
211 String[] foundTerms = searchTerm.split(";");
212 for (String foundTerm : foundTerms)
214 if (foundTerm.contains(pdbId))
216 pdbIdWithChainCode = foundTerm;
220 else if (searchTerm.contains(pdbId))
222 pdbIdWithChainCode = searchTerm;
226 pdbIdWithChainCode = pdbId;
228 return pdbIdWithChainCode;
232 * Populates search target combo-box options
234 public void populateCmbSearchTargetOptions()
236 List<PDBDocField> searchableTargets = new ArrayList<PDBDocField>();
237 searchableTargets.add(PDBDocField.PDB_ID);
238 searchableTargets.add(PDBDocField.PFAM_ACCESSION);
239 searchableTargets.add(PDBDocField.MOLECULE_TYPE);
240 searchableTargets.add(PDBDocField.MOLECULE_NAME);
241 searchableTargets.add(PDBDocField.UNIPROT_ACCESSION);
242 searchableTargets.add(PDBDocField.GENE_NAME);
243 searchableTargets.add(PDBDocField.GENUS);
244 searchableTargets.add(PDBDocField.ALL);
246 Collections.sort(searchableTargets, new Comparator<PDBDocField>()
249 public int compare(PDBDocField o1, PDBDocField o2)
251 return o1.getName().compareTo(o2.getName());
255 for (PDBDocField searchTarget : searchableTargets)
257 cmb_searchTarget.addItem(searchTarget);