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