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) ?
                                          double.Parse(featureDetails[PriorityKey]) :
                                          (manifestFeatureDetails.ContainsKey(PriorityKey) ? double.Parse(manifestFeatureDetails[PriorityKey]) : 0D);

                    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);

                    _featureBuilderEvents.Invoke(fbe => fbe.Building(
                                                     new FeatureBuildingContext
                    {
                        FeatureId            = featureId,
                        FeatureName          = featureName,
                        Category             = featureCategory,
                        Description          = featureDescription,
                        ExtensionInfo        = extensionInfo,
                        FeatureDetails       = featureDetails,
                        ManifestDetails      = manifestFeatureDetails,
                        ManifestInfo         = manifestInfo,
                        Priority             = featurePriority,
                        FeatureDependencyIds = featureDependencyIds
                    }), L);

                    var featureInfo = new FeatureInfo(
                        featureId,
                        featureName,
                        featurePriority,
                        featureCategory,
                        featureDescription,
                        extensionInfo,
                        featureDependencyIds);

                    _featureBuilderEvents.Invoke(fbe => fbe.Built(featureInfo), L);

                    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) ? double.Parse(featureDetails[PriorityKey]) : 0D;

                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;

                _featureBuilderEvents.Invoke(fbe => fbe.Building(
                                                 new FeatureBuildingContext
                {
                    FeatureId       = featureId,
                    FeatureName     = featureName,
                    Category        = featureCategory,
                    Description     = featureDescription,
                    ExtensionInfo   = extensionInfo,
                    FeatureDetails  = featureDetails,
                    ManifestDetails = featureDetails,
                    ManifestInfo    = manifestInfo,
                    Priority        = featurePriority
                }), L);

                var featureInfo = new FeatureInfo(
                    featureId,
                    featureName,
                    featurePriority,
                    featureCategory,
                    featureDescription,
                    extensionInfo,
                    featureDependencyIds);

                _featureBuilderEvents.Invoke(fbe => fbe.Built(featureInfo), L);

                features.Add(featureInfo);
            }

            return(features);
        }
Exemple #2
0
        public IFeatureInfoList GetFeatures(
            IExtensionInfo extensionInfo,
            IManifestInfo manifestInfo)
        {
            var features = new List <IFeatureInfo>();

            // Features and Dependencies live within this section
            var featuresSection = manifestInfo.ConfigurationRoot.GetSection("Features");

            if (featuresSection.Value != null)
            {
                foreach (var featureSection in featuresSection.GetChildren())
                {
                    var featureId = featureSection.Key;

                    var featureDetails = featureSection.GetChildren().ToDictionary(x => x.Key, v => v.Value);

                    var featureName =
                        featureDetails.ContainsKey(NameKey) ?
                        featureDetails[NameKey] : manifestInfo.Name;

                    // TODO (ngm) look at priority
                    var featurePriority = featureDetails.ContainsKey(PriorityKey) ?
                                          double.Parse(featureDetails[PriorityKey]) : 0D;

                    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 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 featureInfo = new FeatureInfo(
                        featureId,
                        featureName,
                        featurePriority,
                        featureCategory,
                        featureDescription,
                        extensionInfo,
                        featureDependencyIds);

                    features.Add(featureInfo);
                }
            }
            else
            {
                // The Extension has only one feature, itself, and that can have dependencies
                var featureId   = extensionInfo.ExtensionFileInfo.Name;
                var featureName = manifestInfo.Name;

                var featureDetails = manifestInfo.ConfigurationRoot.GetChildren().ToDictionary(x => x.Key, v => v.Value);

                // TODO (ngm) look at priority
                var featurePriority = 0D;

                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 featureInfo = new FeatureInfo(
                    featureId,
                    featureName,
                    featurePriority,
                    featureCategory,
                    featureDescription,
                    extensionInfo,
                    featureDependencyIds);

                features.Add(featureInfo);
            }

            return(new FeatureInfoList(features));
        }