private void addPendingOperationAdd( PrismObject<ShadowType> repoShadow, PrismObject<ShadowType> resourceShadow, ProvisioningOperationState<AsynchronousOperationReturnValue<PrismObject<ShadowType>>> opState, String asyncOperationReference) throws SchemaException { ShadowType repoShadowType = repoShadow.asObjectable(); PendingOperationType pendingOperation = createPendingOperation(resourceShadow.createAddDelta(), opState, asyncOperationReference); repoShadowType.getPendingOperation().add(pendingOperation); opState.addPendingOperation(pendingOperation); repoShadowType.setExists(false); }
protected <O extends ObjectType> String addObject(PrismObject<O> object, ModelExecuteOptions options, Task task, OperationResult result) throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { ObjectDelta<O> addDelta = object.createAddDelta(); assertFalse("Immutable object provided?",addDelta.getObjectToAdd().isImmutable()); Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = executeChanges(addDelta, options, task, result); object.setOid(ObjectDeltaOperation.findFocusDeltaOidInCollection(executedDeltas)); return object.getOid(); }
@Override public <F extends FocusType> void handle(LensContext<F> context, SynchronizationSituation<F> situation, Map<QName, Object> parameters, Task task, OperationResult parentResult) throws SchemaException { if (context == null) { throw new UnsupportedOperationException("addFocus action is not supported with synchronize=false"); } PrismContext prismContext = context.getPrismContext(); LensFocusContext<F> focusContext = context.createFocusContext(); Class<F> focusClass = focusContext.getObjectTypeClass(); LOGGER.trace("addFocus action: add delta for {}", focusClass); PrismObjectDefinition<F> focusDefinition = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(focusClass); PrismObject<F> emptyFocus = focusDefinition.instantiate(); ObjectDelta<F> delta = emptyFocus.createAddDelta(); delta.setObjectToAdd(emptyFocus); focusContext.setPrimaryDelta(delta); }
@Test public void testAddObjectUnrelatedEmptyFalse() throws Exception { final String TEST_NAME = "testAddObjectUnrelatedEmptyFalse"; System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN PrismObject<UserType> user = evaluator.getUserOld(); user.asObjectable().getEmployeeType().clear(); ObjectDelta<UserType> delta = user.createAddDelta(); MappingImpl<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( MAPPING_COMPLEX_FILENAME, TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); assertNull("Unexpected value in outputTriple: "+outputTriple, outputTriple); }
@Test public void testAddObjectUnrelatedFalse() throws Exception { final String TEST_NAME = "testAddObjectUnrelatedFalse"; System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN PrismObject<UserType> user = evaluator.getUserOld(); user.asObjectable().getEmployeeType().clear(); user.asObjectable().getEmployeeType().add("WHATEVER"); ObjectDelta<UserType> delta = user.createAddDelta(); MappingImpl<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( MAPPING_COMPLEX_FILENAME, TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); assertNull("Unexpected value in outputTriple: "+outputTriple, outputTriple); }
protected <O extends ObjectType> void assertAddAllow(PrismObject<O> object, ModelExecuteOptions options) throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException, IOException { Task task = taskManager.createTaskInstance(AbstractModelIntegrationTest.class.getName() + ".assertAddAllow"); OperationResult result = task.getResult(); ObjectDelta<O> addDelta = object.createAddDelta(); logAttempt("add", object.getCompileTimeClass(), object.getOid(), null); try { modelService.executeChanges(MiscSchemaUtil.createCollection(addDelta), options, task, result); } catch (SecurityViolationException e) { failAllow("add", object.getCompileTimeClass(), object.getOid(), null, e); } result.computeStatus(); TestUtil.assertSuccess(result); logAllow("add", object.getCompileTimeClass(), object.getOid(), null); }
protected <O extends ObjectType> void assertAddDeny(PrismObject<O> object, ModelExecuteOptions options) throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, IOException { Task task = taskManager.createTaskInstance(AbstractModelIntegrationTest.class.getName() + ".assertAddDeny"); OperationResult result = task.getResult(); ObjectDelta<O> addDelta = object.createAddDelta(); try { logAttempt("add", object.getCompileTimeClass(), object.getOid(), null); modelService.executeChanges(MiscSchemaUtil.createCollection(addDelta), options, task, result); failDeny("add", object.getCompileTimeClass(), object.getOid(), null); } catch (SecurityViolationException e) { // this is expected logDeny("add", object.getCompileTimeClass(), object.getOid(), null); result.computeStatus(); TestUtil.assertFailure(result); } }
@Test public void test200AddUserLargo() throws Exception { final String TEST_NAME = "test200AddUserLargo"; displayTestTitle(TEST_NAME); // GIVEN long startMillis = System.currentTimeMillis(); Task task = taskManager.createTaskInstance(TestActivation.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); PrismObject<UserType> userLargo = PrismTestUtil.parseObject(USER_LARGO_FILE); ObjectDelta<UserType> addDelta = userLargo.createAddDelta(); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(addDelta); // WHEN modelService.executeChanges(deltas, null, task, result); // THEN userLargo = getUser(USER_LARGO_OID); display("User after change execution", userLargo); assertValidity(userLargo, TimeIntervalStatusType.IN); assertValidityTimestamp(userLargo, startMillis, System.currentTimeMillis()); assertEffectiveStatus(userLargo, ActivationStatusType.ENABLED); }
public String addShadow(PrismObject<ShadowType> shadowToAdd, OperationProvisioningScriptsType scripts, ResourceType resource, ProvisioningOperationOptions options, Task task, OperationResult parentResult) throws CommunicationException, GenericFrameworkException, ObjectAlreadyExistsException, SchemaException, ObjectNotFoundException, ConfigurationException, SecurityViolationException, PolicyViolationException, ExpressionEvaluationException, EncryptionException { Validate.notNull(shadowToAdd, "Object to add must not be null."); InternalMonitor.recordCount(InternalCounters.SHADOW_CHANGE_OPERATION_COUNT); if (LOGGER.isTraceEnabled()) { LOGGER.trace("Start adding shadow object{}:\n{}", getAdditionalOperationDesc(scripts, options), shadowToAdd.debugDump(1)); } ProvisioningContext ctx = ctxFactory.create(shadowToAdd, task, parentResult); try { ctx.assertDefinition(); } catch (SchemaException e) { parentResult.recordFatalError(e); ResourceOperationDescription operationDescription = ProvisioningUtil.createResourceFailureDescription( shadowToAdd, ctx.getResource(), shadowToAdd.createAddDelta(), parentResult); operationListener.notifyFailure(operationDescription, task, parentResult); throw e; } ProvisioningOperationState<AsynchronousOperationReturnValue<PrismObject<ShadowType>>> opState = new ProvisioningOperationState<>(); return addShadowAttempt(ctx, shadowToAdd, scripts, opState, options, task, parentResult); }
private void modifyUserAddAccountExplicit(String bundleName, ObjectSource<PrismObject<ShadowType>> accountSource, ObjectChecker<ModelContext<UserType>> checker) throws Exception { final String TEST_NAME = bundleName + "Explicit"; 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); ObjectDelta<ShadowType> accountDelta = account.createAddDelta(); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(userDelta, accountDelta); doPreview(deltas, checker, task, result); }
@Test public void test041ApplyDefinitionAddShadowDelta() throws Exception { final String TEST_NAME = "test041ApplyDefinitionAddShadowDelta"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); PrismObject<ShadowType> account = PrismTestUtil.parseObject(getAccountWillFile()); ObjectDelta<ShadowType> delta = account.createAddDelta(); // WHEN provisioningService.applyDefinition(delta, task, result); // THEN result.computeStatus(); display("applyDefinition result", result); TestUtil.assertSuccess(result); delta.checkConsistence(true, true, true); TestUtil.assertSuccess("applyDefinition(add delta) result", result); assertSteadyResource(); }
/** * Add new user Jack with an assignments as an manager and also a member of ministry of offense. */ @Test public void test400AddJackWithOrgUnit() throws Exception { final String TEST_NAME = "test400AddJackWithOrgUnit"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); OrgType minOffense = getObject(OrgType.class, ORG_MINISTRY_OF_OFFENSE_OID).asObjectable(); PrismObject<UserType> userJack = prismContext.parseObject(USER_JACK_FILE); userJack.asObjectable().getOrganizationalUnit().add(minOffense.getName()); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(userJack.createAddDelta()); // WHEN modelService.executeChanges(deltas, null, task, result); // THEN userJack = getUser(USER_JACK_OID); display("User jack after", userJack); assertAssignedOrgs(userJack, ORG_MINISTRY_OF_OFFENSE_OID); assertHasOrgs(userJack, ORG_MINISTRY_OF_OFFENSE_OID); assertAssignedOrg(userJack, ORG_MINISTRY_OF_OFFENSE_OID, null); assertHasOrg(userJack, ORG_MINISTRY_OF_OFFENSE_OID, null); // Postcondition assertMonkeyIslandOrgSanity(); }
private void addTask(String oid, String name, String ownerOid, String handlerUri, Task execTask, OperationResult result) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { PrismObject<TaskType> task = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(TaskType.class).instantiate(); task.setOid(oid); TaskType taskType = task.asObjectable(); taskType.setName(createPolyStringType(name)); if (ownerOid != null) { ObjectReferenceType ownerRef = new ObjectReferenceType(); ownerRef.setOid(ownerOid); taskType.setOwnerRef(ownerRef); } taskType.setHandlerUri(handlerUri); modelService.executeChanges(MiscSchemaUtil.createCollection(task.createAddDelta()), null, execTask, result); }
@Test public void test043ApplyDefinitionAddResourceDelta() throws Exception { final String TEST_NAME = "test043ApplyDefinitionAddResourceDelta"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); PrismObject<ResourceType> resource = PrismTestUtil.parseObject(getResourceDummyFile()); // Transplant connector OID. The freshly-parsed resource does have only the fake one. resource.asObjectable().getConnectorRef().setOid(this.resourceType.getConnectorRef().getOid()); ObjectDelta<ResourceType> delta = resource.createAddDelta(); // Make sure this object has a different OID than the one already loaded. This avoids caching // and other side-effects resource.setOid(RESOURCE_DUMMY_NONEXISTENT_OID); // WHEN provisioningService.applyDefinition(delta, task, result); // THEN result.computeStatus(); display("applyDefinition result", result); TestUtil.assertSuccess(result); delta.checkConsistence(true, true, true); TestUtil.assertSuccess("applyDefinition(add delta) result", result); assertSteadyResource(); }
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); }
private void modifyUserAddAccountImplicitExplicitEqualReverse(String bundleName, ObjectSource<PrismObject<ShadowType>> accountSource, ObjectChecker<ModelContext<UserType>> checker) throws Exception { final String TEST_NAME = bundleName + "ImplicitExplicitEqualReverse"; 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(accountDelta, userDelta); doPreview(deltas, checker, task, result); }
private void modifyUserAddAccountImplicitExplicitNotEqual(String bundleName, ObjectSource<PrismObject<ShadowType>> accountSource, ObjectChecker<ModelContext<UserType>> checker) throws Exception { final String TEST_NAME = bundleName + "ImplicitExplicitNotEqual"; 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); // Let's make the account different. This should cause the preview to fail account.asObjectable().setDescription("aye!"); ObjectDelta<ShadowType> accountDelta = account.createAddDelta(); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(userDelta, accountDelta); doPreviewFail(deltas, task, result); }
private void modifyUserAddAccountImplicitExplicitNotEqualReverse(String bundleName, ObjectSource<PrismObject<ShadowType>> accountSource, ObjectChecker<ModelContext<UserType>> checker) throws Exception { final String TEST_NAME = bundleName + "ImplicitExplicitNotEqualReverse"; 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); // Let's make the account different. This should cause the preview to fail account.asObjectable().setDescription("aye!"); ObjectDelta<ShadowType> accountDelta = account.createAddDelta(); Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(accountDelta, userDelta); doPreviewFail(deltas, task, result); }