using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Services; using StructureHelperLogics.NdmCalculations.Cracking; using StructureHelperLogics.NdmCalculations.Primitives; using StructureHelperLogics.NdmCalculations.Primitives.Logics; namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics { /// /// Creates deep copy of crack calculator /// public class CrackCalculatorUpdateCloningStrategy : IUpdateStrategy { private ICloningStrategy cloningStrategy; private IUpdateStrategy forcesUpdateStrategy; private IUpdateStrategy primitivesUpdateStrategy; public CrackCalculatorUpdateCloningStrategy( ICloningStrategy cloningStrategy, IUpdateStrategy forcesUpdateStrategy, IUpdateStrategy primitivesUpdateStrategy) { this.cloningStrategy = cloningStrategy; this.forcesUpdateStrategy = forcesUpdateStrategy; this.primitivesUpdateStrategy = primitivesUpdateStrategy; } public CrackCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy) : this ( cloningStrategy, new HasForceActionUpdateCloningStrategy(cloningStrategy), new HasPrimitivesUpdateCloningStrategy(cloningStrategy)) { } public void Update(ICrackCalculator targetObject, ICrackCalculator sourceObject) { CheckObject.ThrowIfNull(cloningStrategy); CheckObject.ThrowIfNull(sourceObject); CheckObject.ThrowIfNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } var sourceData = sourceObject.InputData; var targetData = targetObject.InputData; primitivesUpdateStrategy.Update(targetData, sourceData); forcesUpdateStrategy.Update(targetData, sourceData); } } }