@Override public PlanItemInstanceLifecycleListener createExpressionLifeCycleListener(FlowableListener listener) { return new ExpressionPlanItemLifecycleListener(listener.getSourceState(), listener.getTargetState(), expressionManager.createExpression(listener.getImplementation())); }
@Override public TaskListener createClassDelegateTaskListener(FlowableListener listener) { return classDelegateFactory.createLifeCycleListener(listener.getImplementation(), listener.getSourceState(), listener.getTargetState(), listener.getFieldExtensions()); }
@Override public PlanItemInstanceLifecycleListener createDelegateExpressionLifeCycleListener(FlowableListener listener) { return new DelegateExpressionPlanItemLifecycleListener(listener.getSourceState(), listener.getTargetState(), expressionManager.createExpression(listener.getImplementation()), listener.getFieldExtensions()); }
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 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); } }