From 720b5d7e2f25bc9cc6fa2afd88a29cbff0f73cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 29 Apr 2020 13:19:25 +0300 Subject: [PATCH] Add TemplateDefinitionIsInlineLocalized. --- .../Abp/TextTemplating/TemplateDefinition.cs | 2 ++ .../TemplateDefinitionContext.cs | 14 ++++----- .../TemplateDefinitionExtensions.cs | 19 +++++++----- .../TemplateDefinitionManager.cs | 30 +++++++++++++++++++ .../LocalizedTemplateContentReaderFactory.cs | 6 +--- .../TextTemplating/TemplateDefinitionTests.cs | 9 ++++-- 6 files changed, 59 insertions(+), 21 deletions(-) diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinition.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinition.cs index d165eb4d31..f3b31a769d 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinition.cs +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinition.cs @@ -17,6 +17,8 @@ namespace Volo.Abp.TextTemplating [CanBeNull] public Type LocalizationResource { get; set; } + public bool IsInlineLocalized { get; internal set; } + [CanBeNull] public string DefaultCultureName { get; } diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs index d0911f21ac..04c3876531 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionContext.cs @@ -5,26 +5,26 @@ namespace Volo.Abp.TextTemplating { public class TemplateDefinitionContext : ITemplateDefinitionContext { - protected Dictionary TextTemplates { get; } + protected Dictionary Templates { get; } - public TemplateDefinitionContext(Dictionary textTemplates) + public TemplateDefinitionContext(Dictionary templates) { - TextTemplates = textTemplates; + Templates = templates; } public IReadOnlyList GetAll(string name) { - return TextTemplates.Values.ToImmutableList(); + return Templates.Values.ToImmutableList(); } public virtual TemplateDefinition GetOrNull(string name) { - return TextTemplates.GetOrDefault(name); + return Templates.GetOrDefault(name); } public virtual IReadOnlyList GetAll() { - return TextTemplates.Values.ToImmutableList(); + return Templates.Values.ToImmutableList(); } public virtual void Add(params TemplateDefinition[] definitions) @@ -36,7 +36,7 @@ namespace Volo.Abp.TextTemplating foreach (var definition in definitions) { - TextTemplates[definition.Name] = definition; + Templates[definition.Name] = definition; } } } diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs index ef4a0ac9a3..0d17e9969c 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionExtensions.cs @@ -1,16 +1,11 @@ -using JetBrains.Annotations; +using System.Collections.Generic; +using JetBrains.Annotations; using Volo.Abp.TextTemplating.VirtualFiles; namespace Volo.Abp.TextTemplating { public static class TemplateDefinitionExtensions { - /// - /// - /// - /// - /// - /// public static TemplateDefinition WithVirtualFilePath( [NotNull] this TemplateDefinition templateDefinition, [NotNull] string virtualPath) @@ -22,5 +17,15 @@ namespace Volo.Abp.TextTemplating virtualPath ); } + + public static string GetVirtualFilePathOrNull( + [NotNull] this TemplateDefinition templateDefinition) + { + Check.NotNull(templateDefinition, nameof(templateDefinition)); + + return templateDefinition + .Properties + .GetOrDefault(VirtualFileTemplateContentContributor.VirtualPathPropertyName) as string; + } } } diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs index 28909330fe..11081f6dff 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateDefinitionManager.cs @@ -5,6 +5,7 @@ using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; +using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.TextTemplating { @@ -78,9 +79,38 @@ namespace Volo.Abp.TextTemplating { provider.PostDefine(context); } + + SetIsInlineLocalized( + templates, + scope.ServiceProvider + ); } return templates; } + + protected virtual void SetIsInlineLocalized( + Dictionary templates, + IServiceProvider serviceProvider) + { + var virtualFileProvider = serviceProvider.GetRequiredService(); + + foreach (var templateDefinition in templates.Values) + { + var virtualPath = templateDefinition.GetVirtualFilePathOrNull(); + if (virtualPath == null) + { + continue; + } + + var fileInfo = virtualFileProvider.GetFileInfo(virtualPath); + if (!fileInfo.Exists) + { + throw new AbpException("Could not find a file/folder at the location: " + virtualPath); + } + + templateDefinition.IsInlineLocalized = !fileInfo.IsDirectory; + } + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs index f4f8384777..b30e5771f4 100644 --- a/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs +++ b/framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -55,10 +54,7 @@ namespace Volo.Abp.TextTemplating.VirtualFiles protected virtual async Task CreateInternalAsync( TemplateDefinition templateDefinition) { - var virtualPath = templateDefinition - .Properties - .GetOrDefault(VirtualFileTemplateContentContributor.VirtualPathPropertyName) as string; - + var virtualPath = templateDefinition.GetVirtualFilePathOrNull(); if (virtualPath == null) { return NullLocalizedTemplateContentReader.Instance; diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TemplateDefinitionTests.cs b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TemplateDefinitionTests.cs index b711860089..51c78cc13e 100644 --- a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TemplateDefinitionTests.cs +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/TemplateDefinitionTests.cs @@ -15,8 +15,13 @@ namespace Volo.Abp.TextTemplating [Fact] public void Should_Retrieve_Template_Definition_By_Name() { - var definition = _templateDefinitionManager.Get(TestTemplates.WelcomeEmail); - definition.Name.ShouldBe(TestTemplates.WelcomeEmail); + var welcomeEmailTemplate = _templateDefinitionManager.Get(TestTemplates.WelcomeEmail); + welcomeEmailTemplate.Name.ShouldBe(TestTemplates.WelcomeEmail); + welcomeEmailTemplate.IsInlineLocalized.ShouldBeFalse(); + + var forgotPasswordEmailTemplate = _templateDefinitionManager.Get(TestTemplates.ForgotPasswordEmail); + forgotPasswordEmailTemplate.Name.ShouldBe(TestTemplates.ForgotPasswordEmail); + forgotPasswordEmailTemplate.IsInlineLocalized.ShouldBeTrue(); } [Fact]