package jalview.fts.service.uniprot;
+import jalview.bin.Cache;
import jalview.fts.api.FTSData;
import jalview.fts.api.FTSDataColumnI;
import jalview.fts.api.FTSRestClientI;
import jalview.fts.core.FTSRestRequest;
import jalview.fts.core.FTSRestResponse;
import jalview.util.MessageManager;
+import jalview.util.Platform;
import java.util.ArrayList;
import java.util.Collection;
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.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class UniProtFTSRestClient extends FTSRestClient
{
+ private static final String DEFAULT_UNIPROT_DOMAIN = "https://www.uniprot.org";
+
+ static {
+ Cache.addJ2SDirectDatabaseCall(DEFAULT_UNIPROT_DOMAIN);
+ }
+
private static FTSRestClientI instance = null;
- public static final String UNIPROT_SEARCH_ENDPOINT = "http://www.uniprot.org/uniprot/?";
+ public final String uniprotSearchEndpoint;
+
+ public UniProtFTSRestClient()
+ {
+ super();
+ uniprotSearchEndpoint = Cache.getDefault("UNIPROT_DOMAIN",
+ DEFAULT_UNIPROT_DOMAIN) + "/uniprot/";
+ }
@Override
- public FTSRestResponse executeRequest(FTSRestRequest uniportRestRequest)
+ public FTSRestResponse executeRequest(FTSRestRequest uniprotRestRequest)
throws Exception
{
try
{
- ClientConfig clientConfig = new DefaultClientConfig();
- Client client = Client.create(clientConfig);
-
String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(
- uniportRestRequest.getWantedFields());
- int responseSize = (uniportRestRequest.getResponseSize() == 0)
+ uniprotRestRequest.getWantedFields());
+ int responseSize = (uniprotRestRequest.getResponseSize() == 0)
? getDefaultResponsePageSize()
- : uniportRestRequest.getResponseSize();
+ : uniprotRestRequest.getResponseSize();
- int offSet = uniportRestRequest.getOffSet();
+ int offSet = uniprotRestRequest.getOffSet();
String query;
- if (isAdvancedQuery(uniportRestRequest.getSearchTerm()))
+ if (isAdvancedQuery(uniprotRestRequest.getSearchTerm()))
{
- query = uniportRestRequest.getSearchTerm();
+ query = uniprotRestRequest.getSearchTerm();
}
else
{
- query = uniportRestRequest.getFieldToSearchBy()
+ query = uniprotRestRequest.getFieldToSearchBy()
.equalsIgnoreCase("Search All")
- ? uniportRestRequest.getSearchTerm()
+ ? uniprotRestRequest.getSearchTerm()
+ " or mnemonic:"
- + uniportRestRequest.getSearchTerm()
- : uniportRestRequest.getFieldToSearchBy() + ":"
- + uniportRestRequest.getSearchTerm();
+ + uniprotRestRequest.getSearchTerm()
+ : uniprotRestRequest.getFieldToSearchBy() + ":"
+ + uniprotRestRequest.getSearchTerm();
+ }
+
+ // BH 2018 the trick here is to coerce the classes in Javascript to be
+ // different from the ones in Java yet still allow this to be correct for
+ // Java
+ Client client;
+ Class<ClientResponse> clientResponseClass;
+ if (Platform.isJS())
+ {
+ // JavaScript only -- coerce types to Java types for Java
+ client = (Client) (Object) new jalview.javascript.web.Client();
+ clientResponseClass = (Class<ClientResponse>) (Object) jalview.javascript.web.ClientResponse.class;
+ }
+ else
+ /**
+ * Java only
+ *
+ * @j2sNative
+ */
+ {
+ // Java only
+ client = Client.create(new DefaultClientConfig());
+ clientResponseClass = ClientResponse.class;
}
WebResource webResource = null;
- webResource = client.resource(UNIPROT_SEARCH_ENDPOINT)
+ webResource = client.resource(uniprotSearchEndpoint)
.queryParam("format", "tab")
.queryParam("columns", wantedFields)
.queryParam("limit", String.valueOf(responseSize))
.queryParam("sort", "score").queryParam("query", query);
// Execute the REST request
ClientResponse clientResponse = webResource
- .accept(MediaType.TEXT_PLAIN).get(ClientResponse.class);
+ .accept(MediaType.TEXT_PLAIN).get(clientResponseClass);
String uniProtTabDelimittedResponseString = clientResponse
.getEntity(String.class);
// Make redundant objects eligible for garbage collection to conserve
throw new Exception(errorMessage);
}
- int xTotalResults = Integer.valueOf(
- clientResponse.getHeaders().get("X-Total-Results").get(0));
+ int xTotalResults = Platform.isJS() ? 1
+ : Integer.valueOf(clientResponse.getHeaders()
+ .get("X-Total-Results").get(0));
clientResponse = null;
client = null;
return parseUniprotResponse(uniProtTabDelimittedResponseString,
- uniportRestRequest, xTotalResults);
+ uniprotRestRequest, xTotalResults);
} catch (Exception e)
{
String exceptionMsg = e.getMessage();
String[] foundDataRow = uniProtTabDelimittedResponseString.split("\n");
if (foundDataRow != null && foundDataRow.length > 0)
{
- result = new ArrayList<FTSData>();
+ result = new ArrayList<>();
boolean firstRow = true;
for (String dataRow : foundDataRow)
{