protected <F extends FocusType> void assertEffectiveActivation(AssignmentType assignmentType, ActivationStatusType expected) { ActivationType activationType = assignmentType.getActivation(); assertNotNull("No activation in "+assignmentType, activationType); assertEquals("Wrong effectiveStatus in activation in "+assignmentType, expected, activationType.getEffectiveStatus()); }
protected <F extends FocusType> void assertEffectiveActivation(AssignmentType assignmentType, ActivationStatusType expected) { ActivationType activationType = assignmentType.getActivation(); assertNotNull("No activation in "+assignmentType, activationType); assertEquals("Wrong effectiveStatus in activation in "+assignmentType, expected, activationType.getEffectiveStatus()); }
public ActivationAsserter<AssignmentAsserter<R>> activation() { ActivationAsserter<AssignmentAsserter<R>> asserter = new ActivationAsserter<>(assignment.getActivation(), this, getDetails()); copySetupTo(asserter); return asserter; }
public static String prettyPrint(AssignmentType assignmentType) { if (assignmentType == null) { return "null"; } StringBuilder sb = new StringBuilder("AssignmentType("); if (assignmentType.getTarget() != null) { sb.append("target:"); sb.append(prettyPrint(assignmentType.getTarget())); } if (assignmentType.getTargetRef() != null) { sb.append("target:"); sb.append(prettyPrint(assignmentType.getTargetRef())); } if (assignmentType.getConstruction() != null) { sb.append(prettyPrint(assignmentType.getConstruction())); } sb.append(", "); if (assignmentType.getActivation() != null) { sb.append(prettyPrint(assignmentType.getActivation())); } sb.append(")"); return sb.toString(); }
/** * Used for assignments and similar objects that do not have separate lifecycle. */ public static boolean isAssignmentValid(AssignmentHolderType focus, AssignmentType assignmentType, XMLGregorianCalendar now, ActivationComputer activationComputer, LifecycleStateModelType focusStateModel) { String focusLifecycleState = focus.getLifecycleState(); if (!activationComputer.lifecycleHasActiveAssignments(focusLifecycleState, focusStateModel)) { return false; } return isValid(assignmentType.getLifecycleState(), assignmentType.getActivation(), now, activationComputer, focusStateModel); }
protected void checkNoAssignmentValidity(UserType jack) { assertEquals("jack's assignments", 1, jack.getAssignment().size()); AssignmentType assignmentType = jack.getAssignment().get(0); if (assignmentType.getActivation() != null) { assertNull("validFrom already set", assignmentType.getActivation().getValidFrom()); assertNull("validTo already set", assignmentType.getActivation().getValidTo()); } }
private void disableAssignments(String text) { for (String assignmentText : getList(text)) { AssignmentType assignment = findAssignmentOrInducement(assignmentText); if (assignment.getActivation() == null) { assignment.setActivation(new ActivationType(prismContext)); } assignment.getActivation().setAdministrativeStatus(ActivationStatusType.DISABLED); } }
private void checkAssignmentValidity(UserType jack, XMLGregorianCalendar validFrom, XMLGregorianCalendar validTo) { assertEquals("jack's assignments", 1, jack.getAssignment().size()); AssignmentType assignmentType = jack.getAssignment().get(0); assertEquals("wrong validFrom", validFrom, assignmentType.getActivation().getValidFrom()); assertEquals("wrong validTo", validTo, assignmentType.getActivation().getValidTo()); }
private void processAssignment(AssignmentType assignment, ObjectType object, List<AccessCertificationCaseType> caseList) { AccessCertificationAssignmentCaseType assignmentCase = new AccessCertificationAssignmentCaseType(prismContext); assignmentCase.setAssignment(assignment.clone()); assignmentCase.setObjectRef(ObjectTypeUtil.createObjectRef(object, prismContext)); assignmentCase.setTenantRef(assignment.getTenantRef()); assignmentCase.setOrgRef(assignment.getOrgRef()); assignmentCase.setActivation(assignment.getActivation()); if (assignment.getTargetRef() != null) { assignmentCase.setTargetRef(assignment.getTargetRef()); } else { // very strange: assignment with no target, but participating in the exclusion? // maybe a dynamic target, though } caseList.add(assignmentCase); }
assignmentCase.setTenantRef(assignment.getTenantRef()); assignmentCase.setOrgRef(assignment.getOrgRef()); assignmentCase.setActivation(assignment.getActivation()); boolean valid; if (assignment.getTargetRef() != null) { valid = false; // neither role/org/service nor resource assignment; ignored for now valid = valid && (!isEnabledItemsOnly(scope) || ActivationUtil.isAdministrativeEnabledOrNull(assignment.getActivation())); valid = valid && itemSelectionExpressionAccepts(assignment, isInducement, object, campaign, task, result); if (valid) {
@Test public void testAssignmentHashcode3() throws SchemaException { LOGGER.info("\n\n===[ testAssignmentHashcode3 ]===\n"); System.out.println("\n\n===[ testAssignmentHashcode3 ]===\n"); PrismContext prismContext = PrismTestUtil.getPrismContext(); AssignmentType a1a = new AssignmentType(prismContext) .beginActivation() .validTo("2018-01-01T00:00:00.000+01:00") .end(); AssignmentType a1b = a1a.clone(); // use unqualified item name for validTo a1b.getActivation().asPrismContainerValue() .findItem(ActivationType.F_VALID_TO) .setElementName(new QName("validTo")); System.out.println("a1a = " + a1a.asPrismContainerValue().debugDump()); System.out.println("a1b = " + a1b.asPrismContainerValue().debugDump()); // WHEN assertEquals("Wrong hashCode", a1a.hashCode(), a1b.hashCode()); }
if (jaxb.getActivation() != null) { RActivation activation = new RActivation(); RActivation.fromJaxb(jaxb.getActivation(), activation, repositoryContext); repo.setActivation(activation);
@Test public void testDeleteInducementActivationSameNullIdApplyToObject() throws Exception { final String TEST_NAME = "testDeleteInducementActivationSameNullIdApplyToObject"; displayTestTile(TEST_NAME); // GIVEN PrismObject<RoleType> role = PrismTestUtil.parseObject(ROLE_CONSTRUCTION_FILE); //Delta ActivationType activationType = new ActivationType(); activationType.setAdministrativeStatus(ActivationStatusType.ENABLED); // No container ID ObjectDelta<RoleType> roleDelta = getPrismContext().deltaFactory().object() .createModificationDeleteContainer(RoleType.class, ROLE_CONSTRUCTION_OID, ItemPath.create(RoleType.F_INDUCEMENT, ROLE_CONSTRUCTION_INDUCEMENT_ID, AssignmentType.F_ACTIVATION), activationType); // WHEN roleDelta.applyTo(role); // THEN System.out.println("Role after delta application:"); System.out.println(role.debugDump()); assertEquals("Wrong OID", ROLE_CONSTRUCTION_OID, role.getOid()); PrismAsserts.assertPropertyValue(role, UserType.F_NAME, PrismTestUtil.createPolyString("Construction")); PrismContainer<AssignmentType> inducementContainer = role.findContainer(RoleType.F_INDUCEMENT); assertNotNull("No inducement", inducementContainer); assertEquals("Unexpected number of inducement values", 1, inducementContainer.size()); PrismContainerValue<AssignmentType> inducementValue = inducementContainer.getValues().iterator().next(); AssignmentType inducement = inducementValue.asContainerable(); ActivationType activation = inducement.getActivation(); // activation should be gone (the error is that it is empty and not gone) assertNull("Activation is not gone", activation); }
private <F extends FocusType> void applyAssignmentValueMetadataAdd(LensContext<F> context, PrismContainerValue<AssignmentType> assignmentContainerValue, String desc, XMLGregorianCalendar now, Task task, OperationResult result) throws SchemaException { AssignmentType assignmentType = assignmentContainerValue.asContainerable(); MetadataType metadataType = assignmentType.getMetadata(); if (metadataType == null) { metadataType = new MetadataType(); assignmentType.setMetadata(metadataType); } transplantRequestMetadata(context, metadataType); // This applies the effective status only to assignments that are completely new (whole container is added/replaced) // The effectiveStatus of existing assignments is processed in FocusProcessor.processAssignmentActivation() // We cannot process that here. Because this code is not even triggered when there is no delta. So recompute will not work. ActivationType activationType = assignmentType.getActivation(); ActivationStatusType effectiveStatus = activationComputer.getEffectiveStatus(assignmentType.getLifecycleState(), activationType, null); if (activationType == null) { activationType = new ActivationType(); assignmentType.setActivation(activationType); } activationType.setEffectiveStatus(effectiveStatus); applyCreateMetadata(context, metadataType, now, task); if (LOGGER.isTraceEnabled()) { LOGGER.trace("Adding operational data {} to assignment cval ({}):\nMETADATA:\n{}\nACTIVATION:\n{}", metadataType, desc, assignmentContainerValue.debugDump(1), activationType.asPrismContainerValue().debugDump(1)); } }
PrismContainerValue<AssignmentType> assignmentValue = assignmentContainer.getValues().iterator().next(); AssignmentType assignment = assignmentValue.asContainerable(); ActivationType assignmentActivation = assignment.getActivation();
@Test public void test220UserContainerReplace() throws Exception { final String TEST_NAME = "test220UserContainerReplace"; Task task = createTask(TEST_NAME); AssignmentType ass1 = new AssignmentType(prismContext); ass1.setActivation(new ActivationType(prismContext)); ass1.getActivation().setAdministrativeStatus(ActivationStatusType.DISABLED); ass1.getActivation().setValidFrom(XmlTypeConverter.createXMLGregorianCalendar(2010, 1, 1, 0, 0, 0)); ass1.setTargetRef(createObjectRef(ROLE_SUPERUSER_OID, ROLE)); ActivationType act1 = new ActivationType(prismContext); act1.setAdministrativeStatus(ActivationStatusType.DISABLED); ObjectDelta<?> delta = deltaFor(UserType.class) .item(UserType.F_NAME).replace("admin") .item(UserType.F_ACTIVATION).replace(act1) .item(UserType.F_ASSIGNMENT).replace(ass1) .asObjectDelta(USER_ADMINISTRATOR_OID); /// WHEN displayWhen(TEST_NAME); final Scene scene = visualizer.visualizeDelta((ObjectDelta<? extends ObjectType>) delta, task, task.getResult()); // THEN displayThen(TEST_NAME); display("scene", scene); // TODO some asserts }
@Test public void test210UserDeltaContainers() throws Exception { final String TEST_NAME = "test210UserDeltaContainers"; Task task = createTask(TEST_NAME); AssignmentType ass1 = new AssignmentType(prismContext); ass1.setActivation(new ActivationType(prismContext)); ass1.getActivation().setAdministrativeStatus(ActivationStatusType.ENABLED); ass1.getActivation().setValidTo(XmlTypeConverter.createXMLGregorianCalendar(2017, 1, 1, 0, 0, 0)); ass1.setTargetRef(createObjectRef(ROLE_SUPERUSER_OID, ROLE)); ObjectDelta<?> delta = deltaFor(UserType.class) .item(UserType.F_NAME).replace("admin") .item(UserType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS).replace(ActivationStatusType.ENABLED) .item(UserType.F_ASSIGNMENT, 1, AssignmentType.F_TARGET_REF).replace(createObjectRef("123", ROLE).asReferenceValue()) .item(UserType.F_ASSIGNMENT, 1, AssignmentType.F_DESCRIPTION).add("suspicious") .item(UserType.F_ASSIGNMENT).add(ass1) .asObjectDelta(USER_ADMINISTRATOR_OID); /// WHEN displayWhen(TEST_NAME); final Scene scene = visualizer.visualizeDelta((ObjectDelta<? extends ObjectType>) delta, task, task.getResult()); // THEN displayThen(TEST_NAME); display("scene", scene); // TODO some asserts }
AssignmentType ass1 = new AssignmentType(prismContext); ass1.setActivation(new ActivationType(prismContext)); ass1.getActivation().setAdministrativeStatus(ActivationStatusType.ENABLED); ass1.getActivation().setValidTo(XmlTypeConverter.createXMLGregorianCalendar(2019, 1, 1, 0, 0, 0)); ass1.setTargetRef(createObjectRef(ROLE_SUPERUSER_OID, ROLE)); ut.getAssignment().add(ass1);
ActivationType currentActivationType = assignmentType.getActivation(); ActivationStatusType expectedEffectiveStatus = activationComputer.getEffectiveStatus(assignmentType.getLifecycleState(), currentActivationType, null); if (currentActivationType == null) {