using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Loggers; namespace DataAccess.DTOs { /// public class ColumnedFilePropertyToDTOConvertStrategy : ConvertStrategy { private IUpdateStrategy? updateStrategy; private IConvertStrategy? columnConvertStrategy; public override ColumnedFilePropertyDTO GetNewItem(IColumnedFileProperty source) { TraceLogger?.AddMessage($"Columned file property Id = {source.Id}, Path = {source.FilePath} converting has been started"); InitializeStrategies(); try { ColumnedFilePropertyDTO newItem = GetNewItemBySource(source); TraceLogger?.AddMessage($"Columned file property Id={newItem.Id}, Path = {newItem.FilePath} converting has been finished successfully"); return newItem; } catch (Exception ex) { TraceLogger?.AddMessage($"Logic: {LoggerStrings.LogicType(this)} made error: {ex.Message}", TraceLogStatuses.Error); throw; } } private ColumnedFilePropertyDTO GetNewItemBySource(IColumnedFileProperty source) { ColumnedFilePropertyDTO newItem = new(source.Id); updateStrategy?.Update(newItem, source); newItem.ColumnProperties.Clear(); foreach (var item in source.ColumnProperties) { ColumnFilePropertyDTO columnFilePropertyDTO = columnConvertStrategy.Convert(item); newItem.ColumnProperties.Add(columnFilePropertyDTO); } return newItem; } private void InitializeStrategies() { updateStrategy ??= new ColumnedFilePropertyUpdateStrategy(); columnConvertStrategy ??= new ColumnFilePropertyToDTOConvertStrategy() { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger}; } } }