using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
using StructureHelperLogics.NdmCalculations.Primitives;
using StructureHelperLogics.NdmCalculations.Primitives.Logics;
namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics
{
///
/// Creates deep copy of force calculator
///
public class ForceCalculatorUpdateCloningStrategy : IUpdateStrategy
{
private readonly ICloningStrategy cloningStrategy;
private readonly IUpdateStrategy forcesUpdateStrategy;
private readonly IUpdateStrategy primitivesUpdateStrategy;
public ForceCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy,
IUpdateStrategy forcesUpdateStrategy,
IUpdateStrategy primitivesUpdateStrategy)
{
this.cloningStrategy = cloningStrategy;
this.forcesUpdateStrategy = forcesUpdateStrategy;
this.primitivesUpdateStrategy = primitivesUpdateStrategy;
}
public ForceCalculatorUpdateCloningStrategy(ICloningStrategy cloningStrategy) : this (
cloningStrategy,
new HasForceActionUpdateCloningStrategy(cloningStrategy),
new HasPrimitivesUpdateCloningStrategy(cloningStrategy))
{
}
public void Update(IForceCalculator targetObject, IForceCalculator 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);
}
}
}