using DataAccess.DTOs.Converters; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperLogics.NdmCalculations.Analyses.Curvatures; using StructureHelperLogics.NdmCalculations.Primitives; namespace DataAccess.DTOs { public class CurvatureCalculatorInputDataToDTOConvertStrategy : ConvertStrategy { private IHasPrimitivesProcessLogic primitivesProcessLogic; private IHasForceActionsProcessLogic actionsProcessLogic; private IUpdateStrategy updateStrategy; private IConvertStrategy deflectionConvertStrategy; private IHasPrimitivesProcessLogic PrimitivesProcessLogic => primitivesProcessLogic ??= new HasPrimitivesProcessLogic(ConvertDirection.ToDTO) { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger}; private IHasForceActionsProcessLogic ActionsProcessLogic => actionsProcessLogic ??= new HasForceActionsProcessLogic(ConvertDirection.ToDTO) { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger}; private IUpdateStrategy UpdateStrategy => updateStrategy ??= new CurvatureCalculatorInputDataUpdateStrategy() { UpdateChildren = false}; private IConvertStrategy DeflectionConvertStrategy => deflectionConvertStrategy ??= new DeflectionFactorToDTOConvertStrategy(this); public CurvatureCalculatorInputDataToDTOConvertStrategy(IBaseConvertStrategy baseConvertStrategy) : base(baseConvertStrategy) { } public override CurvatureCalculatorInputDataDTO GetNewItem(ICurvatureCalculatorInputData source) { NewItem = new(source.Id); UpdateStrategy.Update(NewItem, source); NewItem.DeflectionFactor = DeflectionConvertStrategy.Convert(source.DeflectionFactor); ProcessPrimitives(source); ProcessActions(source); return NewItem; } private void ProcessPrimitives(IHasPrimitives source) { PrimitivesProcessLogic.Source = source; PrimitivesProcessLogic.Target = NewItem; PrimitivesProcessLogic.Process(); } private void ProcessActions(IHasForceActions source) { ActionsProcessLogic.Source = source; ActionsProcessLogic.Target = NewItem; ActionsProcessLogic.Process(); } } }