Esempio n. 1
0
        private Type FindLiteralType(IQueryComponent component)
        {
            Type result = null;

            if (component != null)
            {
                if (component is BinaryOperator)
                {
                    BinaryOperator binaryOperator = (BinaryOperator)component;
                    result = FindLiteralType(binaryOperator.LeftOperand);
                    if (result == null)
                    {
                        result = FindLiteralType(binaryOperator.RightOperand);
                    }
                }
                else if (component is Identifier)
                {
                    result = ((Identifier)component).NativeType;
                }
                else if (component is Alias)
                {
                    result = FindLiteralType(((Alias)component).Component);
                }
            }

            return(result);
        }
Esempio n. 2
0
        public void ParseTest_WithEverything()
        {
            //Arrange
            string query = "str*berry kiwi + banana \"ice smoothie\" party + [lemon NEAR/2 orange]";
            // Expected structure: OR( AND(Wildcard,Term), AND(Term,Phrase,Term), NEAR )

            //Act
            IQueryComponent actual = parser.ParseQuery(query);

            //Assert
            //check level1 or-query
            actual.Should().BeOfType(typeof(OrQuery));
            ((OrQuery)actual).Components.Should().HaveCount(3);
            //check level2
            ((OrQuery)actual).Components[0].Should().BeOfType(typeof(AndQuery));
            ((AndQuery)((OrQuery)actual).Components[0]).Components.Should().HaveCount(2);
            ((OrQuery)actual).Components[1].Should().BeOfType(typeof(AndQuery));
            ((AndQuery)((OrQuery)actual).Components[1]).Components.Should().HaveCount(3);
            ((OrQuery)actual).Components[2].Should().BeOfType(typeof(NearLiteral));
            //check level3
            ((AndQuery)((OrQuery)actual).Components[0]).Components[0].Should().BeOfType(typeof(WildcardLiteral));
            ((AndQuery)((OrQuery)actual).Components[0]).Components[1].Should().BeOfType(typeof(TermLiteral));
            ((AndQuery)((OrQuery)actual).Components[1]).Components[0].Should().BeOfType(typeof(TermLiteral));
            ((AndQuery)((OrQuery)actual).Components[1]).Components[1].Should().BeOfType(typeof(PhraseLiteral));
            ((AndQuery)((OrQuery)actual).Components[1]).Components[2].Should().BeOfType(typeof(TermLiteral));
        }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is IExpression)
     {
         NavigatedComponent.Values.Add((IExpression)component);
     }
 }
 /// <summary>Visit a query component.</summary>
 /// <param name="component">Component to be visited.</param>
 public override void VisitComponent(IQueryComponent component)
 {
     if (!_supressedComponents.Contains(component))
     {
         base.VisitComponent(component);
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is EntityConstrain)
     {
         NavigatedComponent.Patterns.Add((EntityConstrain)component);
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if ((component is IExpression) && (NavigatedComponent.Operand == null))
     {
         NavigatedComponent.Operand = (IExpression)component;
     }
 }
Esempio n. 7
0
 /// <summary>Determines if the given component contains another component as a child.</summary>
 /// <param name="component">Component to be checked.</param>
 /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns>
 public override bool ContainsComponent(IQueryComponent component)
 {
     return(component is QueryElement ? NavigatedComponent.Elements.Contains((QueryElement)component) :
            (component is Prefix ? NavigatedComponent.Prefixes.Contains((Prefix)component) :
             (component is ISelectableQueryComponent ? NavigatedComponent.Select.Contains((ISelectableQueryComponent)component) :
              (component is Identifier ? NavigatedComponent.Subject == component : false))));
 }
 /// <summary>Visit a query component.</summary>
 /// <param name="component">Component to be visited.</param>
 public override void VisitComponent(IQueryComponent component)
 {
     if (!_supressedComponents.Contains(component))
     {
         base.VisitComponent(component);
     }
 }
Esempio n. 9
0
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is IExpression)
     {
         NavigatedComponent.Arguments.Add((IExpression)component);
     }
 }
 /// <summary>Determines if the given component contains another component as a child.</summary>
 /// <param name="component">Component to be checked.</param>
 /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns>
 public override bool ContainsComponent(IQueryComponent component)
 {
     return (component is QueryElement ? NavigatedComponent.Elements.Contains((QueryElement)component) :
         (component is Prefix ? NavigatedComponent.Prefixes.Contains((Prefix)component) :
             (component is ISelectableQueryComponent ? NavigatedComponent.Select.Contains((ISelectableQueryComponent)component) :
                 (component is Identifier ? NavigatedComponent.Subject == component : false))));
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if ((component is Literal) && (((Literal)component).Value is Uri) && (NavigatedComponent.Value == null))
     {
         NavigatedComponent.Value = (Literal)component;
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if ((component is IExpression) && (NavigatedComponent.Operand == null))
     {
         NavigatedComponent.Operand = (IExpression)component;
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if ((component is Literal) && (((Literal)component).Value is Uri) && (NavigatedComponent.Value == null))
     {
         NavigatedComponent.Value = (Literal)component;
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is EntityConstrain)
     {
         NavigatedComponent.Patterns.Add((EntityConstrain)component);
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is IExpression) && (replacement is IExpression))
     {
         if (NavigatedComponent.Operand == (IExpression)component)
         {
             NavigatedComponent.Operand = (IExpression)replacement;
         }
     }
 }
Esempio n. 16
0
        public QueryItem(QueryType queryType, IQueryComponent queryComponent)
        {
            if (queryComponent == null)
            {
                throw new ArgumentNullException("queryComponent");
            }

            QueryComponent = queryComponent;
            QueryType      = queryType;
        }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is IExpression) && (replacement is IExpression))
     {
         if (NavigatedComponent.Operand == (IExpression)component)
         {
             NavigatedComponent.Operand = (IExpression)replacement;
         }
     }
 }
Esempio n. 18
0
        protected void AddComponent(IQueryComponent queryComponent)
        {
            // ensure the component does not exist yet
            if (_components.Any(c => c.Type == queryComponent.Type))
            {
                throw new InvalidOperationException($"The QueryContext already containes a component with the Type {queryComponent.Type}");
            }

            _components.Add(queryComponent);
        }
Esempio n. 19
0
        public void ParseTest_WildcardQuery_ReturnsWildcardLiteral()
        {
            //Arrange
            string query = "colo*r";
            //Act
            IQueryComponent actual = parser.ParseQuery(query);

            //Assert
            actual.Should().BeOfType(typeof(WildcardLiteral));
        }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is Literal) && (replacement is Literal) && (((Literal)component).Value is Uri) && (((Literal)replacement).Value is Uri))
     {
         if (NavigatedComponent.Value == (Literal)component)
         {
             NavigatedComponent.Value = (Literal)component;
         }
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is Literal) && (replacement is Literal) && (((Literal)component).Value is Uri) && (((Literal)replacement).Value is Uri))
     {
         if (NavigatedComponent.Value == (Literal)component)
         {
             NavigatedComponent.Value = (Literal)component;
         }
     }
 }
Esempio n. 22
0
        public void ParsingSingleQueryTest_ReturnsTermLiteral()
        {
            //Arrange
            string      query    = "smoothie";
            TermLiteral expected = new TermLiteral(query);
            //Act
            IQueryComponent actual = parser.ParseQuery(query);

            //Assert
            actual.Should().BeOfType(typeof(TermLiteral));
            ((TermLiteral)actual).Term.Should().BeSameAs(expected.Term);
        }
Esempio n. 23
0
        public void ParsingNearQueryTest_ReturnsNearLiteral()
        {
            //Arrange
            string      query    = "[lemon NEAR/2 orange]";
            NearLiteral expected = new NearLiteral("lemon", 2, "orange");
            //Act
            IQueryComponent actual = parser.ParseQuery(query);

            //Assert
            actual.Should().BeOfType(typeof(NearLiteral));
            ((NearLiteral)actual).ToString().Should().BeEquivalentTo(expected.ToString());
        }
        /// <summary>Converts a query component into its navigator.</summary>
        /// <param name="queryComponent">Query component to be converted.</param>
        /// <returns>Query component navigator or null.</returns>
        internal static IQueryComponentNavigator GetQueryComponentNavigator(this IQueryComponent queryComponent)
        {
            IQueryComponentNavigator         result = null;
            QueryComponentNavigatorAttribute queryComponentNavigatorAttribute = queryComponent.GetQueryComponentNavigatorAttribute();

            if (queryComponentNavigatorAttribute != null)
            {
                result = (IQueryComponentNavigator)queryComponentNavigatorAttribute.Constructor.Invoke(new object[] { queryComponent });
            }

            return(result);
        }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is EntityConstrain) && (replacement is EntityConstrain))
     {
         int indexOf = NavigatedComponent.Patterns.IndexOf((EntityConstrain)component);
         if (indexOf != -1)
         {
             NavigatedComponent.Patterns.RemoveAt(indexOf);
             NavigatedComponent.Patterns.Insert(indexOf, (EntityConstrain)replacement);
         }
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is QueryElement) && (replacement is QueryElement))
     {
         int indexOf = NavigatedComponent.Elements.IndexOf((QueryElement)component);
         if (indexOf != -1)
         {
             NavigatedComponent.Elements.RemoveAt(indexOf);
             NavigatedComponent.Elements.Insert(indexOf, (QueryElement)replacement);
         }
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is EntityConstrain) && (replacement is EntityConstrain))
     {
         int indexOf = NavigatedComponent.Patterns.IndexOf((EntityConstrain)component);
         if (indexOf != -1)
         {
             NavigatedComponent.Patterns.RemoveAt(indexOf);
             NavigatedComponent.Patterns.Insert(indexOf, (EntityConstrain)replacement);
         }
     }
 }
Esempio n. 28
0
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is IExpression) && (replacement is IExpression))
     {
         int indexOf = NavigatedComponent.Arguments.IndexOf((IExpression)component);
         if (indexOf != -1)
         {
             NavigatedComponent.Arguments.RemoveAt(indexOf);
             NavigatedComponent.Arguments.Insert(indexOf, (IExpression)replacement);
         }
     }
 }
Esempio n. 29
0
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is IExpression) && (replacement is IExpression))
     {
         int indexOf = NavigatedComponent.Values.IndexOf((IExpression)component);
         if (indexOf != -1)
         {
             NavigatedComponent.Values.RemoveAt(indexOf);
             NavigatedComponent.Values.Insert(indexOf, (IExpression)replacement);
         }
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is QueryElement) && (replacement is QueryElement))
     {
         int indexOf = NavigatedComponent.Elements.IndexOf((QueryElement)component);
         if (indexOf != -1)
         {
             NavigatedComponent.Elements.RemoveAt(indexOf);
             NavigatedComponent.Elements.Insert(indexOf, (QueryElement)replacement);
         }
     }
 }
Esempio n. 31
0
        public void ParsingTest_Exception_ReturnsNull()     //TODO: other cases to be handled?
        {
            //with empty string
            string          query  = "";
            IQueryComponent actual = parser.ParseQuery(query);

            actual.Should().BeNull();

            // query = "  ";
            query  = null;
            actual = parser.ParseQuery(query);
            actual.Should().BeNull();
        }
Esempio n. 32
0
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is IExpression) && (replacement is IExpression))
     {
         if (NavigatedComponent.Predicate == (IExpression)component)
         {
             NavigatedComponent.Predicate = (IExpression)replacement;
         }
         else if (NavigatedComponent.Value == (IExpression)component)
         {
             NavigatedComponent.Value = (IExpression)component;
         }
     }
 }
Esempio n. 33
0
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is IExpression)
     {
         if (NavigatedComponent.Predicate == null)
         {
             NavigatedComponent.Predicate = (IExpression)component;
         }
         else if (NavigatedComponent.Value == null)
         {
             NavigatedComponent.Value = (IExpression)component;
         }
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is IExpression)
     {
         if (NavigatedComponent.LeftOperand == null)
         {
             NavigatedComponent.LeftOperand = (IExpression)component;
         }
         else if (NavigatedComponent.RightOperand == null)
         {
             NavigatedComponent.RightOperand = (IExpression)component;
         }
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is IExpression) && (replacement is IExpression))
     {
         if (NavigatedComponent.Subject == (IExpression)component)
         {
             NavigatedComponent.Subject = (IExpression)replacement;
         }
         else
         {
             base.ReplaceComponent(component, replacement);
         }
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is IExpression)
     {
         if (NavigatedComponent.Subject == null)
         {
             NavigatedComponent.Subject = (IExpression)component;
         }
         else
         {
             base.AddComponent(component);
         }
     }
 }
Esempio n. 37
0
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is Identifier)
     {
         if (NavigatedComponent.Name == null)
         {
             NavigatedComponent.Name = (Identifier)component;
         }
     }
     else if (NavigatedComponent.Component == null)
     {
         NavigatedComponent.Component = component;
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is IExpression) && (replacement is IExpression))
     {
         if (NavigatedComponent.Predicate == (IExpression)component)
         {
             NavigatedComponent.Predicate = (IExpression)replacement;
         }
         else if (NavigatedComponent.Value == (IExpression)component)
         {
             NavigatedComponent.Value = (IExpression)component;
         }
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is Identifier) && (replacement is Identifier))
     {
         if (NavigatedComponent.Name == (Identifier)component)
         {
             NavigatedComponent.Name = (Identifier)replacement;
         }
     }
     else if (NavigatedComponent.Component == component)
     {
         NavigatedComponent.Component = replacement;
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is IExpression) && (replacement is IExpression))
     {
         if (NavigatedComponent.Subject == (IExpression)component)
         {
             NavigatedComponent.Subject = (IExpression)replacement;
         }
         else
         {
             base.ReplaceComponent(component, replacement);
         }
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is Identifier)
     {
         if (NavigatedComponent.Name == null)
         {
             NavigatedComponent.Name = (Identifier)component;
         }
     }
     else if (NavigatedComponent.Component == null)
     {
         NavigatedComponent.Component = component;
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is IExpression)
     {
         if (NavigatedComponent.LeftOperand == null)
         {
             NavigatedComponent.LeftOperand = (IExpression)component;
         }
         else if (NavigatedComponent.RightOperand == null)
         {
             NavigatedComponent.RightOperand = (IExpression)component;
         }
     }
 }
Esempio n. 43
0
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is Identifier) && (replacement is Identifier))
     {
         if (NavigatedComponent.Name == (Identifier)component)
         {
             NavigatedComponent.Name = (Identifier)replacement;
         }
     }
     else if (NavigatedComponent.Component == component)
     {
         NavigatedComponent.Component = replacement;
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is IExpression)
     {
         if (NavigatedComponent.Subject == null)
         {
             NavigatedComponent.Subject = (IExpression)component;
         }
         else
         {
             base.AddComponent(component);
         }
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is IExpression)
     {
         if (NavigatedComponent.Predicate == null)
         {
             NavigatedComponent.Predicate = (IExpression)component;
         }
         else if (NavigatedComponent.Value == null)
         {
             NavigatedComponent.Value = (IExpression)component;
         }
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is QueryElement)
     {
         NavigatedComponent.Elements.Add((QueryElement)component);
     }
     else if (component is Identifier)
     {
         Identifier identifier = (Identifier)component;
         if (NavigatedComponent.About == null)
         {
             NavigatedComponent.About = identifier;
         }
     }
 }
        /// <summary>Visit a query component.</summary>
        /// <param name="component">Component to be visited.</param>
        public virtual void VisitComponent(IQueryComponent component)
        {
            Type componentType = GetType();
            MethodInfo componentMethodInfo = null;
            while ((componentType != typeof(object)) && (componentMethodInfo == null))
            {
                componentMethodInfo = componentType.GetMethod("Visit" + component.GetType().Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
                componentType = componentType.BaseType;
            }

            if (componentMethodInfo != null)
            {
                componentMethodInfo.Invoke(this, new object[] { component });
            }
        }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is QueryElement)
     {
         NavigatedComponent.Elements.Add((QueryElement)component);
     }
     else if (component is Identifier)
     {
         Identifier identifier = (Identifier)component;
         if (NavigatedComponent.About == null)
         {
             NavigatedComponent.About = identifier;
         }
     }
 }
Esempio n. 49
0
        public void ParsingOrQueryTest_ReturnsOrQuery()
        {
            //Arrange
            string  query    = "kiwi + banana";
            OrQuery expected = new OrQuery(
                new List <IQueryComponent> {
                new TermLiteral("kiwi"), new TermLiteral("banana")
            }
                );
            //Act
            IQueryComponent actual = parser.ParseQuery(query);

            //Assert
            actual.Should().BeOfType(typeof(OrQuery));
            ((OrQuery)actual).Components.Should().HaveSameCount(expected.Components);
        }
Esempio n. 50
0
        /// <summary>Visit a query component.</summary>
        /// <param name="component">Component to be visited.</param>
        public virtual void VisitComponent(IQueryComponent component)
        {
            Type       componentType       = GetType();
            MethodInfo componentMethodInfo = null;

            while ((componentType != typeof(object)) && (componentMethodInfo == null))
            {
                componentMethodInfo = componentType.GetMethod("Visit" + component.GetType().Name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
                componentType       = componentType.GetTypeInfo().BaseType;
            }

            if (componentMethodInfo != null)
            {
                componentMethodInfo.Invoke(this, new object[] { component });
            }
        }
 internal void Remove(IQueryComponent key)
 {
     int totalChange = 0;
     foreach (Index<IQueryComponent> index in _list)
     {
         if (!Object.Equals(index.Key, key))
         {
             index.StartAt -= totalChange;
         }
         else
         {
             _stringBuilder = _stringBuilder.Remove(index.StartAt, index.Length);
             totalChange += index.Length;
         }
     }
 }
 /// <summary>Adds component as a child of another component.</summary>
 /// <param name="component">Component to be added.</param>
 public override void AddComponent(IQueryComponent component)
 {
     if (component is QueryElement)
     {
         NavigatedComponent.Elements.Add((QueryElement)component);
     }
     else if (component is Prefix)
     {
         NavigatedComponent.Prefixes.Add((Prefix)component);
     }
     else if (component is ISelectableQueryComponent)
     {
         NavigatedComponent.Select.Add((ISelectableQueryComponent)component);
     }
     else if ((component is Identifier) && (NavigatedComponent.Subject == null))
     {
         NavigatedComponent.Subject = (Identifier)component;
     }
 }
 /// <summary>Replaces given component with another component.</summary>
 /// <param name="component">Component to be replaced.</param>
 /// <param name="replacement">Component to be put instead.</param>
 public override void ReplaceComponent(IQueryComponent component, IQueryComponent replacement)
 {
     if ((component is QueryElement) && (replacement is QueryElement))
     {
         int indexOf = NavigatedComponent.Elements.IndexOf((QueryElement)component);
         if (indexOf != -1)
         {
             NavigatedComponent.Elements.RemoveAt(indexOf);
             NavigatedComponent.Elements.Insert(indexOf, (QueryElement)replacement);
         }
     }
     else if ((component is Prefix) && (replacement is Prefix))
     {
         int indexOf = NavigatedComponent.Prefixes.IndexOf((Prefix)component);
         if (indexOf != -1)
         {
             NavigatedComponent.Prefixes.RemoveAt(indexOf);
             NavigatedComponent.Prefixes.Insert(indexOf, (Prefix)replacement);
         }
     }
     else if ((component is ISelectableQueryComponent) && (replacement is ISelectableQueryComponent))
     {
         int indexOf = NavigatedComponent.Select.IndexOf((ISelectableQueryComponent)component);
         if (indexOf != -1)
         {
             NavigatedComponent.Select.RemoveAt(indexOf);
             NavigatedComponent.Select.Insert(indexOf, (ISelectableQueryComponent)replacement);
         }
     }
     else if ((component is Identifier) && (replacement is Identifier))
     {
         if (NavigatedComponent.Subject == (Identifier)component)
         {
             NavigatedComponent.Subject = (Identifier)replacement;
         }
     }
 }
Esempio n. 54
0
 /// <summary>Determines if the given component contains another component as a child.</summary>
 /// <param name="component">Component to be checked.</param>
 /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns>
 public override bool ContainsComponent(IQueryComponent component)
 {
     return (component is IExpression ? NavigatedComponent.Values.Contains((IExpression)component) : false);
 }
Esempio n. 55
0
 /// <summary>Determines if the given component can accept another component as a child.</summary>
 /// <param name="component">Component to be added.</param>
 /// <returns><b>true</b> if given component can be added, otherwise <b>false</b>.</returns>
 public override bool CanAddComponent(IQueryComponent component)
 {
     return (component is IExpression);
 }
 /// <summary>Determines if the given component contains another component as a child.</summary>
 /// <param name="component">Component to be checked.</param>
 /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns>
 public override bool ContainsComponent(IQueryComponent component)
 {
     return (NavigatedComponent.Operand == component);
 }
 /// <summary>Determines if the given component can accept another component as a child.</summary>
 /// <param name="component">Component to be added.</param>
 /// <returns><b>true</b> if given component can be added, otherwise <b>false</b>.</returns>
 public override bool CanAddComponent(IQueryComponent component)
 {
     return (component is IExpression) && (NavigatedComponent.Operand == null);
 }
 /// <summary>Determines if the given component can accept another component as a child.</summary>
 /// <param name="component">Component to be added.</param>
 /// <returns><b>true</b> if given component can be added, otherwise <b>false</b>.</returns>
 public override bool CanAddComponent(IQueryComponent component)
 {
     return (component is IExpression) && ((NavigatedComponent.Predicate == null) || (NavigatedComponent.Value == null));
 }
 /// <summary>Determines if the given component can accept another component as a child.</summary>
 /// <param name="component">Component to be added.</param>
 /// <returns><b>true</b> if given component can be added, otherwise <b>false</b>.</returns>
 public override bool CanAddComponent(IQueryComponent component)
 {
     return (component is Literal) && (((Literal)component).Value is Uri) && (NavigatedComponent.Value == null);
 }
 /// <summary>Determines if the given component contains another component as a child.</summary>
 /// <param name="component">Component to be checked.</param>
 /// <returns><b>true</b> if given component is already contained, otherwise <b>false</b>.</returns>
 public override bool ContainsComponent(IQueryComponent component)
 {
     return (NavigatedComponent.Predicate == component) || (NavigatedComponent.Value == component);
 }