public Workflow Parse(string resourceXml) { Workflow instance = new Workflow(); XDocument doc = XDocument.Parse(resourceXml); List <ASTNode> nodes = new List <ASTNode>(); XElement root = doc.Element("workflow"); if (root.HasAttributes) { XAttribute attr = root.Attribute("mode"); instance.Mode = String.IsNullOrEmpty(attr.Value) ? WorkflowMode.Transition : (WorkflowMode)Enum.Parse(typeof(WorkflowMode), attr.Value, true); } List <XElement> elements = root.Elements().ToList(); foreach (XElement element in elements) { string nodeName = element.Name.LocalName; if (ServiceContainer.Contains(nodeName)) { IWorkflowParse typeMapper = ServiceContainer.Resolve(nodeName) as IWorkflowParse; nodes.Add(typeMapper.Parse(element) as ASTNode); } } instance.Nodes.AddRange(nodes.Cast <Node>().ToList()); return(instance); }
public Element Parse(XElement element) { Node node = new Node { Name = element.Attribute("name").Value, ID = element.Attribute("id").Value, Cooperation = Convert.ToInt32(element.Attribute("cooperation").Value) }; string category = element.Attribute("category").Value; node.NodeType = Utils.Convert(category); if (element.HasElements) { List <Element> nodes = new List <Element>(); element.Elements().ToList().ForEach(entry => { string nodeName = entry.Name.LocalName; if (ServiceContainer.Contains(nodeName)) { IWorkflowParse parseService = (ServiceContainer.Resolve(nodeName) as IWorkflowParse); nodes.Add(parseService.Parse(entry)); } }); node.Transitions.AddRange(nodes.Where(transition => (transition is Transition)).Cast <Transition>()); node.Actions.AddRange(nodes.Where(action => (action is Action)).Cast <Action>()); node.Groups.AddRange(nodes.Where(group => (group is Group)).Cast <Group>()); node.Actors.AddRange(nodes.Where(actor => (actor is Actor)).Cast <Actor>()); node.Command = nodes.Where(command => (command is Command)).Cast <Command>().FirstOrDefault(); } return(node); }
public Element Parse(XElement element) { Node node = new Node { Name = element.Attribute("name").Value, ID = element.Attribute("id").Value, Cooperation = element.Attribute("cooperation").Value, Assistant = element.Attribute("assistant").Value }; XAttribute back = element.Attribute("back"); XAttribute url = element.Attribute("url"); XAttribute attr = element.Attribute("veto"); node.Veto = attr != null && attr.Value == "0" ? String.Empty : "Smartflow.Core.Components.VetoService"; node.Back = back == null ? String.Empty : back.Value; node.Url = url == null ? String.Empty : url.Value; string category = element.Attribute("category").Value; node.NodeType = Internals.Utils.Convert(category); if (element.HasElements) { List <Element> nodes = new List <Element>(); element.Elements().ToList().ForEach(entry => { string nodeName = entry.Name.LocalName; if (ServiceContainer.Contains(nodeName)) { IWorkflowParse parseService = (ServiceContainer.Resolve(nodeName) as IWorkflowParse); nodes.Add(parseService.Parse(entry)); } }); node.Transitions.AddRange(nodes.Where(transition => (transition is Transition)).Cast <Transition>()); node.Actions.AddRange(nodes.Where(action => (action is Action)).Cast <Action>()); node.Groups.AddRange(nodes.Where(group => (group is Group)).Cast <Group>()); node.Actors.AddRange(nodes.Where(actor => (actor is Actor)).Cast <Actor>()); node.Rules.AddRange(nodes.Where(rule => (rule is Elements.Rule)).Cast <Elements.Rule>()); node.Carbons.AddRange(nodes.Where(carbon => (carbon is Elements.Carbon)).Cast <Elements.Carbon>()); node.Organizations.ToList().AddRange(nodes.Where(org => (org is Elements.Organization)).Cast <Elements.Organization>()); node.Command = nodes.Where(command => (command is Command)).Cast <Command>().FirstOrDefault(); if (node.Command != null) { node.Command.Node = node; } } return(node); }
public Workflow Parse(string resourceXml) { Workflow instance = new Workflow(); XDocument doc = XDocument.Parse(resourceXml); List <ASTNode> nodes = new List <ASTNode>(); XElement root = doc.Element("workflow"); List <XElement> elements = root.Elements().ToList(); foreach (XElement element in elements) { string nodeName = element.Name.LocalName; if (ServiceContainer.Contains(nodeName)) { IWorkflowParse typeMapper = ServiceContainer.Resolve(nodeName) as IWorkflowParse; nodes.Add(typeMapper.Parse(element) as ASTNode); } } instance.Nodes.AddRange(nodes.Cast <Node>().ToList()); return(instance); }