X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Ffts%2Fservice%2Funiprot%2FUniProtFTSRestClient.java;fp=src%2Fjalview%2Ffts%2Fservice%2Funiprot%2FUniProtFTSRestClient.java;h=5ee518bc26715d6c7f0cc3fc06971c5d96558b27;hb=8c7fd90d480e2671e0fa251ada3c89fa1d18862a;hp=57689f9cb2acfaf8f1f9a40c6282e2cc93aa4fba;hpb=ea7b9666447dea727e9d607de3694cfe27bc811e;p=jalview.git diff --git a/src/jalview/fts/service/uniprot/UniProtFTSRestClient.java b/src/jalview/fts/service/uniprot/UniProtFTSRestClient.java index 57689f9..5ee518b 100644 --- a/src/jalview/fts/service/uniprot/UniProtFTSRestClient.java +++ b/src/jalview/fts/service/uniprot/UniProtFTSRestClient.java @@ -27,6 +27,7 @@ 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; @@ -49,58 +50,109 @@ public class UniProtFTSRestClient extends FTSRestClient @Override public FTSRestResponse executeRequest(FTSRestRequest uniportRestRequest) + throws Exception { - ClientConfig clientConfig = new DefaultClientConfig(); - Client client = Client.create(clientConfig); + try + { + ClientConfig clientConfig = new DefaultClientConfig(); + Client client = Client.create(clientConfig); - String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(uniportRestRequest - .getWantedFields()); - int responseSize = (uniportRestRequest.getResponseSize() == 0) ? getDefaultResponsePageSize() - : uniportRestRequest.getResponseSize(); + String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(uniportRestRequest + .getWantedFields()); + int responseSize = (uniportRestRequest.getResponseSize() == 0) ? getDefaultResponsePageSize() + : uniportRestRequest.getResponseSize(); - int offSet = (uniportRestRequest.getOffSet() == 0) ? getDefaultResponsePageSize() - : uniportRestRequest.getOffSet(); + int offSet = uniportRestRequest.getOffSet(); + String query; + if (isAdvancedQuery(uniportRestRequest.getSearchTerm())) + { + query = uniportRestRequest.getSearchTerm(); + } + else + { + query = uniportRestRequest.getFieldToSearchBy().equalsIgnoreCase( + "Search All") ? uniportRestRequest.getSearchTerm() + + " or mnemonic:" + uniportRestRequest.getSearchTerm() + : uniportRestRequest.getFieldToSearchBy() + ":" + + uniportRestRequest.getSearchTerm(); + } - String query = uniportRestRequest.getFieldToSearchBy() - .equalsIgnoreCase("Search All") ? uniportRestRequest - .getSearchTerm() - : uniportRestRequest.getFieldToSearchBy() + ":" - + uniportRestRequest.getSearchTerm(); + WebResource webResource = null; + webResource = client.resource(UNIPROT_SEARCH_ENDPOINT) + .queryParam("format", "tab") + .queryParam("columns", wantedFields) + .queryParam("limit", String.valueOf(responseSize)) + .queryParam("offset", String.valueOf(offSet)) + .queryParam("sort", "score").queryParam("query", query); + // Execute the REST request + ClientResponse clientResponse = webResource.accept( + MediaType.TEXT_PLAIN).get(ClientResponse.class); + String uniProtTabDelimittedResponseString = clientResponse + .getEntity(String.class); + // Make redundant objects eligible for garbage collection to conserve + // memory + // System.out.println(">>>>> response : " + // + uniProtTabDelimittedResponseString); + if (clientResponse.getStatus() != 200) + { + String errorMessage = getMessageByHTTPStatusCode( + clientResponse.getStatus(), "Uniprot"); + throw new Exception(errorMessage); - // + (uniportRestRequest.isAllowUnpublishedEntries() ? "" - // : " AND status:REL"); - // System.out.println(">>>>> Query : " + query); - // System.out.println(">>>>> Columns : " + wantedFields); - WebResource webResource = null; - webResource = client.resource(UNIPROT_SEARCH_ENDPOINT) - .queryParam("format", "tab") - .queryParam("columns", wantedFields) - .queryParam("limit", String.valueOf(responseSize)) - .queryParam("offset", String.valueOf(offSet)) - .queryParam("sort", "score") - .queryParam("query", query); - // Execute the REST request - ClientResponse clientResponse = webResource - .accept(MediaType.TEXT_PLAIN).get(ClientResponse.class); - String uniProtTabDelimittedResponseString = clientResponse - .getEntity(String.class); - // Make redundant objects eligible for garbage collection to conserve - // memory - clientResponse = null; - client = null; - // System.out.println(">>>>> response : " - // + uniProtTabDelimittedResponseString); - return parseUniprotResponse(uniProtTabDelimittedResponseString, - uniportRestRequest); + } + int xTotalResults = Integer.valueOf(clientResponse.getHeaders() + .get("X-Total-Results").get(0)); + clientResponse = null; + client = null; + return parseUniprotResponse(uniProtTabDelimittedResponseString, + uniportRestRequest, 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")); + } + else if (exceptionMsg.contains("UnknownHostException")) + { + // The server 'http://www.uniprot.org' is unreachable + throw new Exception(MessageManager.formatMessage( + "exception.fts_server_unreachable", "Uniprot")); + } + else + { + throw e; + } + } + } + public boolean isAdvancedQuery(String query) + { + if (query.contains(" AND ") || query.contains(" OR ") + || query.contains(" NOT ") || query.contains(" ! ") + || query.contains(" || ") || query.contains(" && ") + || query.contains(":") || query.contains("-")) + { + return true; + } + return false; } public FTSRestResponse parseUniprotResponse( String uniProtTabDelimittedResponseString, - FTSRestRequest uniprotRestRequest) + FTSRestRequest uniprotRestRequest, int xTotalResults) { FTSRestResponse searchResult = new FTSRestResponse(); List result = null; + if (uniProtTabDelimittedResponseString == null + || uniProtTabDelimittedResponseString.trim().isEmpty()) + { + searchResult.setNumberOfItemsFound(0); + return searchResult; + } String[] foundDataRow = uniProtTabDelimittedResponseString.split("\n"); if (foundDataRow != null && foundDataRow.length > 0) { @@ -118,7 +170,7 @@ public class UniProtFTSRestClient extends FTSRestClient // System.out.println(dataRow); result.add(getFTSData(dataRow, uniprotRestRequest)); } - searchResult.setNumberOfItemsFound(result.size()); + searchResult.setNumberOfItemsFound(xTotalResults); searchResult.setSearchSummary(result); } return searchResult; @@ -156,6 +208,7 @@ public class UniProtFTSRestClient extends FTSRestClient } return result; } + public static FTSData getFTSData(String tabDelimittedDataStr, FTSRestRequest request) { @@ -185,9 +238,11 @@ public class UniProtFTSRestClient extends FTSRestClient { try { - summaryRowData[colCounter++] = (field.getDataColumnClass() == Integer.class) ? Integer - .valueOf(fieldData) - : (field.getDataColumnClass() == Double.class) ? Double + summaryRowData[colCounter++] = (field.getDataType() + .getDataTypeClass() == Integer.class) ? Integer + .valueOf(fieldData.replace(",", "")) + : (field.getDataType() + .getDataTypeClass() == Double.class) ? Double .valueOf(fieldData) : fieldData; } catch (Exception e) { @@ -242,6 +297,12 @@ public class UniProtFTSRestClient extends FTSRestClient { return Objects.hash(primaryKey1, this.toString()); } + + @Override + public boolean equals(Object that) + { + return this.toString().equals(that.toString()); + } }; }