protected ProcessFactory timer(String dueDateDescription, Date dueDate, String signalName, String repeat) { if (node!=null && scope==null) { scope(); } TimerDefinitionImpl timerDefinition = scope.createTimerDefinition(); if (dueDate!=null) { timerDefinition.setDueDate(dueDate); } else { timerDefinition.setDueDateDescription(dueDateDescription); } timerDefinition.setSignalName(signalName); timerDefinition.setRepeat(repeat); return this; }
public TimerDefinitionImpl createTimerDefinition() { TimerDefinitionImpl timerDefinition = new TimerDefinitionImpl(); if (timerDefinitions==null) { timerDefinitions = new HashSet<TimerDefinitionImpl>(); } timerDefinitions.add(timerDefinition); hasTimerDefinitions = true; return timerDefinition; } }
protected void initializeTimers(CompositeElementImpl scope) { // initialize the timers Set<TimerDefinitionImpl> timerDefinitions = scope.getTimerDefinitions(); if (!timerDefinitions.isEmpty()) { timers = new HashSet<TimerImpl>(); for (TimerDefinitionImpl timerDefinition: timerDefinitions) { createTimer( timerDefinition.getEventName(), timerDefinition.getSignalName(), timerDefinition.getDueDateDescription(), timerDefinition.getDueDate(), timerDefinition.getRepeat(), timerDefinition.isExclusive(), timerDefinition.getRetries() ); } } }
protected void parseTimeCycle(String catchEventId, Parse parse, Element timeCycle, TimerDefinitionImpl timerDefinition) { String cycleExpression = timeCycle.getTextContent(); if (Duration.isValidExpression(cycleExpression)) { timerDefinition.setDueDateDescription(cycleExpression); } else if (CronExpression.isValidExpression(cycleExpression)) { timerDefinition.setCronExpression(cycleExpression); } else { parse.addProblem("couldn't parse timeDate duration '"+ cycleExpression + "' on intermediate catch timer event " + catchEventId); } }
protected static void createTimerDefinition(NodeImpl node, DeadlineDefinition deadline) { TimerDefinitionImpl timerDefinition = node.createTimerDefinition(); timerDefinition.setSignalName(deadline.getExceptionName()); String condition = deadline.getDeadlineCondition(); try { long duration = Long.parseLong(condition); timerDefinition.setDueDateDescription(duration + " millis"); } catch (NumberFormatException e1) { try { timerDefinition.setDueDate(DateUtil.parseDate(condition)); } catch (IllegalArgumentException e2) { throw new XpdlParserException("deadline condition '" + deadline.getDeadlineCondition() + "' is neither a Long nor a formatted date", e2); } } }
startProcessTimer.setProcessDefinitionName(processDefinition.getName()); if (timerDefinition.getDueDate() != null) { startProcessTimer.setDuedate(timerDefinition.getDueDate()); } else if (timerDefinition.getDueDateDescription() != null) { startProcessTimer.setIntervalExpression(timerDefinition.getDueDateDescription()); } else if (timerDefinition.getCronExpression() != null) { startProcessTimer.setIntervalExpression(timerDefinition.getCronExpression());
protected void parseTimeDate(String catchEventId, Parse parse, Element timeDate, TimerDefinitionImpl timerDefinition) { String dueDateTime = timeDate.getTextContent(); String dueDateTimeFormatText = (String) EnvironmentImpl.getFromCurrent("jbpm.duedatetime.format", false); if (dueDateTimeFormatText==null) { dueDateTimeFormatText = "dd/MM/yyyy HH:mm:ss"; } SimpleDateFormat dateFormat = new SimpleDateFormat(dueDateTimeFormatText); try { Date duedatetimeDate = dateFormat.parse(dueDateTime); timerDefinition.setDueDate(duedatetimeDate); } catch (ParseException e) { parse.addProblem("couldn't parse timeDate '"+ dueDateTime + "' on intermediate catch timer event " + catchEventId, e); } }
/** * Parses a <timerEventDefinition> element: * * sets dueDate if 'timeDate' is used * * sets duedateDescription if a duration expression is used * * set cronExpression if a cron expression is used * * @param timerEventDefinitionElement The XML element that defines the timer definition * @param activity The activity on which the timer definition must be created * @param eventId The id of the event on which the timer is defined */ public TimerDefinitionImpl parseTimerEventDefinition(Element timerEventDefinitionElement, Parse parse, String eventId) { Element timeDate = XmlUtil.element(timerEventDefinitionElement, "timeDate"); Element timeCycle = XmlUtil.element(timerEventDefinitionElement, "timeCycle"); if ( (timeDate != null && timeCycle != null) || (timeDate == null && timeCycle == null) ) { parse.addProblem("timerEventDefinition for event '" + eventId + "' requires either a timeDate or a timeCycle definition (but not both)"); return null; } TimerDefinitionImpl timerDefinition = new TimerDefinitionImpl(); if (timeDate != null) { parseTimeDate(eventId, parse, timeDate, timerDefinition); } if (timeCycle != null) { parseTimeCycle(eventId, parse, timeCycle, timerDefinition); } return timerDefinition; }