Exemplo n.º 1
0
        public TalesNetwork()
        {
            _baseActionNode = new TaleItemNode(this, Properties.Resources.BaseActionNodeName);
            Nodes.Add(_baseActionNode);

            _baseLocativeNode = new TaleItemNode(this, Properties.Resources.BaseLocativeNodeName);
            Nodes.Add(_baseLocativeNode);

            _basePersonNode = new TaleItemNode(this, Properties.Resources.BasePersonNodeName);
            Nodes.Add(_basePersonNode);

            _baseFunctionNode = new TaleItemNode(this, Properties.Resources.BaseFunctionNodeName);
            Nodes.Add(_baseFunctionNode);

            _baseTaleNode = new TaleItemNode(this, Properties.Resources.BaseTaleNodeName);
            Nodes.Add(_baseTaleNode);

            _baseTemplateNode = new TaleItemNode(this, Properties.Resources.BaseTemplateNodeName);
            Nodes.Add(_baseTemplateNode);

            _actionNodes = new TaleItemNodeCollection(this, _baseActionNode);
            _locativeNodes = new TaleItemNodeCollection(this, _baseLocativeNode);
            _personNodes = new TaleItemNodeCollection(this, _basePersonNode);
            _taleNodes = new TaleNodeCollection(this);
        }
Exemplo n.º 2
0
        private void UpdateContextNode(NetworkEdgeType edgeType, string value)
        {
            NetworkEdge networkEdge = OutgoingEdges.GetEdge(edgeType);

            if (networkEdge == null)
            {
                if (value != null)
                {
                    TaleItemNode node = new TaleItemNode((TalesNetwork)Network, value);

                    Network.Nodes.Add(node);
                    Network.Edges.Add(this, node, edgeType);

                    NetworkNode baseNode = null;

                    switch (edgeType)
                    {
                        case NetworkEdgeType.Action:
                            baseNode = ((TalesNetwork)Network).BaseAction;
                            break;

                        case NetworkEdgeType.Template:
                            baseNode = ((TalesNetwork)Network).BaseTemplate;
                            break;
                    }

                    Network.Edges.Add(node, baseNode, NetworkEdgeType.IsA);
                }
            }
            else
            {
                if (value == null)
                {
                    Network.Nodes.Remove(networkEdge.EndNode);
                    Network.Edges.Remove(networkEdge);
                }
                else
                {
                    networkEdge.EndNode.Name = value;
                }
            }
        }
Exemplo n.º 3
0
 internal TaleItemNode(TalesNetwork talesNetwork, string name, TaleItemNode baseNode)
     : base(talesNetwork, name, baseNode)
 {
 }
Exemplo n.º 4
0
        protected override void LoadFromXElement(XElement xNetwork)
        {
            Contract.Requires<ArgumentNullException>(xNetwork != null);

            XNamespace xNamespace = SerializableObject.XNamespace;

            XElement xNodesBase = xNetwork.Element(xNamespace + "Nodes");
            var xNodes = xNodesBase.Elements(xNamespace + "Node");
            foreach (XElement xNode in xNodes)
            {
                XAttribute xNodeKindAttribute = xNode.Attribute("nodeKind");
                NetworkNode networkNode = null;

                if (xNodeKindAttribute == null)
                {
                    //networkNode = Nodes.Add();
                    throw new SerializationException();
                }
                else
                {
                    TaleNodeKind nodeKind = (TaleNodeKind)Enum.Parse(typeof(TaleNodeKind), xNodeKindAttribute.Value);

                    switch (nodeKind)
                    {
                        case TaleNodeKind.Tale:
                            networkNode = new TaleNode(this);
                            break;

                        case TaleNodeKind.TaleItem:
                            networkNode = new TaleItemNode(this);
                            break;

                        case TaleNodeKind.Function:
                            networkNode = new FunctionNode(this);
                            break;
                    }
                }

                networkNode.LoadFromXml(xNode);

                // TODO: Необходимо избавиться от этого костыля.
                if (!Nodes.Where(node => node.Id == networkNode.Id).Any())
                {
                    Nodes.Add(networkNode);
                }
            }

            XElement xEdgesBase = xNetwork.Element(xNamespace + "Edges");
            var xEdges = xEdgesBase.Elements(xNamespace + "Edge");
            foreach (XElement xEdge in xEdges)
            {
                NetworkEdge networkEdge = new TaleItemEdge(this);

                networkEdge.LoadFromXml(xEdge);

                // TODO: Необходимо избавиться от этого костыля.
                if (!Edges.Where(edge => edge.Id == networkEdge.Id).Any())
                {
                    Edges.Add(networkEdge);
                }
            }

            SetId();

            _isDirty = false;

            _baseActionNode = (TaleItemNode)Nodes[0];
            _baseLocativeNode = (TaleItemNode)Nodes[1];
            _basePersonNode = (TaleItemNode)Nodes[2];
            _baseFunctionNode = Nodes[3];
            _baseTaleNode = Nodes[4];
            _baseTemplateNode = Nodes[5];
        }