Search in sources :

Example 1 with F_CASE

use of com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType.F_CASE in project midpoint by Evolveum.

the class AccCertCaseOperationsHelper method recordDecision.

void recordDecision(String campaignOid, long caseId, long workItemId, AccessCertificationResponseType response, String comment, Task task, OperationResult result) throws SecurityViolationException, ObjectNotFoundException, SchemaException, ObjectAlreadyExistsException {
    AccessCertificationCaseType _case = queryHelper.getCase(campaignOid, caseId, task, result);
    if (_case == null) {
        throw new ObjectNotFoundException("Case " + caseId + " was not found in campaign " + campaignOid);
    }
    AccessCertificationCampaignType campaign = CertCampaignTypeUtil.getCampaign(_case);
    if (campaign == null) {
        throw new IllegalStateException("No owning campaign present in case " + _case);
    }
    AccessCertificationWorkItemType workItem = CertCampaignTypeUtil.findWorkItem(_case, workItemId);
    if (workItem == null) {
        throw new ObjectNotFoundException("Work item " + workItemId + " was not found in campaign " + toShortString(campaign) + ", case " + caseId);
    }
    if (response == AccessCertificationResponseType.NO_RESPONSE) {
        response = null;
    }
    ObjectReferenceType responderRef = ObjectTypeUtil.createObjectRef(securityEnforcer.getPrincipal().getUser());
    XMLGregorianCalendar now = clock.currentTimeXMLGregorianCalendar();
    ItemPath workItemPath = new ItemPath(F_CASE, caseId, F_WORK_ITEM, workItemId);
    Collection<ItemDelta<?, ?>> deltaList = DeltaBuilder.deltaFor(AccessCertificationCampaignType.class, prismContext).item(workItemPath.subPath(AccessCertificationWorkItemType.F_OUTPUT)).replace(new AbstractWorkItemOutputType().outcome(OutcomeUtils.toUri(response)).comment(comment)).item(workItemPath.subPath(AccessCertificationWorkItemType.F_OUTPUT_CHANGE_TIMESTAMP)).replace(now).item(workItemPath.subPath(AccessCertificationWorkItemType.F_PERFORMER_REF)).replace(responderRef).asItemDeltas();
    ItemDelta.applyTo(deltaList, campaign.asPrismContainerValue());
    String newCurrentOutcome = OutcomeUtils.toUri(computationHelper.computeOutcomeForStage(_case, campaign, campaign.getStageNumber()));
    if (!ObjectUtils.equals(newCurrentOutcome, _case.getCurrentStageOutcome())) {
        deltaList.add(DeltaBuilder.deltaFor(AccessCertificationCampaignType.class, prismContext).item(F_CASE, _case.asPrismContainerValue().getId(), F_CURRENT_STAGE_OUTCOME).replace(newCurrentOutcome).asItemDelta());
    }
    String newOverallOutcome = OutcomeUtils.toUri(computationHelper.computeOverallOutcome(_case, campaign, newCurrentOutcome));
    if (!ObjectUtils.equals(newOverallOutcome, _case.getOutcome())) {
        deltaList.add(DeltaBuilder.deltaFor(AccessCertificationCampaignType.class, prismContext).item(F_CASE, _case.asPrismContainerValue().getId(), F_OUTCOME).replace(newOverallOutcome).asItemDelta());
    }
    updateHelper.modifyObjectViaModel(AccessCertificationCampaignType.class, campaignOid, deltaList, task, result);
}
Also used : AccessCertificationCaseType(com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseType) XMLGregorianCalendar(javax.xml.datatype.XMLGregorianCalendar) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) ObjectTypeUtil.toShortString(com.evolveum.midpoint.schema.util.ObjectTypeUtil.toShortString) ItemPath(com.evolveum.midpoint.prism.path.ItemPath)

Example 2 with F_CASE

use of com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType.F_CASE in project midpoint by Evolveum.

the class CertificationTest method test300AddDeleteModifyCase.

@Test
public void test300AddDeleteModifyCase() throws Exception {
    OperationResult result = new OperationResult("test300AddDeleteModifyCase");
    AccessCertificationCaseType caseNoId = new AccessCertificationCaseType(prismContext);
    caseNoId.setObjectRef(createObjectRef("x123", ObjectTypes.USER));
    caseNoId.setTargetRef(createObjectRef("x456", ObjectTypes.ROLE));
    caseNoId.setStageNumber(1);
    // explicit ID is dangerous
    AccessCertificationCaseType case110 = new AccessCertificationCaseType(prismContext).id(SECOND_NEW_CASE_ID).objectRef(createObjectRef("x100123", ObjectTypes.USER)).targetRef(createObjectRef("x100456", ObjectTypes.ROLE)).stageNumber(1).beginWorkItem().assigneeRef(createObjectRef("x100789", ObjectTypes.USER)).end();
    AccessCertificationCaseType case100 = new AccessCertificationCaseType();
    case100.setId(NEW_CASE_ID);
    List<ItemDelta<?, ?>> modifications = DeltaBuilder.deltaFor(AccessCertificationCampaignType.class, prismContext).item(F_CASE).add(caseNoId, case110).delete(case100).item(F_CASE, 3, AccessCertificationCaseType.F_STAGE_NUMBER).replace(400).asItemDeltas();
    executeAndCheckModification(modifications, result, 0);
    checkCasesForCampaign(campaign1Oid, 9, result);
    checkCasesTotal(9, result);
    checkWorkItemsForCampaign(campaign1Oid, 9, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, 1, 2, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, 2, 1, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, SECOND_NEW_CASE_ID, 1, result);
    checkWorkItemsTotal(9, result);
}
Also used : AccessCertificationCaseType(com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseType) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) Test(org.testng.annotations.Test)

Example 3 with F_CASE

use of com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType.F_CASE in project midpoint by Evolveum.

the class CertificationTest method test250DeleteCase.

@Test
public void test250DeleteCase() throws Exception {
    OperationResult result = new OperationResult("test250DeleteCase");
    AccessCertificationCaseType case7 = new AccessCertificationCaseType();
    case7.setId(7L);
    List<ItemDelta<?, ?>> modifications = DeltaBuilder.deltaFor(AccessCertificationCampaignType.class, prismContext).item(F_CASE).delete(case7).asItemDeltas();
    executeAndCheckModification(modifications, result, 0);
    checkCasesForCampaign(campaign1Oid, 8, result);
    checkCasesTotal(8, result);
    checkWorkItemsForCampaign(campaign1Oid, 9, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, 1, 2, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, 2, 1, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, NEW_CASE_ID, 1, result);
    checkWorkItemsTotal(9, result);
}
Also used : AccessCertificationCaseType(com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseType) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) Test(org.testng.annotations.Test)

Example 4 with F_CASE

use of com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType.F_CASE in project midpoint by Evolveum.

the class CertificationTest method test320AddDeleteModifyResponse.

@Test
public void test320AddDeleteModifyResponse() throws Exception {
    OperationResult result = new OperationResult("test320AddDeleteModifyResponse");
    AccessCertificationWorkItemType wiNoId = new AccessCertificationWorkItemType(prismContext);
    wiNoId.assigneeRef(createObjectRef("888", ObjectTypes.USER));
    wiNoId.setStageNumber(1);
    AccessCertificationWorkItemType wi200 = new AccessCertificationWorkItemType(prismContext);
    // this is dangerous
    wi200.setId(200L);
    wi200.setStageNumber(1);
    wi200.assigneeRef(createObjectRef("200888", ObjectTypes.USER));
    AccessCertificationWorkItemType wi1 = new AccessCertificationWorkItemType();
    wi1.setId(1L);
    List<ItemDelta<?, ?>> modifications = DeltaBuilder.deltaFor(AccessCertificationCampaignType.class, prismContext).item(F_CASE, 6, F_WORK_ITEM).add(wiNoId, wi200).item(F_CASE, 6, F_WORK_ITEM).delete(wi1).item(F_CASE, 6, F_WORK_ITEM, 2, F_OUTPUT, F_OUTCOME).replace(SchemaConstants.MODEL_CERTIFICATION_OUTCOME_ACCEPT).asItemDeltas();
    executeAndCheckModification(modifications, result, 0);
    checkCasesForCampaign(campaign1Oid, 9, result);
    checkCasesTotal(9, result);
    checkWorkItemsForCampaign(campaign1Oid, 10, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, 1, 2, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, 2, 1, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, SECOND_NEW_CASE_ID, 1, result);
    checkWorkItemsTotal(10, result);
}
Also used : OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) AccessCertificationWorkItemType(com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationWorkItemType) Test(org.testng.annotations.Test)

Example 5 with F_CASE

use of com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType.F_CASE in project midpoint by Evolveum.

the class CertificationTest method test270ModifyWorkItem.

@Test
public void test270ModifyWorkItem() throws Exception {
    OperationResult result = new OperationResult("test270ModifyWorkItem");
    PrismObject<AccessCertificationCampaignType> campaign = getFullCampaign(campaign1Oid, result);
    AccessCertificationCaseType case100 = campaign.asObjectable().getCase().stream().filter(c -> c.getId() == NEW_CASE_ID).findFirst().orElseThrow(() -> new AssertionError("No case 100"));
    assertEquals("Wrong # of work items in case 100", 2, case100.getWorkItem().size());
    AccessCertificationWorkItemType workItem = case100.getWorkItem().stream().filter(wi -> wi.getOriginalAssigneeRef() != null).findFirst().orElse(null);
    assertNotNull("No new work item", workItem);
    XMLGregorianCalendar closedTimestamp = XmlTypeConverter.createXMLGregorianCalendar(new Date());
    List<ItemDelta<?, ?>> modifications = DeltaBuilder.deltaFor(AccessCertificationCampaignType.class, prismContext).item(F_CASE, NEW_CASE_ID, F_WORK_ITEM, workItem.getId(), AccessCertificationWorkItemType.F_CLOSE_TIMESTAMP).replace(closedTimestamp).asItemDeltas();
    // WHEN
    executeAndCheckModification(modifications, result, 0);
    // THEN
    checkCasesForCampaign(campaign1Oid, 8, result);
    checkCasesTotal(8, result);
    checkWorkItemsForCampaign(campaign1Oid, 10, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, 1, 2, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, 2, 1, result);
    checkWorkItemsForCampaignAndCase(campaign1Oid, NEW_CASE_ID, 2, result);
    checkWorkItemsTotal(10, result);
}
Also used : AccessCertificationCaseType(com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseType) XMLGregorianCalendar(javax.xml.datatype.XMLGregorianCalendar) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ItemDelta(com.evolveum.midpoint.prism.delta.ItemDelta) Date(java.util.Date) AccessCertificationWorkItemType(com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationWorkItemType) Test(org.testng.annotations.Test)

Aggregations

ItemDelta (com.evolveum.midpoint.prism.delta.ItemDelta)14 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)11 AccessCertificationCaseType (com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCaseType)10 Test (org.testng.annotations.Test)10 AccessCertificationWorkItemType (com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationWorkItemType)7 ObjectTypeUtil.toShortString (com.evolveum.midpoint.schema.util.ObjectTypeUtil.toShortString)3 XMLGregorianCalendar (javax.xml.datatype.XMLGregorianCalendar)3 ItemPath (com.evolveum.midpoint.prism.path.ItemPath)2 OutcomeUtils (com.evolveum.midpoint.certification.api.OutcomeUtils)1 CertificationHandler (com.evolveum.midpoint.certification.impl.handlers.CertificationHandler)1 Clock (com.evolveum.midpoint.common.Clock)1 PrismContainerValue (com.evolveum.midpoint.prism.PrismContainerValue)1 PrismContext (com.evolveum.midpoint.prism.PrismContext)1 ContainerDelta (com.evolveum.midpoint.prism.delta.ContainerDelta)1 PropertyDelta (com.evolveum.midpoint.prism.delta.PropertyDelta)1 DeltaBuilder (com.evolveum.midpoint.prism.delta.builder.DeltaBuilder)1 QueryConvertor (com.evolveum.midpoint.prism.marshaller.QueryConvertor)1 IdItemPathSegment (com.evolveum.midpoint.prism.path.IdItemPathSegment)1 NameItemPathSegment (com.evolveum.midpoint.prism.path.NameItemPathSegment)1 ObjectFilter (com.evolveum.midpoint.prism.query.ObjectFilter)1