/// <summary> /// Add the parameters of <paramref name="qualifierKey"/> as criteria for qualifier. /// /// Every parameter of <paramref name="qualifierKey"/> will be required to match in the lines that will be compared with this qualifier. /// If a parameterValue in the <paramref name="qualifierKey"/> is "", then the compared key must not have that parameter, or it must be "". /// /// (Does not expect canoncials to be in same order in relation to different ParameterNames.) /// </summary> /// <param name="qualifier">configurable qualifier composition</param> /// <param name="qualifierKey">parameters</param> /// <param name="parameterInfos">(optional) infos for determining which keys are non-canonical</param> /// <returns><paramref name="qualifier"/></returns> public static ILineQualifier Rule(this ILineQualifier qualifier, ILine qualifierKey, IParameterInfos parameterInfos = null) { // Break qualifierKey into effective non-canonical parameters, and to canonical parameters and occurance index StructList12 <(ILineParameter, int)> list = new StructList12 <(ILineParameter, int)>(); qualifierKey.GetParameterPartsWithOccurance(ref list); // Add rules foreach ((ILineParameter parameter, int occuranceIndex) in list) { // Parameter with null is to be ignored if (parameter.ParameterName == null || parameter.ParameterValue == null) { continue; } // Ineffective key if (occuranceIndex > 0 && parameter.IsNonCanonicalKey(parameterInfos)) { continue; } // parameter with "" is expectation of empty or non-existant value. if (parameter.ParameterValue == "") { qualifier.Add(new LineParameterQualifier.IsEmpty(parameter.ParameterName, occuranceIndex)); } else { qualifier.Add(new LineParameterQualifier.IsEqualTo(parameter.ParameterName, occuranceIndex, parameter.ParameterValue)); } } return(qualifier); }
/// <summary> /// Add expected value rule. /// </summary> /// <param name="qualifier"></param> /// <param name="parameterName">parameter name this rule applies to</param> /// <param name="occuranceIndex">occurance index this rule applies to, or -1 to apply to every occurance of the parameter name</param> /// <param name="expectedParameterValue">expected value, or if "", then expects value to not occur</param> /// <returns><paramref name="qualifier"/></returns> public static ILineQualifier Rule(this ILineQualifier qualifier, string parameterName, int occuranceIndex, string expectedParameterValue) { if (expectedParameterValue == null) { throw new ArgumentNullException(nameof(expectedParameterValue)); } if (expectedParameterValue == "") { qualifier.Add(new LineParameterQualifier.IsEmpty(parameterName, occuranceIndex)); } else { qualifier.Add(new LineParameterQualifier.IsEqualTo(parameterName, occuranceIndex, expectedParameterValue)); } return(qualifier); }
/// <summary> /// Add expected value rule. /// </summary> /// <param name="qualifier"></param> /// <param name="parameterName">parameter name this rule applies to</param> /// <param name="occuranceIndex">occurnace index this rule applies to, or -1 to apply to every occurance of the parameter name</param> /// <param name="acceptedParameterValues">group of accepted parameter values</param> /// <returns><paramref name="qualifier"/></returns> public static ILineQualifier Rule(this ILineQualifier qualifier, string parameterName, int occuranceIndex, params string[] acceptedParameterValues) { if (acceptedParameterValues == null || acceptedParameterValues.Length == 0) { return(qualifier); } if (acceptedParameterValues.Length == 1) { qualifier.Rule(parameterName, occuranceIndex, acceptedParameterValues[0]); } else { qualifier.Add(new LineParameterQualifier.IsInGroup(parameterName, occuranceIndex, acceptedParameterValues)); } return(qualifier); }
/// <summary> /// Add regular expression matching rule. /// </summary> /// <param name="qualifier"></param> /// <param name="parameterName">parameter name this rule applies to</param> /// <param name="occuranceIndex">occurnace index this rule applies to, or -1 to apply to every occurance of the parameter name</param> /// <param name="pattern">pattern</param> /// <returns><paramref name="qualifier"/></returns> public static ILineQualifier Rule(this ILineQualifier qualifier, string parameterName, int occuranceIndex, Regex pattern) { qualifier.Add(new LineParameterQualifier.Regex(parameterName, occuranceIndex, pattern)); return(qualifier); }