Exemplo n.º 1
0
        internal void DeserializeNetwork(string filePath)
        {
            var tempNodeCollection = new List<Node>();

            NewFile();

            // Create an reader
            using (var reader = new XmlTextReader(filePath))
            {
                reader.MoveToContent();

                var enumString = reader.GetAttribute("GraphFlowDirection");

                if (enumString != null)
                {
                    ImportFlowDirection =
                        (GraphFlowDirections) Enum.Parse(typeof (GraphFlowDirections), enumString, true);
                }


                reader.ReadToDescendant("Nodes");

                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                        case XmlNodeType.Element:

                            if (reader.Name != null)
                            {
                                var type = Type.GetType(reader.Name);

                                if (type == null)
                                {
                                    try // try to find type in entry assembly
                                    {
                                        var assembly = Assembly.GetEntryAssembly();
                                        type = assembly.GetTypes().FirstOrDefault(t => t.FullName == reader.Name);
                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine(ex);
                                    }

                                    try // try to find type in ExternalNodeTypes
                                    {
                                        type = ExternalNodeTypes.ToArray()
                                            .FirstOrDefault(t => t.FullName == reader.Name);
                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine(ex);
                                    }
                                }


                                if (type != null)
                                {
                                    if (type.IsSubclassOf(typeof (Node)))
                                    {
                                        var node = (Node) Activator.CreateInstance(type, this);
                                        node.DeserializeNetwork(reader);

                                        tempNodeCollection.Add(node);
                                    }
                                    else if (type == typeof (Connector))
                                    {
                                        Node startNode = null;
                                        Node endNode = null;

                                        var value = reader.GetAttribute("StartNode");
                                        if (value != null)
                                        {
                                            startNode =
                                                NodeCollection.FirstOrDefault(node => node.Guid == new Guid(value));
                                        }

                                        value = reader.GetAttribute("EndNode");
                                        if (value != null)
                                            endNode = NodeCollection.FirstOrDefault(node => node.Guid == new Guid(value));

                                        value = reader.GetAttribute("StartIndex");
                                        var startIndex = Convert.ToInt32(value);

                                        value = reader.GetAttribute("EndIndex");
                                        var endIndex = Convert.ToInt32(value);


                                        if (startNode != null && endNode != null)
                                        {
                                            var startPort = startNode.OutputPorts[startIndex];
                                            var endPort = endNode.InputPorts[endIndex];

                                            if (startPort != null && endPort != null)
                                            {
                                                var connector = new Connector(this, startPort, endPort);
                                                ConnectorCollection.Add(connector);
                                            }
                                        }
                                    }
                                }
                            }

                            break;
                        case XmlNodeType.Text:

                            break;
                        case XmlNodeType.XmlDeclaration:
                        case XmlNodeType.ProcessingInstruction:

                            break;
                        case XmlNodeType.Comment:

                            break;
                        case XmlNodeType.EndElement:

                            break;
                    }
                }
            }


            foreach (var node in tempNodeCollection)
            {
                node.Show();
            }
        }
Exemplo n.º 2
0
        public void DeserializeNetwork(string filePath)
        {
            NewFile();

            // Create an reader
            using (var reader = new XmlTextReader(filePath))
            {
                reader.MoveToContent();

                var enumString = reader.GetAttribute("GraphFlowDirection");

                if (enumString != null)
                {
                    ImportFlowDirection =
                        (GraphFlowDirections)Enum.Parse(typeof(GraphFlowDirections), enumString, true);
                }


                reader.ReadToDescendant("Nodes");

                while (reader.Read())
                {
                    switch (reader.NodeType)
                    {
                    case XmlNodeType.Element:

                        if (reader.Name != null)
                        {
                            var type = Type.GetType(reader.Name);

                            if (type == null)
                            {
                                try     // try to find type in entry assembly
                                {
                                    var assembly = Assembly.GetEntryAssembly();
                                    type = assembly.GetTypes().First(t => t.FullName == reader.Name);
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine(ex);
                                }

                                try     // try to find type in ExternalNodeTypes
                                {
                                    type = ExternalNodeTypes.ToArray().First(t => t.FullName == reader.Name);
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine(ex);
                                }
                            }


                            if (type != null)
                            {
                                if (type.IsSubclassOf(typeof(Node)))
                                {
                                    var node = (Node)Activator.CreateInstance(type, this);
                                    node.DeserializeNetwork(reader);
                                    NodeCollection.Add(node);
                                }
                                else if (type == typeof(Connector))
                                {
                                    Node startNode = null;
                                    Node endNode   = null;

                                    var value = reader.GetAttribute("StartNode");
                                    if (value != null)
                                    {
                                        startNode =
                                            NodeCollection.FirstOrDefault(node => node.Guid == new Guid(value));
                                    }

                                    value = reader.GetAttribute("EndNode");
                                    if (value != null)
                                    {
                                        endNode = NodeCollection.FirstOrDefault(node => node.Guid == new Guid(value));
                                    }

                                    value = reader.GetAttribute("StartIndex");
                                    var startIndex = Convert.ToInt32(value);

                                    value = reader.GetAttribute("EndIndex");
                                    var endIndex = Convert.ToInt32(value);


                                    if (startNode != null && endNode != null)
                                    {
                                        var startPort = startNode.OutputPorts[startIndex];
                                        var endPort   = endNode.InputPorts[endIndex];

                                        if (startPort != null && endPort != null)
                                        {
                                            var connector = new Connector(this, startPort, endPort);
                                            ConnectorCollection.Add(connector);
                                        }
                                    }
                                }
                            }
                        }

                        break;

                    case XmlNodeType.Text:

                        break;

                    case XmlNodeType.XmlDeclaration:
                    case XmlNodeType.ProcessingInstruction:

                        break;

                    case XmlNodeType.Comment:

                        break;

                    case XmlNodeType.EndElement:

                        break;
                    }
                }
            }
        }