/// <summary> /// Adds the criteria. /// </summary> /// <param name="opera">The opera.</param> /// <param name="pathMatchRule">The path match rule.</param> /// <param name="pathCriteria">The path criteria.</param> /// <param name="metaElementTypeToMatch">The meta element type to match.</param> /// <param name="level">The level.</param> /// <param name="element">The element.</param> /// <returns></returns> public metaContentCriteriaTrigger AddCriteria(metaContentTriggerOperator opera, metaModelTargetEnum pathMatchRule = metaModelTargetEnum.scope, string pathCriteria = null, Type metaElementTypeToMatch = null, reportElementLevel level = reportElementLevel.none, IMetaContentNested element = null) => trigs.AddCriteria(opera, pathMatchRule, pathCriteria, metaElementTypeToMatch, level);
/// <summary> /// Tests <c>test</c> vs <c>currentScope</c> relationship /// </summary> /// <param name="currentScope">The current scope.</param> /// <param name="test">The test.</param> /// <param name="testScope">The test scope.</param> /// <returns></returns> /// <remarks> /// <para>Target enums supported:</para> /// Same element /// <see cref = "metaModelTargetEnum.scope" /> /// <c>test</c> is direct child of <c>currentScope</c> /// <see cref="metaModelTargetEnum.scopeChild"/> /// <c>test</c> is child at any level of <c>currentScope</c> /// <see cref="metaModelTargetEnum.scopeEachChild"/> /// <c>test</c> is parent at any level of <c>currentScope</c> /// <see cref="metaModelTargetEnum.scopeParent"/> /// <c>test</c> is not null /// <see cref="metaModelTargetEnum.scopeRelativePath"/> /// /// For any other <see cref="metaModelTargetEnum"/> value it will return <c>false</c>, except for <see cref="metaModelTargetEnum.none"/> returns <c>true</c> /// </remarks> /// <seealso cref="metaModelTargetEnum.scope"/> /// <seealso cref="metaModelTargetEnum.scopeChild"/> /// <seealso cref="metaModelTargetEnum.scopeEachChild"/> /// <seealso cref="metaModelTargetEnum.scopeParent"/> /// <seealso cref="metaModelTargetEnum.scopeRelativePath"/> public static Boolean testScope(this IObjectWithPathAndChildSelector currentScope, IObjectWithPathAndChildSelector test, metaModelTargetEnum testScope) { if (test == null) { return(false); } switch (testScope) { default: return(false); break; case metaModelTargetEnum.none: return(true); break; case metaModelTargetEnum.scope: return(currentScope == test); break; case metaModelTargetEnum.scopeChild: return(test.parent == currentScope); break; case metaModelTargetEnum.scopeEachChild: return(test.path.StartsWith(currentScope.path)); break; case metaModelTargetEnum.scopeParent: return(currentScope.path.StartsWith(test.path)); break; case metaModelTargetEnum.scopeRelativePath: return(test != null); break; } return(false); }
#pragma warning disable CS1574 // XML comment has cref attribute 'getChildByPath(IObjectWithChildSelector, string)' that could not be resolved /// <summary> /// Adds new <see cref="metaContentCriteriaTrigger"/> match rule and its operator /// </summary> /// <param name="opera">The operator: how this criteria combines with others in this collection</param> /// <param name="pathCriteria">The path with <see cref="imbSCI.Data.extensions.data.imbPathExtensions.getChildByPath(IObjectWithChildSelector, string)"/> and to test if it returns the same IElement </param> /// <param name="metaElementTypeToMatch">Type that test instance must be compatibile with</param> /// <param name="level">The level of element to test against</param> /// <param name="element">The element instance to test against</param> /// <returns></returns> public metaContentCriteriaTrigger AddCriteria(metaContentTriggerOperator opera, metaModelTargetEnum pathMatchRule = metaModelTargetEnum.scope, string pathCriteria = null, Type metaElementTypeToMatch = null, reportElementLevel level = reportElementLevel.none, IMetaContentNested element = null) #pragma warning restore CS1574 // XML comment has cref attribute 'getChildByPath(IObjectWithChildSelector, string)' that could not be resolved { metaContentCriteriaTrigger trigger = new metaContentCriteriaTrigger(); trigger.pathMatch = pathCriteria; trigger.type = metaElementTypeToMatch; trigger.level = level; trigger.element = element; trigger.triggerOperator = opera; trigger.pathMatchRule = pathMatchRule; items.Add(trigger); return(trigger); }
#pragma warning disable CS1574 // XML comment has cref attribute 'getChildByPath(IObjectWithChildSelector, string)' that could not be resolved #pragma warning disable CS1574 // XML comment has cref attribute 'metaModelTargetEnum' that could not be resolved #pragma warning disable CS1574 // XML comment has cref attribute 'metaModelTargetEnum' that could not be resolved /// <summary> /// Resolves <see cref="imbSCI.Reporting.reporting.style.enums.metaModelTargetEnum" /> against <c>metaContent</c> DOM /// </summary> /// <param name="target">The kind of relative navigation applied</param> /// <param name="needle">The needle: text/string/path used by certain <see cref="imbSCI.Reporting.reporting.style.enums.metaModelTargetEnum" /></param> /// <param name="output">Default <see cref="IMetaContentNested" /> if resolve fails</param> /// <returns> /// Result of resolution /// </returns> /// <exception cref="System.ArgumentOutOfRangeException"></exception> /// <seealso cref="imbSCI.Data.extensions.data.imbPathExtensions.getChildByPath(IObjectWithChildSelector, string)" /> public virtual List <IMetaContentNested> resolve(metaModelTargetEnum target, string needle = "", IMetaContentNested output = null) #pragma warning restore CS1574 // XML comment has cref attribute 'metaModelTargetEnum' that could not be resolved #pragma warning restore CS1574 // XML comment has cref attribute 'metaModelTargetEnum' that could not be resolved #pragma warning restore CS1574 // XML comment has cref attribute 'getChildByPath(IObjectWithChildSelector, string)' that could not be resolved { bool addDefault = false; List <IMetaContentNested> list = new List <IMetaContentNested>(); needle = needle.ToLower(); int ind = 0; if (parent != null) { ind = parent.indexOf(this); } switch (target) { case metaModelTargetEnum.none: output = null; break; case metaModelTargetEnum.defaultTarget: list.Add(output); break; case metaModelTargetEnum.document: output = document; break; case metaModelTargetEnum.page: output = page; break; case metaModelTargetEnum.scope: output = this; break; case metaModelTargetEnum.scopeParent: output = parent; break; case metaModelTargetEnum.scopeEachChild: if (Count() > 0) { foreach (IMetaContentNested ch in this) { if (imbSciStringExtensions.isNullOrEmpty(needle)) { list.Add(ch); } else { if (ch.name.ToLower().Contains(needle)) { list.Add(ch); } } } } break; case metaModelTargetEnum.scopeChild: if (Count() > 0) { foreach (IMetaContentNested ch in this) { if (imbSciStringExtensions.isNullOrEmpty(needle)) { list.Add(ch); break; } else { if (ch.name.ToLower().Contains(needle)) { list.Add(ch); break; } } } } break; case metaModelTargetEnum.scopeRelativePath: list.Add(this.getChildByPath(needle) as IMetaContentNested); break; case metaModelTargetEnum.lastAppend: if (parent != null) { list.AddMultiple(this.getChildByPath(string.Format("..\\[{0}]", ind - 1))); } break; case metaModelTargetEnum.nextAppend: if (parent != null) { list.AddMultiple(this.getChildByPath(string.Format("..\\[{0}]", ind + 1))); } break; //case metaModelTargetEnum.pencil: //case metaModelTargetEnum.setStandard: //case metaModelTargetEnum.unsetStandard: //case metaModelTargetEnum.setNamedStandard: //case metaModelTargetEnum.unsetNamedStandard: //case metaModelTargetEnum.asAppend: default: throw new ArgumentOutOfRangeException(); } if (output == null) { addDefault = false; } // if (output == null) output = this; if (addDefault) { if (list.Count == 0) { list.Add(output); } } return(list); }