public static void normalizeFilter(ObjectFilter filter, RelationRegistry relationRegistry) { if (filter != null) { filter.accept(f -> { if (f instanceof RefFilter) { emptyIfNull(((RefFilter) f).getValues()).forEach(v -> normalizeRelation(v, relationRegistry)); } }); } }
public static void assertRefFilter(ObjectFilter objectFilter, QName expectedFilterDef, QName expectedTypeName, ItemPath path) { assertTrue("Wrong filter class: " + objectFilter.getClass(), objectFilter instanceof RefFilter); RefFilter filter = (RefFilter) objectFilter; assertEquals("Wrong filter definition element name", expectedFilterDef, filter.getDefinition().getName()); assertEquals("Wrong filter definition type", expectedTypeName, filter.getDefinition().getTypeName()); assertPathEquivalent("Wrong filter path", path, filter.getFullPath()); }
@Override public S_AtomicFilterExit ref(QName... relations) { List<PrismReferenceValue> values = new ArrayList<>(); for (QName relation : relations) { PrismReferenceValue ref = new PrismReferenceValueImpl(); ref.setRelation(relation); values.add(ref); } RefFilter filter = RefFilterImpl.createReferenceEqual(itemPath, referenceDefinition, values); filter.setOidNullAsAny(true); filter.setTargetTypeNullAsAny(true); return new R_AtomicFilter(this, filter); }
private List<PrismReferenceValue> getRoleOidsFromFilter(ObjectFilter origFilter) { if (origFilter == null) { return null; } if (origFilter instanceof RefFilter) { ItemPath path = ((RefFilter)origFilter).getPath(); if (path.equivalent(SchemaConstants.PATH_ROLE_MEMBERSHIP_REF)) { return ((RefFilter)origFilter).getValues(); } } if (origFilter instanceof AndFilter) { for (ObjectFilter condition: ((AndFilter)origFilter).getConditions()) { List<PrismReferenceValue> refs = getRoleOidsFromFilter(condition); if (refs != null && !refs.isEmpty()) { return refs; } } } return null; }
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; } }
.item(AssignmentHolderType.F_ARCHETYPE_REF).ref(collectionRef.getOid()) .buildFilter(); filter.setTargetTypeNullAsAny(true); filter.setRelationNullAsAny(true); existingView.setFilter(filter);
@Override public S_AtomicFilterExit ref(Collection<PrismReferenceValue> values, boolean nullTypeAsAny) { RefFilter filter = RefFilterImpl.createReferenceEqual(itemPath, referenceDefinition, values); filter.setTargetTypeNullAsAny(nullTypeAsAny); return new R_AtomicFilter(this, filter); }
attributeFilter.add(f); } else if (f instanceof RefFilter) { ItemPath parentPath = ((RefFilter)f).getParentPath(); if (parentPath.isEmpty()) { QName elementName = ((RefFilter) f).getElementName(); if (QNameUtil.match(ShadowType.F_RESOURCE_REF, elementName)) { continue;
@Test public void test210EvaluateExpressionLinkRefDefaultsVal() throws Exception { final String TEST_NAME = "test210EvaluateExpressionLinkRefDefaultsVal"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME); Task task = taskManager.createTaskInstance(TEST_NAME); ObjectFilter filter = evaluateExpressionAssertFilter("expression-linkref-filter-defaults.xml", ACCOUNT_SHADOW_GUYBRUSH_OID, RefFilter.class, task, result); RefFilter refFilter = (RefFilter) filter; assertEquals("Wrong number of values in filter: " + refFilter.getValues(), 1, refFilter.getValues().size()); executeFilter(filter, 1, task, result); }
} else if (filter instanceof RefFilter) { RefFilter refFilter = (RefFilter) filter; ItemPath path = refFilter.getFullPath(); ItemDefinition definition = refFilter.getDefinition(); ProperDataSearchResult<JpaReferenceDefinition> searchResult = resolver.findProperDataDefinition( baseEntityDefinition, path, definition, JpaReferenceDefinition.class, context.getPrismContext());
@Test public void test212EvaluateExpressionLinkRefObjectReferenceTypeDefaultsVal() throws Exception { final String TEST_NAME = "test212EvaluateExpressionLinkRefObjectReferenceTypeDefaultsVal"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME); Task task = taskManager.createTaskInstance(TEST_NAME); ObjectFilter filter = evaluateExpressionAssertFilter("expression-linkref-object-reference-type-filter-defaults.xml", ACCOUNT_SHADOW_GUYBRUSH_OID, RefFilter.class, task, result); RefFilter refFilter = (RefFilter) filter; assertEquals("Wrong number of values in filter: " + refFilter.getValues(), 1, refFilter.getValues().size()); executeFilter(filter, 1, task, result); }
private void assertRefFilterValue(RefFilter filter, String oid) { List<? extends PrismValue> values = filter.getValues(); assertEquals(1, values.size()); assertTrue(values.get(0) instanceof PrismReferenceValue); PrismReferenceValue val = (PrismReferenceValue) values.get(0); assertEquals(oid, val.getOid()); // TODO: maybe some more asserts for type, relation and other reference // values }
@Test public void test200EvaluateExpressionLinkRefDefaultsNull() throws Exception { final String TEST_NAME = "test200EvaluateExpressionLinkRefDefaultsNull"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME); Task task = taskManager.createTaskInstance(TEST_NAME); ObjectFilter filter = evaluateExpressionAssertFilter("expression-linkref-filter-defaults.xml", null, RefFilter.class, task, result); RefFilter refFilter = (RefFilter) filter; AssertJUnit.assertNull("Expected NO values in filter, but found " + refFilter.getValues(), refFilter.getValues()); executeFilter(filter, 2, task, result); }
@Test public void test202EvaluateExpressionLinkRefObjectReferenceTypeDefaultsNull() throws Exception { final String TEST_NAME = "test202EvaluateExpressionLinkRefObjectReferenceTypeDefaultsNull"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN OperationResult result = new OperationResult(TestFilterExpression.class.getName() + "." + TEST_NAME); Task task = taskManager.createTaskInstance(TEST_NAME); ObjectFilter filter = evaluateExpressionAssertFilter("expression-linkref-object-reference-type-filter-defaults.xml", null, RefFilter.class, task, result); RefFilter refFilter = (RefFilter) filter; AssertJUnit.assertNull("Expected NO values in filter, but found " + refFilter.getValues(), refFilter.getValues()); executeFilter(filter, 2, task, result); }
List<PrismReferenceValue> values = filter.getValues(); if (CollectionUtils.isEmpty(values)) { return hibernateQuery.createIsNull(hqlDataInstance.getHqlPath());