JAL-1667 updated test and internationalization messages
[jalview.git] / src / jalview / gui / PDBSearchPanel.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
3  * Copyright (C) 2014 The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
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.
11  *  
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.
16  * 
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.
20  */
21
22 package jalview.gui;
23
24 import jalview.jbgui.GPDBSearchPanel;
25 import jalview.util.MessageManager;
26 import jalview.ws.dbsources.PDBRestClient;
27 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
28 import jalview.ws.uimodel.PDBRestRequest;
29 import jalview.ws.uimodel.PDBRestResponse;
30 import jalview.ws.uimodel.PDBRestResponse.PDBResponseSummary;
31
32 import java.util.ArrayList;
33 import java.util.Collections;
34 import java.util.Comparator;
35 import java.util.List;
36
37 import javax.swing.DefaultListModel;
38 import javax.swing.SwingUtilities;
39
40 @SuppressWarnings("serial")
41 public class PDBSearchPanel extends GPDBSearchPanel
42 {
43   private SequenceFetcher seqFetcher;
44
45   private IProgressIndicator progressIdicator;
46
47   public PDBSearchPanel(SequenceFetcher seqFetcher)
48   {
49     this.seqFetcher = seqFetcher;
50     this.progressIdicator = (seqFetcher == null) ? null : seqFetcher
51             .getProgressIndicator();
52   }
53
54   public static void main(String[] args)
55   {
56     SwingUtilities.invokeLater(new Runnable()
57     {
58       public void run()
59       {
60         new PDBSearchPanel(null);
61       }
62     });
63   }
64
65   @Override
66   public void txt_search_ActionPerformed()
67   {
68     boolean allowEmptySequence = false;
69     lst_searchResult.setModel(new DefaultListModel<PDBResponseSummary>());
70     mainFrame.setTitle(MessageManager
71             .getString("label.pdb_sequence_getcher"));
72     if (txt_search.getText().trim().length() > 0)
73     {
74       long startTime = System.currentTimeMillis();
75       PDBRestClient pdbRestCleint = new PDBRestClient();
76       String searchTarget = ((PDBDocField) cmb_searchTarget
77               .getSelectedItem()).getCode();
78
79       PDBRestRequest request = new PDBRestRequest();
80       request.setAllowEmptySeq(allowEmptySequence);
81       request.setResponseSize(100);
82       request.setFieldToSearchBy(searchTarget + ":");
83       request.setSearchTerm(txt_search.getText());
84       List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
85       wantedFields.add(PDBDocField.MOLECULE_TYPE);
86       wantedFields.add(PDBDocField.PDB_ID);
87       // wantedFields.add(PDBDocField.GENUS);
88       wantedFields.add(PDBDocField.GENE_NAME);
89       wantedFields.add(PDBDocField.TITLE);
90       // wantedFields.add(PDBDocField.RESOLUTION);
91       // wantedFields.add(PDBDocField.EXPERIMENTAL_METHOD);
92       request.setWantedFields(wantedFields);
93       PDBRestResponse resultList = pdbRestCleint.executeRequest(request);
94       if (resultList.getSearchSummary() != null)
95       {
96         lst_searchResult.setModel(PDBRestResponse
97                 .getListModel(resultList.getSearchSummary()));
98       }
99
100       long endTime = System.currentTimeMillis();
101       int resultSetCount = resultList.getNumberOfItemsFound();
102       String result = (resultSetCount > 1) ? MessageManager
103               .getString("label.results") : MessageManager
104               .getString("label.result");
105       mainFrame.setTitle(frameTitle + " - " + resultSetCount + " " + result
106               + " (" + (endTime - startTime) + " milli secs)");
107     }
108   }
109
110   @Override
111   public void btn_ok_ActionPerformed()
112   {
113     loadSelectedPDBSequencesToAlignment();
114   }
115
116   @Override
117   public void btn_back_ActionPerformed()
118   {
119     mainFrame.dispose();
120     new SequenceFetcher(progressIdicator);
121   }
122
123   @Override
124   public void btn_cancel_ActionPerformed()
125   {
126     mainFrame.dispose();
127   }
128
129   public void loadSelectedPDBSequencesToAlignment()
130   {
131     mainFrame.dispose();
132     StringBuilder selectedIds = new StringBuilder();
133     for (PDBResponseSummary dataSelected : lst_searchResult
134             .getSelectedValuesList())
135     {
136       selectedIds.append(";").append(dataSelected.getPdbId());
137     }
138     String ids = selectedIds.deleteCharAt(0).toString();
139     seqFetcher.textArea.setText(ids);
140     Thread worker = new Thread(seqFetcher);
141     worker.start();
142   }
143
144   public void populateCmbSearchTargetOptions()
145   {
146     List<PDBDocField> searchableTargets = new ArrayList<PDBDocField>();
147     searchableTargets.add(PDBDocField.PDB_ID);
148     searchableTargets.add(PDBDocField.PFAM_ACCESSION);
149     searchableTargets.add(PDBDocField.MOLECULE_TYPE);
150     searchableTargets.add(PDBDocField.MOLECULE_NAME);
151     searchableTargets.add(PDBDocField.UNIPROT_ACCESSION);
152     searchableTargets.add(PDBDocField.GENE_NAME);
153     searchableTargets.add(PDBDocField.GENUS);
154     searchableTargets.add(PDBDocField.ALL);
155
156     Collections.sort(searchableTargets, new Comparator<PDBDocField>()
157     {
158       @Override
159       public int compare(PDBDocField o1, PDBDocField o2)
160       {
161         return o1.getName().compareTo(o2.getName());
162       }
163     });
164
165     for (PDBDocField searchTarget : searchableTargets)
166     {
167       cmb_searchTarget.addItem(searchTarget);
168     }
169   }
170
171 }