1 package jalview.fts.service.threedbeacons;
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.net.HttpURLConnection;
7 import java.net.MalformedURLException;
9 import java.util.HashMap;
10 import java.util.HashSet;
13 import org.json.JSONArray;
14 import org.json.JSONObject;
16 import jalview.fts.api.FTSDataColumnI;
17 import jalview.fts.api.FTSRestClientI;
18 import jalview.fts.core.FTSRestRequest;
19 import jalview.fts.core.FTSRestResponse;
20 import jalview.fts.core.GFTSPanel;
21 import jalview.fts.service.pdb.PDBFTSRestClient;
22 import jalview.gui.SequenceFetcher;
23 import jalview.util.MessageManager;
25 @SuppressWarnings("serial")
26 public class TDBeaconsFTSPanel extends GFTSPanel
28 private static String defaultFTSFrameTitle = MessageManager
29 .getString("label.pdb_sequence_fetcher");
31 private static Map<String, Integer> tempUserPrefs = new HashMap<>();
33 private static final String THREEDB_FTS_CACHE_KEY = "CACHE.THREEDB_FTS";
35 private static final String THREEDB_AUTOSEARCH = "FTS.THREEDB.AUTOSEARCH";
37 private static HttpURLConnection connection;
39 public TDBeaconsFTSPanel(SequenceFetcher fetcher)
42 pageLimit = TDBeaconsFTSRestClient.getInstance().getDefaultResponsePageSize();
43 this.seqFetcher = fetcher;
44 this.progressIndicator = (fetcher == null) ? null
45 : fetcher.getProgressIndicator();
48 // public int TDBeaconsFTSPanel2(String result)
50 // int seqlength = executeParse(result);
54 public static int executeParse(String query) {
55 BufferedReader reader;
57 StringBuffer responseContent = new StringBuffer();
59 URL url = new URL("https://wwwdev.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons-hub-api/uniprot/summary/" + query + ".json");
60 connection = (HttpURLConnection) url.openConnection();
61 connection.setRequestMethod("GET");
62 connection.setConnectTimeout(5000); // <=>5seconds
63 connection.setReadTimeout(5000);
64 // Status check up, 200 = connection succesful
65 int status = connection.getResponseCode();
66 // System.out.println(status);
69 reader = new BufferedReader(new InputStreamReader(connection.getErrorStream()));
70 while ((line = reader.readLine()) != null) {
71 responseContent.append(line);
75 reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
76 while ((line = reader.readLine()) != null) {
77 responseContent.append(line);
81 //System.out.println(responseContent.toString());
82 int seq = parse(responseContent.toString());
85 } catch (MalformedURLException e) {
87 } catch (IOException e) {
90 connection.disconnect();
92 return (Integer) null;
96 public static int parse(String jsonString) {
97 JSONObject entry = new JSONObject(jsonString);
98 System.out.println(entry);
99 int length = entry.getJSONObject("uniprot_entry").getInt("sequence_length");
100 String ac = entry.getJSONObject("uniprot_entry").getString("ac");
102 JSONArray structures = entry.getJSONArray("structures");
103 for (int i=0 ; i < structures.length() ; i++) {
104 String id = structures.getJSONObject(i).getString("model_identifier");
105 //System.out.println("identifier num " + i + " : " + id);
107 System.out.println("length : " + length + "; access name : " + ac);
113 public void searchAction(boolean isFreshSearch)
115 mainFrame.requestFocusInWindow();
126 boolean allowEmptySequence = false;
127 if (getTypedText().length() > 0)
129 setSearchInProgress(true);
130 long startTime = System.currentTimeMillis();
132 String searchTarget = ((FTSDataColumnI) cmb_searchTarget
133 .getSelectedItem()).getCode();
134 wantedFields = TDBeaconsFTSRestClient.getInstance()
135 .getAllDefaultDisplayedFTSDataColumns();
136 String searchTerm = getTypedText(); // to add : decodeSearchTerm
138 FTSRestRequest request = new FTSRestRequest();
139 request.setAllowEmptySeq(allowEmptySequence);
140 request.setResponseSize(100);
141 request.setFieldToSearchBy("(" + searchTarget + ":");
142 request.setSearchTerm(searchTerm + ")");
143 request.setOffSet(offSet);
144 request.setWantedFields(wantedFields);
145 FTSRestClientI tdbRestClient = TDBeaconsFTSRestClient.getInstance();
146 FTSRestResponse resultList;
149 resultList = tdbRestClient.executeRequest(request);
150 } catch (Exception e)
152 setErrorMessage(e.getMessage());
154 setSearchInProgress(false);
158 if (resultList.getSearchSummary() != null
159 && resultList.getSearchSummary().size() > 0)
161 getResultTable().setModel(FTSRestResponse.getTableModel(request,
162 resultList.getSearchSummary()));
163 FTSRestResponse.configureTableColumn(getResultTable(),
164 wantedFields, tempUserPrefs);
165 getResultTable().setVisible(true);
168 long endTime = System.currentTimeMillis();
169 totalResultSetCount = resultList.getNumberOfItemsFound();
170 resultSetCount = resultList.getSearchSummary() == null ? 0
171 : resultList.getSearchSummary().size();
172 String result = (resultSetCount > 0)
173 ? MessageManager.getString("label.results")
174 : MessageManager.getString("label.result");
176 if (isPaginationEnabled() && resultSetCount > 0)
178 String f1 = totalNumberformatter.format(Integer.valueOf(offSet + 1));
179 String f2 = totalNumberformatter
180 .format(Integer.valueOf(offSet + resultSetCount));
181 String f3 = totalNumberformatter
182 .format(Integer.valueOf(totalResultSetCount));
183 updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
184 + " " + f1 + " to " + f2 + " of " + f3 + " " + " ("
185 + (endTime - startTime) + " milli secs)");
189 updateSearchFrameTitle(defaultFTSFrameTitle + " - "
190 + resultSetCount + " " + result + " ("
191 + (endTime - startTime) + " milli secs)");
194 setSearchInProgress(false);
195 refreshPaginatorState();
196 updateSummaryTableSelections();
198 txt_search.updateCache();
204 public void okAction()
206 // mainFrame.dispose();
207 disableActionButtons();
208 StringBuilder selectedIds = new StringBuilder();
209 HashSet<String> selectedIdsSet = new HashSet<>();
210 int primaryKeyColIndex = 0;
213 primaryKeyColIndex = getFTSRestClient()
214 .getPrimaryKeyColumIndex(wantedFields, false);
215 } catch (Exception e)
219 int[] selectedRows = getResultTable().getSelectedRows();
220 String searchTerm = getTypedText();
221 for (int summaryRow : selectedRows)
223 String idStr = getResultTable()
224 .getValueAt(summaryRow, primaryKeyColIndex).toString();
225 selectedIdsSet.add(searchTerm);
228 for (String idStr : paginatorCart)
230 selectedIdsSet.add(searchTerm);
233 for (String selectedId : selectedIdsSet)
235 selectedIds.append(selectedId).append(";");
238 String ids = selectedIds.toString();
239 seqFetcher.setQuery(ids);
240 Thread worker = new Thread(seqFetcher);
242 delayAndEnableActionButtons();
246 public FTSRestClientI getFTSRestClient()
248 return TDBeaconsFTSRestClient.getInstance();
252 public String getFTSFrameTitle()
254 return defaultFTSFrameTitle;
258 public boolean isPaginationEnabled()
264 public Map<String, Integer> getTempUserPrefs()
266 return tempUserPrefs;
270 public String getCacheKey()
272 return THREEDB_FTS_CACHE_KEY;
276 public String getAutosearchPreference()
278 return THREEDB_AUTOSEARCH;
282 protected void showHelp()
284 System.out.println("No help implemented yet.");
288 public static String decodeSearchTerm(String enteredText) {
289 // no multiple query support yet