public String getStageShortName(AccessCertificationCampaignType campaign) { if (campaign.getState() == AccessCertificationCampaignStateType.IN_REMEDIATION) { return "remediation stage"; } else { return "stage " + campaign.getStageNumber() + "/" + CertCampaignTypeUtil.getNumberOfStages(campaign); } }
private String formatStage(AccessCertificationCampaignType campaign) { String rv = campaign.getStageNumber() + "/" + CertCampaignTypeUtil.getNumberOfStages(campaign); AccessCertificationStageType stage = CertCampaignTypeUtil.findCurrentStage(campaign); if (StringUtils.isNotEmpty(stage.getName())) { rv += " (" + stage.getName() + ")"; } return rv; }
@SuppressWarnings("unused") public static boolean isCampaignClosed(AccessCertificationCampaignType campaign) { int currentStage = campaign.getStageNumber(); int stages = getNumberOfStages(campaign); return CLOSED.equals(campaign.getState()) || currentStage > stages; }
if (currentStageNumber < CertCampaignTypeUtil.getNumberOfStages(campaign)) { LOGGER.info("Automatically opening next stage of {}", ObjectTypeUtil.toShortString(campaign)); certificationManager.openNextStage(campaign.getOid(), task, result);
final int stages = CertCampaignTypeUtil.getNumberOfStages(campaign); final AccessCertificationCampaignStateType state = campaign.getState(); LOGGER.trace("closeCurrentStage: currentStageNumber={}, stages={}, state={}", currentStageNumber, stages, state);
final int stages = CertCampaignTypeUtil.getNumberOfStages(campaign); final AccessCertificationCampaignStateType state = campaign.getState(); LOGGER.trace("openNextStage: iteration={}, currentStageNumber={}, stages={}, state={}", norm(campaign.getIteration()), currentStageNumber, stages, state);
void openNextStage(AccessCertificationCampaignType campaign, CertificationHandler handler, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, ObjectAlreadyExistsException { boolean skipEmptyStages = norm(campaign.getIteration()) > 1; // TODO make configurable int requestedStageNumber = campaign.getStageNumber() + 1; for (;;) { OpeningContext openingContext = new OpeningContext(); AccessCertificationStageType stage = createStage(campaign, requestedStageNumber); ModificationsToExecute modifications = getDeltasForStageOpen(campaign, stage, handler, openingContext, task, result); if (!skipEmptyStages || openingContext.casesEnteringStage > 0) { updateHelper.modifyCampaignPreAuthorized(campaign.getOid(), modifications, task, result); afterStageOpen(campaign.getOid(), stage, task, result); // notifications, bookkeeping, ... return; } LOGGER.debug("No work items created, skipping to the next stage"); requestedStageNumber++; if (requestedStageNumber > CertCampaignTypeUtil.getNumberOfStages(campaign)) { result.recordWarning("No more (non-empty) stages available"); return; } } }
final int lastStageNumber = CertCampaignTypeUtil.getNumberOfStages(campaign); final AccessCertificationCampaignStateType state = campaign.getState(); LOGGER.trace("startRemediation: currentStageNumber={}, stages={}, state={}", currentStageNumber, lastStageNumber, state);
void closeCampaign(AccessCertificationCampaignType campaign, Task task, OperationResult result) throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException { LOGGER.info("Closing campaign {}", ObjectTypeUtil.toShortString(campaign)); XMLGregorianCalendar now = clock.currentTimeXMLGregorianCalendar(); int lastStageNumber = CertCampaignTypeUtil.getNumberOfStages(campaign); // TODO issue a warning if we are not in a correct state ModificationsToExecute modifications = new ModificationsToExecute(); modifications.add(updateHelper.createStageNumberDelta(lastStageNumber + 1)); modifications.add(updateHelper.createStateDelta(CLOSED)); modifications.add(updateHelper.createTriggerReplaceDelta(createTriggersForCampaignClose(campaign, result))); modifications.add(updateHelper.createEndTimeDelta(now)); createWorkItemsCloseDeltas(campaign, modifications, now, result); updateHelper.modifyCampaignPreAuthorized(campaign.getOid(), modifications, task, result); AccessCertificationCampaignType updatedCampaign = updateHelper.refreshCampaign(campaign, result); eventHelper.onCampaignEnd(updatedCampaign, task, result); if (campaign.getDefinitionRef() != null) { List<ItemDelta<?,?>> definitionDeltas = prismContext.deltaFor(AccessCertificationDefinitionType.class) .item(F_LAST_CAMPAIGN_CLOSED_TIMESTAMP).replace(now) .asItemDeltas(); updateHelper.modifyObjectPreAuthorized(AccessCertificationDefinitionType.class, campaign.getDefinitionRef().getOid(), definitionDeltas, task, result); } }