@Override public BaseElement convertToCmmnModel(XMLStreamReader xtr, ConversionHelper conversionHelper) { PlanItemDefinition planItemDefinition = (PlanItemDefinition) super.convertToCmmnModel(xtr, conversionHelper); conversionHelper.addPlanItemDefinition(planItemDefinition); if (planItemDefinition.getId() != null) { Stage parentStage = planItemDefinition.getParentStage(); if (parentStage != null) { parentStage.addPlanItemDefinition(planItemDefinition); } } return planItemDefinition; }
protected boolean writePlanItemDefinitionExtensionElements(CmmnModel model, T planItemDefinition, boolean didWriteExtensionElement, XMLStreamWriter xtw) throws Exception { return FlowableListenerExport.writeFlowableListeners(xtw, CmmnXmlConstants.ELEMENT_PLAN_ITEM_LIFECYCLE_LISTENER, planItemDefinition.getLifecycleListeners(), didWriteExtensionElement); }
protected void writePlanItemDefinitionDefaultItemControl(T planItemDefinition, XMLStreamWriter xtw) throws Exception { if (planItemDefinition.getDefaultControl() != null) { PlanItemControlExport.writeDefaultControl(planItemDefinition.getDefaultControl(), xtw); } }
protected void writePlanItemDefinitionCommonAttributes(T planItemDefinition, XMLStreamWriter xtw) throws Exception { xtw.writeAttribute(ATTRIBUTE_ID, planItemDefinition.getId()); if (StringUtils.isNotEmpty(planItemDefinition.getName())) { xtw.writeAttribute(ATTRIBUTE_NAME, planItemDefinition.getName()); } }
private boolean isStageAncestor(String stageId, PlanItemDefinition planItemDefinition) { while (planItemDefinition.getParentStage() != null) { String currentStageId = planItemDefinition.getParentStage().getId(); if (currentStageId != null && currentStageId.equals(stageId)) { return true; } planItemDefinition = planItemDefinition.getParentStage(); } return false; }
/** * Writes common elements like planItem documentation. * Subclasses should call super.writePlanItemDefinitionCommonElements(), it is recommended to override * writePlanItemDefinitionBody instead * * @param planItemDefinition the plan item definition to write * @param xtw the XML to write the definition to * @throws Exception in case of write exception */ protected boolean writePlanItemDefinitionCommonElements(CmmnModel model, T planItemDefinition, XMLStreamWriter xtw) throws Exception { if (StringUtils.isNotEmpty(planItemDefinition.getDocumentation())) { xtw.writeStartElement(ELEMENT_DOCUMENTATION); xtw.writeCharacters(planItemDefinition.getDocumentation()); xtw.writeEndElement(); } return CmmnXmlUtil.writeExtensionElements(planItemDefinition, false, model.getNamespaces(), xtw); }
@Override protected CmmnElement convert(XMLStreamReader xtr, ConversionHelper conversionHelper) { PlanItemControl planItemControl = new PlanItemControl(); CmmnElement currentCmmnElement = conversionHelper.getCurrentCmmnElement(); if (currentCmmnElement instanceof PlanItemDefinition) { ((PlanItemDefinition) currentCmmnElement).setDefaultControl(planItemControl); } return planItemControl; } }
PlanItemDefinition planItemDefinition = planItem.getPlanItemDefinition(); if (planItemDefinition != null) { planItemInstanceEntity.setPlanItemDefinitionId(planItemDefinition.getId()); planItemInstanceEntity.setPlanItemDefinitionType(planItemDefinition.getClass().getSimpleName().toLowerCase());
protected Stage getStage(PlanItemInstanceEntity planItemInstanceEntity) { PlanItemDefinition planItemDefinition = planItemInstanceEntity.getPlanItem().getPlanItemDefinition(); if (planItemDefinition instanceof Stage) { return (Stage) planItemDefinition; } else { return planItemDefinition.getParentStage(); } }
for (PlanItemMoveEntry planItemMoveEntry : moveToPlanItems) { PlanItemDefinition newPlanItemDefinition = planItemMoveEntry.getNewPlanItem().getPlanItemDefinition(); Stage stage = newPlanItemDefinition.getParentStage(); PlanItemDefinition newPlanItemDefinition = newPlanItem.getPlanItemDefinition(); PlanItemInstanceEntity parentPlanItemInstance = null; if (newPlanItemDefinition.getParentStage() != null && caseInstanceChangeState.getCreatedStageInstances().containsKey(newPlanItemDefinition.getParentStage().getId())) { parentPlanItemInstance = caseInstanceChangeState.getCreatedStageInstances().get(newPlanItemDefinition.getParentStage().getId()); } else { parentPlanItemInstance = defaultContinueParentPlanItemInstance;
protected void readLifecycleListener(XMLStreamReader xtr, ConversionHelper conversionHelper) { BaseElement currentCmmnElement = conversionHelper.getCurrentCmmnElement(); // needs to be captured before setting the flowable listeners as this will change the current element FlowableListener flowableListener = ListenerXmlConverterUtil.convertToListener(xtr); if (flowableListener != null) { if (currentCmmnElement instanceof PlanItemDefinition) { PlanItemDefinition planItemDefinition = (PlanItemDefinition) currentCmmnElement; planItemDefinition.getLifecycleListeners().add(flowableListener); } else { throw new FlowableException("Programmatic error: task listener added to an element that is not a plan item definition, but a " + currentCmmnElement.getClass()); } } conversionHelper.setCurrentCmmnElement(flowableListener); }
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); } }