2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ 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.table.DefaultTableModel;
41 @SuppressWarnings("serial")
42 public class PDBSearchPanel extends GPDBSearchPanel
44 private SequenceFetcher seqFetcher;
46 private IProgressIndicator progressIdicator;
48 private Collection<PDBDocField> wantedFields;
50 public PDBSearchPanel(SequenceFetcher seqFetcher)
52 this.seqFetcher = seqFetcher;
53 this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
54 .getProgressIndicator();
58 * Action performed when an input is detected on txt_search field.
61 public void txt_search_ActionPerformed()
68 lbl_loading.setVisible(false);
69 errorWarning.setLength(0);
70 lbl_warning.setVisible(false);
71 btn_ok.setEnabled(false);
72 boolean allowEmptySequence = false;
73 mainFrame.setTitle(MessageManager
74 .getString("label.pdb_sequence_getcher"));
75 tbl_summary.setModel(new DefaultTableModel());
76 if (txt_search.getText().trim().length() > 0)
78 lbl_loading.setVisible(true);
79 long startTime = System.currentTimeMillis();
81 String searchTarget = ((PDBDocField) cmb_searchTarget
82 .getSelectedItem()).getCode();
84 wantedFields = PDBDocFieldPreferences.getSearchSummaryFields();
86 String searchTerm = decodeSearchTerm(txt_search.getText(),
89 PDBRestRequest request = new PDBRestRequest();
90 request.setAllowEmptySeq(allowEmptySequence);
91 request.setResponseSize(100);
92 request.setFieldToSearchBy("(" + searchTarget + ":");
93 request.setSearchTerm(searchTerm + ")");
94 request.setWantedFields(wantedFields);
95 // System.out.println(">>>>>>>>>>>>>> " + request.getQuery());
96 PDBRestClient pdbRestCleint = new PDBRestClient();
97 PDBRestResponse resultList;
100 resultList = pdbRestCleint.executeRequest(request);
101 } catch (Exception e)
103 // e.printStackTrace();
104 errorWarning.append(e.getMessage());
109 if (resultList.getSearchSummary() != null)
111 tbl_summary.setModel(PDBRestResponse.getTableModel(request,
112 resultList.getSearchSummary()));
114 // TableRowSorter<TableModel> sorter = new TableRowSorter<>(
115 // tbl_pdbDocFieldConfig.getModel());
118 long endTime = System.currentTimeMillis();
119 int resultSetCount = resultList.getNumberOfItemsFound();
120 String result = (resultSetCount > 1) ? MessageManager
121 .getString("label.results") : MessageManager
122 .getString("label.result");
123 mainFrame.setTitle(frameTitle + " - " + resultSetCount + " "
124 + result + " (" + (endTime - startTime) + " milli secs)");
125 lbl_loading.setVisible(false);
131 public static String decodeSearchTerm(String enteredText,
134 String foundSearchTerms = enteredText;
135 StringBuilder foundSearchTermsBuilder = new StringBuilder();
136 if (enteredText.contains(";"))
138 String[] searchTerms = enteredText.split(";");
139 for (String searchTerm : searchTerms)
141 if (searchTerm.contains(":"))
143 foundSearchTermsBuilder.append(targetField).append(":")
144 .append(searchTerm.split(":")[0]).append(" OR ");
148 foundSearchTermsBuilder.append(targetField).append(":")
149 .append(searchTerm).append(" OR ");
152 int endIndex = foundSearchTermsBuilder.lastIndexOf(" OR ");
153 foundSearchTerms = foundSearchTermsBuilder.toString();
154 if (foundSearchTerms.contains(" OR "))
156 foundSearchTerms = foundSearchTerms.substring(
157 targetField.length() + 1, endIndex);
160 else if (enteredText.contains(":"))
162 foundSearchTerms = foundSearchTerms.split(":")[0];
164 return foundSearchTerms;
168 public void btn_ok_ActionPerformed()
170 loadSelectedPDBSequencesToAlignment();
174 public void btn_back_ActionPerformed()
177 new SequenceFetcher(progressIdicator);
181 public void btn_cancel_ActionPerformed()
187 public void transferToSequenceFetcher(String ids)
189 // mainFrame.dispose();
190 seqFetcher.textArea.setText(ids);
191 Thread worker = new Thread(seqFetcher);
196 * Add the discovered/selected sequences to a target alignment window
198 public void loadSelectedPDBSequencesToAlignment()
200 // mainFrame.dispose();
201 disableActionButtons();
202 StringBuilder selectedIds = new StringBuilder();
203 HashSet<String> selectedIdsSet = new HashSet<String>();
204 int pdbIdCol = PDBRestClient.getPDBIdColumIndex(wantedFields, false);
205 int[] selectedRows = tbl_summary.getSelectedRows();
206 for (int summaryRow : selectedRows)
208 String pdbIdStr = tbl_summary.getValueAt(summaryRow, pdbIdCol)
210 String searchTerm = txt_search.getText();
211 selectedIdsSet.add(getPDBIdwithSpecifiedChain(pdbIdStr, searchTerm));
214 for (String selectedId : selectedIdsSet)
216 selectedIds.append(selectedId).append(";");
219 String ids = selectedIds.toString();
220 // System.out.println(">>>>>>>>>>>>>>>> selected Ids: " + ids);
221 seqFetcher.textArea.setText(ids);
222 Thread worker = new Thread(seqFetcher);
224 delayAndEnableActionButtons();
228 private void disableActionButtons()
230 btn_ok.setEnabled(false);
231 btn_back.setEnabled(false);
232 btn_cancel.setEnabled(false);
235 private void delayAndEnableActionButtons()
245 } catch (InterruptedException e)
249 btn_ok.setEnabled(true);
250 btn_back.setEnabled(true);
251 btn_cancel.setEnabled(true);
256 public static String getPDBIdwithSpecifiedChain(String pdbId,
259 String pdbIdWithChainCode = "";
260 if (searchTerm.contains(";"))
262 String[] foundTerms = searchTerm.split(";");
263 for (String foundTerm : foundTerms)
265 if (foundTerm.contains(pdbId))
267 pdbIdWithChainCode = foundTerm;
271 else if (searchTerm.contains(pdbId))
273 pdbIdWithChainCode = searchTerm;
277 pdbIdWithChainCode = pdbId;
279 return pdbIdWithChainCode;
283 * Populates search target combo-box options
286 public void populateCmbSearchTargetOptions()
288 List<PDBDocField> searchableTargets = new ArrayList<PDBDocField>();
289 searchableTargets.add(PDBDocField.PDB_ID);
290 searchableTargets.add(PDBDocField.PFAM_ACCESSION);
291 searchableTargets.add(PDBDocField.MOLECULE_TYPE);
292 searchableTargets.add(PDBDocField.MOLECULE_NAME);
293 searchableTargets.add(PDBDocField.UNIPROT_ACCESSION);
294 searchableTargets.add(PDBDocField.GENE_NAME);
295 searchableTargets.add(PDBDocField.GENUS);
296 searchableTargets.add(PDBDocField.ALL);
298 Collections.sort(searchableTargets, new Comparator<PDBDocField>()
301 public int compare(PDBDocField o1, PDBDocField o2)
303 return o1.getName().compareTo(o2.getName());
307 for (PDBDocField searchTarget : searchableTargets)
309 cmb_searchTarget.addItem(searchTarget);
313 public void checkForErrors()
315 lbl_warning.setVisible(false);
316 if (errorWarning.length() > 0)
318 lbl_loading.setVisible(false);
319 lbl_warning.setToolTipText(JvSwingUtils.wrapTooltip(true,
320 errorWarning.toString()));
321 lbl_warning.setVisible(true);