using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using Umbraco.Core; using Umbraco.Core.Logging; using Umbraco.Core.ObjectResolution; using Umbraco.Web.Models; namespace Umbraco.Web { /// /// Allows for adding filters for tours during startup /// public class TourFilterResolver : ManyObjectsResolverBase { public TourFilterResolver(IServiceProvider serviceProvider, ILogger logger) : base(serviceProvider, logger) { } private readonly HashSet _instances = new HashSet(); public IEnumerable Filters { get { return Values; } } /// /// Adds a filter instance /// /// public void AddFilter(BackOfficeTourFilter filter) { using (Resolution.Configuration) _instances.Add(filter); } /// /// Helper method for adding a filter by exact plugin name /// /// Regex string used for matching public void AddFilterByPlugin(string pluginName) { pluginName = pluginName.EnsureStartsWith("^").EnsureEndsWith("$"); using (Resolution.Configuration) _instances.Add(BackOfficeTourFilter.FilterPlugin(new Regex(pluginName, RegexOptions.IgnoreCase))); } /// /// Helper method for adding a filter by exact file name /// /// public void AddFilterByFile(string file) { file = file.EnsureStartsWith("^").EnsureEndsWith("$"); using (Resolution.Configuration) _instances.Add(BackOfficeTourFilter.FilterFile(new Regex(file, RegexOptions.IgnoreCase))); } /// /// Helper method for adding a filter by exact tour alias /// /// public void AddFilterByAlias(string alias) { alias = alias.EnsureStartsWith("^").EnsureEndsWith("$"); using (Resolution.Configuration) _instances.Add(BackOfficeTourFilter.FilterAlias(new Regex(alias, RegexOptions.IgnoreCase))); } /// /// Removes a filter instance /// /// public void RemoveFilter(BackOfficeTourFilter filter) { using (Resolution.Configuration) _instances.Remove(filter); } /// /// Removes a filter instance based on callback /// /// public void RemoveFilterWhere(Func filter) { using (Resolution.Configuration) _instances.RemoveWhere(new Predicate(filter)); } /// /// /// Overridden to return the combined created instances based on the resolved Types and the Concrete values added with AddFilter /// /// protected override IEnumerable CreateInstances() { var createdInstances = base.CreateInstances(); return createdInstances.Concat(_instances); } public override void Clear() { base.Clear(); _instances.Clear(); } internal override void ResetCollections() { base.ResetCollections(); _instances.Clear(); } } }