Esempio n. 1
0
        public PetriNetwork(Random rand, string fileName, string name, string certificateSubject, DateTime lastModificationDate, string description, FireRule fireRule)
        {
            this.rand = rand;
            this.fileName = fileName;
            this.name = name;
            this.certificateSubject = certificateSubject;
            this.lastModificationDate = lastModificationDate;
            this.description = description;
            this.fireRule = fireRule;
            this.eventTrunk = new EventTrunk();
            this.items = new List<AbstractItem>();
            this.stateHierarchy = new StateHierarchy();
            this.transitionHistory = new List<TransitionHistoryItem>();
            this.stateMatrix = new List<StateVector>();
            this.handlers = new Dictionary<String, PetriHandler>();

            this.unidGenNumber = 0;
            this.stateGenNumber = 0;
            this.statePrefix = "S";
        }
Esempio n. 2
0
        public static PetriNetwork openFromXml(Random rand, string xmlFile)
        {
            PetriNetwork network = null;
            if (File.Exists(xmlFile))
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(xmlFile);

                XmlNodeList networkSettingsList = doc.GetElementsByTagName("NetworkSettings", PetriXmlHelper.XML_NAMESPACE);
                foreach (XmlNode node in networkSettingsList)
                {
                    network = PetriNetwork.openSettingsFromXml(rand, node.ChildNodes, xmlFile);
                }
                if (network != null)
                {
                    XmlNodeList eventsList = doc.GetElementsByTagName("Events", PetriXmlHelper.XML_NAMESPACE);
                    foreach (XmlNode node in eventsList)
                    {
                        network.EventTrunk.addEvents(PetriEvent.openEvents(node.ChildNodes, "Event"));
                    }
                    XmlNodeList networkList = doc.GetElementsByTagName("Network", PetriXmlHelper.XML_NAMESPACE);
                    foreach (XmlNode node in networkList)
                    {
                        XmlNodeList networkChildren = node.ChildNodes;
                        foreach (XmlNode nodeChild in networkChildren)
                        {
                            string namespaceUri = nodeChild.NamespaceURI;
                            string name = nodeChild.LocalName;
                            switch (namespaceUri)
                            {
                                case PetriXmlHelper.XML_NETWORKITEM_NAMESPACE:
                                    switch (name)
                                    {
                                        case "NetworkItems":
                                            network.items.AddRange(PetriNetwork.openItemsFromXml(nodeChild.ChildNodes));
                                            break;
                                        case "Edges":
                                            network.items.AddRange(PetriNetwork.openEdgesFromXml(nodeChild.ChildNodes, network.EventDrivenItems));
                                            break;
                                        case "Notes":
                                            network.items.AddRange(PetriNetwork.openNotesFromXml(nodeChild.ChildNodes, network.items));
                                            break;
                                    }
                                    break;
                            }
                        }
                    }

                    XmlNodeList stateHierarchyList = doc.GetElementsByTagName("StateHierarchy", PetriXmlHelper.XML_NAMESPACE);
                    foreach (XmlNode node in stateHierarchyList)
                    {
                        XmlNodeList networkChildren = node.ChildNodes;
                        StateHierarchy stateHierarchy = new StateHierarchy();
                        foreach (XmlNode nodeChild in networkChildren)
                        {
                            string namespaceUri = nodeChild.NamespaceURI;
                            string name = nodeChild.LocalName;
                            switch (namespaceUri)
                            {
                                case PetriXmlHelper.XML_STATEHIERARCHY_NAMESPACE:
                                    switch (name)
                                    {
                                        case "States":
                                            stateHierarchy.addStates(StateHierarchy.openStatesFromXml(nodeChild.ChildNodes, network.Tokens));
                                            break;
                                        case "Edges":
                                            stateHierarchy.addEdges(StateHierarchy.openEdgesFromXml(nodeChild.ChildNodes, stateHierarchy.States));
                                            break;
                                    }
                                    break;
                            }
                        }
                        network.stateHierarchy = stateHierarchy;
                    }
                    network.setNextUnid();
                }
            }
            return network;
        }