/** * Create an instance of {@link TriggerType } * */ public TriggerType createTriggerType() { return new TriggerType(); }
public static void removeAllStageTriggersForWorkItem(Task wfTask, OperationResult result) { List<PrismContainerValue<TriggerType>> toDelete = new ArrayList<>(); for (TriggerType triggerType : wfTask.getTaskPrismObject().asObjectable().getTrigger()) { if (WfTimedActionTriggerHandler.HANDLER_URI.equals(triggerType.getHandlerUri())) { toDelete.add(triggerType.clone().asPrismContainerValue()); } } removeSelectedTriggers(wfTask, toDelete, result); }
public static void copyToJAXB(RTrigger repo, TriggerType jaxb) throws DtoTranslationException { Validate.notNull(repo, "Repo object must not be null."); Validate.notNull(jaxb, "JAXB object must not be null."); jaxb.setId(RUtil.toLong(repo.getId())); jaxb.setHandlerUri(repo.getHandlerUri()); jaxb.setTimestamp(repo.getTimestamp()); }
@Override protected TriggerType createItem(PrismContainerValue value) { TriggerType trigger = new TriggerType(); trigger.setupContainerValue(value); return trigger; }
public TriggerType clone() { TriggerType object = new TriggerType(); PrismContainerValue value = asPrismContainerValue().clone(); object.setupContainerValue(value); return object; }
if (objectCurrent != null) { for (TriggerType trigger: objectCurrent.asObjectable().getTrigger()) { if (RecomputeTriggerHandler.HANDLER_URI.equals(trigger.getHandlerUri()) && nextRecomputeTime.equals(trigger.getTimestamp())) { alreadyHasTrigger = true; break; triggerDelta.addValueToAdd(triggerCVal); TriggerType triggerType = triggerCVal.asContainerable(); triggerType.setTimestamp(nextRecomputeTime); triggerType.setHandlerUri(RecomputeTriggerHandler.HANDLER_URI);
final TriggerType triggerClose = new TriggerType(prismContext); triggerClose.setHandlerUri(AccessCertificationCloseStageTriggerHandler.HANDLER_URI); triggerClose.setTimestamp(stageDeadline); triggerClose.setId(lastId); triggers.add(triggerClose); beforeEnd.add(beforeDeadline.negate()); if (XmlTypeConverter.toMillis(beforeEnd) > System.currentTimeMillis()) { final TriggerType triggerBeforeEnd = new TriggerType(prismContext); triggerBeforeEnd.setHandlerUri(AccessCertificationCloseStageApproachingTriggerHandler.HANDLER_URI); triggerBeforeEnd.setTimestamp(beforeEnd); triggerBeforeEnd.setId(++lastId); triggers.add(triggerBeforeEnd);
protected void addTrigger(String oid, XMLGregorianCalendar timestamp, String uri) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { Task task = taskManager.createTaskInstance(AbstractModelIntegrationTest.class.getName() + ".addTrigger"); OperationResult result = task.getResult(); TriggerType triggerType = new TriggerType(); triggerType.setTimestamp(timestamp); triggerType.setHandlerUri(uri); ObjectDelta<ObjectType> delta = prismContext.deltaFactory().object() .createModificationAddContainer(ObjectType.class, oid, ObjectType.F_TRIGGER, triggerType); executeChanges(delta, null, task, result); result.computeStatus(); TestUtil.assertSuccess(result); }
protected <O extends ObjectType> void assertTrigger(PrismObject<O> object, String handlerUri, XMLGregorianCalendar start, XMLGregorianCalendar end) throws ObjectNotFoundException, SchemaException { for (TriggerType trigger: object.asObjectable().getTrigger()) { if (handlerUri.equals(trigger.getHandlerUri()) && MiscUtil.isBetween(trigger.getTimestamp(), start, end)) { return; } } AssertJUnit.fail("Expected that " + object + " will have a trigger but it has not"); }
Pair<Duration, AbstractWorkItemActionType> notifyInfo, PrismContext prismContext, @Nullable String workItemId, @NotNull String handlerUri) throws SchemaException { TriggerType trigger = new TriggerType(prismContext); trigger.setTimestamp(triggerTime); trigger.setHandlerUri(handlerUri); ExtensionType extension = new ExtensionType(prismContext); trigger.setExtension(extension); PrismProperty<String> workItemIdProp = workItemIdDef.instantiate(); workItemIdProp.addRealValue(workItemId); trigger.getExtension().asPrismContainerValue().add(workItemIdProp);
private static void fromJaxb(TriggerType jaxb, RTrigger repo, RepositoryContext repositoryContext, IdGeneratorResult generatorResult) throws DtoTranslationException { Validate.notNull(repo, "Repo object must not be null."); Validate.notNull(jaxb, "JAXB object must not be null."); if (generatorResult != null) { repo.setTransient(generatorResult.isTransient(jaxb.asPrismContainerValue())); } repo.setId(RUtil.toInteger(jaxb.getId())); repo.setHandlerUri(jaxb.getHandlerUri()); repo.setTimestamp(jaxb.getTimestamp()); }
protected void addTriggers(String oid, Collection<XMLGregorianCalendar> timestamps, String uri) throws SchemaException, ObjectAlreadyExistsException, ObjectNotFoundException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException, SecurityViolationException { Task task = taskManager.createTaskInstance(AbstractModelIntegrationTest.class.getName() + ".addTriggers"); OperationResult result = task.getResult(); Collection<TriggerType> triggers = timestamps.stream() .map(ts -> new TriggerType().timestamp(ts).handlerUri(uri)) .collect(Collectors.toList()); ObjectDelta<ObjectType> delta = prismContext.deltaFor(ObjectType.class) .item(ObjectType.F_TRIGGER).addRealValues(triggers) .asObjectDeltaCast(oid); executeChanges(delta, null, task, result); result.computeStatus(); TestUtil.assertSuccess(result); }
public static void removeTriggersForWorkItem(Task wfTask, String workItemId, OperationResult result) { List<PrismContainerValue<TriggerType>> toDelete = new ArrayList<>(); for (TriggerType triggerType : wfTask.getTaskPrismObject().asObjectable().getTrigger()) { if (WfTimedActionTriggerHandler.HANDLER_URI.equals(triggerType.getHandlerUri())) { PrismProperty workItemIdProperty = triggerType.getExtension().asPrismContainerValue() .findProperty(SchemaConstants.MODEL_EXTENSION_WORK_ITEM_ID); if (workItemIdProperty != null && workItemId.equals(workItemIdProperty.getRealValue())) { toDelete.add(triggerType.clone().asPrismContainerValue()); } } } removeSelectedTriggers(wfTask, toDelete, result); }
private List<TriggerType> getSortedTriggers(List<PrismContainerValue<TriggerType>> triggerCVals) { List<TriggerType> rv = new ArrayList<>(); triggerCVals.forEach(cval -> rv.add(cval.clone().asContainerable())); rv.sort(Comparator.comparingLong(t -> XmlTypeConverter.toMillis(t.getTimestamp()))); return rv; }
int foundTimedActions = 0; for (TriggerType trigger : task.getTrigger()) { if (!WfTimedActionTriggerHandler.HANDLER_URI.equals(trigger.getHandlerUri())) { continue; String workItemId = ObjectTypeUtil.getExtensionItemRealValue(trigger.getExtension(), SchemaConstants.MODEL_EXTENSION_WORK_ITEM_ID); if (!taskEvent.getTaskId().equals(workItemId)) { continue; Duration timeBeforeAction = ObjectTypeUtil.getExtensionItemRealValue(trigger.getExtension(), SchemaConstants.MODEL_EXTENSION_TIME_BEFORE_ACTION); if (timeBeforeAction != null) { continue; WorkItemActionsType actions = ObjectTypeUtil.getExtensionItemRealValue(trigger.getExtension(), SchemaConstants.MODEL_EXTENSION_WORK_ITEM_ACTIONS); if (actions == null || actions.getComplete() == null) { continue; long diff = XmlTypeConverter.toMillis(trigger.getTimestamp()) - clock.currentTimeMillis(); if (diff >= COMPLETION_TRIGGER_EQUALITY_THRESHOLD) { continue;
@Override protected PrismContainerValue getValueFrom(TriggerType value) { return value.asPrismContainerValue(); }
List<TriggerType> triggers = getSortedTriggers(triggerCVals); for (TriggerType trigger: triggers) { XMLGregorianCalendar timestamp = trigger.getTimestamp(); if (timestamp == null) { LOGGER.warn("Trigger without a timestamp in {}", object); boolean remove = fireTrigger(trigger, object, workerTask, coordinatorTask, result); if (remove) { removeTrigger(object, trigger.asPrismContainerValue(), workerTask, triggerContainer.getDefinition());
private boolean fireTrigger(TriggerType trigger, PrismObject<ObjectType> object, Task workerTask, Task coordinatorTask, OperationResult result) { String handlerUri = trigger.getHandlerUri(); if (handlerUri == null) { LOGGER.warn("Trigger without handler URI in {}", object); return false; LOGGER.debug("Firing trigger {} in {}: id={}", handlerUri, object, trigger.getId()); if (triggerAlreadySeen(coordinatorTask, handlerUri, object.getOid()+":"+trigger.getId())) { LOGGER.debug("Handler {} already executed for {}:{}", handlerUri, ObjectTypeUtil.toShortString(object), trigger.getId());
public TriggerAsserter<R> assertHandlerUri() { assertNotNull("No handler URI in "+desc(), trigger.getHandlerUri()); return this; }
public TriggerType timestamp(XMLGregorianCalendar value) { setTimestamp(value); return this; }