private MapXNodeImpl serializeTypeFilter(TypeFilter filter, PrismSerializer<RootXNode> xnodeSerializer) throws SchemaException{ MapXNodeImpl content = new MapXNodeImpl(); content.put(ELEMENT_TYPE, createPrimitiveXNode(filter.getType(), DOMUtil.XSD_QNAME)); if (filter.getFilter() != null){ content.put(ELEMENT_FILTER, serializeFilter(filter.getFilter(), xnodeSerializer)); } return createFilter(CLAUSE_TYPE, content); }
@Override public Condition interpret() throws QueryException { InterpretationContext context = getContext(); RootHibernateQuery hibernateQuery = context.getHibernateQuery(); String property = getBaseHqlEntity().getHqlPath() + "." + RObject.F_OBJECT_TYPE_CLASS; Collection<RObjectType> values = getValues(filter.getType()); Condition basedOnType; if (values.size() > 1) { basedOnType = hibernateQuery.createIn(property, values); } else { basedOnType = hibernateQuery.createEq(property, values.iterator().next()); } if (filter.getFilter() == null) { return basedOnType; } QueryInterpreter2 interpreter = context.getInterpreter(); Condition basedOnFilter = interpreter.interpretFilter(context, filter.getFilter(), this); return hibernateQuery.createAnd(basedOnType, basedOnFilter); }
factorOutFilter(filterComponents, ((TypeFilter) filter).getFilter(), extractors, paths, connectedByAnd); } else { boolean found = false;
return getRoleSelectionSpecEntries(((TypeFilter)filter).getFilter()); } else if (filter instanceof NotFilter) { Collection<RoleSelectionSpecEntry> subRoleSelectionSpec = getRoleSelectionSpecEntries(((NotFilter)filter).getFilter());
private static <T extends PrismValue> Collection<T> getValuesFromFilter(ObjectFilter filter, QName itemName, PrismContext prismContext) throws SchemaException { ItemPath propertyPath = ItemName.fromQName(itemName); if (filter instanceof EqualFilter && propertyPath.equivalent(((EqualFilter) filter).getFullPath())) { return ((EqualFilter) filter).getValues(); } else if (filter instanceof RefFilter && propertyPath.equivalent(((RefFilter) filter).getFullPath())) { return (Collection<T>) ((RefFilter) filter).getValues(); } else if (filter instanceof AndFilter) { return getValuesFromFilter(((NaryLogicalFilter) filter).getConditions(), itemName, prismContext); } else if (filter instanceof TypeFilter) { return getValuesFromFilter(((TypeFilter) filter).getFilter(), itemName, prismContext); } else { return null; } }
@Test public void test400TypeAll() throws Exception { System.out.println("===[ test400TypeAll ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN ObjectFilter filter = prismContext.queryFor(UserType.class) .type(UserType.class).all() .buildFilter(); System.out.println("Original filter:\n" + filter.debugDump()); // THEN ObjectFilter simplified = ObjectQueryUtil.simplify(filter, prismContext); System.out.println("Simplified filter:\n" + DebugUtil.debugDump(simplified)); assertTrue("Wrong simplified filter: " + simplified, simplified instanceof TypeFilter); TypeFilter typeSimplified = (TypeFilter) simplified; assertEquals("Wrong simplified filter type", UserType.COMPLEX_TYPE, typeSimplified.getType()); assertTrue("Wrong simplified filter subfilter: " + typeSimplified.getFilter(), ObjectQueryUtil.isAll(typeSimplified.getFilter())); }
@Test public void test420TypeUndefined() throws Exception { System.out.println("===[ test420TypeUndefined ]==="); // GIVEN PrismContext prismContext = PrismTestUtil.getPrismContext(); // WHEN ObjectFilter filter = prismContext.queryFor(UserType.class) .type(UserType.class).undefined() .buildFilter(); System.out.println("Original filter:\n" + filter.debugDump()); // THEN ObjectFilter simplified = ObjectQueryUtil.simplify(filter, prismContext); System.out.println("Simplified filter:\n" + DebugUtil.debugDump(simplified)); assertTrue("Wrong simplified filter: " + simplified, simplified instanceof TypeFilter); TypeFilter typeSimplified = (TypeFilter) simplified; assertEquals("Wrong simplified filter type", UserType.COMPLEX_TYPE, typeSimplified.getType()); assertTrue("Wrong simplified filter subfilter: " + typeSimplified.getFilter(), ObjectQueryUtil.isAll(typeSimplified.getFilter())); }
ObjectQuery queryForSearch = prismContext.queryFactory().createQuery(typeFilter.getFilter());
@Test public void testFilterTypeUserNone() throws Exception { displayTestTitle("testFilterTypeUserNone"); SearchFilterType filterType = PrismTestUtil.parseAnyValue(FILTER_TYPE_USER_NONE); ObjectQuery query = toObjectQuery(UserType.class, filterType); displayQuery(query); assertNotNull(query); ObjectFilter filter = query.getFilter(); assertTrue("Filter is not of TYPE type", filter instanceof TypeFilter); ObjectFilter subFilter = ((TypeFilter) filter).getFilter(); assertTrue("Filter is not of NONE type", subFilter instanceof NoneFilter); QueryType convertedQueryType = toQueryType(query); System.out.println("Re-converted query type"); System.out.println(convertedQueryType.debugDump()); Element filterClauseElement = convertedQueryType.getFilter().getFilterClauseAsElement(getPrismContext()); LOGGER.info(convertedQueryType.getFilter().getFilterClauseXNode().debugDump()); System.out.println("Serialized filter (JAXB->DOM)"); String filterAsString = DOMUtil.serializeDOMToString(filterClauseElement); System.out.println(filterAsString); LOGGER.info(filterAsString); DomAsserts.assertElementQName(filterClauseElement, new QName(PrismConstants.NS_QUERY, "type")); }
assertNotNull("filter in type filter must not be null", typeFilter.getFilter()); ItemPath namePath = UserType.F_NAME; PrismPropertyDefinition ppd = getUserDefinition().findPropertyDefinition(namePath); PrismAsserts.assertEqualsFilter(typeFilter.getFilter(), ppd.getName(), ppd.getTypeName(), namePath); PrismAsserts.assertEqualsFilterValue((EqualFilter) typeFilter.getFilter(), PrismTestUtil.createPolyString("some name identificator"));
ObjectFilter subFilter = ((TypeFilter) filter).getFilter(); ObjectFilter simplifiedSubfilter = simplify(subFilter, prismContext); if (simplifiedSubfilter instanceof AllFilter) {
ObjectFilter subFilter = ((TypeFilter) f).getFilter(); ObjectQuery q = prismContext.queryFactory().createQuery(subFilter);
} else if (filter instanceof TypeFilter) { TypeFilter evaluatedFilter = ((TypeFilter) filter).cloneEmpty(); ObjectFilter evaluatedSubFilter = evaluateFilterExpressionsInternal(((TypeFilter) filter).getFilter(), variables, expressionFactory, prismContext, shortDesc, task, result); evaluatedFilter.setFilter(evaluatedSubFilter);
assertFilter(spec.getFilter(), TypeFilter.class); assertEquals("Wrong type filter type", RoleType.COMPLEX_TYPE, ((TypeFilter)spec.getFilter()).getType()); ObjectFilter subfilter = ((TypeFilter)spec.getFilter()).getFilter(); assertFilter(subfilter, RefFilter.class); assertEquals(1, ((RefFilter)subfilter).getValues().size());