@Override public boolean equivalent(AssignmentPathSegment otherSegment) { if (!prismContext.relationsEquivalent(relation, otherSegment.getRelation())) { return false; } if (target == null && otherSegment.getTarget() == null) { return true; // TODO reconsider this in general case } if (target == null || otherSegment.getTarget() == null) { return false; } return java.util.Objects.equals(target.getOid(), otherSegment.getTarget().getOid()); } }
public static ExtensionType collectExtensions(AssignmentPath path, int startAt, PrismContext prismContext) throws SchemaException { ExtensionType rv = new ExtensionType(prismContext); PrismContainerValue<?> pcv = rv.asPrismContainerValue(); for (int i = startAt; i < path.getSegments().size(); i++) { AssignmentPathSegment segment = path.getSegments().get(i); AssignmentType assignment = segment.getAssignmentAny(); if (assignment != null && assignment.getExtension() != null) { ObjectTypeUtil.mergeExtension(pcv, assignment.getExtension().asPrismContainerValue()); } if (segment.getTarget() != null && segment.getTarget().getExtension() != null) { ObjectTypeUtil.mergeExtension(pcv, segment.getTarget().getExtension().asPrismContainerValue()); } } return rv; }
@Override public int countTargetOccurrences(ObjectType target) { if (target == null) { return 0; } int count = 0; for (AssignmentPathSegment segment: segments) { ObjectType segmentTarget = segment.getTarget(); if (segmentTarget != null) { if (segmentTarget.getOid() != null && target.getOid() != null && segmentTarget.getOid().equals(target.getOid()) || segmentTarget.getOid() == null && target.getOid() == null && segmentTarget.equals(target)) { count++; } } } return count; }
protected void assertAssignmentPath(AssignmentPath path, String... targetOids) { assertEquals("Wrong path size", targetOids.length, path.size()); for (int i = 0; i < targetOids.length; i++) { ObjectType target = path.getSegments().get(i).getTarget(); if (targetOids[i] == null) { assertNull("Target #" + (i+1) + " should be null; it is: " + target, target); } else { assertNotNull("Target #" + (i+1) + " should not be null", target); assertEquals("Wrong OID in target #" + (i+1), targetOids[i], target.getOid()); } } }