Ejemplo n.º 1
0
        //TODO try to simplify this monstrous method
        void CreateProcessConverters()
        {
            //Find the root proces (the one marked as executable) and create its process converter
            var rootProcessConverter = new ProcessConverter(GetExecutableProcess(), this);

            processConverters.Add(rootProcessConverter.Id, rootProcessConverter);
            //Store the newly found converters in a queue
            var processConverterQueue = new Queue <ProcessConverter>();

            processConverterQueue.Enqueue(rootProcessConverter);

            while (processConverterQueue.Count() > 0)
            {
                var currentConverter     = processConverterQueue.Dequeue();
                var inheritedIdentifiers = processConverters[currentConverter.Id].InstanceIdentifiers;
                var callActivities       = currentConverter.Process.Tasks.Where(t => t is CallActivity).Cast <CallActivity>();
                //Look through all call activities of the current process converter
                foreach (var callActivity in callActivities)
                {
                    if (Contract.TryGetProcess(callActivity.CalledElement, out var referencedProcess))
                    {
                        //Create a new process converter based on the target process of the callactivity
                        var calledProcessConverter = new ProcessConverter(referencedProcess, this, callActivity.Id, currentConverter);
                        calledProcessConverter.InstanceIdentifiers.AddRange(inheritedIdentifiers);
                        if (TryGetIdentifier(callActivity, out var identifier))
                        {
                            calledProcessConverter.InstanceIdentifiers.Add(identifier);
                        }
                        processConverters.Add(calledProcessConverter.Id, calledProcessConverter);
                        processConverterQueue.Enqueue(calledProcessConverter);
                    }
                }
            }
        }
Ejemplo n.º 2
0
 public ProcessConverter(Process process, ContractConverter contractConverter, string parentCallActivityCallName = null, ProcessConverter parentProcessConverter = null)
 {
     Process = process;
     ParentCallActivityId   = parentCallActivityCallName;
     ParentProcessConverter = parentProcessConverter;
     ContractConverter      = contractConverter;
     if (parentCallActivityCallName == null)
     {
         IsRootProcess = true;
     }
     else
     {
         IsRootProcess = false;
     }
     CreateElementConverters();
 }
Ejemplo n.º 3
0
        public static ElementConverter CreateConverter(ProcessElement element, ProcessConverter processConverter)
        {
            var elementType = element.GetType();

            if (elementType == typeof(UserTask))
            {
                return(new UserTaskConverter((UserTask)element, processConverter));
            }
            else if (elementType == typeof(ScriptTask))
            {
                return(new ScriptTaskConverter((ScriptTask)element, processConverter));
            }
            else if (elementType == typeof(BusinessRuleTask))
            {
                return(new BusinessRuleTaskConverter((BusinessRuleTask)element, processConverter));
            }
            else if (elementType == typeof(EndEvent))
            {
                return(new EndEventConverter((EndEvent)element, processConverter));
            }
            else if (elementType == typeof(ExclusiveGateway))
            {
                return(new ExclusiveGatewayConverter((ExclusiveGateway)element, processConverter));
            }
            else if (elementType == typeof(ParallelGateway))
            {
                return(new ParallelGatewayConverter((ParallelGateway)element, processConverter));
            }
            else if (elementType == typeof(StartEvent))
            {
                return(new StartEventConverter((StartEvent)element, processConverter));
            }
            else if (elementType == typeof(CallActivity))
            {
                return(new CallActivityConverter((CallActivity)element, processConverter));
            }
            else if (elementType == typeof(TimerBoundaryEvent))
            {
                return(new TimerBoundaryEventConverter((TimerBoundaryEvent)element, processConverter));
            }
            return(null);
        }
Ejemplo n.º 4
0
 public void AddProcessConverter(ProcessConverter processConverter)
 {
     processConverters.Add(processConverter.Process.Id, processConverter);
 }