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); }
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 !"); } }