From dc3f50a3cc0b1b92deafe094c0d30e07cb886dc2 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 26 Sep 2020 14:43:06 -0500 Subject: [PATCH] =?UTF-8?q?feat(archival):=20=E2=9C=A8=20use=20PlainText?= =?UTF-8?q?=20strategy=20for=20sources=20with=20no=20extension?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...> IStreamToPlainTextConversionStrategy.cs} | 2 +- .../{Txt.cs => PlainText.cs} | 2 +- ...eamToPlainTextConversionStrategyFactory.cs | 23 +++++++++++++++++++ .../StreamToTxtConversionStrategyFactory.cs | 22 ------------------ .../Persistence/IFileRepository.cs | 4 ++-- 5 files changed, 27 insertions(+), 26 deletions(-) rename services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/{IStreamToTxtConversionStrategy.cs => IStreamToPlainTextConversionStrategy.cs} (79%) rename services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/{Txt.cs => PlainText.cs} (85%) create mode 100644 services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/StreamToPlainTextConversionStrategyFactory.cs delete mode 100644 services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/StreamToTxtConversionStrategyFactory.cs diff --git a/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/IStreamToTxtConversionStrategy.cs b/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/IStreamToPlainTextConversionStrategy.cs similarity index 79% rename from services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/IStreamToTxtConversionStrategy.cs rename to services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/IStreamToPlainTextConversionStrategy.cs index 78b0be1a2..3384ace74 100644 --- a/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/IStreamToTxtConversionStrategy.cs +++ b/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/IStreamToPlainTextConversionStrategy.cs @@ -3,7 +3,7 @@ namespace FilterLists.Archival.Infrastructure.Persistence.FileWriteStrategies { - internal interface IStreamToTxtConversionStrategy + internal interface IStreamToPlainTextConversionStrategy { Stream Convert(IFileSegment fileSegment, CancellationToken cancellationToken); } diff --git a/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/Txt.cs b/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/PlainText.cs similarity index 85% rename from services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/Txt.cs rename to services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/PlainText.cs index 63ffeddf0..994358a5f 100644 --- a/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/Txt.cs +++ b/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/PlainText.cs @@ -4,7 +4,7 @@ namespace FilterLists.Archival.Infrastructure.Persistence.FileWriteStrategies { - public class Txt : IStreamToTxtConversionStrategy + public class PlainText : IStreamToPlainTextConversionStrategy { public Stream Convert(IFileSegment fileSegment, CancellationToken cancellationToken) { diff --git a/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/StreamToPlainTextConversionStrategyFactory.cs b/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/StreamToPlainTextConversionStrategyFactory.cs new file mode 100644 index 000000000..0437abdc0 --- /dev/null +++ b/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/StreamToPlainTextConversionStrategyFactory.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; + +namespace FilterLists.Archival.Infrastructure.Persistence.FileWriteStrategies +{ + internal static class StreamToPlainTextConversionStrategyFactory + { + private static readonly IDictionary> Strategies = + new Dictionary> + { + {string.Empty, () => new PlainText()}, + {".txt", () => new PlainText()} + }; + + public static TStrategy? GetStrategy(this IFileSegment segment) + where TStrategy : class, IStreamToPlainTextConversionStrategy + { + return Strategies.TryGetValue(segment.SourceExtension, out var strategy) + ? (TStrategy?)strategy() + : default; + } + } +} diff --git a/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/StreamToTxtConversionStrategyFactory.cs b/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/StreamToTxtConversionStrategyFactory.cs deleted file mode 100644 index 8c8f5e36e..000000000 --- a/services/Archival/FilterLists.Archival.Infrastructure/Persistence/FileWriteStrategies/StreamToTxtConversionStrategyFactory.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Linq; -using System.Reflection; - -namespace FilterLists.Archival.Infrastructure.Persistence.FileWriteStrategies -{ - internal static class StreamToTxtConversionStrategyFactory - { - public static TStreamToTxtConversionStrategy? GetStrategy( - this IFileSegment segment) where TStreamToTxtConversionStrategy : class, IStreamToTxtConversionStrategy - { - var strategyType = Assembly.GetExecutingAssembly() - .GetTypes() - .FirstOrDefault(t => - typeof(TStreamToTxtConversionStrategy).IsAssignableFrom(t) && - string.Equals(t.Name, segment.SourceExtension.TrimStart('.'), StringComparison.OrdinalIgnoreCase)); - return strategyType is default(Type) - ? default - : (TStreamToTxtConversionStrategy)Activator.CreateInstance(strategyType); - } - } -} diff --git a/services/Archival/FilterLists.Archival.Infrastructure/Persistence/IFileRepository.cs b/services/Archival/FilterLists.Archival.Infrastructure/Persistence/IFileRepository.cs index 68b6dd40b..809ad7cda 100644 --- a/services/Archival/FilterLists.Archival.Infrastructure/Persistence/IFileRepository.cs +++ b/services/Archival/FilterLists.Archival.Infrastructure/Persistence/IFileRepository.cs @@ -40,8 +40,8 @@ public async Task AddFileAsync(IFile file, CancellationToken cancellationToken) var textStreams = new List(); await foreach (var segment in file.Segments.WithCancellation(cancellationToken)) { - var strategy = segment.GetStrategy(); - if (strategy is default(IStreamToTxtConversionStrategy)) + var strategy = segment.GetStrategy(); + if (strategy is default(IStreamToPlainTextConversionStrategy)) { _logger.LogWarning( "No stream to txt conversion strategy found for extension {Extension} for target {Target}. Skipping file",