Как создать picketlink identityquery с «НЕ» условиями?

#java #picketlink

#java #picketlink

Вопрос:

Я хочу запросить свои идентификаторы и отобразить их в таблице с параметрами сортировки, разбивки на страницы и фильтрации. Все в порядке, но я не нашел способа ввести условия NOT.

В коде переменная T является org.picketlink.idm.model .IdentityType и identityClass — это реальный класс.

 IdentityQueryBuilder queryBuilder = getIdentityManager().getQueryBuilder();

IdentityQuery<T> query = queryBuilder.createIdentityQuery(identityClass);
List<Condition> condizioni = new ArrayList<>();
conditions.addAll(conditionFromFilterClausole(queryBuilder, ffc));
Condition c[] = condizioni.toArray(new Condition[condizioni.size()]);
query.where( c);
...
  

в методе conditionFromFilterClausole я перевожу некоторый объект (FilterClause) в where условия для запроса идентификатора. FilterClause.field — это имя столбца, FilterClause.operator — тип условия, а FilterClause.value — значение, которое нужно использовать

 for(FilterClause f : lf){
    QueryParameter qp = new org.picketlink.idm.query.AttributeParameter(f.getField());
        switch(f.operator){
            case EQUAL:
                conditions.add(qb.equal(qp, f.value));
                break;
            case CONTAINS :
                conditions.add(qb.like(qp, (String) f.value));
                break;
            case ENDSWITH : 
                ???
            case STARTSWITH : 
                ???
                break;
            case GREATEREQUAL : 
                conditions.add( qb.greaterThanOrEqualTo(qp, (String) f.value));
                break;
            case GREATERTHEN : 
                conditions.add(qb.greaterThan(qp, (String) f.value));
                break;
            case LESSEQUAL: 
                conditions.add( qb.lessThanOrEqualTo(qp, (String) f.value));
                break;
            case LESSTHEN: 
                conditions.add(qb.lessThan(qp, (String) f.value));
                break;
            case IN: 
                conditions.add(qb.in(qp, f.value));
                break;
            case NOTIN: 
            case NOTCONTAINS:
            case NOTEQUAL:
                ???
                break;
        }
  

Я скучаю по способу создания условий для «STARTSWITH / ENDSWITH» и всех других условий с помощью NOT, например, классического not equal (все в случае с ???).
QueryBuilder не имеет таких методов.