From 676b677b1ffc186732c441ff6250c91d7198ba15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 28 Apr 2020 23:50:30 +0300 Subject: [PATCH] Added module object extension configurations. --- ...oduleEntityObjectExtensionConfiguration.cs | 59 +++++++++++++++++++ ...ityObjectPropertyExtensionConfiguration.cs | 56 ++++++++++++++++++ .../ModuleObjectExtensionConfiguration.cs | 9 +++ ...eObjectExtensionConfigurationDictionary.cs | 9 +++ ...ensionConfigurationDictionaryExtensions.cs | 28 +++++++++ ...eObjectExtensionConfigurationExtensions.cs | 24 ++++++++ .../ObjectExtending/ObjectExtensionManager.cs | 3 + ...ntityModuleObjectExtensionConfiguration.cs | 7 +++ ...eObjectExtensionConfigurationExtensions.cs | 17 ++++++ ...ObjectExtensionConfigurationsExtensions.cs | 17 ++++++ 10 files changed, 229 insertions(+) create mode 100644 framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleEntityObjectExtensionConfiguration.cs create mode 100644 framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleEntityObjectPropertyExtensionConfiguration.cs create mode 100644 framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfiguration.cs create mode 100644 framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationDictionary.cs create mode 100644 framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationDictionaryExtensions.cs create mode 100644 framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationExtensions.cs create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfiguration.cs create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfigurationExtensions.cs create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfigurationsExtensions.cs diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleEntityObjectExtensionConfiguration.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleEntityObjectExtensionConfiguration.cs new file mode 100644 index 0000000000..c6d71149e4 --- /dev/null +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleEntityObjectExtensionConfiguration.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using JetBrains.Annotations; + +namespace Volo.Abp.ObjectExtending +{ + public class ModuleEntityObjectExtensionConfiguration + { + [NotNull] + protected Dictionary Properties { get; } + + [NotNull] + public List> Validators { get; } + + public ModuleEntityObjectExtensionConfiguration() + { + Properties = new Dictionary(); + Validators = new List>(); + } + + [NotNull] + public virtual ModuleEntityObjectExtensionConfiguration AddOrUpdateProperty( + [NotNull] string propertyName, + [CanBeNull] Action configureAction = null) + { + return AddOrUpdateProperty( + typeof(TProperty), + propertyName, + configureAction + ); + } + + [NotNull] + public virtual ModuleEntityObjectExtensionConfiguration AddOrUpdateProperty( + [NotNull] Type propertyType, + [NotNull] string propertyName, + [CanBeNull] Action configureAction = null) + { + Check.NotNull(propertyType, nameof(propertyType)); + Check.NotNull(propertyName, nameof(propertyName)); + + var propertyInfo = Properties.GetOrAdd( + propertyName, + () => new ModuleEntityObjectPropertyExtensionConfiguration(this, propertyType, propertyName) + ); + + configureAction?.Invoke(propertyInfo); + + return this; + } + + [NotNull] + public virtual ImmutableList GetProperties() + { + return Properties.Values.ToImmutableList(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleEntityObjectPropertyExtensionConfiguration.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleEntityObjectPropertyExtensionConfiguration.cs new file mode 100644 index 0000000000..705166e2cc --- /dev/null +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleEntityObjectPropertyExtensionConfiguration.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using Volo.Abp.Localization; + +namespace Volo.Abp.ObjectExtending +{ + public class ModuleEntityObjectPropertyExtensionConfiguration + { + [NotNull] + public ModuleEntityObjectExtensionConfiguration EntityObjectExtensionConfiguration { get; } + + [NotNull] + public string Name { get; } + + [NotNull] + public Type Type { get; } + + [NotNull] + public List Attributes { get; } + + [NotNull] + public List> Validators { get; } + + [NotNull] + public ILocalizableString DisplayName + { + get => _displayName; + set + { + Check.NotNull(value, nameof(value)); + _displayName = value; + } + } + private ILocalizableString _displayName; + + [NotNull] + public Dictionary Configuration { get; } + + public ModuleEntityObjectPropertyExtensionConfiguration( + [NotNull] ModuleEntityObjectExtensionConfiguration entityObjectExtensionConfiguration, + [NotNull] Type type, + [NotNull] string name) + { + EntityObjectExtensionConfiguration = Check.NotNull(entityObjectExtensionConfiguration, nameof(entityObjectExtensionConfiguration)); + Type = Check.NotNull(type, nameof(type)); + Name = Check.NotNull(name, nameof(name)); + + DisplayName = new FixedLocalizableString(Name); + + Configuration = new Dictionary(); + Attributes = new List(); + Validators = new List>(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfiguration.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfiguration.cs new file mode 100644 index 0000000000..4972eace19 --- /dev/null +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfiguration.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Volo.Abp.ObjectExtending +{ + public class ModuleObjectExtensionConfiguration : Dictionary + { + + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationDictionary.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationDictionary.cs new file mode 100644 index 0000000000..a4ddf66473 --- /dev/null +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationDictionary.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Volo.Abp.ObjectExtending +{ + public class ModuleObjectExtensionConfigurationDictionary : Dictionary + { + + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationDictionaryExtensions.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationDictionaryExtensions.cs new file mode 100644 index 0000000000..05d0670d36 --- /dev/null +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationDictionaryExtensions.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace Volo.Abp.ObjectExtending +{ + public static class ModuleObjectExtensionConfigurationDictionaryExtensions + { + public static ModuleObjectExtensionConfigurationDictionary ConfigureModule( + [NotNull] this ModuleObjectExtensionConfigurationDictionary configurationDictionary, + [NotNull] string moduleName, + [NotNull] Action configureAction) + where T : ModuleObjectExtensionConfiguration, new() + { + Check.NotNull(moduleName, nameof(moduleName)); + Check.NotNull(configureAction, nameof(configureAction)); + + configureAction( + (T)configurationDictionary.GetOrAdd( + moduleName, + () => new T() + ) + ); + + return configurationDictionary; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationExtensions.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationExtensions.cs new file mode 100644 index 0000000000..4397bfe088 --- /dev/null +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ModuleObjectExtensionConfigurationExtensions.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.ObjectExtending +{ + public static class ModuleObjectExtensionConfigurationExtensions + { + public static T ConfigureObject( + this T objectConfiguration, + string objectName, + Action configureAction) + where T : ModuleObjectExtensionConfiguration + { + var configuration = objectConfiguration.GetOrAdd( + objectName, + () => new ModuleEntityObjectExtensionConfiguration() + ) as ModuleEntityObjectExtensionConfiguration; + + configureAction(configuration); + + return objectConfiguration; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs index 26b692c232..684be055fe 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs @@ -15,10 +15,13 @@ namespace Volo.Abp.ObjectExtending protected Dictionary ObjectsExtensions { get; } + public ModuleObjectExtensionConfigurationDictionary Modules { get; } + protected internal ObjectExtensionManager() { ObjectsExtensions = new Dictionary(); Configuration = new Dictionary(); + Modules = new ModuleObjectExtensionConfigurationDictionary(); } [NotNull] diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfiguration.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfiguration.cs new file mode 100644 index 0000000000..795c61281f --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfiguration.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.ObjectExtending +{ + public class IdentityModuleObjectExtensionConfiguration : ModuleObjectExtensionConfiguration + { + + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfigurationExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfigurationExtensions.cs new file mode 100644 index 0000000000..8f2815ad10 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfigurationExtensions.cs @@ -0,0 +1,17 @@ +using System; + +namespace Volo.Abp.ObjectExtending +{ + public static class IdentityModuleObjectExtensionConfigurationExtensions + { + public static IdentityModuleObjectExtensionConfiguration ConfigureUser( + this IdentityModuleObjectExtensionConfiguration configurations, + Action configureAction) + { + return configurations.ConfigureEntity( + "User", + configureAction + ); + } + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfigurationsExtensions.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfigurationsExtensions.cs new file mode 100644 index 0000000000..3daf614f45 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleObjectExtensionConfigurationsExtensions.cs @@ -0,0 +1,17 @@ +using System; + +namespace Volo.Abp.ObjectExtending +{ + public static class IdentityModuleObjectExtensionConfigurationsExtensions + { + public static ModuleObjectExtensionConfigurationDictionary ConfigureIdentity( + this ModuleObjectExtensionConfigurationDictionary modules, + Action configureAction) + { + return modules.ConfigureModule( + "Identity", + configureAction + ); + } + } +}