private List<ItemDelta<?, ?>> createMetadataDeltas(AccessCertificationCaseType aCase, AccessCertificationCampaignType campaign, Class<? extends ObjectType> objectClass, ItemPath pathPrefix, RunContext runContext, OperationResult result) throws SchemaException { String outcome = aCase.getOutcome(); if (OutcomeUtils.isNoneOrNotDecided(outcome)) { return emptyList(); } Set<ObjectReferenceType> certifiers = new HashSet<>(); Set<String> comments = new HashSet<>(); for (AccessCertificationWorkItemType workItem : aCase.getWorkItem()) { AbstractWorkItemOutputType output = workItem.getOutput(); if (workItem.getPerformerRef() == null || output == null) { continue; } boolean commentNotEmpty = StringUtils.isNotEmpty(output.getComment()); if (commentNotEmpty || !OutcomeUtils.isNoneOrNotDecided(output.getOutcome())) { certifiers.add(workItem.getPerformerRef().clone()); String formattedComment = runContext.commentsFormatter.formatComment(workItem, runContext.task, result); if (StringUtils.isNotEmpty(formattedComment)) { comments.add(formattedComment); } } } return prismContext.deltaFor(objectClass) .item(pathPrefix.append(MetadataType.F_CERTIFICATION_FINISHED_TIMESTAMP)).replace(campaign.getEndTimestamp()) .item(pathPrefix.append(MetadataType.F_CERTIFICATION_OUTCOME)).replace(outcome) .item(pathPrefix.append(MetadataType.F_CERTIFIER_REF)).replaceRealValues(certifiers) .item(pathPrefix.append(MetadataType.F_CERTIFIER_COMMENT)).replaceRealValues(comments) .asItemDeltas(); }
protected void assertSanityAfterCampaignCreate(AccessCertificationCampaignType campaign, AccessCertificationDefinitionType definition) { assertEquals("Unexpected certification cases", 0, campaign.getCase().size()); assertStateAndStage(campaign, CREATED, 0); assertEquals("Unexpected # of stages", definition.getStageDefinition().size(), campaign.getStageDefinition().size()); assertDefinitionAndOwner(campaign, definition); assertNull("Unexpected start time", campaign.getStartTimestamp()); assertNull("Unexpected end time", campaign.getEndTimestamp()); } protected void assertSanityAfterCampaignStart(AccessCertificationCampaignType campaign, AccessCertificationDefinitionType definition, int cases)
protected void assertSanityAfterStageOpen(AccessCertificationCampaignType campaign, AccessCertificationDefinitionType definition, int stageNumber, int iteration, int expectedStages) { assertStateStageIteration(campaign, IN_REVIEW_STAGE, stageNumber, iteration); assertDefinitionAndOwner(campaign, definition); assertApproximateTime("start time", new Date(), campaign.getStartTimestamp()); assertNull("Unexpected end time", campaign.getEndTimestamp()); assertEquals("wrong # of defined stages", definition.getStageDefinition().size(), campaign.getStageDefinition().size()); assertEquals("wrong # of stages", expectedStages, campaign.getStage().size()); AccessCertificationStageType stage = CertCampaignTypeUtil.findStage(campaign, stageNumber); assertEquals("wrong stage #", stageNumber, stage.getNumber()); assertApproximateTime("stage start", new Date(), stage.getStartTimestamp()); assertNotNull("stage deadline", stage.getDeadline()); // too lazy to compute exact datetime assertNull("unexpected stage end", stage.getEndTimestamp()); }
public static void copyFromJAXB(AccessCertificationCampaignType jaxb, RAccessCertificationCampaign repo, RepositoryContext repositoryContext, IdGeneratorResult generatorResult) throws DtoTranslationException { copyAssignmentHolderInformationFromJAXB(jaxb, repo, repositoryContext, generatorResult); repo.setNameCopy(RPolyString.copyFromJAXB(jaxb.getName())); repo.setDefinitionRef(RUtil.jaxbRefToEmbeddedRepoRef(jaxb.getDefinitionRef(), repositoryContext.relationRegistry)); List<AccessCertificationCaseType> cases = jaxb.getCase(); if (!cases.isEmpty()) { for (AccessCertificationCaseType case1 : cases) { RAccessCertificationCase rCase = RAccessCertificationCase.toRepo(repo, case1, repositoryContext); rCase.setTransient(generatorResult.isTransient(case1.asPrismContainerValue())); // redundant? repo.getCase().add(rCase); } } repo.setOwnerRefCampaign(RUtil.jaxbRefToEmbeddedRepoRef(jaxb.getOwnerRef(), repositoryContext.relationRegistry)); repo.setHandlerUri(jaxb.getHandlerUri()); repo.setStart(jaxb.getStartTimestamp()); repo.setEnd(jaxb.getEndTimestamp()); repo.setState(RUtil.getRepoEnumValue(jaxb.getState(), RAccessCertificationCampaignState.class)); repo.setIteration(norm(jaxb.getIteration())); repo.setStageNumber(jaxb.getStageNumber()); } }
protected void assertSanityAfterCampaignStart(AccessCertificationCampaignType campaign, AccessCertificationDefinitionType definition, int cases, int iteration, int expectedStages, Date expectedStartTime) throws ConfigurationException, ObjectNotFoundException, SchemaException, CommunicationException, SecurityViolationException, ExpressionEvaluationException { assertStateStageIteration(campaign, IN_REVIEW_STAGE, 1, iteration); assertDefinitionAndOwner(campaign, definition); assertApproximateTime("start time", expectedStartTime, campaign.getStartTimestamp()); assertNull("Unexpected end time", campaign.getEndTimestamp()); assertEquals("wrong # of defined stages", definition.getStageDefinition().size(), campaign.getStageDefinition().size()); assertEquals("wrong # of stages", expectedStages, campaign.getStage().size()); AccessCertificationStageType stage = campaign.getStage().stream().filter(s -> norm(s.getIteration()) == iteration && s.getNumber() == 1).findFirst().orElse(null); assertNotNull("No stage #1 for current iteration", stage); assertEquals("wrong stage #", 1, stage.getNumber()); assertApproximateTime("stage 1 start", expectedStartTime, stage.getStartTimestamp()); assertNotNull("stage 1 deadline", stage.getDeadline()); // too lazy to compute exact datetime assertNull("unexpected stage 1 end", stage.getEndTimestamp()); assertEquals("Wrong number of certification cases", cases, campaign.getCase().size()); PrismObject<AccessCertificationDefinitionType> def = getObjectViaRepo(AccessCertificationDefinitionType.class, definition.getOid()); if (iteration == 1) { assertApproximateTime("last campaign started", expectedStartTime, def.asObjectable().getLastCampaignStartedTimestamp()); assertNull("unexpected last campaign closed", def.asObjectable().getLastCampaignClosedTimestamp()); } else { assertNotNull("last campaign closed", def.asObjectable().getLastCampaignClosedTimestamp()); } assertCasesCount(campaign.getOid(), cases); }
protected void assertSanityAfterStageClose(AccessCertificationCampaignType campaign, AccessCertificationDefinitionType definition, int stageNumber, int iteration, int expectedStages) { assertStateStageIteration(campaign, REVIEW_STAGE_DONE, stageNumber, iteration); assertDefinitionAndOwner(campaign, definition); assertNull("Unexpected end time", campaign.getEndTimestamp()); assertEquals("wrong # of stages", expectedStages, campaign.getStage().size()); AccessCertificationStageType stage = CertCampaignTypeUtil.getCurrentStage(campaign); assertNotNull(stage); assertEquals("wrong stage #", stageNumber, stage.getNumber()); assertEquals("wrong stage iteration #", iteration, norm(stage.getIteration())); assertApproximateTime("stage start", new Date(), stage.getStartTimestamp()); assertApproximateTime("stage end", new Date(), stage.getStartTimestamp()); for (AccessCertificationCaseType aCase : campaign.getCase()) { if (aCase.getStageNumber() != stageNumber || norm(aCase.getIteration()) != iteration) { continue; } checkCaseOutcomesSanity(aCase, campaign, stageNumber); } }
assertEquals("wrong campaign stage", 2, campaign.getStageNumber()); assertDefinitionAndOwner(campaign, certificationDefinition, USER_BOB_OID); assertApproximateTime("end time", new Date(), campaign.getEndTimestamp()); assertEquals("wrong # of stages", 1, campaign.getStage().size()); assertApproximateTime("stage 1 end", new Date(), campaign.getStage().get(0).getEndTimestamp());
assertEquals("wrong campaign stage", 2, campaign.getStageNumber()); assertDefinitionAndOwner(campaign, certificationDefinition); assertApproximateTime("end time", new Date(), campaign.getEndTimestamp()); assertEquals("wrong # of stages", 1, campaign.getStage().size());
assertEquals("wrong campaign stage", 5, campaign.getStageNumber()); assertDefinitionAndOwner(campaign, certificationDefinition); assertApproximateTime("end time", new Date(), campaign.getEndTimestamp()); assertEquals("wrong # of stages", 4, campaign.getStage().size());
assertEquals("wrong campaign stage", 3, campaign.getStageNumber()); assertDefinitionAndOwner(campaign, certificationDefinition); assertApproximateTime("end time", new Date(), campaign.getEndTimestamp()); assertEquals("wrong # of stages", 2, campaign.getStage().size());