public static PrismReferenceValue getReferenceValue(PrismContainerValue<?> parent, QName name) { Validate.notNull(parent, "Prism container value must not be null."); Validate.notNull(name, "QName must not be null."); PrismReference reference = parent.findItem(ItemName.fromQName(name), PrismReference.class); return reference != null ? reference.getValue() : null; }
} else if (i instanceof PrismReference){ if (i.isSingleValue()){ return ((PrismReference) i).getValue().asReferencable();
@Test public void test020ModifyAssignment() throws Exception { //given ObjectDelta<RoleType> delta = deltaFor(RoleType.class) .item(RoleType.F_ASSIGNMENT, 4L, AssignmentType.F_TARGET_REF) .replace(new ObjectReferenceType().oid(NEW_ASSIGNMENT_4_TARGET_OID).type(RoleType.COMPLEX_TYPE)) .asObjectDeltaCast(ROLE_OID); OperationResult result = new OperationResult("modify assignment"); // WHEN repositoryService.modifyObject(RoleType.class, delta.getOid(), delta.getModifications(), result); // THEN assertSuccess(result); PrismObject<RoleType> repoRole = getObject(RoleType.class, ROLE_OID); PrismContainer<AssignmentType> inducement = repoRole.findContainer(RoleType.F_INDUCEMENT); assertNotNull(inducement); assertEquals(3, inducement.getValues().size()); PrismContainer<AssignmentType> assignment = repoRole.findContainer(AbstractRoleType.F_ASSIGNMENT); assertNotNull(assignment); assertEquals(2, assignment.getValues().size()); PrismContainerValue<AssignmentType> value4 = assignment.getValue(4L); PrismReference targetRef = value4.findReference(AssignmentType.F_TARGET_REF); assertNotNull(targetRef); assertEquals(1, targetRef.getValues().size()); PrismReferenceValue refValue = targetRef.getValue(); assertEquals(NEW_ASSIGNMENT_4_TARGET_OID, refValue.getOid()); assertEquals(RoleType.COMPLEX_TYPE, refValue.getTargetType()); }
@Override public PrismObject<UserType> getOwner() { PrismReference ownerRef = taskPrism.findReference(TaskType.F_OWNER_REF); if (ownerRef == null) { return null; } return ownerRef.getValue().getObject(); }
assertNotNull(targetRef); assertEquals(1, targetRef.getValues().size()); PrismReferenceValue refValue = targetRef.getValue(); assertEquals(ORIGINAL_ASSIGNMENT_4_TARGET_OID, refValue.getOid()); assertEquals(RoleType.COMPLEX_TYPE, refValue.getTargetType());
@Override public String getObjectOid() { PrismReference objectRef = taskPrism.findReference(TaskType.F_OBJECT_REF); if (objectRef == null) { return null; } return objectRef.getValue().getOid(); }
@Test public void test021ModifyInducement() throws Exception { //given ObjectDelta<RoleType> delta = deltaFor(RoleType.class) .item(RoleType.F_INDUCEMENT, 5L, AssignmentType.F_TARGET_REF) .replace(new ObjectReferenceType().oid(NEW_INDUCEMENT_5_TARGET_OID).type(RoleType.COMPLEX_TYPE)) .asObjectDeltaCast(ROLE_OID); OperationResult result = new OperationResult("modify inducement"); // WHEN repositoryService.modifyObject(RoleType.class, delta.getOid(), delta.getModifications(), result); // THEN assertSuccess(result); PrismObject<RoleType> repoRole = getObject(RoleType.class, ROLE_OID); PrismContainer<AssignmentType> inducement = repoRole.findContainer(RoleType.F_INDUCEMENT); assertNotNull(inducement); assertEquals(3, inducement.getValues().size()); PrismContainer<AssignmentType> assignment = repoRole.findContainer(AbstractRoleType.F_ASSIGNMENT); assertNotNull(assignment); assertEquals(2, assignment.getValues().size()); PrismContainerValue<AssignmentType> value5 = inducement.getValue(5L); PrismReference targetRef = value5.findReference(AssignmentType.F_TARGET_REF); assertNotNull(targetRef); assertEquals(1, targetRef.getValues().size()); PrismReferenceValue refValue = targetRef.getValue(); assertEquals(NEW_INDUCEMENT_5_TARGET_OID, refValue.getOid()); assertEquals(RoleType.COMPLEX_TYPE, refValue.getTargetType()); PrismProperty accConstruction = value5.findProperty(AssignmentType.F_CONSTRUCTION); AssertJUnit.assertNull(accConstruction); }
/** * This method must merge new value with potential existing value of the reference. * E.g. it is possible to call setResource(..) and then setResourceRef(..) with the * same OID. In that case the result should be one reference that has both OID/type/filter * and object. * Assumes single-value reference */ public static void setReferenceValueAsObject(PrismContainerValue parentValue, QName referenceQName, PrismObject targetObject) { Validate.notNull(parentValue, "Prism container value must not be null."); Validate.notNull(referenceQName, "QName must not be null."); PrismReference reference; try { reference = parentValue.findOrCreateReference(referenceQName); } catch (SchemaException e) { // This should not happen. Code generator and compiler should take care of that. throw new IllegalStateException("Internal schema error: "+e.getMessage(),e); } if (reference == null) { throw new IllegalArgumentException("No reference "+referenceQName+" in "+parentValue); } PrismReferenceValue referenceValue = reference.getValue(); referenceValue.setObject(targetObject); }
@Override public void setOwner(PrismObject<UserType> owner) { if (isPersistent()) { throw new IllegalStateException("setOwner method can be called only on transient tasks!"); } PrismReference ownerRef; try { ownerRef = taskPrism.findOrCreateReference(TaskType.F_OWNER_REF); } catch (SchemaException e) { // This should not happen throw new IllegalStateException("Internal schema error: " + e.getMessage(), e); } ownerRef.getValue().setObject(owner); }
@SuppressWarnings("unchecked") public static PrismObject<ConnectorType> getConnectorIfPresent(PrismObject<ResourceType> resource) { PrismReference existingConnectorRef = resource.findReference(ResourceType.F_CONNECTOR_REF); if (existingConnectorRef == null || existingConnectorRef.isEmpty()) { return null; } return (PrismObject<ConnectorType>) existingConnectorRef.getValue().getObject(); }
protected <F extends AssignmentHolderType> ContainerDelta<AssignmentType> createAssignmentModification(Class<F> type, QName elementName, String roleOid, QName refType, QName relation, Consumer<AssignmentType> modificationBlock, boolean add) throws SchemaException { ContainerDelta<AssignmentType> assignmentDelta = prismContext.deltaFactory().container().createDelta(ItemName.fromQName(elementName), getObjectDefinition(type)); PrismContainerValue<AssignmentType> cval = prismContext.itemFactory().createContainerValue(); if (add) { assignmentDelta.addValueToAdd(cval); } else { assignmentDelta.addValueToDelete(cval); } PrismReference targetRef = cval.findOrCreateReference(AssignmentType.F_TARGET_REF); targetRef.getValue().setOid(roleOid); targetRef.getValue().setTargetType(refType); targetRef.getValue().setRelation(relation); if (modificationBlock != null) { modificationBlock.accept(cval.asContainerable()); } return assignmentDelta; }
@Override public void setObjectTransient(PrismObject object) { if (object == null) { PrismReference objectRef = taskPrism.findReference(TaskType.F_OBJECT_REF); if (objectRef != null) { taskPrism.getValue().remove(objectRef); } } else { PrismReference objectRef; try { objectRef = taskPrism.findOrCreateReference(TaskType.F_OBJECT_REF); } catch (SchemaException e) { // This should not happen throw new IllegalStateException("Internal schema error: " + e.getMessage(), e); } objectRef.getValue().setObject(object); } }
protected ObjectDelta<UserType> createParametricAssignmentDelta(String userOid, String roleOid, String orgOid, String tenantOid, boolean adding) throws SchemaException { Collection<ItemDelta<?,?>> modifications = new ArrayList<>(); ContainerDelta<AssignmentType> assignmentDelta = prismContext.deltaFactory().container().createDelta(UserType.F_ASSIGNMENT, getUserDefinition()); PrismContainerValue<AssignmentType> cval = prismContext.itemFactory().createContainerValue(); if (adding) { assignmentDelta.addValueToAdd(cval); } else { assignmentDelta.addValueToDelete(cval); } PrismReference targetRef = cval.findOrCreateReference(AssignmentType.F_TARGET_REF); targetRef.getValue().setOid(roleOid); targetRef.getValue().setTargetType(RoleType.COMPLEX_TYPE); if (orgOid != null) { PrismReference orgRef = cval.findOrCreateReference(AssignmentType.F_ORG_REF); orgRef.getValue().setOid(orgOid); } if (tenantOid != null) { PrismReference tenantRef = cval.findOrCreateReference(AssignmentType.F_TENANT_REF); tenantRef.getValue().setOid(tenantOid); } modifications.add(assignmentDelta); return prismContext.deltaFactory().object().createModifyDelta(userOid, modifications, UserType.class ); }
shadowRef.getValue().setObject(projCtx.getEntitlementMap().get(shadowRef.getOid())); } else { try {
PrismObject<UserType> resolveOwnerRef(OperationResult result) throws SchemaException { PrismReference ownerRef = taskPrism.findReference(TaskType.F_OWNER_REF); if (ownerRef == null) { throw new SchemaException("Task " + getOid() + " does not have an owner (missing ownerRef)"); } try { PrismObject<UserType> owner = repositoryService.getObject(UserType.class, ownerRef.getOid(), null, result); ownerRef.getValue().setObject(owner); return owner; } catch (ObjectNotFoundException e) { LoggingUtils.logExceptionAsWarning(LOGGER, "The owner of task {} cannot be found (owner OID: {})", e, getOid(), ownerRef.getOid()); return null; } }
PrismReferenceValue targetRefVal = targetRef.getValue(); assertNotNull("No targetRef value in assignment", targetRefVal); assertEquals("Wrong OID in targetRef value", "12345678-d34d-b33f-f00d-987987987988", targetRefVal.getOid());
PrismReference resourceRef = account.findReference(ShadowType.F_RESOURCE_REF); assertNotNull("No resourceRef", resourceRef); PrismReferenceValue resourceRefVal = resourceRef.getValue(); assertNotNull("No resourceRef value", resourceRefVal); assertEquals("Wrong OID in resourceRef value", FAUX_RESOURCE_OID, resourceRefVal.getOid());
PrismReference connectorRef = resourceDummyFake.findReference(ResourceType.F_CONNECTOR_REF); ReferenceDelta connectorRefDeltaDel = prismContext.deltaFactory().reference().createModificationDelete(ResourceType.F_CONNECTOR_REF, getResourceDefinition(), connectorRef.getValue().clone()); resourceDelta.addModification(connectorRefDeltaDel); ReferenceDelta connectorRefDeltaAdd = prismContext.deltaFactory().reference().createModificationAdd(ResourceType.F_CONNECTOR_REF,