public void setValues(TimerEventDefinition otherDefinition) { super.setValues(otherDefinition); setTimeDate(otherDefinition.getTimeDate()); setTimeDuration(otherDefinition.getTimeDuration()); setTimeCycle(otherDefinition.getTimeCycle()); setEndDate(otherDefinition.getEndDate()); setCalendarName(otherDefinition.getCalendarName()); } }
@Override public TimerJobEntity execute(CommandContext commandContext) { TimerEventDefinition ted = new TimerEventDefinition(); ted.setTimeDate(timeDate); ted.setTimeDuration(timeDuration); ted.setTimeCycle(timeCycle); ted.setEndDate(endDate); ted.setCalendarName(calendarName); TimerJobEntity timerJob = TimerUtil.rescheduleTimerJob(timerJobId, ted); return timerJob; }
@Override public TimerEventDefinition clone() { TimerEventDefinition clone = new TimerEventDefinition(); clone.setValues(this); return clone; }
protected void writeTimerDefinition(Event parentEvent, TimerEventDefinition timerDefinition, XMLStreamWriter xtw) throws Exception { xtw.writeStartElement(ELEMENT_EVENT_TIMERDEFINITION); if (StringUtils.isNotEmpty(timerDefinition.getCalendarName())) { writeQualifiedAttribute(ATTRIBUTE_CALENDAR_NAME, timerDefinition.getCalendarName(), xtw); } boolean didWriteExtensionStartElement = BpmnXMLUtil.writeExtensionElements(timerDefinition, false, xtw); if (didWriteExtensionStartElement) { xtw.writeEndElement(); } if (StringUtils.isNotEmpty(timerDefinition.getTimeDate())) { xtw.writeStartElement(ATTRIBUTE_TIMER_DATE); xtw.writeCharacters(timerDefinition.getTimeDate()); xtw.writeEndElement(); } else if (StringUtils.isNotEmpty(timerDefinition.getTimeCycle())) { xtw.writeStartElement(ATTRIBUTE_TIMER_CYCLE); if (StringUtils.isNotEmpty(timerDefinition.getEndDate())) { xtw.writeAttribute(FLOWABLE_EXTENSIONS_PREFIX, FLOWABLE_EXTENSIONS_NAMESPACE, ATTRIBUTE_END_DATE, timerDefinition.getEndDate()); } xtw.writeCharacters(timerDefinition.getTimeCycle()); xtw.writeEndElement(); } else if (StringUtils.isNotEmpty(timerDefinition.getTimeDuration())) { xtw.writeStartElement(ATTRIBUTE_TIMER_DURATION); xtw.writeCharacters(timerDefinition.getTimeDuration()); xtw.writeEndElement(); } xtw.writeEndElement(); }
protected void handleTimerEventDefinition(Process process, Event event, EventDefinition eventDefinition, List<ValidationError> errors) { TimerEventDefinition timerEventDefinition = (TimerEventDefinition) eventDefinition; if (StringUtils.isEmpty(timerEventDefinition.getTimeDate()) && StringUtils.isEmpty(timerEventDefinition.getTimeCycle()) && StringUtils.isEmpty(timerEventDefinition.getTimeDuration())) { // neither date, cycle or duration configured addError(errors, Problems.EVENT_TIMER_MISSING_CONFIGURATION, process, event, "Timer needs configuration (either timeDate, timeCycle or timeDuration is needed)"); } }
if (StringUtils.isNotEmpty(timerEventDefinition.getTimeDate())) { expression = expressionManager.createExpression(timerEventDefinition.getTimeDate()); } else if (StringUtils.isNotEmpty(timerEventDefinition.getTimeCycle())) { expression = expressionManager.createExpression(timerEventDefinition.getTimeCycle()); } else if (StringUtils.isNotEmpty(timerEventDefinition.getTimeDuration())) { expression = expressionManager.createExpression(timerEventDefinition.getTimeDuration()); if (StringUtils.isNotEmpty(timerEventDefinition.getCalendarName())) { businessCalendarRef = timerEventDefinition.getCalendarName(); Expression businessCalendarExpression = expressionManager.createExpression(businessCalendarRef); businessCalendarRef = businessCalendarExpression.getValue(scopeForExpression).toString(); throw new FlowableException("Timer needs configuration (either timeDate, timeCycle or timeDuration is needed) (" + timerEventDefinition.getId() + ")"); if (StringUtils.isNotEmpty(timerEventDefinition.getTimeCycle())) {
@Override public void execute(DelegateExecution execution) { ExecutionEntity executionEntity = (ExecutionEntity) execution; if (!(execution.getCurrentFlowElement() instanceof BoundaryEvent)) { throw new FlowableException("Programmatic error: " + this.getClass() + " should not be used for anything else than a boundary event"); } TimerJobEntity timerJob = TimerUtil.createTimerEntityForTimerEventDefinition(timerEventDefinition, interrupting, executionEntity, TriggerTimerEventJobHandler.TYPE, TimerEventHandler.createConfiguration(execution.getCurrentActivityId(), timerEventDefinition.getEndDate(), timerEventDefinition.getCalendarName())); if (timerJob != null) { CommandContextUtil.getTimerJobService().scheduleTimerJob(timerJob); } }
@Override public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception { if (!(parentElement instanceof TimerEventDefinition)) return; TimerEventDefinition eventDefinition = (TimerEventDefinition) parentElement; if (StringUtils.isNotEmpty(BpmnXMLUtil.getAttributeValue(ATTRIBUTE_END_DATE, xtr))) { eventDefinition.setEndDate(BpmnXMLUtil.getAttributeValue(ATTRIBUTE_END_DATE, xtr)); } eventDefinition.setTimeCycle(xtr.getElementText()); } }
@Override public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception { if (!(parentElement instanceof Event)) return; TimerEventDefinition eventDefinition = new TimerEventDefinition(); String calendarName = BpmnXMLUtil.getAttributeValue(ATTRIBUTE_CALENDAR_NAME, xtr); if (StringUtils.isNotEmpty(calendarName)) { eventDefinition.setCalendarName(calendarName); } BpmnXMLUtil.addXMLLocation(eventDefinition, xtr); BpmnXMLUtil.parseChildElements(ELEMENT_EVENT_TIMERDEFINITION, eventDefinition, xtr, model); ((Event) parentElement).getEventDefinitions().add(eventDefinition); } }
protected int getMaxIterations(org.flowable.bpmn.model.Process process, String activityId) { FlowElement flowElement = process.getFlowElement(activityId, true); if (flowElement != null) { if (flowElement instanceof Event) { Event event = (Event) flowElement; List<EventDefinition> eventDefinitions = event.getEventDefinitions(); if (eventDefinitions != null) { for (EventDefinition eventDefinition : eventDefinitions) { if (eventDefinition instanceof TimerEventDefinition) { TimerEventDefinition timerEventDefinition = (TimerEventDefinition) eventDefinition; if (timerEventDefinition.getTimeCycle() != null) { return calculateMaxIterationsValue(timerEventDefinition.getTimeCycle()); } } } } } } return -1; }
@Override public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception { if (!(parentElement instanceof TimerEventDefinition)) return; TimerEventDefinition eventDefinition = (TimerEventDefinition) parentElement; eventDefinition.setTimeDate(xtr.getElementText()); } }
@Override public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception { if (!(parentElement instanceof TimerEventDefinition)) return; TimerEventDefinition eventDefinition = (TimerEventDefinition) parentElement; eventDefinition.setTimeDuration(xtr.getElementText()); } }
@Override public void execute(DelegateExecution execution) { // end date should be ignored for intermediate timer events. TimerJobEntity timerJob = TimerUtil.createTimerEntityForTimerEventDefinition(timerEventDefinition, false, (ExecutionEntity) execution, TriggerTimerEventJobHandler.TYPE, TimerEventHandler.createConfiguration(execution.getCurrentActivityId(), null, timerEventDefinition.getCalendarName())); if (timerJob != null) { CommandContextUtil.getTimerJobService().scheduleTimerJob(timerJob); } }
if (StringUtils.isNotEmpty(timerDefinition.getTimeDuration())) { propertiesNode.put(PROPERTY_TIMER_DURATON, timerDefinition.getTimeDuration()); if (StringUtils.isNotEmpty(timerDefinition.getTimeCycle())) { propertiesNode.put(PROPERTY_TIMER_CYCLE, timerDefinition.getTimeCycle()); if (StringUtils.isNotEmpty(timerDefinition.getTimeDate())) { propertiesNode.put(PROPERTY_TIMER_DATE, timerDefinition.getTimeDate()); if (StringUtils.isNotEmpty(timerDefinition.getEndDate())) { propertiesNode.put(PROPERTY_TIMER_CYCLE_END_DATE, timerDefinition.getEndDate());
TimerEventDefinition timerDef = (TimerEventDefinition) eventDef; eventNode.put("type", "timer"); if (StringUtils.isNotEmpty(timerDef.getTimeCycle())) { eventNode.put("timeCycle", timerDef.getTimeCycle()); if (StringUtils.isNotEmpty(timerDef.getTimeDate())) { eventNode.put("timeDate", timerDef.getTimeDate()); if (StringUtils.isNotEmpty(timerDef.getTimeDuration())) { eventNode.put("timeDuration", timerDef.getTimeDuration());
protected void restoreTimerStartEvent(ProcessDefinition previousProcessDefinition, StartEvent startEvent, EventDefinition eventDefinition) { TimerEventDefinition timerEventDefinition = (TimerEventDefinition) eventDefinition; TimerJobEntity timer = TimerUtil.createTimerEntityForTimerEventDefinition((TimerEventDefinition) eventDefinition, false, null, TimerStartEventJobHandler.TYPE, TimerEventHandler.createConfiguration(startEvent.getId(), timerEventDefinition.getEndDate(), timerEventDefinition.getCalendarName())); if (timer != null) { TimerJobEntity timerJob = TimerUtil.createTimerEntityForTimerEventDefinition(timerEventDefinition, false, null, TimerStartEventJobHandler.TYPE, TimerEventHandler.createConfiguration(startEvent.getId(), timerEventDefinition.getEndDate(), timerEventDefinition.getCalendarName())); timerJob.setProcessDefinitionId(previousProcessDefinition.getId()); if (previousProcessDefinition.getTenantId() != null) { timerJob.setTenantId(previousProcessDefinition.getTenantId()); } CommandContextUtil.getTimerJobService().scheduleTimerJob(timerJob); } }
@Override public TimerEventDefinition clone() { TimerEventDefinition clone = new TimerEventDefinition(); clone.setValues(this); return clone; }
public void setValues(TimerEventDefinition otherDefinition) { super.setValues(otherDefinition); setTimeDate(otherDefinition.getTimeDate()); setTimeDuration(otherDefinition.getTimeDuration()); setTimeCycle(otherDefinition.getTimeCycle()); setEndDate(otherDefinition.getEndDate()); setCalendarName(otherDefinition.getCalendarName()); } }
Expression calendarName = null; ExpressionManager expressionManager = bpmnParse.getExpressionManager(); if (StringUtils.isNotEmpty(timerEventDefinition.getTimeDate())) { expression = expressionManager.createExpression(timerEventDefinition.getTimeDate()); } else if (StringUtils.isNotEmpty(timerEventDefinition.getTimeCycle())) { expression = expressionManager.createExpression(timerEventDefinition.getTimeCycle()); if (StringUtils.isNotEmpty(timerEventDefinition.getEndDate())) { endDate = expressionManager.createExpression(timerEventDefinition.getEndDate()); } else if (StringUtils.isNotEmpty(timerEventDefinition.getTimeDuration())) { expression = expressionManager.createExpression(timerEventDefinition.getTimeDuration()); if (StringUtils.isNotEmpty(timerEventDefinition.getCalendarName())) { calendarName = expressionManager.createExpression(timerEventDefinition.getCalendarName());
TimerEventDefinition timerDef = (TimerEventDefinition) eventDef; eventNode.put("type", "timer"); if (StringUtils.isNotEmpty(timerDef.getTimeCycle())) { eventNode.put("timeCycle", timerDef.getTimeCycle()); if (StringUtils.isNotEmpty(timerDef.getTimeDate())) { eventNode.put("timeDate", timerDef.getTimeDate()); if (StringUtils.isNotEmpty(timerDef.getTimeDuration())) { eventNode.put("timeDuration", timerDef.getTimeDuration());