#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 не имеет таких методов.