Пример #1
0
        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);
        }
Пример #4
0
        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);
        }