X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=src%2Fjalview%2Ffts%2Fservice%2Funiprot%2FUniProtFTSRestClient.java;h=2606b628b01a694d7347c3a1d3144480c0cf0de0;hp=dfdf7158489926487c47986fc9e1f2f96ca37fba;hb=8879d902c46cd33cfe201fcbd96e87d33b89259f;hpb=479c44e27a46c7cbee33e293dbc38cbca4fd2e0b diff --git a/src/jalview/fts/service/uniprot/UniProtFTSRestClient.java b/src/jalview/fts/service/uniprot/UniProtFTSRestClient.java index dfdf715..2606b62 100644 --- a/src/jalview/fts/service/uniprot/UniProtFTSRestClient.java +++ b/src/jalview/fts/service/uniprot/UniProtFTSRestClient.java @@ -21,14 +21,6 @@ package jalview.fts.service.uniprot; -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.util.MessageManager; - import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -39,54 +31,106 @@ import javax.ws.rs.core.MediaType; 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; +import jalview.bin.Cache; +import jalview.bin.Console; +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.util.MessageManager; +import jalview.util.Platform; + public class UniProtFTSRestClient extends FTSRestClient { + private static final String DEFAULT_UNIPROT_DOMAIN = "https://legacy.uniprot.org"; + + static + { + Platform.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/"; + } + @SuppressWarnings("unchecked") @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( + uniprotRestRequest.getWantedFields()); + int responseSize = (uniprotRestRequest.getResponseSize() == 0) + ? getDefaultResponsePageSize() + : uniprotRestRequest.getResponseSize(); - String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(uniportRestRequest - .getWantedFields()); - int responseSize = (uniportRestRequest.getResponseSize() == 0) ? getDefaultResponsePageSize() - : uniportRestRequest.getResponseSize(); - - int offSet = uniportRestRequest.getOffSet(); + int offSet = uniprotRestRequest.getOffSet(); String query; - if (isAdvancedQuery(uniportRestRequest.getSearchTerm())) + if (isAdvancedQuery(uniprotRestRequest.getSearchTerm())) + { + query = uniprotRestRequest.getSearchTerm(); + } + else + { + query = uniprotRestRequest.getFieldToSearchBy() + .equalsIgnoreCase("Search All") + ? uniprotRestRequest.getSearchTerm() + + " or mnemonic:" + + 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 clientResponseClass; + if (Platform.isJS()) { - query = uniportRestRequest.getSearchTerm(); + // JavaScript only -- coerce types to Java types for Java + client = (Client) (Object) new jalview.javascript.web.Client(); + clientResponseClass = (Class) (Object) jalview.javascript.web.ClientResponse.class; } else + /** + * Java only + * + * @j2sIgnore + */ { - query = uniportRestRequest.getFieldToSearchBy().equalsIgnoreCase( - "Search All") ? uniportRestRequest.getSearchTerm() - + " or mnemonic:" + uniportRestRequest.getSearchTerm() - : uniportRestRequest.getFieldToSearchBy() + ":" - + uniportRestRequest.getSearchTerm(); + // 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("offset", String.valueOf(offSet)) .queryParam("sort", "score").queryParam("query", query); + if (Console.isDebugEnabled()) + { + Console.debug("Uniprot FTS Request: " + webResource.toString()); + } // Execute the REST request - ClientResponse clientResponse = webResource.accept( - MediaType.TEXT_PLAIN).get(ClientResponse.class); + ClientResponse clientResponse = webResource + .accept(MediaType.TEXT_PLAIN).get(clientResponseClass); String uniProtTabDelimittedResponseString = clientResponse .getEntity(String.class); // Make redundant objects eligible for garbage collection to conserve @@ -100,21 +144,21 @@ public class UniProtFTSRestClient extends FTSRestClient 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(); if (exceptionMsg.contains("SocketException")) { // No internet connection - throw new Exception( - MessageManager - .getString("exception.unable_to_detect_internet_connection")); + throw new Exception(MessageManager.getString( + "exception.unable_to_detect_internet_connection")); } else if (exceptionMsg.contains("UnknownHostException")) { @@ -156,15 +200,15 @@ public class UniProtFTSRestClient extends FTSRestClient String[] foundDataRow = uniProtTabDelimittedResponseString.split("\n"); if (foundDataRow != null && foundDataRow.length > 0) { - result = new ArrayList(); - String titleRow = getDataColumnsFieldsAsTabDelimitedString(uniprotRestRequest - .getWantedFields()); - // System.out.println(">>>>Title row : " + titleRow); + result = new ArrayList<>(); + boolean firstRow = true; for (String dataRow : foundDataRow) { - if (dataRow.equalsIgnoreCase(titleRow)) + // The first data row is usually the header data. This should be + // filtered out from the rest of the data See: JAL-2485 + if (firstRow) { - // System.out.println(">>>>>>>>>> matched!!!"); + firstRow = false; continue; } // System.out.println(dataRow); @@ -176,38 +220,39 @@ public class UniProtFTSRestClient extends FTSRestClient return searchResult; } - /** - * Takes a collection of FTSDataColumnI and converts its 'code' values into a - * tab delimited string. - * - * @param dataColumnFields - * the collection of FTSDataColumnI to process - * @return the generated comma delimited string from the supplied - * FTSDataColumnI collection - */ - private String getDataColumnsFieldsAsTabDelimitedString( - Collection dataColumnFields) - { - String result = ""; - if (dataColumnFields != null && !dataColumnFields.isEmpty()) - { - StringBuilder returnedFields = new StringBuilder(); - for (FTSDataColumnI field : dataColumnFields) - { - if (field.getName().equalsIgnoreCase("Uniprot Id")) - { - returnedFields.append("\t").append("Entry"); - } - else - { - returnedFields.append("\t").append(field.getName()); - } - } - returnedFields.deleteCharAt(0); - result = returnedFields.toString(); - } - return result; - } + // /** + // * Takes a collection of FTSDataColumnI and converts its 'code' values into + // a + // * tab delimited string. + // * + // * @param dataColumnFields + // * the collection of FTSDataColumnI to process + // * @return the generated comma delimited string from the supplied + // * FTSDataColumnI collection + // */ + // private String getDataColumnsFieldsAsTabDelimitedString( + // Collection dataColumnFields) + // { + // String result = ""; + // if (dataColumnFields != null && !dataColumnFields.isEmpty()) + // { + // StringBuilder returnedFields = new StringBuilder(); + // for (FTSDataColumnI field : dataColumnFields) + // { + // if (field.getName().equalsIgnoreCase("Uniprot Id")) + // { + // returnedFields.append("\t").append("Entry"); + // } + // else + // { + // returnedFields.append("\t").append(field.getName()); + // } + // } + // returnedFields.deleteCharAt(0); + // result = returnedFields.toString(); + // } + // return result; + // } public static FTSData getFTSData(String tabDelimittedDataStr, FTSRestRequest request) @@ -239,15 +284,16 @@ public class UniProtFTSRestClient extends FTSRestClient try { summaryRowData[colCounter++] = (field.getDataType() - .getDataTypeClass() == Integer.class) ? Integer - .valueOf(fieldData) - : (field.getDataType() - .getDataTypeClass() == Double.class) ? Double - .valueOf(fieldData) : fieldData; + .getDataTypeClass() == Integer.class) + ? Integer.valueOf(fieldData.replace(",", "")) + : (field.getDataType() + .getDataTypeClass() == Double.class) + ? Double.valueOf(fieldData) + : fieldData; } catch (Exception e) { e.printStackTrace(); - System.out.println("offending value:" + fieldData); + System.out.println("offending value:" + fieldData); } } } catch (Exception e) @@ -306,7 +352,6 @@ public class UniProtFTSRestClient extends FTSRestClient }; } - public static FTSRestClientI getInstance() { if (instance == null)