/// <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);
        }
Beispiel #4
0
#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);
        }