public IEnumerable <IFeatureInfo> GetFeatures( IExtensionInfo extensionInfo, IManifestInfo manifestInfo) { var featuresInfos = new List <IFeatureInfo>(); // Features and Dependencies live within this section var features = manifestInfo.ModuleInfo.Features.ToList(); if (features.Count > 0) { foreach (var feature in features) { if (String.IsNullOrWhiteSpace(feature.Id)) { throw new ArgumentException( $"A feature is missing a mandatory 'Id' property in the Module '{extensionInfo.Id}'"); } var featureId = feature.Id; var featureName = feature.Name ?? feature.Id; var featureDependencyIds = feature.Dependencies .Select(e => e.Trim()).ToArray(); if (!int.TryParse(feature.Priority ?? manifestInfo.ModuleInfo.Priority, out int featurePriority)) { featurePriority = 0; } var featureCategory = feature.Category ?? manifestInfo.ModuleInfo.Category; var featureDescription = feature.Description ?? manifestInfo.ModuleInfo.Description; var featureDefaultTenantOnly = feature.DefaultTenantOnly; var featureIsAlwaysEnabled = feature.IsAlwaysEnabled; var context = new FeatureBuildingContext { FeatureId = featureId, FeatureName = featureName, Category = featureCategory, Description = featureDescription, ExtensionInfo = extensionInfo, ManifestInfo = manifestInfo, Priority = featurePriority, FeatureDependencyIds = featureDependencyIds, DefaultTenantOnly = featureDefaultTenantOnly, IsAlwaysEnabled = featureIsAlwaysEnabled }; foreach (var builder in _featureBuilderEvents) { builder.Building(context); } var featureInfo = new FeatureInfo( featureId, featureName, featurePriority, featureCategory, featureDescription, extensionInfo, featureDependencyIds, featureDefaultTenantOnly, featureIsAlwaysEnabled); foreach (var builder in _featureBuilderEvents) { builder.Built(featureInfo); } featuresInfos.Add(featureInfo); } } else { // The Extension has only one feature, itself, and that can have dependencies var featureId = extensionInfo.Id; var featureName = manifestInfo.Name; var featureDependencyIds = manifestInfo.ModuleInfo.Dependencies .Select(e => e.Trim()).ToArray(); if (!int.TryParse(manifestInfo.ModuleInfo.Priority, out int featurePriority)) { featurePriority = 0; } var featureCategory = manifestInfo.ModuleInfo.Category; var featureDescription = manifestInfo.ModuleInfo.Description; var featureDefaultTenantOnly = manifestInfo.ModuleInfo.DefaultTenantOnly; var featureIsAlwaysEnabled = manifestInfo.ModuleInfo.IsAlwaysEnabled; var context = new FeatureBuildingContext { FeatureId = featureId, FeatureName = featureName, Category = featureCategory, Description = featureDescription, ExtensionInfo = extensionInfo, ManifestInfo = manifestInfo, Priority = featurePriority, FeatureDependencyIds = featureDependencyIds, DefaultTenantOnly = featureDefaultTenantOnly, IsAlwaysEnabled = featureIsAlwaysEnabled }; foreach (var builder in _featureBuilderEvents) { builder.Building(context); } var featureInfo = new FeatureInfo( context.FeatureId, context.FeatureName, context.Priority, context.Category, context.Description, context.ExtensionInfo, context.FeatureDependencyIds, context.DefaultTenantOnly, context.IsAlwaysEnabled); foreach (var builder in _featureBuilderEvents) { builder.Built(featureInfo); } featuresInfos.Add(featureInfo); } return(featuresInfos); }
public IEnumerable <IFeatureInfo> GetFeatures( IExtensionInfo extensionInfo, IManifestInfo manifestInfo) { var features = new List <IFeatureInfo>(); // Features and Dependencies live within this section var featuresSectionChildren = manifestInfo.ConfigurationRoot.GetSection("Features").GetChildren().ToList(); if (featuresSectionChildren.Count > 0) { foreach (var featureSection in featuresSectionChildren) { var featureId = featureSection.Key; var featureDetails = featureSection.GetChildren().ToDictionary(x => x.Key, v => v.Value); var featureName = featureDetails.ContainsKey(NameKey) ? featureDetails[NameKey] : manifestInfo.Name; var featureDependencyIds = featureDetails.ContainsKey(DependenciesKey) ? featureDetails[DependenciesKey] .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(e => e.Trim()) .ToArray() : new string[0]; var manifestFeatureDetails = manifestInfo .ConfigurationRoot.GetChildren().ToDictionary(x => x.Key, v => v.Value); var featurePriority = featureDetails.ContainsKey(PriorityKey) ? int.Parse(featureDetails[PriorityKey]) : (manifestFeatureDetails.ContainsKey(PriorityKey) ? int.Parse(manifestFeatureDetails[PriorityKey]) : 0); var featureCategory = featureDetails.ContainsKey(CategoryKey) ? featureDetails[CategoryKey] : (manifestFeatureDetails.ContainsKey(CategoryKey) ? manifestFeatureDetails[CategoryKey] : null); var featureDescription = featureDetails.ContainsKey(DescriptionKey) ? featureDetails[DescriptionKey] : (manifestFeatureDetails.ContainsKey(DescriptionKey) ? manifestFeatureDetails[DescriptionKey] : null); var context = new FeatureBuildingContext { FeatureId = featureId, FeatureName = featureName, Category = featureCategory, Description = featureDescription, ExtensionInfo = extensionInfo, FeatureDetails = featureDetails, ManifestDetails = manifestFeatureDetails, ManifestInfo = manifestInfo, Priority = featurePriority, FeatureDependencyIds = featureDependencyIds }; foreach (var builder in _featureBuilderEvents) { builder.Building(context); } var featureInfo = new FeatureInfo( featureId, featureName, featurePriority, featureCategory, featureDescription, extensionInfo, featureDependencyIds); foreach (var builder in _featureBuilderEvents) { builder.Built(featureInfo); } features.Add(featureInfo); } } else { // The Extension has only one feature, itself, and that can have dependencies var featureId = extensionInfo.Id; var featureName = manifestInfo.Name; var featureDetails = manifestInfo.ConfigurationRoot.GetChildren().ToDictionary(x => x.Key, v => v.Value); var featurePriority = featureDetails.ContainsKey(PriorityKey) ? int.Parse(featureDetails[PriorityKey]) : 0; var featureDependencyIds = featureDetails.ContainsKey(DependenciesKey) ? featureDetails[DependenciesKey] .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(e => e.Trim()) .ToArray() : new string[0]; var featureCategory = featureDetails.ContainsKey(CategoryKey) ? featureDetails[CategoryKey] : null; var featureDescription = featureDetails.ContainsKey(DescriptionKey) ? featureDetails[DescriptionKey] : null; var context = new FeatureBuildingContext { FeatureId = featureId, FeatureName = featureName, Category = featureCategory, Description = featureDescription, ExtensionInfo = extensionInfo, FeatureDetails = featureDetails, ManifestDetails = featureDetails, ManifestInfo = manifestInfo, Priority = featurePriority, FeatureDependencyIds = featureDependencyIds }; foreach (var builder in _featureBuilderEvents) { builder.Building(context); } var featureInfo = new FeatureInfo( context.FeatureId, context.FeatureName, context.Priority, context.Category, context.Description, context.ExtensionInfo, context.FeatureDependencyIds); foreach (var builder in _featureBuilderEvents) { builder.Built(featureInfo); } features.Add(featureInfo); } return(features); }