First commit of 3DB FTS Panel & Restclient
[jalview.git] / src / jalview / fts / service / threedbeacons / TDBeaconsFTSPanel.java
1 package jalview.fts.service.threedbeacons;
2
3 import java.util.HashMap;
4 import java.util.HashSet;
5 import java.util.Map;
6
7 import jalview.fts.api.FTSDataColumnI;
8 import jalview.fts.api.FTSRestClientI;
9 import jalview.fts.core.FTSRestRequest;
10 import jalview.fts.core.FTSRestResponse;
11 import jalview.fts.core.GFTSPanel;
12 import jalview.fts.service.pdb.PDBFTSRestClient;
13 import jalview.gui.SequenceFetcher;
14 import jalview.util.MessageManager;
15
16 @SuppressWarnings("serial")
17 public class TDBeaconsFTSPanel extends GFTSPanel
18 {       
19   private static String defaultFTSFrameTitle = MessageManager
20           .getString("label.threedb_sequence_fetcher");
21
22   private static Map<String, Integer> tempUserPrefs = new HashMap<>();
23
24   private static final String THREEDB_FTS_CACHE_KEY = "CACHE.THREEDB_FTS";
25
26   private static final String THREEDB_AUTOSEARCH = "FTS.THREEDB.AUTOSEARCH";
27   
28   public TDBeaconsFTSPanel(SequenceFetcher fetcher)
29   {
30     super(fetcher);
31     pageLimit = TDBeaconsFTSRestClient.getInstance().getDefaultResponsePageSize();
32     this.seqFetcher = fetcher;
33     this.progressIndicator = (fetcher == null) ? null
34             : fetcher.getProgressIndicator();
35   }
36
37   @Override
38   public void searchAction(boolean isFreshSearch)
39   {
40     mainFrame.requestFocusInWindow();
41     if (isFreshSearch)
42     {
43       offSet = 0;
44     }
45     new Thread()
46     {
47       @Override
48       public void run()
49       {
50         reset();
51         boolean allowEmptySequence = false;
52         if (getTypedText().length() > 0)
53         {
54           setSearchInProgress(true);
55           long startTime = System.currentTimeMillis();
56
57           String searchTarget = ((FTSDataColumnI) cmb_searchTarget
58                   .getSelectedItem()).getCode();
59           wantedFields = TDBeaconsFTSRestClient.getInstance()
60                   .getAllDefaultDisplayedFTSDataColumns();
61           String searchTerm = getTypedText(); // to add : decodeSearchTerm
62
63           FTSRestRequest request = new FTSRestRequest();
64           request.setAllowEmptySeq(allowEmptySequence);
65           request.setResponseSize(100);
66           request.setFieldToSearchBy("(" + searchTarget + ":");
67           request.setSearchTerm(searchTerm + ")");
68           request.setOffSet(offSet);
69           request.setWantedFields(wantedFields);
70           FTSRestClientI tdbRestClient = TDBeaconsFTSRestClient.getInstance();
71           FTSRestResponse resultList;
72           try
73           {
74             resultList = tdbRestClient.executeRequest(request);
75           } catch (Exception e)
76           {
77             setErrorMessage(e.getMessage());
78             checkForErrors();
79             setSearchInProgress(false);
80             return;
81           }
82
83           if (resultList.getSearchSummary() != null
84                   && resultList.getSearchSummary().size() > 0)
85           {
86             getResultTable().setModel(FTSRestResponse.getTableModel(request,
87                     resultList.getSearchSummary()));
88             FTSRestResponse.configureTableColumn(getResultTable(),
89                     wantedFields, tempUserPrefs);
90             getResultTable().setVisible(true);
91           }
92
93           long endTime = System.currentTimeMillis();
94           totalResultSetCount = resultList.getNumberOfItemsFound();
95           resultSetCount = resultList.getSearchSummary() == null ? 0
96                   : resultList.getSearchSummary().size();
97           String result = (resultSetCount > 0)
98                   ? MessageManager.getString("label.results")
99                   : MessageManager.getString("label.result");
100
101           if (isPaginationEnabled() && resultSetCount > 0)
102           {
103             String f1 = totalNumberformatter.format(Integer.valueOf(offSet + 1));
104             String f2 = totalNumberformatter
105                     .format(Integer.valueOf(offSet + resultSetCount));
106             String f3 = totalNumberformatter
107                     .format(Integer.valueOf(totalResultSetCount));
108             updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
109                     + " " + f1 + " to " + f2 + " of " + f3 + " " + " ("
110                     + (endTime - startTime) + " milli secs)");
111           }
112           else
113           {
114             updateSearchFrameTitle(defaultFTSFrameTitle + " - "
115                     + resultSetCount + " " + result + " ("
116                     + (endTime - startTime) + " milli secs)");
117           }
118
119           setSearchInProgress(false);
120           refreshPaginatorState();
121           updateSummaryTableSelections();
122         }
123         txt_search.updateCache();
124       }
125     }.start();
126   }
127   
128   @Override
129   public void okAction()
130   {
131     // mainFrame.dispose();
132     disableActionButtons();
133     StringBuilder selectedIds = new StringBuilder();
134     HashSet<String> selectedIdsSet = new HashSet<>();
135     int primaryKeyColIndex = 0;
136     try
137     {
138       primaryKeyColIndex = getFTSRestClient()
139               .getPrimaryKeyColumIndex(wantedFields, false);
140     } catch (Exception e)
141     {
142       e.printStackTrace();
143     }
144     int[] selectedRows = getResultTable().getSelectedRows();
145     String searchTerm = getTypedText();
146     for (int summaryRow : selectedRows)
147     {
148       String idStr = getResultTable()
149               .getValueAt(summaryRow, primaryKeyColIndex).toString();
150       selectedIdsSet.add(searchTerm);
151     }
152
153     for (String idStr : paginatorCart)
154     {
155       selectedIdsSet.add(searchTerm);
156     }
157
158     for (String selectedId : selectedIdsSet)
159     {
160       selectedIds.append(selectedId).append(";");
161     }
162
163     String ids = selectedIds.toString();
164     seqFetcher.setQuery(ids);
165     Thread worker = new Thread(seqFetcher);
166     worker.start();
167     delayAndEnableActionButtons();
168   }
169   
170   @Override
171   public FTSRestClientI getFTSRestClient()
172   {
173     return TDBeaconsFTSRestClient.getInstance();
174   }
175   
176   @Override
177   public String getFTSFrameTitle()
178   {
179     return defaultFTSFrameTitle;
180   }
181
182   @Override
183   public boolean isPaginationEnabled()
184   {
185     return true;
186   }
187
188   @Override
189   public Map<String, Integer> getTempUserPrefs()
190   {
191     return tempUserPrefs;
192   }
193
194   @Override
195   public String getCacheKey()
196   {
197     return THREEDB_FTS_CACHE_KEY;
198   }
199
200   @Override
201   public String getAutosearchPreference()
202   {
203     return THREEDB_AUTOSEARCH;
204   }
205
206   @Override
207   protected void showHelp()
208   {
209     System.out.println("No help implemented yet.");
210     
211   }
212
213 }