JAL-1668 added filtering and sorting capabilites
[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.dbsources.PDBRestClient.PDBDocField;
6 import jalview.ws.uimodel.PDBSearchRequest;
7 import jalview.ws.uimodel.PDBSearchResponse;
8 import jalview.ws.uimodel.PDBSearchResponse.PDBResponseSummary;
9
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.Comparator;
13 import java.util.List;
14
15 import javax.swing.DefaultListModel;
16 import javax.swing.SwingUtilities;
17
18 @SuppressWarnings("serial")
19 public class PDBFetchPanel extends GPDBFetchPanel
20 {
21   private SequenceFetcher seqFetcher;
22
23   public PDBFetchPanel()
24   {
25   }
26
27   public PDBFetchPanel(SequenceFetcher seqFetcher)
28   {
29     this();
30     this.seqFetcher = seqFetcher;
31   }
32
33   public static void main(String[] args)
34   {
35     SwingUtilities.invokeLater(new Runnable()
36     {
37       public void run()
38       {
39         new PDBFetchPanel();
40       }
41     });
42   }
43
44   @Override
45   public void searchStringAction()
46   {
47     boolean allowEmptySequence = false;
48     jListSearchResult.setModel(new DefaultListModel<PDBResponseSummary>());
49     mainFrame.setTitle("PDB Sequence Fetcher");
50     if (search.getText().trim().length() > 0)
51     {
52       long startTime = System.currentTimeMillis();
53       PDBRestClient pdbRestCleint = new PDBRestClient();
54       String searchTarget = ((PDBDocField) searchTargetOptions
55               .getSelectedItem()).getCode();
56
57       PDBSearchRequest request = new PDBSearchRequest();
58       request.setAllowEmptySeq(allowEmptySequence);
59       request.setResponseSize(100);
60       request.setFieldToSearchBy(searchTarget + ":");
61       request.setSearchTerm(search.getText());
62       List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
63       wantedFields.add(PDBDocField.MOLECULE_TYPE);
64       wantedFields.add(PDBDocField.PDB_ID);
65       wantedFields.add(PDBDocField.GENUS);
66       wantedFields.add(PDBDocField.GENE_NAME);
67       wantedFields.add(PDBDocField.TITLE);
68       request.setWantedFields(wantedFields);
69
70       PDBSearchResponse resultList = pdbRestCleint.executeRequest(request);
71
72       if (resultList.getSearchSummary() != null)
73       {
74         jListSearchResult.setModel(PDBSearchResponse
75                 .getListModel(resultList.getSearchSummary()));
76       }
77       long endTime = System.currentTimeMillis();
78       mainFrame.setTitle("PDB Sequence Fetcher - "
79               + resultList.getItemsFound() + " results ("
80               + (endTime - startTime) + " milli secs)");
81     }
82
83   }
84
85   @Override
86   public void okActionPerformed()
87   {
88     importSelectedPDBSequencesToAlignment();
89   }
90
91
92   @Override
93   public void backActionPerformed()
94   {
95     System.out.println("back! pressed!");
96   }
97
98   @Override
99   public void cancelActionPerformed()
100   {
101     mainFrame.dispose();
102   }
103
104   private void importSelectedPDBSequencesToAlignment()
105   {
106     mainFrame.dispose();
107     StringBuilder selectedIds = new StringBuilder();
108     for (PDBResponseSummary dataSelected : jListSearchResult
109             .getSelectedValuesList())
110     {
111       selectedIds.append(";").append(dataSelected.getPdbId());
112     }
113     String ids = selectedIds.deleteCharAt(0).toString();
114     seqFetcher.textArea.setText(ids);
115     Thread worker = new Thread(seqFetcher);
116     worker.start();
117   }
118
119   public void populateSearchOptionComboBox()
120   {
121     List<PDBDocField> searchableTargets = new ArrayList<PDBDocField>();
122     searchableTargets.add(PDBDocField.PDB_ID);
123     searchableTargets.add(PDBDocField.PFAM_ACCESSION);
124     searchableTargets.add(PDBDocField.MOLECULE_TYPE);
125     searchableTargets.add(PDBDocField.MOLECULE_NAME);
126     searchableTargets.add(PDBDocField.UNIPROT_ACCESSION);
127     searchableTargets.add(PDBDocField.GENE_NAME);
128     searchableTargets.add(PDBDocField.GENUS);
129     searchableTargets.add(PDBDocField.ALL);
130
131     Collections.sort(searchableTargets, new Comparator<PDBDocField>()
132     {
133       @Override
134       public int compare(PDBDocField o1, PDBDocField o2)
135       {
136         return o1.getName().compareTo(o2.getName());
137       }
138     });
139
140     for (PDBDocField searchTarget : searchableTargets)
141     {
142       searchTargetOptions.addItem(searchTarget);
143     }
144   }
145
146 }