public static <T extends ObjectType> ObjectReferenceType createObjectRefWithFullObject(PrismObject<T> object, PrismContext prismContext) { if (object == null) { return null; } ObjectReferenceType ref = createObjectRef(object, prismContext); ref.asReferenceValue().setObject(object); return ref; }
@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); }
private void distributeResourceValue(PrismReferenceValue resourceRefVal, PrismObject<ResourceType> resource) { if (resourceRefVal != null) { boolean immutable = resourceRefVal.isImmutable(); if (immutable) { resourceRefVal.setImmutable(false); } resourceRefVal.setObject(resource); resourceRefVal.setImmutable(immutable); } }
public static <T extends Objectable> PrismReferenceValue objectableAsReferenceValue(T objectable, PrismReference reference ) { PrismObject<T> object = objectable.asPrismObject(); for (PrismReferenceValue refValue: reference.getValues()) { if (object == refValue.getObject()) { return refValue; } } PrismReferenceValue referenceValue = new PrismReferenceValueImpl(); referenceValue.setObject(object); return referenceValue; }
@SuppressWarnings("unchecked") private PrismReferenceValue createRefValueWithObject(PrismReferenceValue refValue, VisualizationContext context, Task task, OperationResult result) { if (refValue.getObject() != null) { return refValue; } PrismObject<? extends ObjectType> object = getObject(refValue.getOid(), (Class) refValue.getTargetTypeCompileTimeClass(prismContext), context, task, result); if (object == null) { return refValue; } refValue = refValue.clone(); refValue.setObject(object); return refValue; }
private void collectMembership(AssignmentHolderType targetType, QName relation, EvaluationContext ctx) { PrismReferenceValue refVal = prismContext.itemFactory().createReferenceValue(); refVal.setObject(targetType.asPrismObject()); refVal.setTargetType(ObjectTypes.getObjectType(targetType.getClass()).getTypeQName()); refVal.setRelation(relation); refVal.setTargetName(targetType.getName().toPolyString()); collectMembershipRefVal(refVal, targetType.getClass(), relation, targetType, ctx); }
private ValuePolicyType postProcessCredentialPolicy(SecurityPolicyType securityPolicyType, CredentialPolicyType credPolicy, String credShortDesc, Task task, OperationResult result) { ObjectReferenceType valuePolicyRef = credPolicy.getValuePolicyRef(); if (valuePolicyRef == null) { return null; } ValuePolicyType valuePolicyType; try { valuePolicyType = objectResolver.resolve(valuePolicyRef, ValuePolicyType.class, null, credShortDesc + " in " + securityPolicyType, task, result); } catch (ObjectNotFoundException | SchemaException | CommunicationException | ConfigurationException | SecurityViolationException | ExpressionEvaluationException e) { LOGGER.warn("{} {} referenced from {} was not found", credShortDesc, valuePolicyRef.getOid(), securityPolicyType); return null; } valuePolicyRef.asReferenceValue().setObject(valuePolicyType.asPrismObject()); return valuePolicyType; }
@Override public PrismReferenceValue createReferenceValue(PrismObject<?> target) { PrismReferenceValue rv = new PrismReferenceValueImpl(target.getOid()); rv.setPrismContext(prismContext); rv.setObject(target); if (target.getDefinition() != null) { rv.setTargetType(target.getDefinition().getTypeName()); } return rv; }
private <O extends ObjectType> PrismObject<O> resolveReferenceUsingOption(@NotNull PrismReferenceValue refVal, SelectorOptions<GetOperationOptions> option, Containerable containerable, Task task, OperationResult parentResult) { OperationResult result = parentResult.createMinorSubresult(RESOLVE_REFERENCE); try { PrismObject<O> refObject; refObject = objectResolver.resolve(refVal, containerable.toString(), option.getOptions(), task, result); refObject = refObject.cloneIfImmutable(); schemaTransformer.applySchemasAndSecurity(refObject, option.getOptions(), SelectorOptions.createCollection(option.getOptions()), null, task, result); refVal.setObject(refObject); return refObject; } catch (CommonException e) { result.recordWarning("Couldn't resolve reference to " + ObjectTypeUtil.toShortString(refVal) + ": " + e.getMessage(), e); return null; } finally { result.computeStatusIfUnknown(); } }
public ShadowType resolveTargetUnchecked(ShadowAssociationType association, OperationResult result) throws SchemaException, ObjectNotFoundException { if (association == null) { return null; } ObjectReferenceType shadowRef = association.getShadowRef(); if (shadowRef == null || shadowRef.getOid() == null) { throw new IllegalStateException("None or null-OID shadowRef in " + association); } PrismObject<ShadowType> shadow = shadowRef.asReferenceValue().getObject(); if (shadow == null) { Collection<SelectorOptions<GetOperationOptions>> options = SelectorOptions.createCollection( GetOperationOptions.createNoFetch()); shadow = repositoryService.getObject(ShadowType.class, shadowRef.getOid(), options, result); shadowRef.asReferenceValue().setObject(shadow); } return shadow.asObjectable(); }
private static PrismReferenceValue getAuditTarget(ObjectDelta<? extends ObjectType> delta, PrismContext prismContext) { PrismReferenceValue targetRef = prismContext.itemFactory().createReferenceValue(delta.getOid()); targetRef.setTargetType(ObjectTypes.getObjectType(delta.getObjectTypeClass()).getTypeQName()); if (delta.isAdd()) { targetRef.setObject(delta.getObjectToAdd()); } return targetRef; }
private SecurityPolicyType postProcessPasswordPolicy(ValuePolicyType passwordPolicyType) { SecurityPolicyType securityPolicyType = new SecurityPolicyType(); CredentialsPolicyType creds = new CredentialsPolicyType(); PasswordCredentialsPolicyType passwd = new PasswordCredentialsPolicyType(); ObjectReferenceType passwordPolicyRef = new ObjectReferenceType(); passwordPolicyRef.asReferenceValue().setObject(passwordPolicyType.asPrismObject()); passwd.setValuePolicyRef(passwordPolicyRef); creds.setPassword(passwd); securityPolicyType.setCredentials(creds); setDeprecatedPasswordPolicyProperties(passwordPolicyType, passwd); return securityPolicyType; }
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; } }
protected ObjectDelta<UserType> createModifyUserDeleteAccount(String userOid, String resourceOid) throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException { String accountOid = getLinkRefOid(userOid, resourceOid); PrismObject<ShadowType> account = getShadowModel(accountOid); ObjectDelta<UserType> userDelta = prismContext.deltaFactory().object().createEmptyModifyDelta(UserType.class, userOid ); PrismReferenceValue accountRefVal = itemFactory().createReferenceValue(); accountRefVal.setObject(account); ReferenceDelta accountDelta = prismContext.deltaFactory().reference().createModificationDelete(UserType.F_LINK_REF, getUserDefinition(), accountRefVal); userDelta.addModification(accountDelta); return userDelta; }
protected void modifyUserAddAccount(String userOid, File accountFile, Task task, OperationResult result) throws SchemaException, IOException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { PrismObject<ShadowType> account = prismContext.parseObject(accountFile); ObjectDelta<UserType> userDelta = prismContext.deltaFactory().object().createEmptyModifyDelta(UserType.class, userOid ); PrismReferenceValue accountRefVal = itemFactory().createReferenceValue(); accountRefVal.setObject(account); ReferenceDelta accountDelta = prismContext.deltaFactory().reference().createModificationAdd(UserType.F_LINK_REF, getUserDefinition(), accountRefVal); userDelta.addModification(accountDelta); Collection<ObjectDelta<? extends ObjectType>> deltas = (Collection)MiscUtil.createCollection(userDelta); modelService.executeChanges(deltas, null, task, result); }
protected ObjectDelta<UserType> createModifyUserAddAccount(String userOid, PrismObject<ResourceType> resource) throws SchemaException { PrismObject<ShadowType> account = getAccountShadowDefinition().instantiate(); ObjectReferenceType resourceRef = new ObjectReferenceType(); resourceRef.setOid(resource.getOid()); account.asObjectable().setResourceRef(resourceRef); RefinedResourceSchema refinedSchema = RefinedResourceSchemaImpl.getRefinedSchema(resource); account.asObjectable().setObjectClass(refinedSchema.getDefaultRefinedDefinition(ShadowKindType.ACCOUNT).getObjectClassDefinition().getTypeName()); ObjectDelta<UserType> userDelta = prismContext.deltaFactory().object().createEmptyModifyDelta(UserType.class, userOid ); PrismReferenceValue accountRefVal = itemFactory().createReferenceValue(); accountRefVal.setObject(account); ReferenceDelta accountDelta = prismContext.deltaFactory().reference().createModificationAdd(UserType.F_LINK_REF, getUserDefinition(), accountRefVal); userDelta.addModification(accountDelta); return userDelta; }
private void modifyUserAddAccountImplicit(String bundleName, ObjectSource<PrismObject<ShadowType>> accountSource, ObjectChecker<ModelContext<UserType>> checker) throws Exception { final String TEST_NAME = bundleName + "Implicit"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); PrismObject<ShadowType> account = accountSource.get(); ObjectDelta<UserType> userDelta = prismContext.deltaFactory().object() .createEmptyModifyDelta(UserType.class, USER_JACK_OID); PrismReferenceValue accountRefVal = itemFactory().createReferenceValue(); accountRefVal.setObject(account); ReferenceDelta accountRefDelta = prismContext.deltaFactory().reference().createModificationAdd(UserType.F_LINK_REF, getUserDefinition(), accountRefVal); userDelta.addModification(accountRefDelta); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(userDelta); doPreview(deltas, checker, task, result); }
private void modifyUserAddAccountImplicitExplicitSameReverse(String bundleName, ObjectSource<PrismObject<ShadowType>> accountSource, ObjectChecker<ModelContext<UserType>> checker) throws Exception { final String TEST_NAME = bundleName + "ImplicitExplicitSameReverse"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); PrismObject<ShadowType> account = accountSource.get(); ObjectDelta<UserType> userDelta = prismContext.deltaFactory().object() .createEmptyModifyDelta(UserType.class, USER_JACK_OID); PrismReferenceValue accountRefVal = itemFactory().createReferenceValue(); accountRefVal.setObject(account); ReferenceDelta accountRefDelta = prismContext.deltaFactory().reference().createModificationAdd(UserType.F_LINK_REF, getUserDefinition(), accountRefVal); userDelta.addModification(accountRefDelta); ObjectDelta<ShadowType> accountDelta = account.createAddDelta(); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(accountDelta, userDelta); doPreview(deltas, checker, task, result); }
private void modifyUserAddAccountImplicitExplicitSame(String bundleName, ObjectSource<PrismObject<ShadowType>> accountSource, ObjectChecker<ModelContext<UserType>> checker) throws Exception { final String TEST_NAME = bundleName + "ImplicitExplicitSame"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); PrismObject<ShadowType> account = accountSource.get(); ObjectDelta<UserType> userDelta = prismContext.deltaFactory().object() .createEmptyModifyDelta(UserType.class, USER_JACK_OID); PrismReferenceValue accountRefVal = itemFactory().createReferenceValue(); accountRefVal.setObject(account); ReferenceDelta accountRefDelta = prismContext.deltaFactory().reference().createModificationAdd(UserType.F_LINK_REF, getUserDefinition(), accountRefVal); userDelta.addModification(accountRefDelta); ObjectDelta<ShadowType> accountDelta = account.createAddDelta(); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(userDelta, accountDelta); doPreview(deltas, checker, task, result); }
private void modifyUserAddAccountImplicitExplicitEqual(String bundleName, ObjectSource<PrismObject<ShadowType>> accountSource, ObjectChecker<ModelContext<UserType>> checker) throws Exception { final String TEST_NAME = bundleName + "ImplicitExplicitEqual"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); PrismObject<ShadowType> account = accountSource.get(); ObjectDelta<UserType> userDelta = prismContext.deltaFactory().object() .createEmptyModifyDelta(UserType.class, USER_JACK_OID); PrismReferenceValue accountRefVal = itemFactory().createReferenceValue(); accountRefVal.setObject(account.clone()); ReferenceDelta accountRefDelta = prismContext.deltaFactory().reference().createModificationAdd(UserType.F_LINK_REF, getUserDefinition(), accountRefVal); userDelta.addModification(accountRefDelta); ObjectDelta<ShadowType> accountDelta = account.createAddDelta(); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(userDelta, accountDelta); doPreview(deltas, checker, task, result); }