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;
@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 = uniportRestRequest.getFieldToSearchBy()
- .equalsIgnoreCase("Search All") ? uniportRestRequest
- .getSearchTerm()
- : uniportRestRequest.getFieldToSearchBy() + ":"
- + uniportRestRequest.getSearchTerm();
+ String query = uniportRestRequest.getFieldToSearchBy()
+ .equalsIgnoreCase("Search All") ? uniportRestRequest
+ .getSearchTerm() : uniportRestRequest.getFieldToSearchBy()
+ + ":" + uniportRestRequest.getSearchTerm();
- // + (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);
+ // + (uniportRestRequest.isAllowUnpublishedEntries() ? ""
+ // : " AND status:REL");
+ // System.out.println(">>>>> Query : " + query);
+ // System.out.println(">>>>> Columns : " + wantedFields);
+ // System.out.println(">>>>> Response size: " + responseSize
+ // + " offset : "
+ // + offSet);
+ 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);
+ }
+ 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 FTSRestResponse parseUniprotResponse(
String uniProtTabDelimittedResponseString,
- FTSRestRequest uniprotRestRequest)
+ FTSRestRequest uniprotRestRequest, int xTotalResults)
{
FTSRestResponse searchResult = new FTSRestResponse();
List<FTSData> result = null;
+ if (uniProtTabDelimittedResponseString == null
+ || uniProtTabDelimittedResponseString.trim().isEmpty())
+ {
+ searchResult.setNumberOfItemsFound(0);
+ return searchResult;
+ }
String[] foundDataRow = uniProtTabDelimittedResponseString.split("\n");
if (foundDataRow != null && foundDataRow.length > 0)
{
// System.out.println(dataRow);
result.add(getFTSData(dataRow, uniprotRestRequest));
}
- searchResult.setNumberOfItemsFound(result.size());
+ searchResult.setNumberOfItemsFound(xTotalResults);
searchResult.setSearchSummary(result);
}
return searchResult;
}
return result;
}
+
public static FTSData getFTSData(String tabDelimittedDataStr,
FTSRestRequest request)
{
{
return Objects.hash(primaryKey1, this.toString());
}
+
+ @Override
+ public boolean equals(Object that)
+ {
+ return this.toString().equals(that.toString());
+ }
};
}