Search code examples
javaoslc

Sample OSLC code with a "where" clause


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()]);
}

Solution

  • 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);
         }
     }