--- /dev/null
+package jalview.fts.service.threedbeacons;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.fts.core.GFTSPanel;
+import jalview.fts.service.pdb.PDBFTSRestClient;
+import jalview.gui.SequenceFetcher;
+import jalview.util.MessageManager;
+
+@SuppressWarnings("serial")
+public class TDBeaconsFTSPanel extends GFTSPanel
+{
+ private static String defaultFTSFrameTitle = MessageManager
+ .getString("label.threedb_sequence_fetcher");
+
+ private static Map<String, Integer> tempUserPrefs = new HashMap<>();
+
+ private static final String THREEDB_FTS_CACHE_KEY = "CACHE.THREEDB_FTS";
+
+ private static final String THREEDB_AUTOSEARCH = "FTS.THREEDB.AUTOSEARCH";
+
+ public TDBeaconsFTSPanel(SequenceFetcher fetcher)
+ {
+ super(fetcher);
+ pageLimit = TDBeaconsFTSRestClient.getInstance().getDefaultResponsePageSize();
+ this.seqFetcher = fetcher;
+ this.progressIndicator = (fetcher == null) ? null
+ : fetcher.getProgressIndicator();
+ }
+
+ @Override
+ public void searchAction(boolean isFreshSearch)
+ {
+ mainFrame.requestFocusInWindow();
+ if (isFreshSearch)
+ {
+ offSet = 0;
+ }
+ new Thread()
+ {
+ @Override
+ public void run()
+ {
+ reset();
+ boolean allowEmptySequence = false;
+ if (getTypedText().length() > 0)
+ {
+ setSearchInProgress(true);
+ long startTime = System.currentTimeMillis();
+
+ String searchTarget = ((FTSDataColumnI) cmb_searchTarget
+ .getSelectedItem()).getCode();
+ wantedFields = TDBeaconsFTSRestClient.getInstance()
+ .getAllDefaultDisplayedFTSDataColumns();
+ String searchTerm = getTypedText(); // to add : decodeSearchTerm
+
+ FTSRestRequest request = new FTSRestRequest();
+ request.setAllowEmptySeq(allowEmptySequence);
+ request.setResponseSize(100);
+ request.setFieldToSearchBy("(" + searchTarget + ":");
+ request.setSearchTerm(searchTerm + ")");
+ request.setOffSet(offSet);
+ request.setWantedFields(wantedFields);
+ FTSRestClientI tdbRestClient = TDBeaconsFTSRestClient.getInstance();
+ FTSRestResponse resultList;
+ try
+ {
+ resultList = tdbRestClient.executeRequest(request);
+ } catch (Exception e)
+ {
+ setErrorMessage(e.getMessage());
+ checkForErrors();
+ setSearchInProgress(false);
+ return;
+ }
+
+ if (resultList.getSearchSummary() != null
+ && resultList.getSearchSummary().size() > 0)
+ {
+ getResultTable().setModel(FTSRestResponse.getTableModel(request,
+ resultList.getSearchSummary()));
+ FTSRestResponse.configureTableColumn(getResultTable(),
+ wantedFields, tempUserPrefs);
+ getResultTable().setVisible(true);
+ }
+
+ long endTime = System.currentTimeMillis();
+ totalResultSetCount = resultList.getNumberOfItemsFound();
+ resultSetCount = resultList.getSearchSummary() == null ? 0
+ : resultList.getSearchSummary().size();
+ String result = (resultSetCount > 0)
+ ? MessageManager.getString("label.results")
+ : MessageManager.getString("label.result");
+
+ if (isPaginationEnabled() && resultSetCount > 0)
+ {
+ String f1 = totalNumberformatter.format(Integer.valueOf(offSet + 1));
+ String f2 = totalNumberformatter
+ .format(Integer.valueOf(offSet + resultSetCount));
+ String f3 = totalNumberformatter
+ .format(Integer.valueOf(totalResultSetCount));
+ updateSearchFrameTitle(defaultFTSFrameTitle + " - " + result
+ + " " + f1 + " to " + f2 + " of " + f3 + " " + " ("
+ + (endTime - startTime) + " milli secs)");
+ }
+ else
+ {
+ updateSearchFrameTitle(defaultFTSFrameTitle + " - "
+ + resultSetCount + " " + result + " ("
+ + (endTime - startTime) + " milli secs)");
+ }
+
+ setSearchInProgress(false);
+ refreshPaginatorState();
+ updateSummaryTableSelections();
+ }
+ txt_search.updateCache();
+ }
+ }.start();
+ }
+
+ @Override
+ public void okAction()
+ {
+ // mainFrame.dispose();
+ disableActionButtons();
+ StringBuilder selectedIds = new StringBuilder();
+ HashSet<String> selectedIdsSet = new HashSet<>();
+ int primaryKeyColIndex = 0;
+ try
+ {
+ primaryKeyColIndex = getFTSRestClient()
+ .getPrimaryKeyColumIndex(wantedFields, false);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ int[] selectedRows = getResultTable().getSelectedRows();
+ String searchTerm = getTypedText();
+ for (int summaryRow : selectedRows)
+ {
+ String idStr = getResultTable()
+ .getValueAt(summaryRow, primaryKeyColIndex).toString();
+ selectedIdsSet.add(searchTerm);
+ }
+
+ for (String idStr : paginatorCart)
+ {
+ selectedIdsSet.add(searchTerm);
+ }
+
+ for (String selectedId : selectedIdsSet)
+ {
+ selectedIds.append(selectedId).append(";");
+ }
+
+ String ids = selectedIds.toString();
+ seqFetcher.setQuery(ids);
+ Thread worker = new Thread(seqFetcher);
+ worker.start();
+ delayAndEnableActionButtons();
+ }
+
+ @Override
+ public FTSRestClientI getFTSRestClient()
+ {
+ return TDBeaconsFTSRestClient.getInstance();
+ }
+
+ @Override
+ public String getFTSFrameTitle()
+ {
+ return defaultFTSFrameTitle;
+ }
+
+ @Override
+ public boolean isPaginationEnabled()
+ {
+ return true;
+ }
+
+ @Override
+ public Map<String, Integer> getTempUserPrefs()
+ {
+ return tempUserPrefs;
+ }
+
+ @Override
+ public String getCacheKey()
+ {
+ return THREEDB_FTS_CACHE_KEY;
+ }
+
+ @Override
+ public String getAutosearchPreference()
+ {
+ return THREEDB_AUTOSEARCH;
+ }
+
+ @Override
+ protected void showHelp()
+ {
+ System.out.println("No help implemented yet.");
+
+ }
+
+}
--- /dev/null
+package jalview.fts.service.threedbeacons;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.core.MediaType;
+
+import org.json.simple.parser.ParseException;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+
+import jalview.datamodel.SequenceI;
+import jalview.fts.api.FTSData;
+import jalview.fts.api.FTSDataColumnI;
+import jalview.fts.api.FTSRestClientI;
+import jalview.fts.core.FTSRestClient;
+import jalview.fts.core.FTSRestRequest;
+import jalview.fts.core.FTSRestResponse;
+import jalview.fts.service.pdb.PDBFTSRestClient;
+import jalview.util.JSONUtils;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+
+public class TDBeaconsFTSRestClient extends FTSRestClient
+{
+ private static final String DEFAULT_THREEDBEACONS_DOMAIN =
+ "https://wwwdev.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons-hub-api/uniprot/";
+
+ private static FTSRestClientI instance = null;
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public FTSRestResponse executeRequest(FTSRestRequest tdbRestRequest)
+ throws Exception
+ {
+ try
+ {
+ // Removed wantedFields, sortParam & facetPivot from PDBFTSRClient
+
+ int responseSize = (tdbRestRequest.getResponseSize() == 0)
+ ? getDefaultResponsePageSize()
+ : tdbRestRequest.getResponseSize();
+
+ String query = tdbRestRequest.getFieldToSearchBy()
+ + tdbRestRequest.getSearchTerm();
+ Client client;
+ Class<ClientResponse> clientResponseClass;
+ if (Platform.isJS())
+ {
+ // JavaScript only
+ client = (Client) (Object) new jalview.javascript.web.Client();
+ clientResponseClass = (Class<ClientResponse>) (Object) jalview.javascript.web.ClientResponse.class;
+ }
+ else
+ /**
+ * Java only
+ * @j2sIgnore
+ */
+ {
+ client = Client.create(new DefaultClientConfig());
+ clientResponseClass = ClientResponse.class;
+ }
+ WebResource webResource;
+ webResource = client.resource(DEFAULT_THREEDBEACONS_DOMAIN);
+ URI uri = webResource.getURI();
+
+ System.out.println(uri);
+
+ // Execute the REST request
+ ClientResponse clientResponse = webResource
+ .accept(MediaType.APPLICATION_JSON).get(clientResponseClass);
+
+ // Get the JSON string from the response object or directly from the
+ // client (JavaScript)
+ Map<String, Object> jsonObj = null;
+ String responseString = null;
+
+ System.out.println("query >>>>>>> " + tdbRestRequest.toString());
+
+ // Check the response status and report exception if one occurs
+ int responseStatus = clientResponse.getStatus();
+ switch (responseStatus)
+ {
+ // if succesful
+ case 200:
+ if (Platform.isJS())
+ {
+ jsonObj = clientResponse.getEntity(Map.class);
+ }
+ else
+ {
+ responseString = clientResponse.getEntity(String.class);
+ }
+ break;
+ case 400:
+ throw new Exception(parseJsonExceptionString(responseString));
+ default:
+ throw new Exception(
+ getMessageByHTTPStatusCode(responseStatus, "3DBeacons"));
+ }
+ // Process the response and return the result to the caller.
+ return parseTDBeaconsJsonResponse(responseString, jsonObj, tdbRestRequest);
+ } catch (Exception e)
+ {
+ String exceptionMsg = e.getMessage();
+ if (exceptionMsg.contains("SocketException"))
+ {
+ // No internet connection
+ throw new Exception(MessageManager.getString(
+ "exception.unable_to_detect_internet_connection"));
+ }
+ else if (exceptionMsg.contains("UnknownHostException"))
+ {
+ // The server is unreachable
+ throw new Exception(MessageManager.formatMessage(
+ "exception.fts_server_unreachable", "3DB Hub"));
+ }
+ else
+ {
+ throw e;
+ }
+ }
+
+ }
+
+ public static FTSRestResponse parseTDBeaconsJsonResponse(
+ String tdbJsonResponseString, FTSRestRequest tdbRestRequest)
+ {
+ return parseTDBeaconsJsonResponse(tdbJsonResponseString,
+ (Map<String, Object>) null, tdbRestRequest);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static FTSRestResponse parseTDBeaconsJsonResponse(String tdbJsonResponseString,
+ Map<String, Object> jsonObj, FTSRestRequest tdbRestRequest)
+ {
+ FTSRestResponse searchResult = new FTSRestResponse();
+ //searchResult.setNumberOfItemsFound(1);
+ List<FTSData> result = null;
+
+ try
+ {
+ if (jsonObj == null)
+ {
+ jsonObj = (Map<String, Object>) JSONUtils.parse(tdbJsonResponseString);
+ }
+ Map<String, Object> tdbEntry = (Map<String, Object>) jsonObj.get("uniprot_entry");
+ //String seqLength = tdbEntry.get("sequence_length").toString();
+ int seqLength = Integer.valueOf(tdbEntry.get("sequence_length").toString());
+
+ // tdbStructures is the list of found structures
+// Map<String, Object> tdbStructures = (Map<String, Object>) jsonObj.get("structures");
+ Object[] structures = (Object[]) jsonObj.get("structures");
+ String accessName = ((Map<String, Object>) jsonObj.get("uniprot_entry"))
+ .get("ac").toString();
+ // this is to be modified
+ int numFound = structures.length;
+// if (numFound > 0)
+// {
+//
+// result = new ArrayList<>();
+// List<String> models;
+// //= ((Map<String, Object>) jsonObj.get("structures"))
+// //.get("model_identifier").toString();
+// for (Iterator<String> modelsIter = models.iterator(); modelsIter.hasNext();)
+// .hasNext();)
+// {
+// Map<String, Object> doc = (Map<String, Object>) docIter.next();
+// result.add(getFTSData(doc, tdbRestRequest));
+// }
+ searchResult.setNumberOfItemsFound(numFound);
+ // searchResult.setAccessionName(accessName); ?usefulness?
+// searchResult.setSearchSummary(result);
+//
+// }
+ } catch (ParseException e)
+ {
+ e.printStackTrace();
+ }
+ return searchResult;
+ }
+
+// private static FTSData getFTSData(Map<String, Object> doc,
+// FTSRestRequest tdbRestRequest)
+// {
+// String primaryKey = null;
+//
+// Object[] summaryRowData;
+//
+// Collection<FTSDataColumnI> displayFields = tdbRestRequest.getWantedFields();
+// int colCounter = 0;
+// summaryRowData = new Object[displayFields.size() + 1];
+//
+// return null;
+// }
+
+ private String parseJsonExceptionString(String jsonErrorString)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getColumnDataConfigFileName()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static FTSRestClientI getInstance()
+ {
+ if (instance == null)
+ {
+ instance = new TDBeaconsFTSRestClient();
+ }
+ return instance;
+ }
+
+ private Collection<FTSDataColumnI> allDefaultDisplayedStructureDataColumns;
+
+ public Collection<FTSDataColumnI> getAllDefaultDisplayedStructureDataColumns()
+ {
+ if (allDefaultDisplayedStructureDataColumns == null
+ || allDefaultDisplayedStructureDataColumns.isEmpty())
+ {
+ allDefaultDisplayedStructureDataColumns = new ArrayList<>();
+ allDefaultDisplayedStructureDataColumns
+ .addAll(super.getAllDefaultDisplayedFTSDataColumns());
+ }
+ return allDefaultDisplayedStructureDataColumns;
+ }
+
+}