using StructureHelperCommon.Infrastructures.Exceptions; 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.Logics { public class StirrupUpdateStrategy : IUpdateStrategy { private IUpdateStrategy densityUpdateStrategy; private IUpdateStrategy uniformUpdateStrategy; public void Update(IStirrup targetObject, IStirrup sourceObject) { CheckObject.IsNull(targetObject); CheckObject.IsNull(sourceObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } if (sourceObject is IStirrupByDensity density) { UpdateByDensity(targetObject, density); } else if (sourceObject is IStirrupByUniformRebar stirrupByUniformRebar) { UpdateByUniformRebar(targetObject, stirrupByUniformRebar); } else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(sourceObject)); } } private void UpdateByUniformRebar(IStirrup targetObject, IStirrupByUniformRebar stirrupByUniformRebar) { uniformUpdateStrategy ??= new StirrupByUniformRebarUpdateStrategy(); if (targetObject is IStirrupByUniformRebar targetUniformRebar) { uniformUpdateStrategy.Update(targetUniformRebar, stirrupByUniformRebar); } else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(targetObject)); } } private void UpdateByDensity(IStirrup targetObject, IStirrupByDensity density) { densityUpdateStrategy ??= new StirrupByDensityUpdateStrategy(); if (targetObject is IStirrupByDensity targetDensity) { densityUpdateStrategy.Update(targetDensity, density); } else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(targetObject)); } } } }