From 2928cfd7daeaae30ba56682838416a450951042f Mon Sep 17 00:00:00 2001 From: valdisiljuconoks Date: Sat, 12 Nov 2016 12:01:21 +0200 Subject: [PATCH] * Major refactoring of the scanning process * Fixed unit tests * Extracted specific target type scanners --- .../App_Data/EPiServerDB_3f986989.mdf | Bin 11599872 -> 11599872 bytes .../App_Data/EPiServerDB_3f986989_log.ldf | Bin 516096 -> 516096 bytes .../DbLocalizationProvider.MvcSample.mdf | Bin 3342336 -> 3342336 bytes .../DbLocalizationProvider.MvcSample_log.ldf | Bin 573440 -> 851968 bytes .../DbLocalizationProvider.MvcSample.csproj | 5 +- .../Models/HomeViewModel.cs | 8 +- .../Views/Home/Index.cshtml | 5 +- .../Shared/EditorTemplates/Username.cshtml | 7 + .../DataAnnotations/BaseViewModel.cs | 12 + .../SampleViewModelWithBase.cs | 13 + .../ViewModelWithInheritanceTests.cs | 22 + .../DbLocalizationProvider.Tests.csproj | 4 + .../ViewModelWithIncludedOnlyTests.cs | 19 +- .../GenericModels/GenericModelTests.cs | 13 +- .../InheritedViewModelExpressionTests.cs | 9 +- .../InheritedModels/ViewModelWithBaseTests.cs | 23 +- .../LocalizedEnumTests.cs | 3 +- .../LocalizedEnumsDiscoveryTests.cs | 3 +- .../LocalizedModelsDiscoveryTests.cs | 30 +- .../LocalizedResourceDiscoveryTests.cs | 46 ++- .../NamedResources/NamedModelsTests.cs | 93 +++-- .../NamedResources/NamedResourcesTests.cs | 15 +- .../ScannerTests/TypeScannerTests.cs | 18 + .../LocalizedMetadataProvider.cs | 2 +- .../DbLocalizationProvider.csproj | 4 + .../Properties/AssemblyInfo.cs | 6 +- .../Sync/IResourceTypeScanner.cs | 13 + .../Sync/LocalizedModelTypeScanner.cs | 69 ++++ .../Sync/LocalizedResourceTypeScanner.cs | 59 +++ .../Sync/LocalizedTypeScannerBase.cs | 127 ++++++ .../Sync/ResourceSynchronizer.cs | 6 +- .../Sync/TypeDiscoveryHelper.cs | 379 ++++++++---------- 32 files changed, 679 insertions(+), 334 deletions(-) create mode 100644 Tests/DbLocalizationProvider.MvcSample/Views/Shared/EditorTemplates/Username.cshtml create mode 100644 Tests/DbLocalizationProvider.Tests/DataAnnotations/BaseViewModel.cs create mode 100644 Tests/DbLocalizationProvider.Tests/DataAnnotations/SampleViewModelWithBase.cs create mode 100644 Tests/DbLocalizationProvider.Tests/DataAnnotations/ViewModelWithInheritanceTests.cs create mode 100644 Tests/DbLocalizationProvider.Tests/ScannerTests/TypeScannerTests.cs create mode 100644 src/DbLocalizationProvider/Sync/IResourceTypeScanner.cs create mode 100644 src/DbLocalizationProvider/Sync/LocalizedModelTypeScanner.cs create mode 100644 src/DbLocalizationProvider/Sync/LocalizedResourceTypeScanner.cs create mode 100644 src/DbLocalizationProvider/Sync/LocalizedTypeScannerBase.cs diff --git a/Tests/DbLocalizationProvider.EPiServer.Sample/App_Data/EPiServerDB_3f986989.mdf b/Tests/DbLocalizationProvider.EPiServer.Sample/App_Data/EPiServerDB_3f986989.mdf index 3030e23e1082a923426e8b5061673af1e19fa597..6dbfcae5752ce7eeeb727fdcb9e84651059c2624 100644 GIT binary patch delta 846 zcmY++*Kf@M6bJC%tu8f7ZR++?ZmH2)wOf1CruM2`)Sfl28nvn7+Iy=Jk@yF^NMF1o z;mJSI2cJqBagxtDIVU;aSnP9Btii`nZaAYP6a?RBtl!BWqBVJ6BJt92C_i4AUJ;Gw z)fE@S3+sw={%_f7QBO%hdGIx*x+pWd%+`?hJ(SQG_ILif2SIK8S5_#RSf3mO@vQpP zwpHOshy{lo#;##y3&nIx)Uag2tDXY zHofRglpOldmt6YMp8*Uck9-C(m>~>h7zGSx1S1*6XvQ#>LW&s2cqTBBNla!6Q<=te zikZPoW-*&N%w-<)SwIO3S;S(Nu#{yiX9X)+#cE1f!&=s{o(*hd6J=~>3tK5?8{65z zPIj@IJ?v#4`#HctDmcVpj&PJ1$Ef5uCpgI|syNLV&T@|PT;L*?xJ)%ysNpKtxK5lK q+~gLwxx-!Vai0e~8;kO(O5D2j@cD2j+-6$y$uBmts(V`9dm$FpHzyU ztdFFJoKZ*T#7#b6)^L&iPcl3rYA5J7FEA?i2krD>9K7I zB2nw__$lqGO+gGsAr=;lMjYaifH4@0M2y3DOu$4;!ekh=k}wt1kc{b=ffUTdEX+nK z=0JrNHq6C5q+vc5ARP;lfknu~V%U*|Y~&ypdC12S6ksU|;Xo0VVL6Ji0xPi!8cN`V z3vQI64CU}(HP*n33RJ=eKh~lO)d-*lLDXU$)}sy^pkpI8A%xASM*|wM1zWKV+pz;p zXvR+L!fv#n6>Zpqz1WBSIDmsVgu^(3qd11+IDwN0BZ5;njWallb2yK7T);(i;1Vw5 z3a;WBuA>t-(1n}0g>FP~8+ULQ_i!H%@DPvi7*FsN&+r^C@Di`^8a;S}UcALSyvK(= J)%NlGw?F*X1>yhz diff --git a/Tests/DbLocalizationProvider.EPiServer.Sample/App_Data/EPiServerDB_3f986989_log.ldf b/Tests/DbLocalizationProvider.EPiServer.Sample/App_Data/EPiServerDB_3f986989_log.ldf index a152965e7805a81315375eb99ce461e4a0e98e79..c4c4a0798022e0f6931ba1af1e1f4512dc9d3052 100644 GIT binary patch delta 35604 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 literal 573440 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 diff --git a/Tests/DbLocalizationProvider.MvcSample/DbLocalizationProvider.MvcSample.csproj b/Tests/DbLocalizationProvider.MvcSample/DbLocalizationProvider.MvcSample.csproj index 8a11ec7f..75f12a1f 100644 --- a/Tests/DbLocalizationProvider.MvcSample/DbLocalizationProvider.MvcSample.csproj +++ b/Tests/DbLocalizationProvider.MvcSample/DbLocalizationProvider.MvcSample.csproj @@ -134,6 +134,7 @@ + Web.config @@ -141,7 +142,9 @@ Web.config - + + + {8f0618d8-8200-45e9-9d1e-b268e98e0a84} diff --git a/Tests/DbLocalizationProvider.MvcSample/Models/HomeViewModel.cs b/Tests/DbLocalizationProvider.MvcSample/Models/HomeViewModel.cs index 54d5418c..2f060093 100644 --- a/Tests/DbLocalizationProvider.MvcSample/Models/HomeViewModel.cs +++ b/Tests/DbLocalizationProvider.MvcSample/Models/HomeViewModel.cs @@ -10,14 +10,20 @@ public class BaseViewModel [StringLength(100, MinimumLength = 5)] public string Message { get; set; } + [Display(Name = "Base username:", Description = "")] + [StringLength(100, MinimumLength = 5)] + [UIHint("Username")] + public string BaseUsername { get; set; } + public string CustomMessage { get; } = "Resource like property on base view model"; } [LocalizedModel(Inherited = false)] public class HomeViewModel : BaseViewModel { - [Display(Name = "The user name:")] + [Display(Name = "The user name:", Description = "")] [Required] + [UIHint("Username")] public string Username { get; set; } } } diff --git a/Tests/DbLocalizationProvider.MvcSample/Views/Home/Index.cshtml b/Tests/DbLocalizationProvider.MvcSample/Views/Home/Index.cshtml index 237c8fa8..e55eba9c 100644 --- a/Tests/DbLocalizationProvider.MvcSample/Views/Home/Index.cshtml +++ b/Tests/DbLocalizationProvider.MvcSample/Views/Home/Index.cshtml @@ -23,9 +23,10 @@ @Html.ValidationMessageFor(m => m.Message)
- @Html.LabelFor(m => m.Username) @Html.EditorFor(m => m.Username) - @Html.ValidationMessageFor(m => m.Username) +
+
+ @Html.EditorFor(m => m.BaseUsername)
diff --git a/Tests/DbLocalizationProvider.MvcSample/Views/Shared/EditorTemplates/Username.cshtml b/Tests/DbLocalizationProvider.MvcSample/Views/Shared/EditorTemplates/Username.cshtml new file mode 100644 index 00000000..8b68958b --- /dev/null +++ b/Tests/DbLocalizationProvider.MvcSample/Views/Shared/EditorTemplates/Username.cshtml @@ -0,0 +1,7 @@ +@model string + +@Html.LabelFor(m => m) +@Html.TextBoxFor(m => m) +@Html.ValidationMessageFor(m => m) + +[@ViewData.ModelMetadata.Description] \ No newline at end of file diff --git a/Tests/DbLocalizationProvider.Tests/DataAnnotations/BaseViewModel.cs b/Tests/DbLocalizationProvider.Tests/DataAnnotations/BaseViewModel.cs new file mode 100644 index 00000000..32761750 --- /dev/null +++ b/Tests/DbLocalizationProvider.Tests/DataAnnotations/BaseViewModel.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; + +namespace DbLocalizationProvider.Tests.DataAnnotations +{ + [LocalizedModel] + public class BaseViewModel + { + [Display(Name = "Base property", Description = "")] + [Required] + public string BaseProperty { get; set; } + } +} diff --git a/Tests/DbLocalizationProvider.Tests/DataAnnotations/SampleViewModelWithBase.cs b/Tests/DbLocalizationProvider.Tests/DataAnnotations/SampleViewModelWithBase.cs new file mode 100644 index 00000000..a232d026 --- /dev/null +++ b/Tests/DbLocalizationProvider.Tests/DataAnnotations/SampleViewModelWithBase.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; + +namespace DbLocalizationProvider.Tests.DataAnnotations +{ + [LocalizedModel(Inherited = false)] + public class SampleViewModelWithBase : BaseViewModel + { + [Display(Name = "Child property", Description = "")] + [Required] + [StringLength(100)] + public string ChildProperty { get; set; } + } +} diff --git a/Tests/DbLocalizationProvider.Tests/DataAnnotations/ViewModelWithInheritanceTests.cs b/Tests/DbLocalizationProvider.Tests/DataAnnotations/ViewModelWithInheritanceTests.cs new file mode 100644 index 00000000..8e8b3f80 --- /dev/null +++ b/Tests/DbLocalizationProvider.Tests/DataAnnotations/ViewModelWithInheritanceTests.cs @@ -0,0 +1,22 @@ +using System.Linq; +using DbLocalizationProvider.Sync; +using Xunit; + +namespace DbLocalizationProvider.Tests.DataAnnotations +{ + public class ViewModelWithInheritanceTests + { + [Fact] + public void NotInheritedModel_ContainsOnlyDeclaredProperties() + { + var sut = new TypeDiscoveryHelper(); + var properties = sut.ScanResources(typeof(SampleViewModelWithBase)); + var keys = properties.Select(p => p.Key).ToList(); + + Assert.Contains("DbLocalizationProvider.Tests.DataAnnotations.SampleViewModelWithBase.ChildProperty-Description", keys); + Assert.DoesNotContain("DbLocalizationProvider.Tests.DataAnnotations.SampleViewModelWithBase.BaseProperty", keys); + Assert.DoesNotContain("DbLocalizationProvider.Tests.DataAnnotations.SampleViewModelWithBase.BaseProperty-Required", keys); + Assert.DoesNotContain("DbLocalizationProvider.Tests.DataAnnotations.SampleViewModelWithBase.ChildProperty-Description-Required", keys); + } + } +} diff --git a/Tests/DbLocalizationProvider.Tests/DbLocalizationProvider.Tests.csproj b/Tests/DbLocalizationProvider.Tests/DbLocalizationProvider.Tests.csproj index 2a67679f..26284a2d 100644 --- a/Tests/DbLocalizationProvider.Tests/DbLocalizationProvider.Tests.csproj +++ b/Tests/DbLocalizationProvider.Tests/DbLocalizationProvider.Tests.csproj @@ -71,6 +71,9 @@ + + + @@ -107,6 +110,7 @@ + diff --git a/Tests/DbLocalizationProvider.Tests/DiscoveryTests/ViewModelWithIncludedOnlyTests.cs b/Tests/DbLocalizationProvider.Tests/DiscoveryTests/ViewModelWithIncludedOnlyTests.cs index 8cf246ca..ffc70cb4 100644 --- a/Tests/DbLocalizationProvider.Tests/DiscoveryTests/ViewModelWithIncludedOnlyTests.cs +++ b/Tests/DbLocalizationProvider.Tests/DiscoveryTests/ViewModelWithIncludedOnlyTests.cs @@ -6,12 +6,19 @@ namespace DbLocalizationProvider.Tests.DiscoveryTests { public class ViewModelWithIncludedOnlyTests { + public ViewModelWithIncludedOnlyTests() + { + _sut = new TypeDiscoveryHelper(); + } + + private readonly TypeDiscoveryHelper _sut; + [Fact] public void ModelWithBase_IncludedPorperty_ShouldDiscoverOnlyExplicitProperties() { - var properties = TypeDiscoveryHelper.GetAllProperties(typeof(SampleViewModelWithIncludedOnlyWithBase), contextAwareScanning: false) - .Select(p => p.Key) - .ToList(); + var properties = _sut.ScanResources(typeof(SampleViewModelWithIncludedOnlyWithBase)) + .Select(p => p.Key) + .ToList(); Assert.Contains("DbLocalizationProvider.Tests.DiscoveryTests.SampleViewModelWithIncludedOnlyWithBase.IncludedProperty", properties); Assert.DoesNotContain("DbLocalizationProvider.Tests.DiscoveryTests.SampleViewModelWithIncludedOnlyWithBase.ExcludedProperty", properties); @@ -23,9 +30,9 @@ public void ModelWithBase_IncludedPorperty_ShouldDiscoverOnlyExplicitProperties( [Fact] public void ModelWithIncludedPorperty_ShouldDiscoverOnlyExplicitProperties() { - var properties = TypeDiscoveryHelper.GetAllProperties(typeof(SampleViewModelWithIncludedOnly), contextAwareScanning: false) - .Select(p => p.Key) - .ToList(); + var properties = _sut.ScanResources(typeof(SampleViewModelWithIncludedOnly)) + .Select(p => p.Key) + .ToList(); Assert.Contains("DbLocalizationProvider.Tests.DiscoveryTests.SampleViewModelWithIncludedOnly.IncludedProperty", properties); Assert.DoesNotContain("DbLocalizationProvider.Tests.DiscoveryTests.SampleViewModelWithIncludedOnly.ExcludedProperty", properties); diff --git a/Tests/DbLocalizationProvider.Tests/GenericModels/GenericModelTests.cs b/Tests/DbLocalizationProvider.Tests/GenericModels/GenericModelTests.cs index c5719119..ee7aad81 100644 --- a/Tests/DbLocalizationProvider.Tests/GenericModels/GenericModelTests.cs +++ b/Tests/DbLocalizationProvider.Tests/GenericModels/GenericModelTests.cs @@ -5,10 +5,17 @@ namespace DbLocalizationProvider.Tests.GenericModels { public class GenericModelTests { + public GenericModelTests() + { + _sut = new TypeDiscoveryHelper(); + } + + private readonly TypeDiscoveryHelper _sut; + [Fact] public void TestGenericProperty() { - var properties = TypeDiscoveryHelper.GetAllProperties(typeof(OpenGenericModel<>), contextAwareScanning: false); + var properties = _sut.ScanResources(typeof(OpenGenericModel<>)); Assert.NotEmpty(properties); } @@ -16,9 +23,9 @@ public void TestGenericProperty() [Fact] public void TestGenericProperty_FromChildClass() { - var properties = TypeDiscoveryHelper.GetAllProperties(typeof(ClosedGenericModel), contextAwareScanning: false); + var properties = _sut.ScanResources(typeof(ClosedGenericModel)); Assert.NotEmpty(properties); } } -} \ No newline at end of file +} diff --git a/Tests/DbLocalizationProvider.Tests/InheritedModels/InheritedViewModelExpressionTests.cs b/Tests/DbLocalizationProvider.Tests/InheritedModels/InheritedViewModelExpressionTests.cs index 71a6e6eb..6187dd85 100644 --- a/Tests/DbLocalizationProvider.Tests/InheritedModels/InheritedViewModelExpressionTests.cs +++ b/Tests/DbLocalizationProvider.Tests/InheritedModels/InheritedViewModelExpressionTests.cs @@ -10,10 +10,11 @@ public class InheritedViewModelExpressionTests [Fact] public void Test() { - var properties = - new[] { typeof(SampleViewModelWithBaseNotInherit), typeof(BaseLocalizedViewModel) } - .Select(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)) - .ToList(); + var sut = new TypeDiscoveryHelper(); + + var properties = new[] { typeof(SampleViewModelWithBaseNotInherit), typeof(BaseLocalizedViewModel) } + .Select(t => sut.ScanResources(t)) + .ToList(); var childModel = new SampleViewModelWithBaseNotInherit(); var basePropertyKey = ExpressionHelper.GetFullMemberName(() => childModel.BaseProperty); diff --git a/Tests/DbLocalizationProvider.Tests/InheritedModels/ViewModelWithBaseTests.cs b/Tests/DbLocalizationProvider.Tests/InheritedModels/ViewModelWithBaseTests.cs index f4bdc3be..a364462a 100644 --- a/Tests/DbLocalizationProvider.Tests/InheritedModels/ViewModelWithBaseTests.cs +++ b/Tests/DbLocalizationProvider.Tests/InheritedModels/ViewModelWithBaseTests.cs @@ -9,12 +9,19 @@ namespace DbLocalizationProvider.Tests.InheritedModels { public class ViewModelWithBaseTests { + public ViewModelWithBaseTests() + { + _sut = new TypeDiscoveryHelper(); + } + + private readonly TypeDiscoveryHelper _sut; + [Fact] public void BaseProperty_HasChildClassResourceKey() { - var properties = TypeDiscoveryHelper.GetAllProperties(typeof(SampleViewModelWithBase), contextAwareScanning: false) - .Select(p => p.Key) - .ToList(); + var properties = _sut.ScanResources(typeof(SampleViewModelWithBase)) + .Select(p => p.Key) + .ToList(); Assert.Contains("DbLocalizationProvider.Tests.InheritedModels.SampleViewModelWithBase.BaseProperty", properties); Assert.Contains("DbLocalizationProvider.Tests.InheritedModels.SampleViewModelWithBase.BaseProperty-Required", properties); @@ -23,9 +30,9 @@ public void BaseProperty_HasChildClassResourceKey() [Fact] public void BaseProperty_HasChildClassResourceKey_DoesNotIncludeInheritedProperties() { - var properties = TypeDiscoveryHelper.GetAllProperties(typeof(SampleViewModelWithBaseNotInherit), contextAwareScanning: false) - .Select(p => p.Key) - .ToList(); + var properties = _sut.ScanResources(typeof(SampleViewModelWithBaseNotInherit)) + .Select(p => p.Key) + .ToList(); Assert.Contains("DbLocalizationProvider.Tests.InheritedModels.SampleViewModelWithBaseNotInherit.ChildProperty", properties); Assert.DoesNotContain("DbLocalizationProvider.Tests.InheritedModels.SampleViewModelWithBaseNotInherit.BaseProperty", properties); @@ -36,7 +43,7 @@ public void BuildResourceKey_ForBaseClassProperty_ExcludedFromChild_ShouldReturn { var properties = new[] { typeof(SampleViewModelWithBaseNotInherit), typeof(BaseLocalizedViewModel) } - .Select(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)) + .Select(t => _sut.ScanResources(t)) .ToList(); var childPropertyKey = ResourceKeyBuilder.BuildResourceKey(typeof(SampleViewModelWithBaseNotInherit), "ChildProperty"); @@ -53,7 +60,7 @@ public void BuildResourceKey_ForSecondBaseClassProperty_ExcludedFromChild_Should { var properties = new[] { typeof(SampleViewModelWithBaseNotInherit), typeof(BaseLocalizedViewModel), typeof(VeryBaseLocalizedViewModel) } - .Select(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)) + .Select(t => _sut.ScanResources(t)) .ToList(); var veryBasePropertyKey = ResourceKeyBuilder.BuildResourceKey(typeof(SampleViewModelWithBaseNotInherit), "VeryBaseProperty"); diff --git a/Tests/DbLocalizationProvider.Tests/LocalizedEnumTests.cs b/Tests/DbLocalizationProvider.Tests/LocalizedEnumTests.cs index d2b06f83..ec8b4990 100644 --- a/Tests/DbLocalizationProvider.Tests/LocalizedEnumTests.cs +++ b/Tests/DbLocalizationProvider.Tests/LocalizedEnumTests.cs @@ -10,10 +10,11 @@ public class LocalizedEnumTests public LocalizedEnumTests() { var types = new[] { typeof(DocumentEntity) }; + var sut = new TypeDiscoveryHelper(); Assert.NotEmpty(types); - _properties = types.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)); + _properties = types.SelectMany(t => sut.ScanResources(t)); } private readonly IEnumerable _properties; diff --git a/Tests/DbLocalizationProvider.Tests/LocalizedEnumsDiscoveryTests.cs b/Tests/DbLocalizationProvider.Tests/LocalizedEnumsDiscoveryTests.cs index 03aeb7d9..b4dea3ff 100644 --- a/Tests/DbLocalizationProvider.Tests/LocalizedEnumsDiscoveryTests.cs +++ b/Tests/DbLocalizationProvider.Tests/LocalizedEnumsDiscoveryTests.cs @@ -19,8 +19,9 @@ public LocalizedEnumsDiscoveryTests() [Fact] public void DiscoverEnumValue_NameAsTranslation() { + var sut = new TypeDiscoveryHelper(); var type = _types.First(t => t.FullName == "DbLocalizationProvider.Tests.SampleStatus"); - var properties = TypeDiscoveryHelper.GetAllProperties(type); + var properties = sut.ScanResources(type); var openStatus = properties.First(p => p.Key == "DbLocalizationProvider.Tests.SampleStatus.Open"); diff --git a/Tests/DbLocalizationProvider.Tests/LocalizedModelsDiscoveryTests.cs b/Tests/DbLocalizationProvider.Tests/LocalizedModelsDiscoveryTests.cs index 64b0cc5a..ea472ef8 100644 --- a/Tests/DbLocalizationProvider.Tests/LocalizedModelsDiscoveryTests.cs +++ b/Tests/DbLocalizationProvider.Tests/LocalizedModelsDiscoveryTests.cs @@ -7,15 +7,26 @@ namespace DbLocalizationProvider.Tests { public class LocalizedModelsDiscoveryTests { - private readonly IEnumerable _properties; - public LocalizedModelsDiscoveryTests() { - var types = new[] { typeof(SampleViewModel), typeof(SubViewModel) };//TypeDiscoveryHelper.GetTypesWithAttribute().ToList(); + var types = new[] { typeof(SampleViewModel), typeof(SubViewModel) }; + var sut = new TypeDiscoveryHelper(); Assert.NotEmpty(types); - _properties = types.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)); + _properties = types.SelectMany(t => sut.ScanResources(t)); + } + + private readonly IEnumerable _properties; + + [Fact] + public void PropertyWithAttributes_DisplayDescription_Discovered() + { + var resource = _properties.FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.SampleViewModel.PropertyWithDescription"); + Assert.NotNull(resource); + + var propertyWithDescriptionResource = _properties.FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.SampleViewModel.PropertyWithDescription-Description"); + Assert.NotNull(propertyWithDescriptionResource); } [Fact] @@ -52,16 +63,5 @@ public void SingleLevel_ScalarProperties_NoAttribute() var nullable = _properties.FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.SampleViewModel.NullableInt"); Assert.NotNull(nullable); } - - - [Fact] - public void PropertyWithAttributes_DisplayDescription_Discovered() - { - var resource = _properties.FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.SampleViewModel.PropertyWithDescription"); - Assert.NotNull(resource); - - var propertyWithDescriptionResource = _properties.FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.SampleViewModel.PropertyWithDescription-Description"); - Assert.NotNull(propertyWithDescriptionResource); - } } } diff --git a/Tests/DbLocalizationProvider.Tests/LocalizedResourceDiscoveryTests.cs b/Tests/DbLocalizationProvider.Tests/LocalizedResourceDiscoveryTests.cs index ee3878e2..bd0a68c2 100644 --- a/Tests/DbLocalizationProvider.Tests/LocalizedResourceDiscoveryTests.cs +++ b/Tests/DbLocalizationProvider.Tests/LocalizedResourceDiscoveryTests.cs @@ -9,31 +9,21 @@ namespace DbLocalizationProvider.Tests { public class LocalizedResourceDiscoveryTests { - private readonly List _types; - public LocalizedResourceDiscoveryTests() { + _sut = new TypeDiscoveryHelper(); _types = TypeDiscoveryHelper.GetTypesWithAttribute().ToList(); Assert.NotEmpty(_types); } - [Fact] - public void SingleLevel_ScalarProperties() - { - var type = _types.First(t => t.FullName == "DbLocalizationProvider.Tests.ResourceKeys"); - var properties = TypeDiscoveryHelper.GetAllProperties(type); - - var staticField = properties.First(p => p.Key == "DbLocalizationProvider.Tests.ResourceKeys.ThisIsConstant"); - - Assert.True(TypeDiscoveryHelper.IsStringProperty(staticField.ReturnType)); - Assert.Equal("Default value for constant", staticField.Translation); - } + private readonly List _types; + private readonly TypeDiscoveryHelper _sut; [Fact] public void NestedObject_ScalarProperties() { var type = _types.First(t => t.FullName == "DbLocalizationProvider.Tests.ResourceKeys"); - var properties = TypeDiscoveryHelper.GetAllProperties(type).ToList(); + var properties = _sut.ScanResources(type).ToList(); var complexPropertySubProperty = properties.FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.ResourceKeys.SubResource.SubResourceProperty"); @@ -46,7 +36,19 @@ public void NestedObject_ScalarProperties() // need to check that there is no resource discovered for complex properties itself Assert.DoesNotContain("DbLocalizationProvider.Tests.ResourceKeys.SubResource", properties.Select(k => k.Key)); Assert.DoesNotContain("DbLocalizationProvider.Tests.ResourceKeys.SubResource.EvenMoreComplexResource", properties.Select(k => k.Key)); + } + [Fact] + public void NestedType_ScalarProperties() + { + var type = _types.FirstOrDefault(t => t.FullName == "DbLocalizationProvider.Tests.ParentClassForResources+ChildResourceClass"); + + Assert.NotNull(type); + + var property = _sut.ScanResources(type).First(); + var resourceKey = ExpressionHelper.GetFullMemberName(() => ParentClassForResources.ChildResourceClass.HelloMessage); + + Assert.Equal(resourceKey, property.Key); } [Fact] @@ -56,22 +58,22 @@ public void NestedType_ThroughProperty_ScalarProperties() Assert.NotNull(type); - var property = TypeDiscoveryHelper.GetAllProperties(type).FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.PageResources.Header.HelloMessage"); + var property = _sut.ScanResources(type).FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.PageResources.Header.HelloMessage"); Assert.NotNull(property); } [Fact] - public void NestedType_ScalarProperties() + public void SingleLevel_ScalarProperties() { - var type = _types.FirstOrDefault(t => t.FullName == "DbLocalizationProvider.Tests.ParentClassForResources+ChildResourceClass"); - - Assert.NotNull(type); + var sut = new TypeDiscoveryHelper(); + var type = _types.First(t => t.FullName == "DbLocalizationProvider.Tests.ResourceKeys"); + var properties = sut.ScanResources(type); - var property = TypeDiscoveryHelper.GetAllProperties(type).First(); - var resourceKey = ExpressionHelper.GetFullMemberName(() => ParentClassForResources.ChildResourceClass.HelloMessage); + var staticField = properties.First(p => p.Key == "DbLocalizationProvider.Tests.ResourceKeys.ThisIsConstant"); - Assert.Equal(resourceKey, property.Key); + Assert.True(LocalizedTypeScannerBase.IsStringProperty(staticField.ReturnType)); + Assert.Equal("Default value for constant", staticField.Translation); } } } diff --git a/Tests/DbLocalizationProvider.Tests/NamedResources/NamedModelsTests.cs b/Tests/DbLocalizationProvider.Tests/NamedResources/NamedModelsTests.cs index e72a65fb..a61f1641 100644 --- a/Tests/DbLocalizationProvider.Tests/NamedResources/NamedModelsTests.cs +++ b/Tests/DbLocalizationProvider.Tests/NamedResources/NamedModelsTests.cs @@ -6,45 +6,25 @@ namespace DbLocalizationProvider.Tests.NamedResources { public class NamedModelsTests { - [Fact] - public void MultipleAttributesForSingleProperty_NoPrefix() + public NamedModelsTests() { - var model = TypeDiscoveryHelper.GetTypesWithAttribute() - .Where(t => t.FullName == $"DbLocalizationProvider.Tests.NamedResources.{nameof(ModelWithNamedProperties)}"); - - var properties = model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)).ToList(); - - var nonexistingProperty = properties.FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.NamedResources.ModelWithNamedProperties.PageHeader"); - Assert.Null(nonexistingProperty); - - var namedProperty = properties.FirstOrDefault(p => p.Key == "/this/is/xpath/key"); - Assert.NotNull(namedProperty); - Assert.Equal("This is page header", namedProperty.Translation); - - var anotherNamedProperty = properties.FirstOrDefault(p => p.Key == "/this/is/another/xpath/key"); - Assert.NotNull(anotherNamedProperty); + _sut = new TypeDiscoveryHelper(); + } - var resourceKeyOnComplexProperty = properties.FirstOrDefault(p => p.Key == "/this/is/complex/type"); - Assert.NotNull(resourceKeyOnComplexProperty); + private readonly TypeDiscoveryHelper _sut; - var propertyWithDisplayName = properties.FirstOrDefault(p => p.Key == "/simple/property/with/display/name"); - Assert.NotNull(propertyWithDisplayName); - Assert.Equal("This is simple property", propertyWithDisplayName.Translation); + [Fact] + public void DuplicateAttributes_DiffProperties_SameKey_ThrowsException() + { + var model = new[] { typeof(BadResourceWithDuplicateKeysWithinClass) }; + Assert.Throws(() => model.SelectMany(t => _sut.ScanResources(t)).ToList()); } [Fact] - public void SingleAttributeForSingleProperty_WithClassPrefix() + public void DuplicateAttributes_SingleProperty_SameKey_ThrowsException() { - var model = TypeDiscoveryHelper.GetTypesWithAttribute() - .Where(t => t.FullName == $"DbLocalizationProvider.Tests.NamedResources.{nameof(ModelWithNamedPropertiesWithPrefix)}"); - - var properties = model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)).ToList(); - - var name = "/contenttypes/modelwithnamedpropertieswithprefix/properties/pageheader/name"; - var headerProperty = properties.FirstOrDefault(p => p.Key == name); - - Assert.NotNull(headerProperty); - Assert.Equal("This is page header", headerProperty.Translation); + var model = new[] { typeof(ModelWithDuplicateResourceKeys) }; + Assert.Throws(() => model.SelectMany(t => _sut.ScanResources(t)).ToList()); } [Fact] @@ -53,7 +33,7 @@ public void MultipleAttributeForSingleProperty_WithClassPrefix() var model = TypeDiscoveryHelper.GetTypesWithAttribute() .Where(t => t.FullName == $"DbLocalizationProvider.Tests.NamedResources.{nameof(ModelWithNamedPropertiesWithPrefix)}"); - var properties = model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)).ToList(); + var properties = model.SelectMany(t => _sut.ScanResources(t)).ToList(); var firstResource = properties.FirstOrDefault(p => p.Key == "/contenttypes/modelwithnamedpropertieswithprefix/resource1"); @@ -66,13 +46,39 @@ public void MultipleAttributeForSingleProperty_WithClassPrefix() Assert.Equal("2nd resource", secondResource.Translation); } + [Fact] + public void MultipleAttributesForSingleProperty_NoPrefix() + { + var model = TypeDiscoveryHelper.GetTypesWithAttribute() + .Where(t => t.FullName == $"DbLocalizationProvider.Tests.NamedResources.{nameof(ModelWithNamedProperties)}"); + + var properties = model.SelectMany(t => _sut.ScanResources(t)).ToList(); + + var nonexistingProperty = properties.FirstOrDefault(p => p.Key == "DbLocalizationProvider.Tests.NamedResources.ModelWithNamedProperties.PageHeader"); + Assert.Null(nonexistingProperty); + + var namedProperty = properties.FirstOrDefault(p => p.Key == "/this/is/xpath/key"); + Assert.NotNull(namedProperty); + Assert.Equal("This is page header", namedProperty.Translation); + + var anotherNamedProperty = properties.FirstOrDefault(p => p.Key == "/this/is/another/xpath/key"); + Assert.NotNull(anotherNamedProperty); + + var resourceKeyOnComplexProperty = properties.FirstOrDefault(p => p.Key == "/this/is/complex/type"); + Assert.NotNull(resourceKeyOnComplexProperty); + + var propertyWithDisplayName = properties.FirstOrDefault(p => p.Key == "/simple/property/with/display/name"); + Assert.NotNull(propertyWithDisplayName); + Assert.Equal("This is simple property", propertyWithDisplayName.Translation); + } + [Fact] public void ResourceAttributeToClass_WithClassPrefix() { var model = TypeDiscoveryHelper.GetTypesWithAttribute() .Where(t => t.FullName == $"DbLocalizationProvider.Tests.NamedResources.{nameof(ModelWithNamedPropertiesWithPrefixAndKeyOnClass)}"); - var properties = model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)).ToList(); + var properties = model.SelectMany(t => _sut.ScanResources(t)).ToList(); var firstResource = properties.FirstOrDefault(p => p.Key == "/contenttypes/modelwithnamedpropertieswithprefixandkeyonclass/name"); Assert.NotNull(firstResource); @@ -85,17 +91,18 @@ public void ResourceAttributeToClass_WithClassPrefix() } [Fact] - public void DuplicateAttributes_SingleProperty_SameKey_ThrowsException() + public void SingleAttributeForSingleProperty_WithClassPrefix() { - var model = new[] { typeof(ModelWithDuplicateResourceKeys) }; - Assert.Throws(() => model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)).ToList()); - } + var model = TypeDiscoveryHelper.GetTypesWithAttribute() + .Where(t => t.FullName == $"DbLocalizationProvider.Tests.NamedResources.{nameof(ModelWithNamedPropertiesWithPrefix)}"); - [Fact] - public void DuplicateAttributes_DiffProperties_SameKey_ThrowsException() - { - var model = new[] { typeof(BadResourceWithDuplicateKeysWithinClass) }; - Assert.Throws(() => model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t, contextAwareScanning: false)).ToList()); + var properties = model.SelectMany(t => _sut.ScanResources(t)).ToList(); + + var name = "/contenttypes/modelwithnamedpropertieswithprefix/properties/pageheader/name"; + var headerProperty = properties.FirstOrDefault(p => p.Key == name); + + Assert.NotNull(headerProperty); + Assert.Equal("This is page header", headerProperty.Translation); } } } diff --git a/Tests/DbLocalizationProvider.Tests/NamedResources/NamedResourcesTests.cs b/Tests/DbLocalizationProvider.Tests/NamedResources/NamedResourcesTests.cs index 797b2e78..dcfac3e0 100644 --- a/Tests/DbLocalizationProvider.Tests/NamedResources/NamedResourcesTests.cs +++ b/Tests/DbLocalizationProvider.Tests/NamedResources/NamedResourcesTests.cs @@ -7,18 +7,25 @@ namespace DbLocalizationProvider.Tests.NamedResources { public class NamedResourcesTests { + public NamedResourcesTests() + { + _sut = new TypeDiscoveryHelper(); + } + + private readonly TypeDiscoveryHelper _sut; + [Fact] public void DuplicateAttributes_DiffProperties_SameKey_ThrowsException() { var model = new[] { typeof(BadResourceWithDuplicateKeysWithinClass) }; - Assert.Throws(() => model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t)).ToList()); + Assert.Throws(() => model.SelectMany(t => _sut.ScanResources(t)).ToList()); } [Fact] public void DuplicateAttributes_SingleProperty_SameKey_ThrowsException() { var model = new[] { typeof(BadResourceWithDuplicateKeys) }; - Assert.Throws(() => model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t)).ToList()); + Assert.Throws(() => model.SelectMany(t => _sut.ScanResources(t)).ToList()); } [Fact] @@ -43,7 +50,7 @@ public void MultipleAttributesForSingleProperty_NoPrefix() var model = TypeDiscoveryHelper.GetTypesWithAttribute() .Where(t => t.FullName == $"DbLocalizationProvider.Tests.NamedResources.{nameof(ResourcesWithNamedKeys)}"); - var properties = model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t)).ToList(); + var properties = model.SelectMany(t => _sut.ScanResources(t)).ToList(); var namedResource = properties.FirstOrDefault(p => p.Key == "/this/is/xpath/to/resource"); @@ -57,7 +64,7 @@ public void MultipleAttributesForSingleProperty_WithPrefix() var model = TypeDiscoveryHelper.GetTypesWithAttribute() .Where(t => t.FullName == $"DbLocalizationProvider.Tests.NamedResources.{nameof(ResourcesWithNamedKeysWithPrefix)}"); - var properties = model.SelectMany(t => TypeDiscoveryHelper.GetAllProperties(t)).ToList(); + var properties = model.SelectMany(t => _sut.ScanResources(t)).ToList(); var namedResource = properties.FirstOrDefault(p => p.Key == "/this/is/root/resource/and/this/is/header"); diff --git a/Tests/DbLocalizationProvider.Tests/ScannerTests/TypeScannerTests.cs b/Tests/DbLocalizationProvider.Tests/ScannerTests/TypeScannerTests.cs new file mode 100644 index 00000000..1392a797 --- /dev/null +++ b/Tests/DbLocalizationProvider.Tests/ScannerTests/TypeScannerTests.cs @@ -0,0 +1,18 @@ +using DbLocalizationProvider.Sync; +using Xunit; + +namespace DbLocalizationProvider.Tests.ScannerTests +{ + public class TypeScannerTests + { + [Fact] + public void ViewModelType_ShouldSelectModelScanner() + { + var sut = new LocalizedModelTypeScanner(); + + var result = sut.ShouldScan(typeof(SampleViewModel)); + + Assert.True(result); + } + } +} diff --git a/src/DbLocalizationProvider/DataAnnotations/LocalizedMetadataProvider.cs b/src/DbLocalizationProvider/DataAnnotations/LocalizedMetadataProvider.cs index d0dc3208..888dc06b 100644 --- a/src/DbLocalizationProvider/DataAnnotations/LocalizedMetadataProvider.cs +++ b/src/DbLocalizationProvider/DataAnnotations/LocalizedMetadataProvider.cs @@ -41,7 +41,7 @@ protected override ModelMetadata CreateMetadata( } var displayAttribute = theAttributes.OfType().FirstOrDefault(); - if(!string.IsNullOrEmpty(displayAttribute?.Description)) + if(displayAttribute?.Description != null) { data.Description = ModelMetadataLocalizationHelper.GetTranslation(containerType, $"{propertyName}-Description"); } diff --git a/src/DbLocalizationProvider/DbLocalizationProvider.csproj b/src/DbLocalizationProvider/DbLocalizationProvider.csproj index 0166e516..73b1dad1 100644 --- a/src/DbLocalizationProvider/DbLocalizationProvider.csproj +++ b/src/DbLocalizationProvider/DbLocalizationProvider.csproj @@ -150,6 +150,10 @@ + + + + diff --git a/src/DbLocalizationProvider/Properties/AssemblyInfo.cs b/src/DbLocalizationProvider/Properties/AssemblyInfo.cs index be764a5e..8ffc9983 100644 --- a/src/DbLocalizationProvider/Properties/AssemblyInfo.cs +++ b/src/DbLocalizationProvider/Properties/AssemblyInfo.cs @@ -5,9 +5,9 @@ [assembly: AssemblyTitle("DbLocalizationProvider")] [assembly: AssemblyDescription("Database driven localization provider")] [assembly: Guid("17ca5d23-46c3-44b1-8fa6-0f40b2e447ba")] -[assembly: AssemblyVersion("2.1.0.0")] -[assembly: AssemblyFileVersion("2.1.0.0")] -[assembly: AssemblyInformationalVersion("2.1.0")] +[assembly: AssemblyVersion("2.1.1.0")] +[assembly: AssemblyFileVersion("2.1.1.0")] +[assembly: AssemblyInformationalVersion("2.1.1")] [assembly: InternalsVisibleTo("DbLocalizationProvider.EPiServer")] [assembly: InternalsVisibleTo("DbLocalizationProvider.AdminUI")] [assembly: InternalsVisibleTo("DbLocalizationProvider.MigrationTool")] diff --git a/src/DbLocalizationProvider/Sync/IResourceTypeScanner.cs b/src/DbLocalizationProvider/Sync/IResourceTypeScanner.cs new file mode 100644 index 00000000..92155244 --- /dev/null +++ b/src/DbLocalizationProvider/Sync/IResourceTypeScanner.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace DbLocalizationProvider.Sync +{ + internal interface IResourceTypeScanner + { + bool ShouldScan(Type target); + string GetResourceKeyPrefix(Type target, string keyPrefix = null); + ICollection GetClassLevelResources(Type target, string resourceKeyPrefix); + ICollection GetResources(Type target, string resourceKeyPrefix); + } +} \ No newline at end of file diff --git a/src/DbLocalizationProvider/Sync/LocalizedModelTypeScanner.cs b/src/DbLocalizationProvider/Sync/LocalizedModelTypeScanner.cs new file mode 100644 index 00000000..4bbf4ab7 --- /dev/null +++ b/src/DbLocalizationProvider/Sync/LocalizedModelTypeScanner.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using DbLocalizationProvider.Internal; + +namespace DbLocalizationProvider.Sync +{ + internal class LocalizedModelTypeScanner : LocalizedTypeScannerBase, IResourceTypeScanner + { + public bool ShouldScan(Type target) + { + return target.GetCustomAttribute() != null; + } + + public string GetResourceKeyPrefix(Type target, string keyPrefix = null) + { + var modelAttribute = target.GetCustomAttribute(); + + return !string.IsNullOrEmpty(modelAttribute?.KeyPrefix) ? modelAttribute.KeyPrefix : target.FullName; + } + + public ICollection GetClassLevelResources(Type target, string resourceKeyPrefix) + { + var result = new List(); + var resourceAttributesOnModelClass = target.GetCustomAttributes().ToList(); + if(!resourceAttributesOnModelClass.Any()) + return result; + + foreach (var resourceKeyAttribute in resourceAttributesOnModelClass) + { + result.Add(new DiscoveredResource(null, + ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, resourceKeyAttribute.Key, separator: string.Empty), + null, + resourceKeyAttribute.Value, + target, + typeof(string), + true)); + } + + return result; + } + + public ICollection GetResources(Type target, string resourceKeyPrefix) + { + var resourceSources = GetResourceSources(target); + var attr = target.GetCustomAttribute(); + var isKeyPrefixSpecified = !string.IsNullOrEmpty(attr?.KeyPrefix); + + return resourceSources.SelectMany(pi => DiscoverResourcesFromProperty(pi, resourceKeyPrefix, isKeyPrefixSpecified)).ToList(); + } + + private ICollection GetResourceSources(Type target) + { + var modelAttribute = target.GetCustomAttribute(); + if(modelAttribute == null) + return new List(); + + var flags = BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Static; + + if(!modelAttribute.Inherited) + flags = flags | BindingFlags.DeclaredOnly; + + return target.GetProperties(flags) + .Where(pi => pi.GetCustomAttribute() == null) + .Where(pi => !modelAttribute.OnlyIncluded || pi.GetCustomAttribute() != null).ToList(); + } + } +} \ No newline at end of file diff --git a/src/DbLocalizationProvider/Sync/LocalizedResourceTypeScanner.cs b/src/DbLocalizationProvider/Sync/LocalizedResourceTypeScanner.cs new file mode 100644 index 00000000..3384e1c1 --- /dev/null +++ b/src/DbLocalizationProvider/Sync/LocalizedResourceTypeScanner.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using DbLocalizationProvider.Internal; + +namespace DbLocalizationProvider.Sync +{ + internal class LocalizedResourceTypeScanner : LocalizedTypeScannerBase, IResourceTypeScanner + { + public bool ShouldScan(Type target) + { + return target.GetCustomAttribute() != null; + } + + public string GetResourceKeyPrefix(Type target, string keyPrefix = null) + { + var resourceAttribute = target.GetCustomAttribute(); + + return !string.IsNullOrEmpty(resourceAttribute?.KeyPrefix) + ? resourceAttribute.KeyPrefix + : (string.IsNullOrEmpty(keyPrefix) ? target.FullName : keyPrefix); + } + + public ICollection GetClassLevelResources(Type target, string resourceKeyPrefix) + { + return new List(); + } + + public ICollection GetResources(Type target, string resourceKeyPrefix) + { + if(target.BaseType == typeof(Enum)) + { + return target.GetMembers(BindingFlags.Public | BindingFlags.Static) + .Select(mi => new DiscoveredResource(mi, + ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, mi), + mi.Name, + mi.Name, + target, + Enum.GetUnderlyingType(target), + Enum.GetUnderlyingType(target).IsSimpleType())).ToList(); + } + + var resourceSources = GetResourceSources(target); + var attr = target.GetCustomAttribute(); + var isKeyPrefixSpecified = !string.IsNullOrEmpty(attr?.KeyPrefix); + + return resourceSources.SelectMany(pi => DiscoverResourcesFromProperty(pi, resourceKeyPrefix, isKeyPrefixSpecified)).ToList(); + } + + private ICollection GetResourceSources(Type target) + { + var flags = BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Static; + + return target.GetProperties(flags) + .Where(pi => pi.GetCustomAttribute() == null).ToList(); + } + } +} \ No newline at end of file diff --git a/src/DbLocalizationProvider/Sync/LocalizedTypeScannerBase.cs b/src/DbLocalizationProvider/Sync/LocalizedTypeScannerBase.cs new file mode 100644 index 00000000..160ce2ea --- /dev/null +++ b/src/DbLocalizationProvider/Sync/LocalizedTypeScannerBase.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Reflection; +using DbLocalizationProvider.Internal; + +namespace DbLocalizationProvider.Sync +{ + internal abstract class LocalizedTypeScannerBase + { + protected IEnumerable DiscoverResourcesFromProperty(PropertyInfo pi, string resourceKeyPrefix, bool typeKeyPrefixSpecified) + { + // check if there are [ResourceKey] attributes + var keyAttributes = pi.GetCustomAttributes().ToList(); + var resourceKey = ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, pi); + var translation = GetResourceValue(pi); + + if(!keyAttributes.Any()) + { + yield return new DiscoveredResource(pi, + resourceKey, + translation, + pi.Name, + pi.PropertyType, + pi.GetMethod.ReturnType, + pi.GetMethod.ReturnType.IsSimpleType()); + + // try to fetch also [Display()] attribute to generate new "...-Description" resource => usually used for help text labels + var displayAttribute = pi.GetCustomAttribute(); + if(displayAttribute?.Description != null) + { + yield return new DiscoveredResource(pi, + $"{resourceKey}-Description", + displayAttribute.Description, + $"{pi.Name}-Description", + pi.PropertyType, + pi.GetMethod.ReturnType, + pi.GetMethod.ReturnType.IsSimpleType()); + } + + var validationAttributes = pi.GetCustomAttributes(); + foreach (var validationAttribute in validationAttributes) + { + var validationResourceKey = ResourceKeyBuilder.BuildResourceKey(resourceKey, validationAttribute); + var propertyName = validationResourceKey.Split('.').Last(); + yield return new DiscoveredResource(pi, + validationResourceKey, + string.IsNullOrEmpty(validationAttribute.ErrorMessage) ? propertyName : validationAttribute.ErrorMessage, + propertyName, + pi.PropertyType, + pi.GetMethod.ReturnType, + pi.GetMethod.ReturnType.IsSimpleType()); + } + } + + foreach (var resourceKeyAttribute in keyAttributes) + { + yield return new DiscoveredResource(pi, + ResourceKeyBuilder.BuildResourceKey(typeKeyPrefixSpecified ? resourceKeyPrefix : null, + resourceKeyAttribute.Key, + separator: string.Empty), + string.IsNullOrEmpty(resourceKeyAttribute.Value) ? translation : resourceKeyAttribute.Value, + null, + pi.PropertyType, + pi.GetMethod.ReturnType, + true); + } + } + + private static string GetResourceValue(PropertyInfo pi) + { + var result = pi.Name; + + // try to extract resource value + var methodInfo = pi.GetGetMethod(); + if(IsStringProperty(methodInfo.ReturnType)) + { + try + { + if(methodInfo.IsStatic) + { + result = methodInfo.Invoke(null, null) as string; + } + else + { + if(pi.DeclaringType != null) + { + var targetInstance = Activator.CreateInstance(pi.DeclaringType); + var propertyReturnValue = methodInfo.Invoke(targetInstance, null) as string; + if(propertyReturnValue != null) + { + result = propertyReturnValue; + } + } + } + } + catch + { + // if we fail to retrieve value for the resource - fair enough + } + } + + var attributes = pi.GetCustomAttributes(true); + var displayAttribute = attributes.OfType().FirstOrDefault(); + + if(!string.IsNullOrEmpty(displayAttribute?.GetName())) + { + result = displayAttribute.GetName(); + } + + var displayNameAttribute = attributes.OfType().FirstOrDefault(); + if(!string.IsNullOrEmpty(displayNameAttribute?.DisplayName)) + { + result = displayNameAttribute.DisplayName; + } + + return result; + } + + internal static bool IsStringProperty(Type returnType) + { + return returnType == typeof(string); + } + } +} \ No newline at end of file diff --git a/src/DbLocalizationProvider/Sync/ResourceSynchronizer.cs b/src/DbLocalizationProvider/Sync/ResourceSynchronizer.cs index 81e7329d..e403ab61 100644 --- a/src/DbLocalizationProvider/Sync/ResourceSynchronizer.cs +++ b/src/DbLocalizationProvider/Sync/ResourceSynchronizer.cs @@ -81,7 +81,8 @@ private void ResetSyncStatus(DbContext db) private void RegisterDiscoveredModels(LanguageEntities db, IEnumerable types) { - var properties = types.SelectMany(type => TypeDiscoveryHelper.GetAllProperties(type, contextAwareScanning: false)); + var sut = new TypeDiscoveryHelper(); + var properties = types.SelectMany(type => sut.ScanResources(type)); foreach (var property in properties) { @@ -92,7 +93,8 @@ private void RegisterDiscoveredModels(LanguageEntities db, IEnumerable typ private void RegisterDiscoveredResources(LanguageEntities db, IEnumerable types) { - var properties = types.SelectMany(type => TypeDiscoveryHelper.GetAllProperties(type)); + var sut = new TypeDiscoveryHelper(); + var properties = types.SelectMany(type => sut.ScanResources(type)); foreach (var property in properties) { diff --git a/src/DbLocalizationProvider/Sync/TypeDiscoveryHelper.cs b/src/DbLocalizationProvider/Sync/TypeDiscoveryHelper.cs index 5ea73fb5..d182258a 100644 --- a/src/DbLocalizationProvider/Sync/TypeDiscoveryHelper.cs +++ b/src/DbLocalizationProvider/Sync/TypeDiscoveryHelper.cs @@ -1,17 +1,60 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; using System.Linq; using System.Reflection; -using DbLocalizationProvider.Internal; namespace DbLocalizationProvider.Sync { internal class TypeDiscoveryHelper { internal static ConcurrentDictionary> DiscoveredResourceCache = new ConcurrentDictionary>(); + private readonly List _scanners = new List(); + + public TypeDiscoveryHelper() + { + _scanners.Add(new LocalizedModelTypeScanner()); + _scanners.Add(new LocalizedResourceTypeScanner()); + } + + public IEnumerable ScanResources(Type target, string keyPrefix = null, IResourceTypeScanner scanner = null) + { + var typeScanner = scanner; + + if(scanner == null) + typeScanner = _scanners.FirstOrDefault(s => s.ShouldScan(target)); + + if(typeScanner == null) + return new List(); + + if (target.IsGenericParameter) + return new List(); + + var resourceKeyPrefix = typeScanner.GetResourceKeyPrefix(target, keyPrefix); + + var buffer = new List(); + buffer.AddRange(typeScanner.GetClassLevelResources(target, resourceKeyPrefix)); + + buffer.AddRange(typeScanner.GetResources(target, resourceKeyPrefix)); + + var result = buffer.Where(t => t.IsSimpleType || t.Info == null || t.Info.GetCustomAttribute() != null) + .ToList(); + + foreach (var property in buffer.Where(t => !t.IsSimpleType)) + { + if(!property.IsSimpleType) + result.AddRange(ScanResources(property.DeclaringType, property.Key, typeScanner)); + } + + var duplicateKeys = result.GroupBy(r => r.Key).Where(g => g.Count() > 1).ToList(); + if(duplicateKeys.Any()) + throw new DuplicateResourceKeyException($"Duplicate keys: [{string.Join(", ", duplicateKeys.Select(g => g.Key))}]"); + + // add scanned resources to the cache + DiscoveredResourceCache.TryAdd(target.FullName, result.Where(r => !string.IsNullOrEmpty(r.PropertyName)).Select(r => r.PropertyName).ToList()); + + return result; + } internal static List> GetTypes(params Func[] filters) { @@ -62,126 +105,122 @@ internal static IEnumerable GetTypesChildOf() return allTypes; } - internal static IEnumerable GetAllProperties(Type type, string keyPrefix = null, bool contextAwareScanning = true) - { - var resourceKeyPrefix = type.FullName; - var typeKeyPrefixSpecified = false; - var properties = new List(); - var modelAttribute = type.GetCustomAttribute(); - - if(contextAwareScanning) - { - // this is resource class scanning - try to fetch resource key prefix attribute if set there - var resourceAttribute = type.GetCustomAttribute(); - if(!string.IsNullOrEmpty(resourceAttribute?.KeyPrefix)) - { - resourceKeyPrefix = resourceAttribute.KeyPrefix; - typeKeyPrefixSpecified = true; - } - else - { - resourceKeyPrefix = string.IsNullOrEmpty(keyPrefix) ? type.FullName : keyPrefix; - } - } - else - { - // this is model scanning - try to fetch resource key prefix attribute if set there - if(!string.IsNullOrEmpty(modelAttribute?.KeyPrefix)) - { - resourceKeyPrefix = modelAttribute.KeyPrefix; - typeKeyPrefixSpecified = true; - } - - var resourceAttributesOnModelClass = type.GetCustomAttributes().ToList(); - if(resourceAttributesOnModelClass.Any()) - { - foreach (var resourceKeyAttribute in resourceAttributesOnModelClass) - { - properties.Add(new DiscoveredResource(null, - ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, resourceKeyAttribute.Key, separator: string.Empty), - null, - resourceKeyAttribute.Value, - type, - typeof(string), - true)); - } - } - } - - if(type.BaseType == typeof(Enum)) - { - properties.AddRange(type.GetMembers(BindingFlags.Public | BindingFlags.Static) - .Select(mi => new DiscoveredResource(mi, - ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, mi), - mi.Name, - mi.Name, - type, - Enum.GetUnderlyingType(type), - Enum.GetUnderlyingType(type).IsSimpleType())).ToList()); - } - else - { - var flags = BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Static; - if(modelAttribute != null && !modelAttribute.Inherited) - flags = flags | BindingFlags.DeclaredOnly; - - properties.AddRange(type.GetProperties(flags) - .Where(pi => pi.GetCustomAttribute() == null) - .Where(pi => modelAttribute == null || !modelAttribute.OnlyIncluded || pi.GetCustomAttribute() != null) - .SelectMany(pi => DiscoverResourcesFromProperty(pi, resourceKeyPrefix, typeKeyPrefixSpecified)).ToList()); - } - - var duplicateKeys = properties.GroupBy(r => r.Key).Where(g => g.Count() > 1).ToList(); - if(duplicateKeys.Any()) - { - throw new DuplicateResourceKeyException($"Duplicate keys: [{string.Join(", ", duplicateKeys.Select(g => g.Key))}]"); - } - - // first we can filter out all simple and/or complex included properties from the type as starting list of discovered resources - var results = new List(properties.Where(t => t.IsSimpleType || t.Info == null || t.Info.GetCustomAttribute() != null)); - - foreach (var property in properties) - { - var pi = property.Info; - var deeperModelType = property.ReturnType; - - if(!property.IsSimpleType) - { - // if this is not a simple type - we need to scan deeper only if deeper model has attribute annotation - if(contextAwareScanning || deeperModelType.GetCustomAttribute() != null) - { - results.AddRange(GetAllProperties(property.DeclaringType, property.Key, contextAwareScanning)); - } - } - - if(pi == null) - continue; - - var validationAttributes = pi.GetCustomAttributes(); - foreach (var validationAttribute in validationAttributes) - { - var resourceKey = ResourceKeyBuilder.BuildResourceKey(property.Key, validationAttribute); - var propertyName = resourceKey.Split('.').Last(); - results.Add(new DiscoveredResource(pi, - resourceKey, - string.IsNullOrEmpty(validationAttribute.ErrorMessage) ? propertyName : validationAttribute.ErrorMessage, - propertyName, - property.DeclaringType, - property.ReturnType, - property.ReturnType.IsSimpleType())); - } - } - - // add scanned resources to the cache - DiscoveredResourceCache.TryAdd(type.FullName, results.Where(r => !string.IsNullOrEmpty(r.PropertyName)).Select(r => r.PropertyName).ToList()); - - return results; - } - - internal static bool IsStringProperty(Type returnType) - { - return returnType == typeof(string); - } + //internal static IEnumerable GetAllProperties(Type type, string keyPrefix = null, bool contextAwareScanning = true) + //{ + // var resourceKeyPrefix = type.FullName; + // var typeKeyPrefixSpecified = false; + // var properties = new List(); + // var modelAttribute = type.GetCustomAttribute(); + + // //if(contextAwareScanning) + // //{ + // // this is resource class scanning - try to fetch resource key prefix attribute if set there + // //var resourceAttribute = type.GetCustomAttribute(); + // //if(!string.IsNullOrEmpty(resourceAttribute?.KeyPrefix)) + // //{ + // // resourceKeyPrefix = resourceAttribute.KeyPrefix; + // // typeKeyPrefixSpecified = true; + // //} + // //else + // //{ + // // resourceKeyPrefix = string.IsNullOrEmpty(keyPrefix) ? type.FullName : keyPrefix; + // //} + // //} + // //else + // //{ + // // this is model scanning - try to fetch resource key prefix attribute if set there + // //if(!string.IsNullOrEmpty(modelAttribute?.KeyPrefix)) + // //{ + // // resourceKeyPrefix = modelAttribute.KeyPrefix; + // // typeKeyPrefixSpecified = true; + // //} + + // //var resourceAttributesOnModelClass = type.GetCustomAttributes().ToList(); + // //if(resourceAttributesOnModelClass.Any()) + // //{ + // // foreach (var resourceKeyAttribute in resourceAttributesOnModelClass) + // // { + // // properties.Add(new DiscoveredResource(null, + // // ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, resourceKeyAttribute.Key, separator: string.Empty), + // // null, + // // resourceKeyAttribute.Value, + // // type, + // // typeof(string), + // // true)); + // // } + // //} + // //} + + // //if(type.BaseType == typeof(Enum)) + // //{ + // // properties.AddRange(type.GetMembers(BindingFlags.Public | BindingFlags.Static) + // // .Select(mi => new DiscoveredResource(mi, + // // ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, mi), + // // mi.Name, + // // mi.Name, + // // type, + // // Enum.GetUnderlyingType(type), + // // Enum.GetUnderlyingType(type).IsSimpleType())).ToList()); + // //} + // //else + // //{ + // // var flags = BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.Static; + // // if (modelAttribute != null && !modelAttribute.Inherited) + // // flags = flags | BindingFlags.DeclaredOnly; + + // // properties.AddRange(type.GetProperties(flags) + // // .Where(pi => pi.GetCustomAttribute() == null) + // // .Where(pi => modelAttribute == null || !modelAttribute.OnlyIncluded || pi.GetCustomAttribute() != null) + // // .SelectMany(pi => DiscoverResourcesFromProperty(pi, resourceKeyPrefix, typeKeyPrefixSpecified)).ToList()); + // //} + + // //var duplicateKeys = properties.GroupBy(r => r.Key).Where(g => g.Count() > 1).ToList(); + // //if(duplicateKeys.Any()) + // //{ + // // throw new DuplicateResourceKeyException($"Duplicate keys: [{string.Join(", ", duplicateKeys.Select(g => g.Key))}]"); + // //} + + // // first we can filter out all simple and/or complex included properties from the type as starting list of discovered resources + + // var results = new List(properties.Where(t => t.IsSimpleType || t.Info == null || t.Info.GetCustomAttribute() != null)); + + // //foreach (var property in properties) + // //{ + // // var pi = property.Info; + // // var deeperModelType = property.ReturnType; + + // // if(!property.IsSimpleType) + // // { + // // // if this is not a simple type - we need to scan deeper only if deeper model has attribute annotation + // // if(contextAwareScanning || deeperModelType.GetCustomAttribute() != null) + // // { + // // results.AddRange(GetAllProperties(property.DeclaringType, property.Key, contextAwareScanning)); + // // } + // // } + + // // if(pi == null) + // // continue; + + // // var validationAttributes = pi.GetCustomAttributes(); + // // foreach (var validationAttribute in validationAttributes) + // // { + // // var resourceKey = ResourceKeyBuilder.BuildResourceKey(property.Key, validationAttribute); + // // var propertyName = resourceKey.Split('.').Last(); + // // results.Add(new DiscoveredResource(pi, + // // resourceKey, + // // string.IsNullOrEmpty(validationAttribute.ErrorMessage) ? propertyName : validationAttribute.ErrorMessage, + // // propertyName, + // // property.DeclaringType, + // // property.ReturnType, + // // property.ReturnType.IsSimpleType())); + // // } + // //} + + // // add scanned resources to the cache + // //DiscoveredResourceCache.TryAdd(type.FullName, results.Where(r => !string.IsNullOrEmpty(r.PropertyName)).Select(r => r.PropertyName).ToList()); + + // return results; + //} private static IEnumerable GetAssemblies() { @@ -208,99 +247,5 @@ private static IEnumerable SelectTypes(Assembly assembly, Func return new List(); } } - - private static IEnumerable DiscoverResourcesFromProperty(PropertyInfo pi, string resourceKeyPrefix, bool typeKeyPrefixSpecified) - { - // check if there are [ResourceKey] attributes - var keyAttributes = pi.GetCustomAttributes().ToList(); - var translation = GetResourceValue(pi); - - if(!keyAttributes.Any()) - { - yield return new DiscoveredResource(pi, - ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, pi), - translation, - pi.Name, - pi.PropertyType, - pi.GetMethod.ReturnType, - pi.GetMethod.ReturnType.IsSimpleType()); - - // try to fetch also [Display()] attribute to generate new "...-Description" resource => usually used for help text labels - var displayAttribute = pi.GetCustomAttribute(); - if(!string.IsNullOrEmpty(displayAttribute?.Description)) - { - yield return new DiscoveredResource(pi, - $"{ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, pi)}-Description", - $"{pi.Name}-Description", - displayAttribute.Description, - pi.PropertyType, - pi.GetMethod.ReturnType, - pi.GetMethod.ReturnType.IsSimpleType()); - } - } - - foreach (var resourceKeyAttribute in keyAttributes) - { - yield return new DiscoveredResource(pi, - ResourceKeyBuilder.BuildResourceKey(typeKeyPrefixSpecified ? resourceKeyPrefix : null, - resourceKeyAttribute.Key, - separator: string.Empty), - string.IsNullOrEmpty(resourceKeyAttribute.Value) ? translation : resourceKeyAttribute.Value, - null, - pi.PropertyType, - pi.GetMethod.ReturnType, - true); - } - } - - private static string GetResourceValue(PropertyInfo pi) - { - var result = pi.Name; - - // try to extract resource value - var methodInfo = pi.GetGetMethod(); - if(IsStringProperty(methodInfo.ReturnType)) - { - try - { - if(methodInfo.IsStatic) - { - result = methodInfo.Invoke(null, null) as string; - } - else - { - if(pi.DeclaringType != null) - { - var targetInstance = Activator.CreateInstance(pi.DeclaringType); - var propertyReturnValue = methodInfo.Invoke(targetInstance, null) as string; - if(propertyReturnValue != null) - { - result = propertyReturnValue; - } - } - } - } - catch - { - // if we fail to retrieve value for the resource - fair enough - } - } - - var attributes = pi.GetCustomAttributes(true); - var displayAttribute = attributes.OfType().FirstOrDefault(); - - if(!string.IsNullOrEmpty(displayAttribute?.GetName())) - { - result = displayAttribute.GetName(); - } - - var displayNameAttribute = attributes.OfType().FirstOrDefault(); - if(!string.IsNullOrEmpty(displayNameAttribute?.DisplayName)) - { - result = displayNameAttribute.DisplayName; - } - - return result; - } } }