private void AddDescriptorByRelationship(QueryMapDescriptor descriptor)
        {
            if (descriptor.RelationshipUid.HasValue)
            {
                Dictionary <Guid, List <QueryMapDescriptor> > descriptorsForRelationshipByDescriptorType;

                if (DescriptorsByRelationship.ContainsKey(descriptor.RelationshipUid.Value))
                {
                    descriptorsForRelationshipByDescriptorType = DescriptorsByRelationship[descriptor.RelationshipUid.Value];
                }
                else
                {
                    descriptorsForRelationshipByDescriptorType = new Dictionary <Guid, List <QueryMapDescriptor> >();
                    DescriptorsByRelationship[descriptor.RelationshipUid.Value] = descriptorsForRelationshipByDescriptorType;
                }

                List <QueryMapDescriptor> descriptorsForRelationship;

                if (descriptorsForRelationshipByDescriptorType.ContainsKey(descriptor.DescriptorTypeUid.Value))
                {
                    descriptorsForRelationship = descriptorsForRelationshipByDescriptorType[descriptor.DescriptorTypeUid.Value];
                }
                else
                {
                    descriptorsForRelationship = new List <QueryMapDescriptor>();
                    descriptorsForRelationshipByDescriptorType[descriptor.DescriptorTypeUid.Value] = descriptorsForRelationship;
                }

                descriptorsForRelationship.Add(descriptor);
            }
        }
        public Dictionary <Guid, QueryMapDescriptor> GetNodes(Guid relationshipId)
        {
            Dictionary <Guid, QueryMapDescriptor> descriptors = new Dictionary <Guid, QueryMapDescriptor>();

            if (DescriptorsByRelationship.ContainsKey(relationshipId))
            {
                foreach (KeyValuePair <Guid, List <QueryMapDescriptor> > nodeDescriptorPairs in DescriptorsByRelationship[relationshipId])
                {
                    descriptors[nodeDescriptorPairs.Key] = nodeDescriptorPairs.Value.FirstOrDefault();
                }
            }

            return(descriptors);
        }
        public QueryMapNode GetNode(Guid relationshipId, Guid descriptorType)
        {
            if (DescriptorsByRelationship.ContainsKey(relationshipId))
            {
                if (DescriptorsByRelationship[relationshipId].ContainsKey(descriptorType))
                {
                    foreach (var descriptor in DescriptorsByRelationship[relationshipId][descriptorType])
                    {
                        if (Nodes.ContainsKey(descriptor.NodeUid.Value))
                        {
                            return(Nodes[descriptor.NodeUid.Value]);
                        }
                    }
                }
            }

            return(null);
        }