首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有"where“子句的OSLC代码示例

带有"where“子句的OSLC代码示例
EN

Stack Overflow用户
提问于 2013-06-28 08:49:03
回答 1查看 787关注 0票数 0

有谁能为服务类提供一个带有where子句的示例OSLC代码吗?我最近才开始使用OSLC。

下面是我尝试过的代码(不起作用):

代码语言:javascript
复制
@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()]);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-02 06:48:57

我只是想贴一段有用的代码。下面是:

代码语言:javascript
复制
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);
     }
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17360768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档