Пример #1
0
        private static SWLWorkflow <bool>[] traverse(SAFeSWL_OperationManyType workflow)
        {
            IList <SWLWorkflow <bool> > action_list = new List <SWLWorkflow <bool> > ();

            SAFeSWL_OperationManyType action = (SAFeSWL_OperationManyType)workflow;

            for (int i = 0; i < workflow.ItemsElementName.Length; i++)
            {
                switch (workflow.ItemsElementName [i])
                {
                case SAFeSWL.ItemsChoiceType.skip:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.skip, (SAFeSWL_OperationPrimitiveType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.@break:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.@break, (SAFeSWL_OperationPrimitiveType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.@continue:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.@continue, (SAFeSWL_OperationPrimitiveType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.start:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.start, (SAFeSWL_OperationPrimitiveInvokeActionAsyncType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.wait:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.wait, (SAFeSWL_OperationPrimitiveInvokeActionAsyncType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.invoke:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.invoke, (SAFeSWL_OperationPrimitiveInvokeActionType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.cancel:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.cancel, (SAFeSWL_OperationPrimitiveInvokeActionAsyncType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.sequence:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.sequence, (SAFeSWL_OperationManyType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.parallel:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.parallel, (SAFeSWL_OperationManyType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.choice:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.choice, (SAFeSWL_OperationChoiceType)workflow.Items[i]));
                    break;

                case SAFeSWL.ItemsChoiceType.iterate:
                    action_list.Add(traverse(SAFeSWL.ItemChoiceType.iterate, (SAFeSWL_IterateType)workflow.Items[i]));
                    break;
                }
            }

            SWLWorkflow <bool>[] actions = new SWLWorkflow <bool> [action_list.Count];
            action_list.CopyTo(actions, 0);

            return(actions);
        }
Пример #2
0
        private static SWLWorkflow <bool> traverse(SAFeSWL.ItemChoiceType element_name, SAFeSWL_OperationManyType workflow)
        {
            SWLWorkflow <bool>[] actions = traverse((SAFeSWL_OperationManyType)workflow);

            if (element_name == SAFeSWL.ItemChoiceType.sequence)
            {
                Console.WriteLine("AST SEQUENCE {0}", actions.Length);
                return(new SWLWorkflowSequence <bool> (actions));
            }
            else if (element_name == SAFeSWL.ItemChoiceType.parallel)
            {
                Console.WriteLine("AST PARALLEL {0}", actions.Length);
                return(new SWLWorkflowParallel <bool> (actions));
            }
            else
            {
                throw new Exception("convert_to_abstract_syntax/traverse: sequence/parallel expected !");
            }
        }