public static boolean writeFlowableListeners(XMLStreamWriter xtw, String xmlElementName, List<FlowableListener> listeners, boolean didWriteExtensionStartElement) throws Exception { if (listeners != null) { for (FlowableListener listener : listeners) { if (!didWriteExtensionStartElement) { xtw.writeStartElement(CmmnXmlConstants.ELEMENT_EXTENSION_ELEMENTS); didWriteExtensionStartElement = true; } xtw.writeStartElement(CmmnXmlConstants.FLOWABLE_EXTENSIONS_PREFIX, xmlElementName, CmmnXmlConstants.FLOWABLE_EXTENSIONS_NAMESPACE); CmmnXmlUtil.writeDefaultAttribute(CmmnXmlConstants.ATTRIBUTE_LISTENER_EVENT, listener.getEvent(), xtw); CmmnXmlUtil.writeDefaultAttribute(CmmnXmlConstants.ATTRIBUTE_LISTENER_SOURCE_STATE, listener.getSourceState(), xtw); CmmnXmlUtil.writeDefaultAttribute(CmmnXmlConstants.ATTRIBUTE_LISTENER_TARGET_STATE, listener.getTargetState(), xtw); if (ImplementationType.IMPLEMENTATION_TYPE_CLASS.equals(listener.getImplementationType())) { CmmnXmlUtil.writeDefaultAttribute(CmmnXmlConstants.ATTRIBUTE_LISTENER_CLASS, listener.getImplementation(), xtw); } else if (ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION.equals(listener.getImplementationType())) { CmmnXmlUtil.writeDefaultAttribute(CmmnXmlConstants.ATTRIBUTE_LISTENER_EXPRESSION, listener.getImplementation(), xtw); } else if (ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.equals(listener.getImplementationType())) { CmmnXmlUtil.writeDefaultAttribute(CmmnXmlConstants.ATTRIBUTE_LISTENER_DELEGATEEXPRESSION, listener.getImplementation(), xtw); } CmmnXmlUtil.writeDefaultAttribute(CmmnXmlConstants.ATTRIBUTE_LISTENER_ON_TRANSACTION, listener.getOnTransaction(), xtw); FieldExport.writeFieldExtensions(listener.getFieldExtensions(), true, xtw); xtw.writeEndElement(); } } return didWriteExtensionStartElement; }
public static FlowableListener convertToListener(XMLStreamReader xtr) { FlowableListener listener = new FlowableListener(); CmmnXmlUtil.addXMLLocation(listener, xtr); if (StringUtils.isNotEmpty(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_CLASS))) { listener.setImplementation(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_CLASS)); listener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_CLASS); } else if (StringUtils.isNotEmpty(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_EXPRESSION))) { listener.setImplementation(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_EXPRESSION)); listener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION); } else if (StringUtils.isNotEmpty(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_DELEGATEEXPRESSION))) { listener.setImplementation(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_DELEGATEEXPRESSION)); listener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION); } listener.setEvent(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_EVENT)); listener.setSourceState(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_SOURCE_STATE)); listener.setTargetState(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_TARGET_STATE)); listener.setOnTransaction(xtr.getAttributeValue(null, CmmnXmlConstants.ATTRIBUTE_LISTENER_ON_TRANSACTION)); return listener; }
@Override public TaskListener createClassDelegateTaskListener(FlowableListener listener) { return classDelegateFactory.createLifeCycleListener(listener.getImplementation(), listener.getSourceState(), listener.getTargetState(), listener.getFieldExtensions()); }
@Override public PlanItemInstanceLifecycleListener createClassDelegateLifeCycleListener(FlowableListener listener) { return classDelegateFactory.create(listener.getImplementation(), listener.getFieldExtensions()); }
@Override public PlanItemInstanceLifecycleListener createExpressionLifeCycleListener(FlowableListener listener) { return new ExpressionPlanItemLifecycleListener(listener.getSourceState(), listener.getTargetState(), expressionManager.createExpression(listener.getImplementation())); }
public static void callLifecycleListeners(CommandContext commandContext, DelegatePlanItemInstance planItemInstance, String oldState, String newState) { if (Objects.equals(oldState, newState)) { return; } // Lifecycle listeners on the element itself PlanItemDefinition planItemDefinition = planItemInstance.getPlanItem().getPlanItemDefinition(); if (planItemDefinition != null) { List<FlowableListener> flowableListeners = planItemDefinition.getLifecycleListeners(); if (flowableListeners != null && !flowableListeners.isEmpty()) { CmmnListenerNotificationHelper listenerNotificationHelper = CommandContextUtil.getCmmnEngineConfiguration(commandContext).getListenerNotificationHelper(); for (FlowableListener flowableListener : flowableListeners) { if (stateMatches(flowableListener.getSourceState(), oldState) && stateMatches(flowableListener.getTargetState(), newState)) { PlanItemInstanceLifecycleListener lifecycleListener = listenerNotificationHelper.createLifecycleListener(flowableListener); executeLifecycleListener(planItemInstance, oldState, newState, lifecycleListener); } } } } // Lifecycle listeners defined on the cmmn engine configuration Map<String, List<PlanItemInstanceLifecycleListener>> planItemInstanceLifeCycleListeners = CommandContextUtil.getCmmnEngineConfiguration(commandContext).getPlanItemInstanceLifecycleListeners(); if (planItemInstanceLifeCycleListeners != null && !planItemInstanceLifeCycleListeners.isEmpty()) { List<PlanItemInstanceLifecycleListener> specificListeners = planItemInstanceLifeCycleListeners.get(planItemInstance.getPlanItemDefinitionType()); executeListeners(specificListeners, planItemInstance, oldState, newState); List<PlanItemInstanceLifecycleListener> genericListeners = planItemInstanceLifeCycleListeners.get(null); executeListeners(genericListeners, planItemInstance, oldState, newState); } }
public void executeTaskListeners(HumanTask humanTask, TaskEntity taskEntity, String eventType) { for (FlowableListener listener : humanTask.getTaskListeners()) { String event = listener.getEvent(); if (event.equals(eventType) || event.equals(TaskListener.EVENTNAME_ALL_EVENTS)) { TaskListener taskListener = createTaskListener(listener); taskEntity.setEventName(eventType); taskEntity.setEventHandlerId(listener.getId()); try { taskListener.notify(taskEntity); } catch (Exception e) { throw new FlowableException("Exception while invoking TaskListener: " + e.getMessage(), e); } finally { taskEntity.setEventName(null); } } } }
protected PlanItemInstanceLifecycleListener createLifecycleListener(FlowableListener listener) { PlanItemInstanceLifecycleListener lifecycleListener = null; CmmnListenerFactory listenerFactory = CommandContextUtil.getCmmnEngineConfiguration().getListenerFactory(); if (ImplementationType.IMPLEMENTATION_TYPE_CLASS.equalsIgnoreCase(listener.getImplementationType())) { lifecycleListener = listenerFactory.createClassDelegateLifeCycleListener(listener); } else if (ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION.equalsIgnoreCase(listener.getImplementationType())) { lifecycleListener = listenerFactory.createExpressionLifeCycleListener(listener); } else if (ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.equalsIgnoreCase(listener.getImplementationType())) { lifecycleListener = listenerFactory.createDelegateExpressionLifeCycleListener(listener); } return lifecycleListener; }
@Override public TaskListener createExpressionTaskListener(FlowableListener listener) { return new ExpressionTaskListener(expressionManager.createExpression(listener.getImplementation())); }
((DecisionTask) currentCmmnElement).getFieldExtensions().add(extension); } else if (currentCmmnElement instanceof FlowableListener) { ((FlowableListener) currentCmmnElement).getFieldExtensions().add(extension);
@Override public PlanItemInstanceLifecycleListener createDelegateExpressionLifeCycleListener(FlowableListener listener) { return new DelegateExpressionPlanItemLifecycleListener(listener.getSourceState(), listener.getTargetState(), expressionManager.createExpression(listener.getImplementation()), listener.getFieldExtensions()); }
@Override public TaskListener createDelegateExpressionTaskListener(FlowableListener listener) { return new DelegateExpressionTaskListener(expressionManager.createExpression(listener.getImplementation()),listener.getFieldExtensions()); }
protected TaskListener createTaskListener(FlowableListener listener) { TaskListener taskListener = null; CmmnListenerFactory listenerFactory = CommandContextUtil.getCmmnEngineConfiguration().getListenerFactory(); if (ImplementationType.IMPLEMENTATION_TYPE_CLASS.equalsIgnoreCase(listener.getImplementationType())) { taskListener = listenerFactory.createClassDelegateTaskListener(listener); } else if (ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION.equalsIgnoreCase(listener.getImplementationType())) { taskListener = listenerFactory.createExpressionTaskListener(listener); } else if (ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.equalsIgnoreCase(listener.getImplementationType())) { taskListener = listenerFactory.createDelegateExpressionTaskListener(listener); } return taskListener; }