public static boolean isReiterable(AccessCertificationCampaignType campaign) { return campaign.getState() == AccessCertificationCampaignStateType.CLOSED && (campaign.getReiterationDefinition() == null || campaign.getReiterationDefinition().getLimit() == null || norm(campaign.getIteration()) < campaign.getReiterationDefinition().getLimit()); } }
@NotNull private Collection<TriggerType> createTriggersForCampaignClose(AccessCertificationCampaignType campaign, OperationResult result) { if (campaign.getReiterationDefinition() == null || campaign.getReiterationDefinition().getStartsAfter() == null) { return emptySet(); } if (limitReached(campaign, campaign.getReiterationDefinition().getLimitWhenAutomatic()) || limitReached(campaign, campaign.getReiterationDefinition().getLimit())) { return emptySet(); } if (queryHelper.hasNoResponseCases(campaign.getOid(), result)) { TriggerType trigger = new TriggerType(prismContext); XMLGregorianCalendar triggerTime = clock.currentTimeXMLGregorianCalendar(); triggerTime.add(campaign.getReiterationDefinition().getStartsAfter()); trigger.setTimestamp(triggerTime); trigger.setHandlerUri(AccessCertificationCampaignReiterationTriggerHandler.HANDLER_URI); return singleton(trigger); } else { LOGGER.debug("Campaign {} has no no-response cases, skipping creation of reiteration trigger", toShortStringLazy(campaign)); return emptySet(); } }
void reiterateCampaign(AccessCertificationCampaignType campaign, Task task, OperationResult result) throws ObjectAlreadyExistsException, ObjectNotFoundException, SchemaException { LOGGER.info("Reiterating campaign {}", ObjectTypeUtil.toShortString(campaign)); if (campaign.getState() != CLOSED) { throw new IllegalStateException("Campaign is not in CLOSED state"); } if (campaign.getReiterationDefinition() != null && campaign.getReiterationDefinition().getLimit() != null && norm(campaign.getIteration()) >= campaign.getReiterationDefinition().getLimit()) { throw new IllegalStateException("Campaign cannot be reiterated: maximum number of iterations (" + campaign.getReiterationDefinition().getLimit() + ") was reached."); } ModificationsToExecute modifications = new ModificationsToExecute(); modifications.add(updateHelper.createStageNumberDelta(0)); modifications.add(updateHelper.createStateDelta(CREATED)); modifications.add(updateHelper.createTriggerDeleteDelta()); modifications.add(updateHelper.createStartTimeDelta(null)); modifications.add(updateHelper.createEndTimeDelta(null)); int newIteration = norm(campaign.getIteration()) + 1; modifications.add(prismContext.deltaFor(AccessCertificationCampaignType.class) .item(AccessCertificationCampaignType.F_ITERATION).replace(newIteration) .asItemDelta()); createCasesReiterationDeltas(campaign, newIteration, modifications, result); updateHelper.modifyCampaignPreAuthorized(campaign.getOid(), modifications, task, result); }