Example #1
0
        public EdgeResult EvaluateCondition(IMapElement mapElement)
        {
            if (Condition == null)
            {
                /// As we weren't given a Condition we want this to be ignored so other results aren't dirtied.
                return(new EdgeResult()
                {
                    IsEdge = null, IsIncluded = false
                });
            }

            if (mapElement is Node && Condition.EdgeElement == EdgeElementType.Relationship)
            {
                // If the mapElement type doesn't match the condition type then ignore this condition.
                return(new EdgeResult()
                {
                    IsEdge = null, IsIncluded = false
                });
            }
            else if (mapElement is Relationship && Condition.EdgeElement == EdgeElementType.Node)
            {
                // If the mapElement type doesn't match the condition type then ignore this condition.
                return(new EdgeResult()
                {
                    IsEdge = null, IsIncluded = false
                });
            }
            else if (!(mapElement is Node) && !(mapElement is Relationship))
            {
                // If the mapElement isn't a known type then ignore this condition.
                return(new EdgeResult()
                {
                    IsEdge = null, IsIncluded = false
                });
            }

            bool isEdge = false;

            switch (Condition.EdgeComponent)
            {
            case EdgeComponentType.Id:
                isEdge = !mapElement.Id.Equals(Condition.ComponentValue);
                break;

            case EdgeComponentType.OriginalId:
                isEdge = !mapElement.OriginalId.Equals(Condition.ComponentValue);
                break;

            case EdgeComponentType.Type:
                isEdge = !mapElement.TypeId.Equals(Condition.ComponentValue);
                break;

            case EdgeComponentType.Metadata:
                MetadataEdgeConditionTest metadataCondition = Condition as MetadataEdgeConditionTest;

                if (metadataCondition != null)
                {
                    IEnumerable <KeyValuePair <MetadataContext, Metadata> > matchingMetadata = mapElement.Metadata.Where(item => item.Value.MetadataName.Equals(metadataCondition.MetadataName) == item.Value.MetadataValue.Equals(metadataCondition.ComponentValue));
                    isEdge = (matchingMetadata.Count() == 0);
                }
                else
                {
                    isEdge = false;
                }
                break;

            default:
                isEdge = false;
                break;
            }

            return(new EdgeResult()
            {
                IsEdge = isEdge, IsIncluded = Condition.IsIncluded
            });
        }