Could anyone please provide sample OSLC code with a where
clause for the service class?
I have just started using OSLC recently.
Here is the code that I have tried (does't work):
@GET
@Produces({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON})
public Project[] getChangeRequests(@QueryParam("oslc.where") final String where,
@QueryParam("oslc.prefix") final String prefix)
{
final List< Project> results = new ArrayList<Project>();
Map<String, String> prefixMap;
try
{
QueryUtils.parseSearchTerms(where);
prefixMap = QueryUtils.parsePrefixes(prefix);
WhereClause whereClause = QueryUtils.parseWhere(where, prefixMap);
}
catch (ParseException e)
{
e.printStackTrace();
}
final Project[] changeRequests = Persistence.getChangeRequestsForProject();
for (final Project changeRequest : changeRequests)
{
changeRequest.setServiceProvider(ServiceProviderSingleton.getServiceProviderURI());
results.add(changeRequest);
}
return results.toArray(new Project[results.size()]);
}
I just thought I will post a working piece of code. Here it is:
prefixMap = QueryUtils.parsePrefixes(prefix);
WhereClause whereClause = QueryUtils.parseWhere(where, prefixMap);
PName property = null;
String value ="";
for (SimpleTerm term : whereClause.children())
{
ComparisonTerm comparison = (ComparisonTerm)term;
String operator;
switch (comparison.operator())
{
case EQUALS:
operator = "equals";
break;
case NOT_EQUALS:
operator = "notequals";
break;
case LESS_THAN:
operator = "lessthan";
break;
case LESS_EQUALS:
operator = "lessthaneq";
break;
case GREATER_THAN:
operator = "greaterthan";
break;
default:
case GREATER_EQUALS:
operator = "greaterhaneq";
break;
}
property = comparison.property();
Value operand = comparison.operand();
value = operand.toString();
switch (operand.type())
{
case STRING:
case URI_REF:
value = value.substring(1, value.length() - 1);
break;
case BOOLEAN:
case DECIMAL:
break;
default:
throw new WebApplicationException
(new UnsupportedOperationException("Unsupported oslc.where comparison operand: " + value),Status.BAD_REQUEST);
}
}
String compareString=property.toString().substring(property.toString().indexOf(":")+1);
String val="get" + compareString.substring(0,1).toUpperCase() +compareString.substring(1);
final Project[] changeRequests = Persistence.getChangeRequestsForProject();
for (final Project changeRequest : changeRequests)
{
changeRequest.setServiceProvider(ServiceProviderSingleton.getServiceProviderURI());
Method m=changeRequest.getClass().getMethod(val, null);
if((m.invoke(changeRequest).toString().equalsIgnoreCase(value)))
{
results.add(changeRequest);
}
}