public AbstractNetwork(Random rand, int stateGenNumber, string statePrefix, int sh_width, int sh_height) { this.rand = rand; this.items = new List<AbstractNetworkItem>(); this.selectedItems = new List<AbstractItem>(); this.edges = new List<AbstractEdge>(); this.visualSettings = new NetworkVisualSettings(); this.visibleSettings = new NetworkVisibleSettings(); this.stateMatrix = new List<StateVector>(); this.stateHierarchy = new StateHierarchy(this.rand, sh_width, sh_height); this.unidGenNumber = 0; this.stateGenNumber = stateGenNumber; this.statePrefix = statePrefix; this.events = new EventTrunk(); this.transitionHistory = new List<TransitionHistoryItem>(); }
public static PetriNetwork openFromXml(Random rand, string xmlFile) { PetriNetwork network = null; 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.PetriEvents.addEvent(PetriEvent.openEvents(node.ChildNodes, "Event")); } XmlNodeList visualSettingsList = doc.GetElementsByTagName("VisualSettings", PetriXmlHelper.XML_NAMESPACE); foreach (XmlNode node in visualSettingsList) { network.visualSettings = NetworkVisualSettings.openFromXml(node.ChildNodes); } XmlNodeList visibleSettingsList = doc.GetElementsByTagName("VisibleSettings", PetriXmlHelper.XML_NAMESPACE); foreach (XmlNode node in visibleSettingsList) { network.visibleSettings = NetworkVisibleSettings.openFromXml(node.ChildNodes); } 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 = AbstractNetwork.openItemsFromXml(nodeChild.ChildNodes); break; case "Edges": network.edges = AbstractNetwork.openEdgesFromXml(nodeChild.ChildNodes, network.items); break; case "Notes": List<AbstractItem> itemsAndEdges = new List<AbstractItem>(); itemsAndEdges.AddRange(network.items); itemsAndEdges.AddRange(network.edges); network.items.AddRange(AbstractNetwork.openNotesFromXml(nodeChild.ChildNodes, itemsAndEdges)); break; } break; } } } XmlNodeList stateHierarchyList = doc.GetElementsByTagName("StateHierarchy", PetriXmlHelper.XML_NAMESPACE); foreach (XmlNode node in stateHierarchyList) { XmlNodeList networkChildren = node.ChildNodes; StateHierarchy stateHierarchy = new StateHierarchy(rand, network.StateHierarchy.Width, network.StateHierarchy.Height); 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(); } if (network == null) { throw new PetriNetworkException("Network is null."); } if ( ( network.certificateSubject == null ) || ( "".Equals(network.certificateSubject) ) ) { throw new PetriNetworkException("Network hasn't got certificate subject information."); } RSACryptoServiceProvider publicKey = CryptoHelper.getInstance().getCertificateFromTrustStore(network.certificateSubject); if (publicKey == null) { throw new CryptoException("The certificate of the network (" + network.certificateSubject + ") is not trusted certificate."); } bool validSignature = CryptoHelper.checkSignature(doc, publicKey); if (!validSignature) { throw new CryptoException("The signature of the network is not valid. The file was modified."); } return network; }