import com.sun.jersey.api.client.config.DefaultClientConfig;
/**
- * A rest client for querying the Search endpoint of the PDB REST API
+ * A rest client for querying the Search endpoint of the PDB API
*
* @author tcnofoegbu
*
public static final String PDB_SEARCH_ENDPOINT = "http://www.ebi.ac.uk/pdbe/search/pdb/select?";
- private static int DEFAULT_RESPONSE_SIZE = 200;
-
protected PDBFTSRestClient()
{
}
ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);
- String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(pdbRestRequest
- .getWantedFields());
- int responseSize = (pdbRestRequest.getResponseSize() == 0) ? DEFAULT_RESPONSE_SIZE
+ String wantedFields = getDataColumnsFieldsAsCommaDelimitedString(
+ pdbRestRequest.getWantedFields());
+ int responseSize = (pdbRestRequest.getResponseSize() == 0)
+ ? getDefaultResponsePageSize()
: pdbRestRequest.getResponseSize();
+ int offSet = pdbRestRequest.getOffSet();
String sortParam = null;
if (pdbRestRequest.getFieldToSortBy() == null
|| pdbRestRequest.getFieldToSortBy().trim().isEmpty())
}
}
- String facetPivot = (pdbRestRequest.getFacetPivot() == null || pdbRestRequest
- .getFacetPivot().isEmpty()) ? "" : pdbRestRequest
- .getFacetPivot();
- String facetPivotMinCount = String.valueOf(pdbRestRequest
- .getFacetPivotMinCount());
+ String facetPivot = (pdbRestRequest.getFacetPivot() == null
+ || pdbRestRequest.getFacetPivot().isEmpty()) ? ""
+ : pdbRestRequest.getFacetPivot();
+ String facetPivotMinCount = String
+ .valueOf(pdbRestRequest.getFacetPivotMinCount());
String query = pdbRestRequest.getFieldToSearchBy()
+ pdbRestRequest.getSearchTerm()
.queryParam("wt", "json").queryParam("fl", wantedFields)
.queryParam("rows", String.valueOf(responseSize))
.queryParam("q", query)
+ .queryParam("start", String.valueOf(offSet))
.queryParam("sort", sortParam).queryParam("facet", "true")
.queryParam("facet.pivot", facetPivot)
.queryParam("facet.pivot.mincount", facetPivotMinCount);
webResource = client.resource(PDB_SEARCH_ENDPOINT)
.queryParam("wt", "json").queryParam("fl", wantedFields)
.queryParam("rows", String.valueOf(responseSize))
- .queryParam("q", query)
- .queryParam("sort", sortParam);
+ .queryParam("start", String.valueOf(offSet))
+ .queryParam("q", query).queryParam("sort", sortParam);
}
// Execute the REST request
- ClientResponse clientResponse = webResource.accept(
- MediaType.APPLICATION_JSON).get(ClientResponse.class);
+ ClientResponse clientResponse = webResource
+ .accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
// Get the JSON string from the response object
String responseString = clientResponse.getEntity(String.class);
}
else
{
- errorMessage = getMessageByHTTPStatusCode(clientResponse
- .getStatus());
+ errorMessage = getMessageByHTTPStatusCode(
+ clientResponse.getStatus(), "PDB");
throw new Exception(errorMessage);
}
}
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"))
{
// The server 'www.ebi.ac.uk' is unreachable
- throw new Exception(
- MessageManager
- .getString("exception.pdb_server_unreachable"));
+ throw new Exception(MessageManager.formatMessage(
+ "exception.fts_server_unreachable", "PDB Solr"));
}
else
{
}
}
- public String getMessageByHTTPStatusCode(int code)
- {
- String message = "";
- switch (code)
- {
- case 410:
- message = MessageManager
- .getString("exception.pdb_rest_service_no_longer_available");
- break;
- case 403:
- case 404:
- message = MessageManager.getString("exception.resource_not_be_found");
- break;
- case 408:
- case 409:
- case 500:
- case 501:
- case 502:
- case 503:
- case 504:
- case 505:
- message = MessageManager.getString("exception.pdb_server_error");
- break;
-
- default:
- break;
- }
- return message;
- }
-
/**
* Process error response from PDB server if/when one occurs.
*
.parse(pdbJsonResponseString);
JSONObject pdbResponse = (JSONObject) jsonObj.get("response");
- String queryTime = ((JSONObject) jsonObj.get("responseHeader")).get(
- "QTime").toString();
+ String queryTime = ((JSONObject) jsonObj.get("responseHeader"))
+ .get("QTime").toString();
int numFound = Integer
.valueOf(pdbResponse.get("numFound").toString());
if (numFound > 0)
Collection<FTSDataColumnI> diplayFields = request.getWantedFields();
SequenceI associatedSeq = request.getAssociatedSequence();
int colCounter = 0;
- summaryRowData = new Object[(associatedSeq != null) ? diplayFields
- .size() + 1 : diplayFields.size()];
+ summaryRowData = new Object[(associatedSeq != null)
+ ? diplayFields.size() + 1
+ : diplayFields.size()];
if (associatedSeq != null)
{
associatedSequence = associatedSeq;
primaryKey = fieldData;
summaryRowData[colCounter++] = primaryKey;
}
+ else if (fieldData == null || fieldData.isEmpty())
+ {
+ summaryRowData[colCounter++] = null;
+ }
else
{
- if (field.getGroup().getName().equals("Quality Measures"))
+ try
{
- try
- {
- if (fieldData == null || fieldData.isEmpty())
- {
- summaryRowData[colCounter++] = null;
- }
- else
- {
- Double value = Double.valueOf(fieldData);
- summaryRowData[colCounter++] = value;
- }
- } catch (Exception e)
- {
- e.printStackTrace();
- System.out.println("offending value:" + fieldData);
- summaryRowData[colCounter++] = 0.0;
- }
- }
- else
+ summaryRowData[colCounter++] = (field.getDataType()
+ .getDataTypeClass() == Integer.class)
+ ? Integer.valueOf(fieldData)
+ : (field.getDataType()
+ .getDataTypeClass() == Double.class)
+ ? Double.valueOf(fieldData)
+ : sanitiseData(fieldData);
+ } catch (Exception e)
{
- summaryRowData[colCounter++] = (fieldData == null || fieldData
- .isEmpty()) ? null : fieldData;
+ e.printStackTrace();
+ System.out.println("offending value:" + fieldData);
}
}
}
{
return Objects.hash(primaryKey1, this.toString());
}
+
+ @Override
+ public boolean equals(Object that)
+ {
+ return this.toString().equals(that.toString());
+ }
};
}
- @Override
- public String getColumnDataConfigFile()
+ private static String sanitiseData(String data)
{
- return getFile("fts/pdb_data_columns.conf");
+ String cleanData = data.replaceAll("\\[\"", "").replaceAll("\\]\"", "")
+ .replaceAll("\\[", "").replaceAll("\\]", "")
+ .replaceAll("\",\"", ", ").replaceAll("\"", "");
+ return cleanData;
}
+ @Override
+ public String getColumnDataConfigFileName()
+ {
+ return "/fts/pdb_data_columns.txt";
+ }
public static FTSRestClientI getInstance()
{
}
return instance;
}
+
+ private Collection<FTSDataColumnI> allDefaultDisplayedStructureDataColumns;
+
+ public Collection<FTSDataColumnI> getAllDefaultDisplayedStructureDataColumns()
+ {
+ if (allDefaultDisplayedStructureDataColumns == null
+ || allDefaultDisplayedStructureDataColumns.isEmpty())
+ {
+ allDefaultDisplayedStructureDataColumns = new ArrayList<FTSDataColumnI>();
+ allDefaultDisplayedStructureDataColumns
+ .addAll(super.getAllDefaultDisplayedFTSDataColumns());
+ }
+ return allDefaultDisplayedStructureDataColumns;
+ }
}