using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Services; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StructureHelperLogics.Models.BeamShears { internal class BeamShearCalculatorInputDataCloneStrategy : ICloneStrategy { private readonly ICloningStrategy cloningStrategy; private IUpdateStrategy actionUpdateStrategy; private IUpdateStrategy sectionUpdateStrategy; private IUpdateStrategy stirrupUpdateStrategy; public BeamShearCalculatorInputDataCloneStrategy(ICloningStrategy cloningStrategy) { this.cloningStrategy = cloningStrategy; } public IBeamShearCalculatorInputData GetClone(IBeamShearCalculatorInputData sourceObject) { CheckObject.IsNull(cloningStrategy); CheckObject.IsNull(sourceObject); InitializeStrategies(); BeamShearCalculatorInputData inputData = new(Guid.NewGuid()); actionUpdateStrategy.Update(inputData, sourceObject); sectionUpdateStrategy.Update(inputData, sourceObject); stirrupUpdateStrategy.Update(inputData, sourceObject); return inputData; } private void InitializeStrategies() { actionUpdateStrategy ??= new HasActionsUpdateCloneStrategy(cloningStrategy); sectionUpdateStrategy ??= new HasSectionsUpdateCloneStrategy(cloningStrategy); stirrupUpdateStrategy ??= new HasStirrupsUpdateCloneStrategy(cloningStrategy); } } }