Esempio n. 1
0
        /// <summary>
        /// Attempts to parse a filter string from the command line to a RootFilter
        /// </summary>
        /// <remarks>
        /// Filter string is of the format:
        /// [DependencyOperator][Filter]
        ///
        /// where [DependencyOperator] is implicitly all dependencies or "+" for all dependencies and dependents
        /// where [Filter] is a filter of form [filter type]='[filter value]' or  [negation]([Filter]) or [negation]([Filter][operator][Filter])
        /// where [negation] is either "~" or empty
        /// where [operator] is "and" or "or"
        /// </remarks>
        /// <param name="rootFilter">Filter that was parsed</param>
        /// <param name="error">Error from parsing filter string</param>
        /// <returns>true if parsing was successful</returns>
        public bool TryParse(out RootFilter rootFilter, out FilterParserError error)
        {
            rootFilter = null;

            if (string.IsNullOrEmpty(m_expression))
            {
                error = new FilterParserError(0, ErrorMessages.NullEmptyFilter);
                return(false);
            }

            SkipWhitespace();

            try
            {
                rootFilter = ParseRootFilter();

                // Ensure parsing the filter consumed the entire string
                if (m_position != m_expression.Length)
                {
                    rootFilter = null;
                    error      = new FilterParserError(m_position, ErrorMessages.ExpectedEndOfFilter, StartGroup, EndGroup);
                    return(false);
                }
            }
            catch (FilterParserException ex)
            {
                error = ex.Error;
                return(false);
            }

            error = null;
            return(true);
        }
Esempio n. 2
0
 /// <summary>
 /// Check whether two root filters are the same
 /// </summary>
 public bool Matches(RootFilter rootFilter)
 {
     // TODO: It is incomplete
     return(rootFilter.FilterExpression == FilterExpression);
 }