using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models.Forces.Logics; using StructureHelperCommon.Models.Loggers; namespace DataAccess.DTOs { public class DesignForceTupleFromDTOConvertStrategy : ConvertStrategy { private IUpdateStrategy updateStrategy; private IConvertStrategy forceTupleConvertStrategy; public DesignForceTupleFromDTOConvertStrategy( IUpdateStrategy updateStrategy, IConvertStrategy forceTupleConvertStrategy) { this.updateStrategy = updateStrategy; this.forceTupleConvertStrategy = forceTupleConvertStrategy; } public DesignForceTupleFromDTOConvertStrategy() : this( new DesignForceTupleUpdateStrategy(), new ForceTupleFromDTOConvertStrategy()) { } public override DesignForceTuple GetNewItem(DesignForceTupleDTO source) { TraceLogger?.AddMessage("Design force tuple converting has been started"); try { DesignForceTuple newItem = GetNewItemBySource(source); TraceLogger?.AddMessage("Design force tuple converting has been finished"); return newItem; } catch (Exception ex) { TraceErrorByEntity(this, ex.Message); throw; } } private DesignForceTuple GetNewItemBySource(DesignForceTupleDTO source) { DesignForceTuple newItem = new(source.Id); updateStrategy.Update(newItem, source); forceTupleConvertStrategy.ReferenceDictionary = ReferenceDictionary; forceTupleConvertStrategy.TraceLogger = TraceLogger; var convertLogic = new DictionaryConvertStrategy(this, forceTupleConvertStrategy); newItem.ForceTuple = convertLogic.Convert((ForceTupleDTO)source.ForceTuple); return newItem; } } }