예제 #1
0
        protected internal virtual string getDocumentation(CmmnElement element)
        {
            ICollection <Documentation> documentations = element.Documentations;

            if (documentations.Count == 0)
            {
                PlanItemDefinition definition = getDefinition(element);
                documentations = definition.Documentations;
            }

            if (documentations.Count == 0)
            {
                return(null);
            }

            StringBuilder builder = new StringBuilder();

            foreach (Documentation doc in documentations)
            {
                string content = doc.TextContent;
                if (string.ReferenceEquals(content, null) || content.Length == 0)
                {
                    continue;
                }

                if (builder.Length != 0)
                {
                    builder.Append("\n\n");
                }

                builder.Append(content.Trim());
            }

            return(builder.ToString());
        }
예제 #2
0
        protected internal override void initializeAutoComplete(CmmnElement element, CmmnActivity activity, CmmnHandlerContext context)
        {
            PlanItemDefinition definition = getDefinition(element);

            if (definition is Stage)
            {
                Stage stage = (Stage)definition;
                activity.setProperty(PROPERTY_AUTO_COMPLETE, stage.AutoComplete);
            }
        }
예제 #3
0
        protected internal virtual string getDesciption(CmmnElement element)
        {
            string description = element.Description;

            if (string.ReferenceEquals(description, null))
            {
                PlanItemDefinition definition = getDefinition(element);
                description = definition.Description;
            }

            return(description);
        }
예제 #4
0
        protected internal virtual void initializeActivity(CmmnElement element, CmmnActivity activity, CmmnHandlerContext context)
        {
            if (isDiscretionaryItem(element))
            {
                activity.setProperty(PROPERTY_DISCRETIONARY, true);
            }

            string name = getName(element);

            if (string.ReferenceEquals(name, null))
            {
                PlanItemDefinition definition = getDefinition(element);
                if (definition != null)
                {
                    name = definition.Name;
                }
            }

            activity.Name = name;

            // activityType
            initializeActivityType(element, activity, context);

            // description
            initializeDescription(element, activity, context);

            // autoComplete
            initializeAutoComplete(element, activity, context);

            // requiredRule
            initializeRequiredRule(element, activity, context);

            // manualActivation
            initializeManualActivationRule(element, activity, context);

            // repetitionRule
            initializeRepetitionRule(element, activity, context);

            // case execution listeners
            initializeCaseExecutionListeners(element, activity, context);

            // variable listeners
            initializeVariableListeners(element, activity, context);

            // initialize entry criteria
            initializeEntryCriterias(element, activity, context);

            // initialize exit criteria
            initializeExitCriterias(element, activity, context);
        }
예제 #5
0
        protected internal virtual void initializeActivityType(CmmnElement element, CmmnActivity activity, CmmnHandlerContext context)
        {
            PlanItemDefinition definition = getDefinition(element);

            string activityType = null;

            if (definition != null)
            {
                ModelElementType elementType = definition.ElementType;
                if (elementType != null)
                {
                    activityType = elementType.TypeName;
                }
            }

            activity.setProperty(PROPERTY_ACTIVITY_TYPE, activityType);
        }
예제 #6
0
        protected internal virtual string getName(CmmnElement element)
        {
            string name = null;

            if (isPlanItem(element))
            {
                PlanItem planItem = (PlanItem)element;
                name = planItem.Name;
            }

            if (string.ReferenceEquals(name, null) || name.Length == 0)
            {
                PlanItemDefinition definition = getDefinition(element);
                if (definition != null)
                {
                    name = definition.Name;
                }
            }

            return(name);
        }
예제 #7
0
        protected internal virtual void initializeVariableListeners(CmmnElement element, CmmnActivity activity, CmmnHandlerContext context)
        {
            PlanItemDefinition definition = getDefinition(element);

            IList <CamundaVariableListener> listeners = queryExtensionElementsByClass(definition, typeof(CamundaVariableListener));

            foreach (CamundaVariableListener listener in listeners)
            {
                CaseVariableListener variableListener = initializeVariableListener(element, activity, context, listener);

                string eventName = listener.CamundaEvent;
                if (!string.ReferenceEquals(eventName, null))
                {
                    activity.addVariableListener(eventName, variableListener);
                }
                else
                {
                    foreach (string @event in DEFAULT_VARIABLE_EVENTS)
                    {
                        activity.addVariableListener(@event, variableListener);
                    }
                }
            }
        }
예제 #8
0
        protected internal virtual void initializeCaseExecutionListeners(CmmnElement element, CmmnActivity activity, CmmnHandlerContext context)
        {
            PlanItemDefinition definition = getDefinition(element);

            IList <CamundaCaseExecutionListener> listeners = queryExtensionElementsByClass(definition, typeof(CamundaCaseExecutionListener));

            foreach (CamundaCaseExecutionListener listener in listeners)
            {
                CaseExecutionListener caseExecutionListener = initializeCaseExecutionListener(element, activity, context, listener);

                string eventName = listener.CamundaEvent;
                if (!string.ReferenceEquals(eventName, null))
                {
                    activity.addListener(eventName, caseExecutionListener);
                }
                else
                {
                    foreach (string @event in getStandardEvents(element))
                    {
                        activity.addListener(@event, caseExecutionListener);
                    }
                }
            }
        }
예제 #9
0
        protected internal virtual IList <CamundaOut> getOutputs(CmmnElement element)
        {
            PlanItemDefinition definition = getDefinition(element);

            return(queryExtensionElementsByClass(definition, typeof(CamundaOut)));
        }
예제 #10
0
        protected internal virtual void transformPlanItem(PlanItem planItem, CmmnActivity parent)
        {
            PlanItemDefinition definition = planItem.Definition;

            ItemHandler planItemTransformer = null;

            if (definition is HumanTask)
            {
                planItemTransformer = getPlanItemHandler(typeof(HumanTask));
            }
            else if (definition is ProcessTask)
            {
                planItemTransformer = getPlanItemHandler(typeof(ProcessTask));
            }
            else if (definition is CaseTask)
            {
                planItemTransformer = getPlanItemHandler(typeof(CaseTask));
            }
            else if (definition is DecisionTask)
            {
                planItemTransformer = getPlanItemHandler(typeof(DecisionTask));
            }
            else if (definition is Task)
            {
                planItemTransformer = getPlanItemHandler(typeof(Task));
            }
            else if (definition is Stage)
            {
                planItemTransformer = getPlanItemHandler(typeof(Stage));
            }
            else if (definition is Milestone)
            {
                planItemTransformer = getPlanItemHandler(typeof(Milestone));
            }
            else if (definition is EventListener)
            {
                planItemTransformer = getPlanItemHandler(typeof(EventListener));
            }

            if (planItemTransformer != null)
            {
                CmmnActivity newActivity = planItemTransformer.handleElement(planItem, context);

                if (definition is Stage)
                {
                    Stage stage = (Stage)definition;
                    transformStage(stage, newActivity);
                    context.Parent = parent;
                }
                else if (definition is HumanTask)
                {
                    HumanTask humanTask = (HumanTask)definition;

                    // According to the specification: A HumanTask can only contain
                    // one planningTable, the XSD allows multiple planningTables!
                    ICollection <PlanningTable> planningTables = humanTask.PlanningTables;
                    foreach (PlanningTable planningTable in planningTables)
                    {
                        transformPlanningTable(planningTable, parent);
                    }
                }

                foreach (CmmnTransformListener transformListener in transformListeners)
                {
                    if (definition is HumanTask)
                    {
                        transformListener.transformHumanTask(planItem, (HumanTask)definition, newActivity);
                    }
                    else if (definition is ProcessTask)
                    {
                        transformListener.transformProcessTask(planItem, (ProcessTask)definition, newActivity);
                    }
                    else if (definition is CaseTask)
                    {
                        transformListener.transformCaseTask(planItem, (CaseTask)definition, newActivity);
                    }
                    else if (definition is DecisionTask)
                    {
                        transformListener.transformDecisionTask(planItem, (DecisionTask)definition, newActivity);
                    }
                    else if (definition is Task)
                    {
                        transformListener.transformTask(planItem, (Task)definition, newActivity);
                    }
                    else if (definition is Stage)
                    {
                        transformListener.transformStage(planItem, (Stage)definition, newActivity);
                    }
                    else if (definition is Milestone)
                    {
                        transformListener.transformMilestone(planItem, (Milestone)definition, newActivity);
                    }
                    else if (definition is EventListener)
                    {
                        transformListener.transformEventListener(planItem, (EventListener)definition, newActivity);
                    }
                }
            }
        }
예제 #11
0
        protected internal virtual PlanItemControl getDefaultControl(CmmnElement element)
        {
            PlanItemDefinition definition = getDefinition(element);

            return(definition.DefaultControl);
        }