public void Alter(ShapeDescriptor descriptor) { foreach (var configuration in _configurations) { configuration(descriptor); } }
public ShapeTable GetShapeTable(string themeName) { return(_cacheManager.Get(themeName ?? "", x => { Logger.Information("Start building shape table"); var alterationSets = _parallelCacheContext.RunInParallel(_bindingStrategies, bindingStrategy => { Feature strategyDefaultFeature = bindingStrategy.Metadata.ContainsKey("Feature") ? (Feature)bindingStrategy.Metadata["Feature"] : null; var builder = new ShapeTableBuilder(strategyDefaultFeature); bindingStrategy.Value.Discover(builder); return builder.BuildAlterations().ToReadOnlyCollection(); }); var alterations = alterationSets .SelectMany(shapeAlterations => shapeAlterations) .Where(alteration => IsModuleOrRequestedTheme(alteration, themeName)) .OrderByDependenciesAndPriorities(AlterationHasDependency, GetPriority) .ToList(); var descriptors = alterations.GroupBy(alteration => alteration.ShapeType, StringComparer.OrdinalIgnoreCase) .Select(group => group.Aggregate( new ShapeDescriptor { ShapeType = group.Key }, (descriptor, alteration) => { alteration.Alter(descriptor); return descriptor; })).ToList(); foreach (var descriptor in descriptors) { foreach (var alteration in alterations.Where(a => a.ShapeType == descriptor.ShapeType).ToList()) { var local = new ShapeDescriptor { ShapeType = descriptor.ShapeType }; alteration.Alter(local); descriptor.BindingSources.Add(local.BindingSource); } } var result = new ShapeTable { Descriptors = descriptors.ToDictionary(sd => sd.ShapeType, StringComparer.OrdinalIgnoreCase), Bindings = descriptors.SelectMany(sd => sd.Bindings).ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase), }; _shapeTableEventHandlers.Invoke(ctx => ctx.ShapeTableCreated(result), Logger); Logger.Information("Done building shape table"); return result; })); }
public ShapeTable GetShapeTable(string themeName) { return _cacheManager.Get(themeName ?? "", x => { Logger.Information("Start building shape table"); var alterationSets = _parallelCacheContext.RunInParallel(_bindingStrategies, bindingStrategy => { Feature strategyDefaultFeature = bindingStrategy.Metadata.ContainsKey("Feature") ? (Feature)bindingStrategy.Metadata["Feature"] : null; var builder = new ShapeTableBuilder(strategyDefaultFeature); bindingStrategy.Value.Discover(builder); return builder.BuildAlterations().ToReadOnlyCollection(); }); var alterations = alterationSets .SelectMany(shapeAlterations => shapeAlterations) .Where(alteration => IsModuleOrRequestedTheme(alteration, themeName)) .OrderByDependenciesAndPriorities(AlterationHasDependency, GetPriority) .ToList(); var descriptors = alterations.GroupBy(alteration => alteration.ShapeType, StringComparer.OrdinalIgnoreCase) .Select(group => group.Aggregate( new ShapeDescriptor { ShapeType = group.Key }, (descriptor, alteration) => { alteration.Alter(descriptor); return descriptor; })).ToList(); foreach(var descriptor in descriptors) { foreach(var alteration in alterations.Where(a => a.ShapeType == descriptor.ShapeType).ToList()) { var local = new ShapeDescriptor { ShapeType = descriptor.ShapeType }; alteration.Alter(local); descriptor.BindingSources.Add(local.BindingSource); } } var result = new ShapeTable { Descriptors = descriptors.ToDictionary(sd => sd.ShapeType, StringComparer.OrdinalIgnoreCase), Bindings = descriptors.SelectMany(sd => sd.Bindings).ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase), }; _shapeTableEventHandlers.Invoke(ctx => ctx.ShapeTableCreated(result), Logger); Logger.Information("Done building shape table"); return result; }); }
public ShapeTable GetShapeTable(string themeName) { var cacheKey = $"ShapeTable:{themeName}"; ShapeTable shapeTable; if (!_memoryCache.TryGetValue(cacheKey, out shapeTable)) { if (_logger.IsEnabled(LogLevel.Information)) { _logger.LogInformation("Start building shape table"); } IList <IReadOnlyList <ShapeAlteration> > alterationSets = new List <IReadOnlyList <ShapeAlteration> >(); foreach (var bindingStrategy in _bindingStrategies) { Feature strategyDefaultFeature = _typeFeatureProvider.GetFeatureForDependency(bindingStrategy.GetType()); var builder = new ShapeTableBuilder(strategyDefaultFeature); bindingStrategy.Discover(builder); var builtAlterations = builder.BuildAlterations().ToReadOnlyCollection(); if (builtAlterations.Any()) { alterationSets.Add(builtAlterations); } } var alterations = alterationSets .SelectMany(shapeAlterations => shapeAlterations) .Where(alteration => IsModuleOrRequestedTheme(alteration, themeName)) .OrderByDependenciesAndPriorities(AlterationHasDependency, GetPriority) .ToList(); var descriptors = alterations.GroupBy(alteration => alteration.ShapeType, StringComparer.OrdinalIgnoreCase) .Select(group => group.Aggregate( new ShapeDescriptor { ShapeType = group.Key }, (descriptor, alteration) => { alteration.Alter(descriptor); return(descriptor); })).ToList(); foreach (var descriptor in descriptors) { foreach (var alteration in alterations.Where(a => a.ShapeType == descriptor.ShapeType).ToList()) { var local = new ShapeDescriptor { ShapeType = descriptor.ShapeType }; alteration.Alter(local); descriptor.BindingSources.Add(local.BindingSource); } } shapeTable = new ShapeTable { Descriptors = descriptors.ToDictionary(sd => sd.ShapeType, StringComparer.OrdinalIgnoreCase), Bindings = descriptors.SelectMany(sd => sd.Bindings).ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase), }; //await _eventBus.NotifyAsync<IShapeTableEventHandler>(x => x.ShapeTableCreated(result)); if (_logger.IsEnabled(LogLevel.Information)) { _logger.LogInformation("Done building shape table"); } _memoryCache.Set(cacheKey, shapeTable, new MemoryCacheEntryOptions { Priority = CacheItemPriority.NeverRemove }); } return(shapeTable); }
private void Displaying(ElementDisplayingContext context, ShapeDescriptor shapeDescriptor, SnippetDescriptor snippetDescriptor) { var shapeType = shapeDescriptor.ShapeType; var shape = (dynamic)_shapeFactory.Value.Create(shapeType); shape.Element = context.Element; shape.SnippetDescriptor = snippetDescriptor; ElementShapes.AddTokenizers(shape, _tokenizer.Value); context.ElementShape.Snippet = shape; context.ElementShape.SnippetDescriptor = snippetDescriptor; }
public ShapeTable GetShapeTable(string themeName) { // Use a lazy initialized factory to prevent multiple threads from building // the same table in parallel as it is costly return(_shapeTables.GetOrAdd(themeName ?? "", new Lazy <ShapeTable>(() => { if (_logger.IsEnabled(LogLevel.Information)) { _logger.LogInformation("Start building shape table"); } IList <IReadOnlyList <ShapeAlteration> > alterationSets = new List <IReadOnlyList <ShapeAlteration> >(); foreach (var bindingStrategy in _bindingStrategies) { Feature strategyDefaultFeature = _typeFeatureProvider.GetFeatureForDependency(bindingStrategy.GetType()); var builder = new ShapeTableBuilder(strategyDefaultFeature); bindingStrategy.Discover(builder); var builtAlterations = builder.BuildAlterations().ToReadOnlyCollection(); if (builtAlterations.Any()) { alterationSets.Add(builtAlterations); } } var alterations = alterationSets .SelectMany(shapeAlterations => shapeAlterations) .Where(alteration => IsModuleOrRequestedTheme(alteration, themeName)) .OrderByDependenciesAndPriorities(AlterationHasDependency, GetPriority) .ToList(); var descriptors = alterations.GroupBy(alteration => alteration.ShapeType, StringComparer.OrdinalIgnoreCase) .Select(group => group.Aggregate( new ShapeDescriptor { ShapeType = group.Key }, (descriptor, alteration) => { alteration.Alter(descriptor); return descriptor; })).ToList(); foreach (var descriptor in descriptors) { foreach (var alteration in alterations.Where(a => a.ShapeType == descriptor.ShapeType).ToList()) { var local = new ShapeDescriptor { ShapeType = descriptor.ShapeType }; alteration.Alter(local); descriptor.BindingSources.Add(local.BindingSource); } } var result = new ShapeTable { Descriptors = descriptors.ToDictionary(sd => sd.ShapeType, StringComparer.OrdinalIgnoreCase), Bindings = descriptors.SelectMany(sd => sd.Bindings).ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase), }; //await _eventBus.NotifyAsync<IShapeTableEventHandler>(x => x.ShapeTableCreated(result)); if (_logger.IsEnabled(LogLevel.Information)) { _logger.LogInformation("Done building shape table"); } return result; })).Value); }
private void Displaying(ElementDisplayingContext context, ShapeDescriptor shapeDescriptor) { var shapeType = shapeDescriptor.ShapeType; var shape = _shapeFactory.Value.Create(shapeType); context.ElementShape.Snippet = shape; }
private bool HasSnippetFields(ShapeDescriptor shapeDescriptor) { var bindingSource = shapeDescriptor.BindingSource; var localFileName = _wca.GetContext().HttpContext.Server.MapPath(bindingSource); if (!File.Exists(localFileName)) return false; var markup = File.ReadAllText(localFileName); return markup.Contains("@Html.SnippetField"); }
public ShapeTable GetShapeTable(string themeName) { // Use a lazy initialized factory to prevent multiple threads from building // the same table in parallel as it is costly return _shapeTables.GetOrAdd(themeName ?? "", new Lazy<ShapeTable>(() => { _logger.LogInformation("Start building shape table"); IList<IReadOnlyList<ShapeAlteration>> alterationSets = new List<IReadOnlyList<ShapeAlteration>>(); foreach (var bindingStrategy in _bindingStrategies) { Feature strategyDefaultFeature = _typeFeatureProvider.GetFeatureForDependency(bindingStrategy.GetType()); var builder = new ShapeTableBuilder(strategyDefaultFeature); bindingStrategy.Discover(builder); var builtAlterations = builder.BuildAlterations().ToReadOnlyCollection(); if (builtAlterations.Any()) { alterationSets.Add(builtAlterations); } } var alterations = alterationSets .SelectMany(shapeAlterations => shapeAlterations) .Where(alteration => IsModuleOrRequestedTheme(alteration, themeName)) .OrderByDependenciesAndPriorities(AlterationHasDependency, GetPriority) .ToList(); var descriptors = alterations.GroupBy(alteration => alteration.ShapeType, StringComparer.OrdinalIgnoreCase) .Select(group => group.Aggregate( new ShapeDescriptor { ShapeType = group.Key }, (descriptor, alteration) => { alteration.Alter(descriptor); return descriptor; })).ToList(); foreach (var descriptor in descriptors) { foreach (var alteration in alterations.Where(a => a.ShapeType == descriptor.ShapeType).ToList()) { var local = new ShapeDescriptor { ShapeType = descriptor.ShapeType }; alteration.Alter(local); descriptor.BindingSources.Add(local.BindingSource); } } var result = new ShapeTable { Descriptors = descriptors.ToDictionary(sd => sd.ShapeType, StringComparer.OrdinalIgnoreCase), Bindings = descriptors.SelectMany(sd => sd.Bindings).ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase), }; //await _eventBus.NotifyAsync<IShapeTableEventHandler>(x => x.ShapeTableCreated(result)); _logger.LogInformation("Done building shape table"); return result; })).Value; }
public ShapeTable GetShapeTable(string themeName) { var cacheKey = $"ShapeTable:{themeName}"; ShapeTable shapeTable; if (!_memoryCache.TryGetValue(cacheKey, out shapeTable)) { if (_logger.IsEnabled(LogLevel.Information)) { _logger.LogInformation("Start building shape table"); } IList<IReadOnlyList<ShapeAlteration>> alterationSets = new List<IReadOnlyList<ShapeAlteration>>(); foreach (var bindingStrategy in _bindingStrategies) { Feature strategyDefaultFeature = _typeFeatureProvider.GetFeatureForDependency(bindingStrategy.GetType()); var builder = new ShapeTableBuilder(strategyDefaultFeature); bindingStrategy.Discover(builder); var builtAlterations = builder.BuildAlterations().ToReadOnlyCollection(); if (builtAlterations.Any()) { alterationSets.Add(builtAlterations); } } var alterations = alterationSets .SelectMany(shapeAlterations => shapeAlterations) .Where(alteration => IsModuleOrRequestedTheme(alteration, themeName)) .OrderByDependenciesAndPriorities(AlterationHasDependency, GetPriority) .ToList(); var descriptors = alterations.GroupBy(alteration => alteration.ShapeType, StringComparer.OrdinalIgnoreCase) .Select(group => group.Aggregate( new ShapeDescriptor { ShapeType = group.Key }, (descriptor, alteration) => { alteration.Alter(descriptor); return descriptor; })).ToList(); foreach (var descriptor in descriptors) { foreach (var alteration in alterations.Where(a => a.ShapeType == descriptor.ShapeType).ToList()) { var local = new ShapeDescriptor { ShapeType = descriptor.ShapeType }; alteration.Alter(local); descriptor.BindingSources.Add(local.BindingSource); } } shapeTable = new ShapeTable { Descriptors = descriptors.ToDictionary(sd => sd.ShapeType, StringComparer.OrdinalIgnoreCase), Bindings = descriptors.SelectMany(sd => sd.Bindings).ToDictionary(kv => kv.Key, kv => kv.Value, StringComparer.OrdinalIgnoreCase), }; //await _eventBus.NotifyAsync<IShapeTableEventHandler>(x => x.ShapeTableCreated(result)); if (_logger.IsEnabled(LogLevel.Information)) { _logger.LogInformation("Done building shape table"); } _memoryCache.Set(cacheKey, shapeTable, new MemoryCacheEntryOptions { Priority = CacheItemPriority.NeverRemove }); } return shapeTable; }
private void Displaying(ElementDisplayingContext context, ShapeDescriptor shapeDescriptor, SnippetDescriptor snippetDescriptor) { var shapeType = shapeDescriptor.ShapeType; var shape = (dynamic)_shapeFactory.Value.Create(shapeType); shape.Element = context.Element; if (snippetDescriptor != null) { foreach (var fieldDescriptor in snippetDescriptor.Fields) { var value = context.Element.Data.Get(fieldDescriptor.Name); shape.Properties[fieldDescriptor.Name] = value; } } ElementShapes.AddTokenizers(shape, _tokenizer.Value); context.ElementShape.Snippet = shape; }