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