using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Services; using StructureHelperLogics.NdmCalculations.Primitives; using StructureHelperLogics.NdmCalculations.Primitives.Logics; namespace StructureHelperLogics.NdmCalculations.Analyses.ValueDiagrams { public class ValueDiagramCalculatorUpdateCloningStrategy : IUpdateStrategy { private readonly ICloningStrategy cloningStrategy; private readonly IUpdateStrategy forcesUpdateStrategy; private readonly IUpdateStrategy primitivesUpdateStrategy; public ValueDiagramCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy) : this( cloningStrategy, new HasForceActionUpdateCloningStrategy(cloningStrategy), new HasPrimitivesUpdateCloningStrategy(cloningStrategy)) { this.cloningStrategy = cloningStrategy; } public ValueDiagramCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy, IUpdateStrategy forcesUpdateStrategy, IUpdateStrategy primitivesUpdateStrategy) { this.cloningStrategy = cloningStrategy; this.forcesUpdateStrategy = forcesUpdateStrategy; this.primitivesUpdateStrategy = primitivesUpdateStrategy; } public void Update(IValueDiagramCalculator targetObject, IValueDiagramCalculator sourceObject) { CheckObject.IsNull(cloningStrategy); CheckObject.IsNull(sourceObject); CheckObject.IsNull(targetObject); if (ReferenceEquals(targetObject, sourceObject)) { return; } var sourceData = sourceObject.InputData; var targetData = targetObject.InputData; primitivesUpdateStrategy.Update(targetData, sourceData); forcesUpdateStrategy.Update(targetData, sourceData); } } }