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);
}
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);
}
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);
}
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);
}
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);
}
Aggregations