예제 #1
0
        /// <summary>
        /// Checks if a preset includes a given item
        /// </summary>
        protected PredicateResult Includes(PresetTreeRoot entry, IItemData itemData)
        {
            // check for db match
            if (!itemData.DatabaseName.Equals(entry.DatabaseName, StringComparison.OrdinalIgnoreCase))
            {
                return(new PredicateResult(false));
            }

            // check for path match
            var unescapedPath = entry.Path.Replace(@"\*", "*");

            if (!itemData.Path.StartsWith(unescapedPath + "/", StringComparison.OrdinalIgnoreCase) && !itemData.Path.Equals(unescapedPath, StringComparison.OrdinalIgnoreCase))
            {
                return(new PredicateResult(false));
            }

            // check for include match
            if (!string.IsNullOrEmpty(entry.NamePattern))
            {
                var regexPattern = new Regex($"^{entry.NamePattern}$", RegexOptions.IgnoreCase);
                if (!regexPattern.IsMatch(itemData.Name))
                {
                    return(new PredicateResult(false));
                }
            }

            // check excludes
            return(ExcludeMatches(entry, itemData));
        }
예제 #2
0
        private string GetFieldTransformsDescription(PresetTreeRoot entry)
        {
            if (entry.FieldValueManipulator == null)
            {
                return(string.Empty);
            }

            return($"<br />- Field Transforms: {string.Join(", ", entry.FieldValueManipulator.GetFieldValueTransformers().Select(transformer => transformer.Description))}");
        }
예제 #3
0
        private string GetExcludeDescription(PresetTreeRoot entry)
        {
            if (entry.Exclude.Count == 0)
            {
                return(string.Empty);
            }

            return(string.Format(" (except {0})", string.Join(", ", entry.Exclude.Select(x => x.Type + ":" + x.Value))));
        }
예제 #4
0
        private string GetExcludeDescription(PresetTreeRoot entry)
        {
            if (entry.Exclusions.Count == 0)
            {
                return(string.Empty);
            }

            // ReSharper disable once UseStringInterpolation
            return(string.Format(" (except {0})", string.Join(", ", entry.Exclusions.Select(exclude => exclude.Description))));
        }
		protected virtual PredicateResult ExcludeMatches(PresetTreeRoot entry, IItemData itemData)
		{
			foreach (var exclude in entry.Exclusions)
			{
				var result = exclude.Evaluate(itemData.Path);

				if (!result.IsIncluded) return result;
			}
			
			return new PredicateResult(true);
		}
예제 #6
0
        protected virtual PredicateResult ExcludeMatches(PresetTreeRoot entry, IItemData itemData)
        {
            PredicateResult result = ExcludeMatchesPath(entry.Exclude, itemData.Path);

            if (!result.IsIncluded)
            {
                return(result);
            }

            return(result);
        }
		/// <summary>
		/// Checks if a preset includes a given item
		/// </summary>
		protected PredicateResult Includes(PresetTreeRoot entry, IItemData itemData)
		{
			// check for db match
			if (!itemData.DatabaseName.Equals(entry.DatabaseName, StringComparison.OrdinalIgnoreCase)) return new PredicateResult(false);

			// check for path match
			if (!itemData.Path.StartsWith(entry.Path, StringComparison.OrdinalIgnoreCase)) return new PredicateResult(false);

			// check excludes
			return ExcludeMatches(entry, itemData);
		}
예제 #8
0
        protected virtual PredicateResult ExcludeMatches(PresetTreeRoot entry, IItemData itemData)
        {
            foreach (var exclude in entry.Exclusions)
            {
                var result = exclude.Evaluate(itemData);

                if (!result.IsIncluded)
                {
                    return(result);
                }
            }

            return(new PredicateResult(true));
        }
예제 #9
0
        protected virtual PresetTreeRoot CreateIncludeEntry(XmlNode configuration, FieldTransformsCollection predicateFieldFilterCollection)
        {
            string database = GetExpectedAttribute(configuration, "database");
            string path     = GetExpectedAttribute(configuration, "path");

            // ReSharper disable once PossibleNullReferenceException
            var    name      = configuration.Attributes["name"];
            string nameValue = name == null?path.Substring(path.LastIndexOf('/') + 1) : name.Value;

            var root = new PresetTreeRoot(nameValue, path, database);

            root.Exclusions = configuration.ChildNodes
                              .OfType <XmlElement>()
                              .Where(element => element.Name.Equals("exclude"))
                              .Select(excludeNode => CreateExcludeEntry(excludeNode, root))
                              .ToList();

            string fieldFilter = GetOptionalAttribute(configuration, "fieldTransforms");
            FieldTransformsCollection localFieldFilters = null;

            if (!string.IsNullOrEmpty(fieldFilter))
            {
                localFieldFilters = MagicTokenTransformer.GetFieldTransforms(fieldFilter);
            }

            FieldTransformsCollection finalFilters = null;

            if (localFieldFilters != null)
            {
                if (predicateFieldFilterCollection != null)
                {
                    finalFilters = predicateFieldFilterCollection.MergeFilters(localFieldFilters);
                }
                else
                {
                    finalFilters = localFieldFilters;
                }
            }
            else
            {
                finalFilters = predicateFieldFilterCollection;
            }

            if (finalFilters != null)
            {
                root.FieldValueManipulator = finalFilters;
            }

            return(root);
        }
        /// <summary>
        /// Checks if a preset includes a given item
        /// </summary>
        protected PredicateResult Includes(PresetTreeRoot entry, IItemData itemData)
        {
            // check for db match
            if (!itemData.DatabaseName.Equals(entry.DatabaseName, StringComparison.OrdinalIgnoreCase))
            {
                return(new PredicateResult(false));
            }

            // check for path match
            if (!itemData.Path.StartsWith(entry.Path, StringComparison.OrdinalIgnoreCase))
            {
                return(new PredicateResult(false));
            }

            // check excludes
            return(ExcludeMatches(entry, itemData));
        }
        /// <summary>
        /// Checks if a preset includes a given item
        /// </summary>
        protected PredicateResult Includes(PresetTreeRoot entry, IItemData itemData)
        {
            // check for db match
            if (!itemData.DatabaseName.Equals(entry.DatabaseName, StringComparison.OrdinalIgnoreCase))
            {
                return(new PredicateResult(false));
            }

            // check for path match
            var unescapedPath = entry.Path.Replace(@"\*", "*");

            if (!itemData.Path.StartsWith(unescapedPath + "/", StringComparison.OrdinalIgnoreCase) && !itemData.Path.Equals(unescapedPath, StringComparison.OrdinalIgnoreCase))
            {
                return(new PredicateResult(false));
            }

            // check excludes
            return(ExcludeMatches(entry, itemData));
        }
        protected virtual PresetTreeRoot CreateIncludeEntry(XmlNode configuration)
        {
            string database = GetExpectedAttribute(configuration, "database");
            string path     = GetExpectedAttribute(configuration, "path");

            // ReSharper disable once PossibleNullReferenceException
            var    name      = configuration.Attributes["name"];
            string nameValue = name == null?path.Substring(path.LastIndexOf('/') + 1) : name.Value;

            var root = new PresetTreeRoot(nameValue, path, database);

            root.Exclusions = configuration.ChildNodes
                              .OfType <XmlElement>()
                              .Where(element => element.Name.Equals("exclude"))
                              .Select(excludeNode => CreateExcludeEntry(excludeNode, root))
                              .ToList();

            return(root);
        }
        /// <summary>
        /// Checks if a preset includes a given item
        /// </summary>
        protected PredicateResult Includes(PresetTreeRoot entry, IItemData itemData)
        {
            // check for db match
            if (!itemData.DatabaseName.Equals(entry.DatabaseName, StringComparison.OrdinalIgnoreCase)) return new PredicateResult(false);

            // check for path match
            var unescapedPath = entry.Path.Replace(@"\*", "*");
            if (!itemData.Path.StartsWith(unescapedPath + "/", StringComparison.OrdinalIgnoreCase) && !itemData.Path.Equals(unescapedPath, StringComparison.OrdinalIgnoreCase))
            {
                return new PredicateResult(false);
            }

            // check excludes
            return ExcludeMatches(entry, itemData);
        }
예제 #14
0
        protected virtual IPresetTreeExclusion CreateExcludeEntry(XmlElement excludeNode, PresetTreeRoot root)
        {
            if (excludeNode.HasAttribute("path"))
            {
                return(new PathBasedPresetTreeExclusion(GetExpectedAttribute(excludeNode, "path"), root));
            }

            if (excludeNode.HasAttribute("templateId"))
            {
                return(new TemplateBasedPresetExclusion(GetExpectedAttribute(excludeNode, "templateId")));
            }

            if (excludeNode.HasAttribute("namePattern"))
            {
                return(new NameBasedPresetExclusion(GetExpectedAttribute(excludeNode, "namePattern")));
            }

            ExceptionRule[] exclusions = excludeNode.ChildNodes
                                         .OfType <XmlElement>()
                                         .Where(element => element.Name.Equals("except") && element.HasAttribute("name"))
                                         .Select(element =>
            {
                var name            = GetExpectedAttribute(element, "name");
                var excludeChildren = bool.FalseString.Equals(element.Attributes["includeChildren"]?.Value, StringComparison.InvariantCultureIgnoreCase);
                return(new ExceptionRule
                {
                    Name = name,
                    IncludeChildren = !excludeChildren
                });
            })
                                         .ToArray();


            if (excludeNode.HasAttribute("children"))
            {
                return(new ChildrenOfPathBasedPresetTreeExclusion(root.Path, exclusions, root));
            }

            if (excludeNode.HasAttribute("childrenOfPath"))
            {
                return(new ChildrenOfPathBasedPresetTreeExclusion(GetExpectedAttribute(excludeNode, "childrenOfPath"), exclusions, root));
            }

            throw new InvalidOperationException($"Unable to parse invalid exclusion value: {excludeNode.OuterXml}");
        }
        private string GetExcludeDescription(PresetTreeRoot entry)
        {
            if (entry.Exclude.Count == 0) return string.Empty;

            return string.Format(" (except {0})", string.Join(", ", entry.Exclude.Select(x => x.Type + ":" + x.Value)));
        }
        protected virtual IPresetTreeExclusion CreateExcludeEntry(XmlElement excludeNode, PresetTreeRoot root)
        {
            if (excludeNode.HasAttribute("path"))
            {
                return(new PathBasedPresetTreeExclusion(GetExpectedAttribute(excludeNode, "path"), root));
            }

            var exclusions = excludeNode.ChildNodes
                             .OfType <XmlElement>()
                             .Where(element => element.Name.Equals("except") && element.HasAttribute("name"))
                             .Select(element => GetExpectedAttribute(element, "name"))
                             .ToArray();

            if (excludeNode.HasAttribute("children"))
            {
                return(new ChildrenOfPathBasedPresetTreeExclusion(root.Path, exclusions, root));
            }

            if (excludeNode.HasAttribute("childrenOfPath"))
            {
                return(new ChildrenOfPathBasedPresetTreeExclusion(GetExpectedAttribute(excludeNode, "childrenOfPath"), exclusions, root));
            }

            throw new InvalidOperationException($"Unable to parse invalid exclusion value: {excludeNode.InnerXml}");
        }
        protected virtual PredicateResult ExcludeMatches(PresetTreeRoot entry, IItemData itemData)
        {
            PredicateResult result = ExcludeMatchesPath(entry.Exclude, itemData.Path);

            if (!result.IsIncluded) return result;

            return result;
        }
		protected virtual IPresetTreeExclusion CreateExcludeEntry(XmlElement excludeNode, PresetTreeRoot root)
		{
			if (excludeNode.HasAttribute("path"))
			{
				return new PathBasedPresetTreeExclusion(GetExpectedAttribute(excludeNode, "path"), root);
			}

			var exclusions = excludeNode.ChildNodes
				.OfType<XmlElement>()
				.Where(element => element.Name.Equals("except") && element.HasAttribute("name"))
				.Select(element => GetExpectedAttribute(element, "name"))
				.ToArray();

			if (excludeNode.HasAttribute("children"))
			{
				return new ChildrenOfPathBasedPresetTreeExclusion(root.Path, exclusions, root);
			}

			if (excludeNode.HasAttribute("childrenOfPath"))
			{
				return new ChildrenOfPathBasedPresetTreeExclusion(GetExpectedAttribute(excludeNode, "childrenOfPath"), exclusions, root);
			}

			throw new InvalidOperationException($"Unable to parse invalid exclusion value: {excludeNode.InnerXml}");
		}
		protected virtual PresetTreeRoot CreateIncludeEntry(XmlNode configuration)
		{
			string database = GetExpectedAttribute(configuration, "database");
			string path = GetExpectedAttribute(configuration, "path");

			// ReSharper disable once PossibleNullReferenceException
			var name = configuration.Attributes["name"];
			string nameValue = name == null ? path.Substring(path.LastIndexOf('/') + 1) : name.Value;

			var root = new PresetTreeRoot(nameValue, path, database);

			root.Exclusions = configuration.ChildNodes
				.OfType<XmlElement>()
				.Where(element => element.Name.Equals("exclude"))
				.Select(excludeNode => CreateExcludeEntry(excludeNode, root))
				.ToList();

			return root;
		}
		private string GetExcludeDescription(PresetTreeRoot entry)
		{
			if (entry.Exclusions.Count == 0) return string.Empty;

			// ReSharper disable once UseStringInterpolation
			return string.Format(" (except {0})", string.Join(", ", entry.Exclusions.Select(exclude => exclude.Description)));
		}