using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Materials; using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Models.VisualProperties; using StructureHelperLogics.Models.BeamShears; using StructureHelperLogics.Models.Materials; namespace DataAccess.DTOs { public class BeamShearSectionToDTOConvertStrategy : ConvertStrategy { private IUpdateStrategy updateStrategy; private IConvertStrategy shapeConvertStrategy; private IConvertStrategy concreteConvertStrategy; private ReinforcementLibMaterialToDTOConvertStrategy reinforcementConvertStrategy; private IUpdateStrategy safetyFactorUpdateStrategy; private IUpdateStrategy visualUpdateStrategy; public BeamShearSectionToDTOConvertStrategy(Dictionary<(Guid id, Type type), ISaveable> referenceDictionary, IShiftTraceLogger traceLogger) : base(referenceDictionary, traceLogger) { } public override BeamShearSectionDTO GetNewItem(IBeamShearSection source) { try { GetNewSection(source); return NewItem; } catch (Exception ex) { TraceErrorByEntity(this, ex.Message); throw; } } private void GetNewSection(IBeamShearSection source) { TraceLogger?.AddMessage($"Beam shear section converting Id = {source.Id} has been started", TraceLogStatuses.Debug); InitializeStrategies(); NewItem = new(source.Id); updateStrategy.Update(NewItem, source); NewItem.Shape = shapeConvertStrategy.Convert(source.Shape); NewItem.ConcreteMaterial = concreteConvertStrategy.Convert(source.ConcreteMaterial); safetyFactorUpdateStrategy.Update(NewItem.ConcreteMaterial, source.ConcreteMaterial); NewItem.ReinforcementMaterial = reinforcementConvertStrategy.Convert(source.ReinforcementMaterial); safetyFactorUpdateStrategy.Update(NewItem.ReinforcementMaterial, source.ReinforcementMaterial); TraceLogger?.AddMessage($"Beam shear section converting Id = {NewItem.Id} has been finished succesfully", TraceLogStatuses.Debug); visualUpdateStrategy.Update(NewItem, source); } private void InitializeStrategies() { updateStrategy ??= new BeamShearSectionUpdateStrategy() { UpdateChildren = false}; shapeConvertStrategy = new DictionaryConvertStrategy (this, new ShapeToDTOConvertStrategy(this)); concreteConvertStrategy = new ConcreteLibMaterialToDTOConvertStrategy() { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger}; reinforcementConvertStrategy = new ReinforcementLibMaterialToDTOConvertStrategy() { ReferenceDictionary = ReferenceDictionary, TraceLogger = TraceLogger }; safetyFactorUpdateStrategy = new HelperMaterialDTOSafetyFactorUpdateStrategy(new MaterialSafetyFactorToDTOLogic()); visualUpdateStrategy = new HasVisualPropertyToDTOUpdateStrategy(ReferenceDictionary, TraceLogger); } } }