using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Parameters; using StructureHelperCommon.Services; using StructureHelperLogics.NdmCalculations.Primitives; namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve { /// /// Creates deep copy of limit curves calculator /// public class LimitCurvesCalculatorUpdateCloningStrategy : IUpdateStrategy { private ICloningStrategy cloningStrategy; private IUpdateStrategy limitCurvesInputDataUpdateStrategy; public LimitCurvesCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy) : this ( cloningStrategy, new LimitCurvesCalculatorInputDataUpdateStrategy()) { this.cloningStrategy = cloningStrategy; } public LimitCurvesCalculatorUpdateCloningStrategy( ICloningStrategy cloningStrategy, IUpdateStrategy limitCurvesInputDataUpdateStrategy) { this.cloningStrategy = cloningStrategy; this.limitCurvesInputDataUpdateStrategy = limitCurvesInputDataUpdateStrategy; } public void Update(ILimitCurvesCalculator targetObject, ILimitCurvesCalculator sourceObject) { CheckObject.IsNull(cloningStrategy); CheckObject.IsNull(sourceObject); CheckObject.IsNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } var targetData = targetObject.InputData; limitCurvesInputDataUpdateStrategy.Update(targetData, sourceObject.InputData); foreach (var series in targetData.PrimitiveSeries) { List collection = UpdatePrimitivesCollection(series); series.Collection.AddRange(collection); } } private List UpdatePrimitivesCollection(NamedCollection series) { List collection = new(); foreach (var item in series.Collection) { var newItem = cloningStrategy.Clone(item); collection.Add(newItem); } series.Collection.Clear(); return collection; } } }