X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Ffts%2Fservice%2Fthreedbeacons%2FTDBeaconsFTSRestClient.java;h=b686c95318d1ff6621be9b0c28db8a923f5c6ea9;hb=1bf6c31ad57e146c40fb46ac471caa0cb3b9b975;hp=655b9603e7d5c178ac155b43e72048f51edd04f7;hpb=ee6eeba9f46c5c157e37fff869d23a6dbfce3b00;p=jalview.git
diff --git a/src/jalview/fts/service/threedbeacons/TDBeaconsFTSRestClient.java b/src/jalview/fts/service/threedbeacons/TDBeaconsFTSRestClient.java
index 655b960..b686c95 100644
--- a/src/jalview/fts/service/threedbeacons/TDBeaconsFTSRestClient.java
+++ b/src/jalview/fts/service/threedbeacons/TDBeaconsFTSRestClient.java
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.fts.service.threedbeacons;
import java.net.URI;
@@ -6,7 +26,6 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import javax.ws.rs.core.MediaType;
@@ -21,25 +40,36 @@ import jalview.datamodel.SequenceI;
import jalview.fts.api.FTSData;
import jalview.fts.api.FTSDataColumnI;
import jalview.fts.api.FTSRestClientI;
+import jalview.fts.api.StructureFTSRestClientI;
+import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
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
+ implements StructureFTSRestClientI
{
- private static final String DEFAULT_THREEDBEACONS_DOMAIN =
- "https://wwwdev.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons-hub-api/uniprot/";
-
- private static FTSRestClientI instance = null;
-
+ /**
+ * production server URI
+ */
+ private static String TDB_PROD_API = "https://www.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/api/uniprot/summary/";
+
+ /**
+ * dev server URI
+ */
+ private static String TDB_DEV_API = "https://wwwdev.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/api/uniprot/summary/";
+
+ private static String DEFAULT_THREEDBEACONS_DOMAIN = TDB_PROD_API;
+
+ public static FTSRestClientI instance = null;
+
protected TDBeaconsFTSRestClient()
- {
+ {
}
-
+
@SuppressWarnings("unchecked")
@Override
public FTSRestResponse executeRequest(FTSRestRequest tdbRestRequest)
@@ -47,8 +77,7 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
{
try
{
- String query = tdbRestRequest.getFieldToSearchBy()
- + tdbRestRequest.getSearchTerm();
+ String query = tdbRestRequest.getSearchTerm();
Client client;
Class clientResponseClass;
if (Platform.isJS())
@@ -60,29 +89,41 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
else
/**
* Java only
+ *
* @j2sIgnore
*/
{
client = Client.create(new DefaultClientConfig());
clientResponseClass = ClientResponse.class;
}
+
WebResource webResource;
- webResource = client.resource(DEFAULT_THREEDBEACONS_DOMAIN)
- .path(query);
+ webResource = client.resource(DEFAULT_THREEDBEACONS_DOMAIN + query);
+
URI uri = webResource.getURI();
System.out.println(uri.toString());
-
+
// Execute the REST request
- ClientResponse clientResponse = webResource
- .accept(MediaType.APPLICATION_JSON).get(clientResponseClass);
-
+ ClientResponse clientResponse;
+ if (isMocked())
+ {
+ clientResponse = null;
+ }
+ else
+ {
+ clientResponse = webResource.accept(MediaType.APPLICATION_JSON)
+ .get(clientResponseClass);
+ }
+
// Get the JSON string from the response object or directly from the
// client (JavaScript)
Map jsonObj = null;
String responseString = null;
-
+
// Check the response status and report exception if one occurs
- int responseStatus = clientResponse.getStatus();
+ int responseStatus = isMocked()
+ ? (mockQueries.containsKey(query) ? 200 : 404)
+ : clientResponse.getStatus();
switch (responseStatus)
{
// if success
@@ -93,91 +134,106 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
}
else
{
- responseString = clientResponse.getEntity(String.class);
+ responseString = isMocked() ? mockQueries.get(query)
+ : clientResponse.getEntity(String.class);
}
break;
case 400:
throw new Exception(parseJsonExceptionString(responseString));
+ case 404:
+ return emptyTDBeaconsJsonResponse();
default:
throw new Exception(
getMessageByHTTPStatusCode(responseStatus, "3DBeacons"));
}
// Process the response and return the result to the caller.
- return parseTDBeaconsJsonResponse(responseString, jsonObj, tdbRestRequest);
+ 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
+ if (exceptionMsg != null)
{
- throw e;
+ 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"));
+ }
}
+ throw e;
+
}
-
+
+ }
+
+ /**
+ * returns response for when the 3D-Beacons service doesn't have a record for
+ * the given query - in 2.11.2 this triggers a failover to the PDBe FTS
+ *
+ * @return null
+ */
+ private FTSRestResponse emptyTDBeaconsJsonResponse()
+ {
+ return null;
}
-
- public String setSearchTerm(String term) {
+
+ public String setSearchTerm(String term)
+ {
return term;
}
-
+
public static FTSRestResponse parseTDBeaconsJsonResponse(
String tdbJsonResponseString, FTSRestRequest tdbRestRequest)
{
return parseTDBeaconsJsonResponse(tdbJsonResponseString,
(Map) null, tdbRestRequest);
}
-
+
@SuppressWarnings("unchecked")
- public static FTSRestResponse parseTDBeaconsJsonResponse(String tdbJsonResponseString,
- Map jsonObj, FTSRestRequest tdbRestRequest)
+ public static FTSRestResponse parseTDBeaconsJsonResponse(
+ String tdbJsonResponseString, Map jsonObj,
+ FTSRestRequest tdbRestRequest)
{
FTSRestResponse searchResult = new FTSRestResponse();
List result = null;
-
+
try
{
if (jsonObj == null)
{
- jsonObj = (Map) JSONUtils.parse(tdbJsonResponseString);
+ jsonObj = (Map) JSONUtils
+ .parse(tdbJsonResponseString);
}
- //System.out.println(jsonObj);
-
- Object uniprot_entry = jsonObj.get("uniprot_entry");
- System.out.println(uniprot_entry);
-
- Long seqLength = (Long) ((Map) jsonObj.get("uniprot_entry")).get("sequence_length");
- System.out.println("seqLenght :" + seqLength);
-
- result = new ArrayList<>();
+
+ Object uniprot_entry = jsonObj.get("uniprot_entry");
+ // TODO: decide if anything from uniprot_entry needs to be reported via
+ // the FTSRestResponse object
+ // Arnaud added seqLength = (Long) ((Map)
+ // jsonObj.get("uniprot_entry")).get("sequence_length");
+
List