Example #1
0
        public static Node GetOther(this NodeRelation rel, Node oneSide)
        {
            if (rel.Node1 != oneSide && rel.Node2 != oneSide)
            {
                throw new InvalidOperationException($"Node {oneSide} is not a part of relation {rel}.");
            }

            return(oneSide == rel.Node1 ? rel.Node2 : rel.Node1);
        }
Example #2
0
        protected void CommitBoundChange(Bound record)
        {
            var root1 = record.Item1.ResolveRoot();
            var node1 = this.metadataIndexed.AllocateNode(root1.CurrentPath);
            var root2 = record.Item2.ResolveRoot();
            var node2 = this.metadataIndexed.AllocateNode(root2.CurrentPath);

            var link       = new NodeRelation(RelationKind.Bound, node1, node2);
            var nodeRecord = new NodeRecord(record.BatchIndex, record.StageName, record.PluginId, record.PluginMetadata, record.Tags, null, new NodeRelation[] { link });

            node1.AddRecord(nodeRecord);
            node2.AddRecord(nodeRecord);
        }
Example #3
0
        public void AddRelation(NodeRelation relation)
        {
            if (relation.Node1 == this || relation.Node2 == this)
            {
                if (!this.relations.ContainsKey(relation.RelationKind))
                {
                    this.relations.Add(relation.RelationKind, new List <NodeRelation>());
                }

                if (!this.relations[relation.RelationKind].Contains(relation))
                {
                    this.relations[relation.RelationKind].Add(relation);
                }
            }
        }
Example #4
0
        protected void CommitGeneratedChange(Generated record)
        {
            var subjectRoots = record.Subject.ResolveRoots();
            var subjectNodes = new List <Node>();

            foreach (var r in subjectRoots)
            {
                subjectNodes.Add(this.metadataIndexed.AllocateNode(r.CurrentPath));
            }
            if (record.From != null)
            {
                NodeRelation[] relations = new NodeRelation[subjectNodes.Count];
                var            fromNode  = this.metadataIndexed.AllocateNode(record.From.ResolveRoot().CurrentPath);
                for (var i = 0; i < subjectNodes.Count; i++)
                {
                    relations[i] = new NodeRelation(RelationKind.GeneratedFrom, subjectNodes[i], fromNode);
                }

                var nodeRecord = new NodeRecord(record.BatchIndex, record.StageName, record.PluginId, record.PluginMetadata, record.Tags, ChangeKind.Created, relations);
                foreach (var n in subjectNodes)
                {
                    n.AddRecord(nodeRecord);
                }

                foreach (var link in relations)
                {
                    fromNode.AddRelation(link);
                }
            }
            else
            {
                var nodeRecord = new NodeRecord(record.BatchIndex, record.StageName, record.PluginId, record.PluginMetadata, record.Tags, ChangeKind.Created, null);
                foreach (var n in subjectNodes)
                {
                    n.AddRecord(nodeRecord);
                }
            }
        }