Ejemplo n.º 1
0
        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>();
        }
Ejemplo n.º 2
0
        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;
        }