Esempio n. 1
0
        private static StageElementInstance BuildStage(string id, tStage stage, string casePlanInstanceId)
        {
            var planItems = BuildPlanItems(stage, casePlanInstanceId);
            var result    = new StageElementInstance
            {
                Id    = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, stage.id, 0),
                Name  = stage.name,
                EltId = id
            };

            foreach (var planItem in planItems)
            {
                result.AddChild(planItem);
            }

            if (!result.ExitCriterions.Any() && stage.exitCriterion != null)
            {
                foreach (var exitCriteria in stage.exitCriterion)
                {
                    var sEntry = stage.sentry.First(s => s.id == exitCriteria.sentryRef);
                    result.ExitCriterions.Add(new Criteria(exitCriteria.name)
                    {
                        SEntry = BuildSEntry(sEntry)
                    });
                }
            }

            return(result);
        }
Esempio n. 2
0
 protected void SeedCasePlanItem(BaseCasePlanItemInstance casePlanItem)
 {
     foreach (var entryCritera in _entryCriterions)
     {
         casePlanItem.EntryCriterions.Add(entryCritera.Build());
     }
 }
            public static CasePlanItemInstanceResult ToDto(BaseCasePlanItemInstance casePlanItemInstance)
            {
                string stateStr = null, formId = null;

                if (casePlanItemInstance is BaseTaskOrStageElementInstance)
                {
                    var state = ((BaseTaskOrStageElementInstance)casePlanItemInstance).State;
                    stateStr = state == null ? null : Enum.GetName(typeof(TaskStageStates), state);
                }

                if (casePlanItemInstance is BaseMilestoneOrTimerElementInstance)
                {
                    var state = ((BaseMilestoneOrTimerElementInstance)casePlanItemInstance).State;
                    stateStr = state == null ? null : Enum.GetName(typeof(MilestoneEventStates), state);
                }

                if (casePlanItemInstance is HumanTaskElementInstance)
                {
                    var humanTaskInstance = casePlanItemInstance as HumanTaskElementInstance;
                    formId = humanTaskInstance.FormId;
                }

                return(new CasePlanItemInstanceResult
                {
                    Id = casePlanItemInstance.Id,
                    Name = casePlanItemInstance.Name,
                    NbOccurrence = casePlanItemInstance.NbOccurrence,
                    EltId = casePlanItemInstance.EltId,
                    State = stateStr,
                    FormId = formId,
                    Type = Enum.GetName(typeof(CasePlanElementInstanceTypes), casePlanItemInstance.Type).ToUpperInvariant(),
                    TransitionHistories = casePlanItemInstance.TransitionHistories.Select(_ => TransitionHistoryResult.ToDto(_)).ToList()
                });
            }
Esempio n. 4
0
        public BaseCasePlanItemInstance GetNode(BaseCasePlanItemInstance casePlanElementInstance)
        {
            var node = Nodes.FirstOrDefault(_ => _.Id == casePlanElementInstance.Id);

            if (node != null)
            {
                return(node);
            }

            if (NextBranch != null)
            {
                return(NextBranch.GetNode(casePlanElementInstance));
            }

            return(null);
        }
Esempio n. 5
0
        private bool IsElementCompleted(BaseCasePlanItemInstance planElementInstance)
        {
            var stageOrTask = planElementInstance as BaseTaskOrStageElementInstance;
            var milestone   = planElementInstance as MilestoneElementInstance;

            if (stageOrTask != null && (stageOrTask.State == TaskStageStates.Completed ||
                                        stageOrTask.State == TaskStageStates.Terminated ||
                                        stageOrTask.State == TaskStageStates.Disabled))
            {
                return(true);
            }

            if (milestone != null && (milestone.State == MilestoneEventStates.Completed || milestone.State == MilestoneEventStates.Terminated))
            {
                return(true);
            }

            return(false);
        }
Esempio n. 6
0
        private async Task ExecuteNode(CMMNExecutionContext executionContext, BaseCasePlanItemInstance node, CancellationToken token)
        {
            await _processorFactory.Execute(executionContext, node, token);

            var domainEvts = executionContext.Instance.DomainEvents.Where((evt) =>
            {
                var r = evt as CaseElementTransitionRaisedEvent;
                if (r == null)
                {
                    return(false);
                }

                return(r.ElementId == node.Id);
            }).Cast <CaseElementTransitionRaisedEvent>()
                             .Select(_ => new IncomingTransition(_.Transition, _.IncomingTokens)).ToList();
            var nextNodes = executionContext.Instance.GetNextCasePlanItems(node);

            foreach (var nextNode in nextNodes)
            {
                executionContext.Instance.ConsumeTransitionEvts(nextNode, node.Id, domainEvts);
                await ExecuteNode(executionContext, nextNode, token);
            }
        }
Esempio n. 7
0
        private static BaseCasePlanItemInstance BuildPlanItem(string id, string name, tPlanItemDefinition planItemDef, string casePlanInstanceId)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                name = planItemDef.name;
            }

            if (planItemDef is tHumanTask)
            {
                var humanTask = planItemDef as tHumanTask;
                List <tHumanTaskParameter> pars = new List <tHumanTaskParameter>();
                if (humanTask.implementation == CMMNConstants.UserTaskImplementations.WSHUMANTASK)
                {
                    var parameters = humanTask.extensionElements?.Any.FirstOrDefault(_ => _.Name == "cmg:parameters");
                    if (parameters != null)
                    {
                        var xmlSerializer = new XmlSerializer(typeof(tHumanTaskParameter), "https://github.com/simpleidserver/CaseManagement");
                        foreach (XmlNode child in parameters.ChildNodes)
                        {
                            using (var txtReader = new StringReader(child.OuterXml))
                            {
                                pars.Add((tHumanTaskParameter)xmlSerializer.Deserialize(txtReader));
                            }
                        }
                    }
                }

                return(new HumanTaskElementInstance
                {
                    Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name,
                    FormId = humanTask.formId,
                    Implemention = humanTask.implementation,
                    InputParameters = pars.ToDictionary(kvp => kvp.key, kvp => kvp.value),
                    PerformerRef = humanTask.performerRef
                });
            }

            if (planItemDef is tTask)
            {
                return(new EmptyTaskElementInstance
                {
                    Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name
                });
            }

            if (planItemDef is tTimerEventListener)
            {
                var            timer      = planItemDef as tTimerEventListener;
                CMMNExpression expression = new CMMNExpression
                {
                    Body     = timer.timerExpression.Text.First(),
                    Language = timer.timerExpression.language
                };
                return(new TimerEventListener
                {
                    Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name,
                    TimerExpression = expression
                });
            }

            if (planItemDef is tMilestone)
            {
                return(new MilestoneElementInstance
                {
                    Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name
                });
            }

            if (planItemDef is tStage)
            {
                return(BuildStage(id, planItemDef as tStage, casePlanInstanceId));
            }

            return(null);
        }
Esempio n. 8
0
 public void AddNode(BaseCasePlanItemInstance casePlanElementInstance)
 {
     Nodes.Add(casePlanElementInstance);
 }
Esempio n. 9
0
        private static BaseCasePlanItemInstance BuildPlanItem(string id, string name, tPlanItemDefinition planItemDef, string casePlanInstanceId)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                name = planItemDef.name;
            }

            if (planItemDef is tHumanTask)
            {
                var humanTask = planItemDef as tHumanTask;
                return(new HumanTaskElementInstance
                {
                    Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name,
                    FormId = humanTask.caseFormRef,
                    PerformerRef = humanTask.performerRef
                });
            }

            if (planItemDef is tTask)
            {
                return(new EmptyTaskElementInstance
                {
                    Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name
                });
            }

            if (planItemDef is tTimerEventListener)
            {
                var            timer      = planItemDef as tTimerEventListener;
                CMMNExpression expression = new CMMNExpression
                {
                    Body     = timer.timerExpression.Text.First(),
                    Language = timer.timerExpression.language
                };
                return(new TimerEventListener
                {
                    Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name,
                    TimerExpression = expression
                });
            }

            if (planItemDef is tMilestone)
            {
                return(new MilestoneElementInstance
                {
                    Id = BaseCasePlanItemInstance.BuildId(casePlanInstanceId, id, 0),
                    EltId = id,
                    NbOccurrence = 0,
                    Name = name
                });
            }

            if (planItemDef is tStage)
            {
                return(BuildStage(planItemDef as tStage, casePlanInstanceId));
            }

            return(null);
        }
Esempio n. 10
0
 private async Task HandleCasePlan(CMMNExecutionContext executionContext, BaseCasePlanItemInstance casePlanElementInstance, CancellationToken token)
 {
     await _processorFactory.Execute(executionContext, casePlanElementInstance, casePlanElementInstance.GetType(), token);
 }