c7e536224462c5e05df2c22ff0874a16fe766910
[jalview.git] / src / jalview / gui / PDBFetchPanel.java
1 package jalview.gui;
2
3 import jalview.jbgui.GPDBFetchPanel;
4 import jalview.ws.dbsources.PDBRestClient;
5 import jalview.ws.uimodel.PDBSearchRequest;
6 import jalview.ws.uimodel.PDBSearchResponse;
7 import jalview.ws.uimodel.PDBSummaryListModel;
8 import jalview.ws.uimodel.PDBSummaryListModel.PDBDocField;
9
10 import java.util.ArrayList;
11 import java.util.List;
12
13 import javax.swing.DefaultListModel;
14 import javax.swing.SwingUtilities;
15
16 @SuppressWarnings("serial")
17 public class PDBFetchPanel extends GPDBFetchPanel
18 {
19   private SequenceFetcher seqFetcher;
20
21   public enum FieldType
22   {
23     INT, STRING, BOOLEAN;
24   }
25
26   public PDBFetchPanel()
27   {
28   }
29
30   public PDBFetchPanel(SequenceFetcher seqFetcher)
31   {
32     this();
33     this.seqFetcher = seqFetcher;
34   }
35
36   public static void main(String[] args)
37   {
38     SwingUtilities.invokeLater(new Runnable()
39     {
40       public void run()
41       {
42         new PDBFetchPanel();
43       }
44     });
45   }
46
47   @Override
48   public void searchStringAction()
49   {
50     boolean allowEmptySequence = false;
51     jListSearchResult.setModel(new DefaultListModel<PDBSummaryListModel>());
52     mainFrame.setTitle("PDB Sequence Fetcher");
53     if (search.getText().trim().length() > 0)
54     {
55       long startTime = System.currentTimeMillis();
56       PDBRestClient pdbRestCleint = new PDBRestClient();
57       String searchTarget = ((PDBSearchOptionList) searchTargetOptions
58               .getSelectedItem()).getCode();
59
60       PDBSearchRequest request = new PDBSearchRequest();
61       request.setAllowEmptySeq(allowEmptySequence);
62       request.setResponseSize(100);
63       request.setSearchTarget(searchTarget + ":");
64       request.setSearchTerm(search.getText());
65       List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
66       wantedFields.add(PDBDocField.MOLECULE_TYPE);
67       wantedFields.add(PDBDocField.PDB_ID);
68       wantedFields.add(PDBDocField.GENUS);
69       wantedFields.add(PDBDocField.GENE_NAME);
70       wantedFields.add(PDBDocField.TITLE);
71       request.setWantedFields(wantedFields);
72
73       PDBSearchResponse resultList = pdbRestCleint.executeRequest(request);
74
75       if (resultList.getSearchSummary() != null)
76       {
77         jListSearchResult.setModel(PDBSearchResponse
78                 .getListModel(resultList.getSearchSummary()));
79       }
80       long endTime = System.currentTimeMillis();
81       mainFrame.setTitle("PDB Sequence Fetcher - "
82               + resultList.getItemsFound() + " results ("
83               + (endTime - startTime) + " milli secs)");
84     }
85
86   }
87
88   @Override
89   public void okActionPerformed()
90   {
91     processPDBResponseData();
92   }
93
94
95   @Override
96   public void backActionPerformed()
97   {
98     System.out.println("back! pressed!");
99   }
100
101   @Override
102   public void cancelActionPerformed()
103   {
104     mainFrame.dispose();
105   }
106
107   private void processPDBResponseData()
108   {
109     mainFrame.dispose();
110     StringBuilder selectedIds = new StringBuilder();
111     for (PDBSummaryListModel dataSelected : jListSearchResult
112             .getSelectedValuesList())
113     {
114       selectedIds.append(";").append(dataSelected.getPdbId());
115     }
116     String ids = selectedIds.deleteCharAt(0).toString();
117     seqFetcher.textArea.setText(ids);
118     Thread worker = new Thread(seqFetcher);
119     worker.start();
120   }
121
122   @SuppressWarnings("unchecked")
123   public void populateSearchOptionCombo()
124
125   {
126     List<PDBSearchOptionList> searchOptions = new ArrayList<PDBSearchOptionList>();
127     searchOptions.add(new PDBSearchOptionList("PDB ID", "pdb_id",
128             FieldType.STRING));
129     searchOptions.add(new PDBSearchOptionList("PFAM Name", "pfam_name",
130             FieldType.STRING));
131     searchOptions.add(new PDBSearchOptionList("ALL", "text",
132             FieldType.STRING));
133     searchOptions.add(new PDBSearchOptionList("Molecule Type",
134             "molecule_type", FieldType.STRING));
135     searchOptions.add(new PDBSearchOptionList("Title", "title",
136             FieldType.STRING));
137     searchOptions.add(new PDBSearchOptionList("Molecule Name",
138             "molecule_name", FieldType.STRING));
139     searchOptions.add(new PDBSearchOptionList("Tax ID", "tax_id",
140             FieldType.STRING));
141     searchOptions.add(new PDBSearchOptionList("UniProt Accession",
142             "uniprot_accession", FieldType.STRING));
143     searchOptions.add(new PDBSearchOptionList("Gene Name", "gene_name",
144             FieldType.STRING));
145     searchOptions.add(new PDBSearchOptionList("Genus", "genus",
146             FieldType.STRING));
147
148     java.util.Collections.sort(searchOptions);
149
150     for (PDBSearchOptionList pdbSO : searchOptions)
151     {
152       searchTargetOptions.addItem(pdbSO);
153     }
154   }
155
156   @SuppressWarnings("rawtypes")
157   public class PDBSearchOptionList implements Comparable
158   {
159     private String name;
160
161     private String code;
162
163     private boolean showInSummary;
164
165     private boolean searchFilter;
166
167     private FieldType type;
168
169     public PDBSearchOptionList(String name, String code, FieldType type)
170     {
171       this.name = name;
172       this.code = code;
173       this.type = type;
174     }
175
176     public String getName()
177     {
178       return name;
179     }
180
181     public void setName(String name)
182     {
183       this.name = name;
184     }
185
186     public String getCode()
187     {
188       return code;
189     }
190
191     public void setCode(String code)
192     {
193       this.code = code;
194     }
195
196     public boolean isShowInSummary()
197     {
198       return showInSummary;
199     }
200
201     public void setShowInSummary(boolean showInSummary)
202     {
203       this.showInSummary = showInSummary;
204     }
205
206     public boolean isSearchFilter()
207     {
208       return searchFilter;
209     }
210
211     public void setSearchFilter(boolean searchFilter)
212     {
213       this.searchFilter = searchFilter;
214     }
215
216     public FieldType getFieldType()
217     {
218       return type;
219     }
220
221     public void setFieldType(FieldType type)
222     {
223       this.type = type;
224     }
225
226     public String toString()
227     {
228       return name;
229     }
230
231     public PDBSearchOptionList()
232     {
233
234     }
235
236     @Override
237     public int compareTo(Object o)
238     {
239       return this.name.compareTo(((PDBSearchOptionList) o).getName());
240     }
241
242   }
243 }