Fix repository clone strategy

This commit is contained in:
Evgeny Redikultsev
2025-06-16 21:46:33 +05:00
parent 87996cf37b
commit 22bd35da98
14 changed files with 266 additions and 18 deletions

View File

@@ -0,0 +1,33 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
namespace StructureHelperLogics.Models.BeamShears
{
internal class BeamShearCalculatorCloneStrategy : ICloneStrategy<IBeamShearCalculator>
{
private readonly ICloningStrategy cloningStrategy;
private IUpdateStrategy<IBeamShearCalculator> updateStrategy;
private ICloneStrategy<IBeamShearCalculatorInputData> inputDataCloningStrategy;
public BeamShearCalculatorCloneStrategy(ICloningStrategy cloningStrategy)
{
this.cloningStrategy = cloningStrategy;
}
public IBeamShearCalculator GetClone(IBeamShearCalculator sourceObject)
{
CheckObject.IsNull(cloningStrategy);
CheckObject.IsNull(sourceObject);
InitializeStrategies();
BeamShearCalculator calculator = new(Guid.NewGuid());
updateStrategy.Update(calculator, sourceObject);
calculator.InputData = inputDataCloningStrategy.GetClone(sourceObject.InputData);
return calculator;
}
private void InitializeStrategies()
{
updateStrategy ??= new BeamShearCalculatorUpdateStrategy();
inputDataCloningStrategy ??= new BeamShearCalculatorInputDataCloneStrategy(cloningStrategy);
}
}
}

View File

@@ -0,0 +1,41 @@
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
{
internal class BeamShearCalculatorInputDataCloneStrategy : ICloneStrategy<IBeamShearCalculatorInputData>
{
private readonly ICloningStrategy cloningStrategy;
private IUpdateStrategy<IHasBeamShearActions> actionUpdateStrategy;
private IUpdateStrategy<IHasBeamShearSections> sectionUpdateStrategy;
private IUpdateStrategy<IHasStirrups> stirrupUpdateStrategy;
public BeamShearCalculatorInputDataCloneStrategy(ICloningStrategy cloningStrategy)
{
this.cloningStrategy = cloningStrategy;
}
public IBeamShearCalculatorInputData GetClone(IBeamShearCalculatorInputData sourceObject)
{
CheckObject.IsNull(cloningStrategy);
CheckObject.IsNull(sourceObject);
InitializeStrategies();
BeamShearCalculatorInputData inputData = new(Guid.NewGuid());
actionUpdateStrategy.Update(inputData, sourceObject);
sectionUpdateStrategy.Update(inputData, sourceObject);
stirrupUpdateStrategy.Update(inputData, sourceObject);
return inputData;
}
private void InitializeStrategies()
{
actionUpdateStrategy ??= new HasActionsUpdateCloneStrategy(cloningStrategy);
sectionUpdateStrategy ??= new HasSectionsUpdateCloneStrategy(cloningStrategy);
stirrupUpdateStrategy ??= new HasStirrupsUpdateCloneStrategy(cloningStrategy);
}
}
}

View File

@@ -1,4 +1,5 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Calculators;
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
@@ -11,6 +12,7 @@ namespace StructureHelperLogics.Models.BeamShears
private IUpdateStrategy<IHasBeamShearActions> actionUpdateStrategy;
private IUpdateStrategy<IHasBeamShearSections> sectionUpdateStrategy;
private IUpdateStrategy<IHasStirrups> stirrupUpdateStrategy;
private IUpdateStrategy<IHasCalculators> calculatorUpdateStrategy;
private BeamShearRepository targetRepository;
public BeamShearRepositoryCloneStrategy(ICloningStrategy cloningStrategy)
@@ -24,6 +26,7 @@ namespace StructureHelperLogics.Models.BeamShears
actionUpdateStrategy.Update(targetRepository, sourceObject);
sectionUpdateStrategy.Update(targetRepository, sourceObject);
stirrupUpdateStrategy.Update(targetRepository, sourceObject);
calculatorUpdateStrategy.Update(targetRepository, sourceObject);
return targetRepository;
}
@@ -32,6 +35,7 @@ namespace StructureHelperLogics.Models.BeamShears
actionUpdateStrategy ??= new HasActionsUpdateCloneStrategy(cloningStrategy);
sectionUpdateStrategy ??= new HasSectionsUpdateCloneStrategy(cloningStrategy);
stirrupUpdateStrategy ??= new HasStirrupsUpdateCloneStrategy(cloningStrategy);
calculatorUpdateStrategy ??= new HasCalculatorsUpdateCloneStrategy(cloningStrategy);
}
}
}

View File

@@ -0,0 +1,41 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Calculators;
using StructureHelperCommon.Services;
namespace StructureHelperLogics.Models.BeamShears
{
internal class HasCalculatorsUpdateCloneStrategy : IUpdateStrategy<IHasCalculators>
{
private readonly ICloningStrategy cloningStrategy;
private ICloneStrategy<IBeamShearCalculator> beamShearCalculatorCloneStrategy;
public HasCalculatorsUpdateCloneStrategy(ICloningStrategy cloningStrategy)
{
this.cloningStrategy = cloningStrategy;
}
public void Update(IHasCalculators targetObject, IHasCalculators sourceObject)
{
CheckObject.IsNull(cloningStrategy);
CheckObject.IsNull(sourceObject);
CheckObject.IsNull(targetObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
targetObject.Calculators.Clear();
foreach (var calculator in sourceObject.Calculators)
{
ICalculator newCalculator;
if (calculator is IBeamShearCalculator shearCalculator)
{
beamShearCalculatorCloneStrategy ??= new BeamShearCalculatorCloneStrategy(cloningStrategy);
newCalculator = beamShearCalculatorCloneStrategy.GetClone(shearCalculator);
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(calculator));
}
targetObject.Calculators.Add(newCalculator);
}
}
}
}

View File

@@ -44,7 +44,7 @@ namespace StructureHelperLogics.Models.BeamShears.Logics
}
else
{
TraceLogger?.AddMessage("Longitudinal force N={LongitudinalForce}(N) is positive (tension)", TraceLogStatuses.Service);
TraceLogger?.AddMessage($"Longitudinal force N={LongitudinalForce}(N) is positive (tension)", TraceLogStatuses.Service);
return GetPosForceResult();
}
}