public NotFoundExtensionInfo(string extensionId)
 {
     _featureInfos = Enumerable.Empty <IFeatureInfo>();
     _extensionId  = extensionId;
     _fileInfo     = new NotFoundFileInfo(extensionId);
     _manifestInfo = new NotFoundManifestInfo(extensionId);
 }
        public InternalExtensionInfo(string subPath)
        {
            _subPath = subPath;

            _fileInfo     = new NotFoundFileInfo(subPath);
            _manifestInfo = new NotFoundManifestInfo(subPath);
            _features     = Enumerable.Empty <IFeatureInfo>();
        }
 public ExtensionInfo(string subPath, IManifestInfo manifestInfo, Func <IManifestInfo, IExtensionInfo, IEnumerable <IFeatureInfo> > features)
 {
     base();
     this.u003cSubPathu003ek__BackingField  = subPath;
     this.u003cManifestu003ek__BackingField = manifestInfo;
     this.u003cFeaturesu003ek__BackingField = features.Invoke(manifestInfo, this);
     return;
 }
Beispiel #4
0
        public InternalExtensionInfo(string subPath)
        {
            _fileInfo = new NotFoundFileInfo(subPath);

            _subPath      = subPath;
            _manifestInfo = new NotFoundManifestInfo(subPath);
            _features     = new EmptyFeatureInfoList();
        }
 public ExtensionInfo(
     string subPath,
     IManifestInfo manifestInfo,
     Func <IManifestInfo, IExtensionInfo, IEnumerable <IFeatureInfo> > features)
 {
     SubPath  = subPath;
     Manifest = manifestInfo;
     Features = features(manifestInfo, this);
 }
Beispiel #6
0
 public ExtensionInfo(
     IFileInfo fileInfo,
     string subPath,
     IManifestInfo manifestInfo,
     Func <IExtensionInfo, IFeatureInfoList> features)
 {
     _fileInfo     = fileInfo;
     _subPath      = subPath;
     _manifestInfo = manifestInfo;
     _features     = features(this);
 }
 public IExtensionInfo GetExtensionInfo(IManifestInfo manifestInfo, string subPath)
 {
     foreach (var provider in _extensionProviders.OrderBy(ep => ep.Order))
     {
         var extensionInfo = provider.GetExtensionInfo(manifestInfo, subPath);
         if (extensionInfo != null)
         {
             return(extensionInfo);
         }
     }
     return(new NotFoundExtensionInfo(subPath));
 }
Beispiel #8
0
        public IEnumerable <IFeatureInfo> GetFeatures(IPluginInfo pluginInfo, IManifestInfo manifestInfo)
        {
            List <IFeatureInfo> featureInfos =
                new List <IFeatureInfo>();

            foreach (var provider in _featuresProviders)
            {
                featureInfos.AddRange(provider.GetFeatures(pluginInfo, manifestInfo));
            }

            return(featureInfos);
        }
Beispiel #9
0
 public ExtensionInfo(
     string id,
     IFileInfo fileInfo,
     string subPath,
     IManifestInfo manifestInfo,
     Func <IManifestInfo, IExtensionInfo, IEnumerable <IFeatureInfo> > features)
 {
     _id           = id;
     _fileInfo     = fileInfo;
     _subPath      = subPath;
     _manifestInfo = manifestInfo;
     _features     = features(manifestInfo, this);
 }
Beispiel #10
0
        /// <summary>
        /// Locate an extension at the given path by directly mapping path segments to physical directories.
        /// </summary>
        /// <param name="subpath">A path under the root directory</param>
        /// <returns>The extension information. null returned if extension does not exist</returns>
        public IExtensionInfo GetExtensionInfo(IManifestInfo manifestInfo, string subPath)
        {
            var path = System.IO.Path.GetDirectoryName(subPath);
            var name = System.IO.Path.GetFileName(subPath);

            var extension = _fileProvider
                            .GetDirectoryContents(path)
                            .First(content => content.Name == name);

            return(new ExtensionInfo(extension.Name, extension, subPath, manifestInfo, (mi, ei) => {
                return _featuresProvider.GetFeatures(ei, mi);
            }));
        }
 private bool IsAdminTheme(IManifestInfo manifest)
 {
     return(manifest.Tags.Any(x => string.Equals(x, ManifestConstants.AdminTag, StringComparison.OrdinalIgnoreCase)));
 }
        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 {nameof(feature)} is missing a mandatory '{nameof(feature.Id)}' property in the Module '{extensionInfo.Id}'");
                    }

                    // Attribute properties are transparently resolved by the instances themselves for convenience
                    var featureId   = feature.Id;
                    var featureName = feature.Name;

                    var featureDependencyIds = feature.Dependencies;

                    // Categorize, Prioritize, Describe, using the ModuleInfo (ModuleAttribute) as the back stop
                    var featureCategory          = feature.Categorize(manifestInfo.ModuleInfo);
                    var featurePriority          = feature.Prioritize(manifestInfo.ModuleInfo);
                    var featureDescription       = feature.Describe(manifestInfo.ModuleInfo);
                    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(
                        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);
                }
            }
            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;

                // Ditto Categorize, Prioritize, Describe, in this case the root Module 'is' the back stop
                var featureCategory          = manifestInfo.ModuleInfo.Categorize();
                var featurePriority          = manifestInfo.ModuleInfo.Prioritize();
                var featureDescription       = manifestInfo.ModuleInfo.Describe();
                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);
        }
Beispiel #13
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));
        }
Beispiel #14
0
 public IEnumerable <IFeatureInfo> GetFeatures(IExtensionInfo extensionInfo, IManifestInfo manifestInfo)
 {
     V_0 = new List <IFeatureInfo>();
     V_1 = manifestInfo.get_ModuleInfo().get_Features().ToList <FeatureAttribute>();
     if (V_1.get_Count() <= 0)
     {
         V_15            = extensionInfo.get_Id();
         V_16            = manifestInfo.get_Name();
         stackVariable14 = manifestInfo.get_ModuleInfo().get_Dependencies();
         stackVariable15 = FeaturesProvider.u003cu003ec.u003cu003e9__3_1;
         if (stackVariable15 == null)
         {
             dummyVar5       = stackVariable15;
             stackVariable15 = new Func <string, string>(FeaturesProvider.u003cu003ec.u003cu003e9.u003cGetFeaturesu003eb__3_1);
             FeaturesProvider.u003cu003ec.u003cu003e9__3_1 = stackVariable15;
         }
         V_17 = stackVariable14.Select <string, string>(stackVariable15).ToArray <string>();
         if (!int.TryParse(manifestInfo.get_ModuleInfo().get_Priority(), out V_18))
         {
             V_18 = 0;
         }
         V_19            = manifestInfo.get_ModuleInfo().get_Category();
         V_20            = manifestInfo.get_ModuleInfo().get_Description();
         V_21            = manifestInfo.get_ModuleInfo().get_DefaultTenantOnly();
         V_22            = manifestInfo.get_ModuleInfo().get_IsAlwaysEnabled();
         stackVariable35 = new FeatureBuildingContext();
         stackVariable35.set_FeatureId(V_15);
         stackVariable35.set_FeatureName(V_16);
         stackVariable35.set_Category(V_19);
         stackVariable35.set_Description(V_20);
         stackVariable35.set_ExtensionInfo(extensionInfo);
         stackVariable35.set_ManifestInfo(manifestInfo);
         stackVariable35.set_Priority(V_18);
         stackVariable35.set_FeatureDependencyIds(V_17);
         stackVariable35.set_DefaultTenantOnly(V_21);
         stackVariable35.set_IsAlwaysEnabled(V_22);
         V_23 = stackVariable35;
         V_14 = this._featureBuilderEvents.GetEnumerator();
         try
         {
             while (V_14.MoveNext())
             {
                 V_14.get_Current().Building(V_23);
             }
         }
         finally
         {
             if (V_14 != null)
             {
                 V_14.Dispose();
             }
         }
         V_24 = new FeatureInfo(V_23.get_FeatureId(), V_23.get_FeatureName(), V_23.get_Priority(), V_23.get_Category(), V_23.get_Description(), V_23.get_ExtensionInfo(), V_23.get_FeatureDependencyIds(), V_23.get_DefaultTenantOnly(), V_23.get_IsAlwaysEnabled());
         V_14 = this._featureBuilderEvents.GetEnumerator();
         try
         {
             while (V_14.MoveNext())
             {
                 V_14.get_Current().Built(V_24);
             }
         }
         finally
         {
             if (V_14 != null)
             {
                 V_14.Dispose();
             }
         }
         V_0.Add(V_24);
     }
     else
     {
         V_2 = V_1.GetEnumerator();
         try
         {
             while (V_2.MoveNext())
             {
                 V_3 = V_2.get_Current();
                 if (string.IsNullOrWhiteSpace(V_3.get_Id()))
                 {
                     throw new ArgumentException(string.Concat("A feature is missing a mandatory 'Id' property in the Module '", extensionInfo.get_Id(), "'"));
                 }
                 V_4             = V_3.get_Id();
                 stackVariable99 = V_3.get_Name();
                 if (stackVariable99 == null)
                 {
                     dummyVar0       = stackVariable99;
                     stackVariable99 = V_3.get_Id();
                 }
                 V_5 = stackVariable99;
                 stackVariable101 = V_3.get_Dependencies();
                 stackVariable102 = FeaturesProvider.u003cu003ec.u003cu003e9__3_0;
                 if (stackVariable102 == null)
                 {
                     dummyVar1        = stackVariable102;
                     stackVariable102 = new Func <string, string>(FeaturesProvider.u003cu003ec.u003cu003e9.u003cGetFeaturesu003eb__3_0);
                     FeaturesProvider.u003cu003ec.u003cu003e9__3_0 = stackVariable102;
                 }
                 V_6 = stackVariable101.Select <string, string>(stackVariable102).ToArray <string>();
                 stackVariable106 = V_3.get_Priority();
                 if (stackVariable106 == null)
                 {
                     dummyVar2        = stackVariable106;
                     stackVariable106 = manifestInfo.get_ModuleInfo().get_Priority();
                 }
                 if (!int.TryParse(stackVariable106, out V_7))
                 {
                     V_7 = 0;
                 }
                 stackVariable110 = V_3.get_Category();
                 if (stackVariable110 == null)
                 {
                     dummyVar3        = stackVariable110;
                     stackVariable110 = manifestInfo.get_ModuleInfo().get_Category();
                 }
                 V_8 = stackVariable110;
                 stackVariable112 = V_3.get_Description();
                 if (stackVariable112 == null)
                 {
                     dummyVar4        = stackVariable112;
                     stackVariable112 = manifestInfo.get_ModuleInfo().get_Description();
                 }
                 V_9              = stackVariable112;
                 V_10             = V_3.get_DefaultTenantOnly();
                 V_11             = V_3.get_IsAlwaysEnabled();
                 stackVariable117 = new FeatureBuildingContext();
                 stackVariable117.set_FeatureId(V_4);
                 stackVariable117.set_FeatureName(V_5);
                 stackVariable117.set_Category(V_8);
                 stackVariable117.set_Description(V_9);
                 stackVariable117.set_ExtensionInfo(extensionInfo);
                 stackVariable117.set_ManifestInfo(manifestInfo);
                 stackVariable117.set_Priority(V_7);
                 stackVariable117.set_FeatureDependencyIds(V_6);
                 stackVariable117.set_DefaultTenantOnly(V_10);
                 stackVariable117.set_IsAlwaysEnabled(V_11);
                 V_12 = stackVariable117;
                 V_14 = this._featureBuilderEvents.GetEnumerator();
                 try
                 {
                     while (V_14.MoveNext())
                     {
                         V_14.get_Current().Building(V_12);
                     }
                 }
                 finally
                 {
                     if (V_14 != null)
                     {
                         V_14.Dispose();
                     }
                 }
                 V_13 = new FeatureInfo(V_4, V_5, V_7, V_8, V_9, extensionInfo, V_6, V_10, V_11);
                 V_14 = this._featureBuilderEvents.GetEnumerator();
                 try
                 {
                     while (V_14.MoveNext())
                     {
                         V_14.get_Current().Built(V_13);
                     }
                 }
                 finally
                 {
                     if (V_14 != null)
                     {
                         V_14.Dispose();
                     }
                 }
                 V_0.Add(V_13);
             }
         }
         finally
         {
             ((IDisposable)V_2).Dispose();
         }
     }
     return(V_0);
 }
 public static bool IsModule(this IManifestInfo manifestInfo)
 {
     return(manifestInfo.Type.Equals("module", StringComparison.OrdinalIgnoreCase));
 }
Beispiel #16
0
        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 (!Int32.TryParse(feature.Priority ?? manifestInfo.ModuleInfo.Priority, out var 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(
                        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);
                }
            }
            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 (!Int32.TryParse(manifestInfo.ModuleInfo.Priority, out var 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);
        }
Beispiel #17
0
 private bool IsIntegrationFeature(IManifestInfo manifest)
 {
     return(manifest.Tags.Any(x => string.Equals(x, "integration", StringComparison.OrdinalIgnoreCase)));
 }
Beispiel #18
0
        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);
        }
Beispiel #19
0
 public static bool IsTheme(this IManifestInfo manifestInfo)
 {
     return(manifestInfo?.Type?.Equals("theme", StringComparison.OrdinalIgnoreCase) ?? false);
 }
Beispiel #20
0
        public IEnumerable <IFeatureInfo> GetFeatures(IPluginInfo pluginInfo, IManifestInfo manifestInfo)
        {
            var featuresInfos = new List <IFeatureInfo>();

            var features = manifestInfo.ModuleInfo.Features.ToList();

            if (features.Count > 0)
            {
                foreach (var feature in features)
                {
                    if (String.IsNullOrWhiteSpace(feature.Id))
                    {
                        throw new ArgumentException($"包含这个功能的Plugin没有定义Id '{pluginInfo.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 featureManageDisallowed  = feature.ManageDisallowed;

                    var context = new FeatureBuildingContext
                    {
                        FeatureId            = featureId,
                        FeatureName          = featureName,
                        Category             = featureCategory,
                        Description          = featureDescription,
                        PluginInfo           = pluginInfo,
                        ManifestInfo         = manifestInfo,
                        Priority             = featurePriority,
                        FeatureDependencyIds = featureDependencyIds,
                        DefaultTenantOnly    = featureDefaultTenantOnly,
                        ManageDisallowed     = featureManageDisallowed
                    };

                    foreach (var builder in _featureBuilderEvents)
                    {
                        builder.Building(context);
                    }

                    var featureInfo = new FeatureInfo(
                        featureId,
                        featureName,
                        featurePriority,
                        featureCategory,
                        featureDescription,
                        pluginInfo,
                        featureDependencyIds,
                        featureDefaultTenantOnly,
                        featureManageDisallowed);

                    foreach (var builder in _featureBuilderEvents)
                    {
                        builder.Built(featureInfo);
                    }

                    featuresInfos.Add(featureInfo);
                }
            }
            else
            {
                var featureId   = pluginInfo.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 featureManageDisallowed  = manifestInfo.ModuleInfo.ManageDisallowed;

                var context = new FeatureBuildingContext
                {
                    FeatureId            = featureId,
                    FeatureName          = featureName,
                    Category             = featureCategory,
                    Description          = featureDescription,
                    PluginInfo           = pluginInfo,
                    ManifestInfo         = manifestInfo,
                    Priority             = featurePriority,
                    FeatureDependencyIds = featureDependencyIds,
                    DefaultTenantOnly    = featureDefaultTenantOnly,
                    ManageDisallowed     = featureManageDisallowed
                };

                foreach (var builder in _featureBuilderEvents)
                {
                    builder.Building(context);
                }

                var featureInfo = new FeatureInfo(
                    context.FeatureId,
                    context.FeatureName,
                    context.Priority,
                    context.Category,
                    context.Description,
                    context.PluginInfo,
                    context.FeatureDependencyIds,
                    context.DefaultTenantOnly,
                    context.ManageDisallowed);

                foreach (var builder in _featureBuilderEvents)
                {
                    builder.Built(featureInfo);
                }

                featuresInfos.Add(featureInfo);
            }

            return(featuresInfos);
        }
Beispiel #21
0
 public IFeatureInfoList GetFeatures(IExtensionInfo extensionInfo, IManifestInfo manifestInfo)
 {
     throw new NotImplementedException();
 }