Fix repository clone strategy
This commit is contained in:
@@ -38,11 +38,10 @@ namespace StructureHelperLogics.Models.BeamShears
|
||||
{
|
||||
TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Service);
|
||||
PrepareNewResult();
|
||||
//PrepareInputData();
|
||||
InitializeStrategies();
|
||||
if (CheckInputData() == false) { return;}
|
||||
try
|
||||
{
|
||||
InitializeStrategies();
|
||||
if (CheckInputData() == false) { return;}
|
||||
CalculateResult();
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -52,11 +51,6 @@ namespace StructureHelperLogics.Models.BeamShears
|
||||
}
|
||||
}
|
||||
|
||||
private void PrepareInputData()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private bool CheckInputData()
|
||||
{
|
||||
var checkResult = checkInputDataLogic.Check();
|
||||
|
||||
@@ -3,11 +3,6 @@ using StructureHelperCommon.Infrastructures.Interfaces;
|
||||
using StructureHelperCommon.Models;
|
||||
using StructureHelperCommon.Models.Forces;
|
||||
using StructureHelperCommon.Models.Loggers;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.Models.BeamShears
|
||||
{
|
||||
@@ -18,7 +13,7 @@ namespace StructureHelperLogics.Models.BeamShears
|
||||
private IBeamShearSectionLogic beamShearSectionLogic;
|
||||
private List<IBeamShearActionResult> actionResults;
|
||||
private IBeamShearCalculatorInputData inputData;
|
||||
private List<CalcTerms> calcTerms = new() { CalcTerms.LongTerm, CalcTerms.ShortTerm };
|
||||
private readonly List<CalcTerms> calcTerms = new() { CalcTerms.LongTerm, CalcTerms.ShortTerm };
|
||||
|
||||
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||
|
||||
@@ -166,13 +161,15 @@ namespace StructureHelperLogics.Models.BeamShears
|
||||
private List<IInclinedSection> GetInclinedSections(IBeamShearSection beamShearSection)
|
||||
{
|
||||
IGetInclinedSectionListInputData inclinedSectionInputDataLogic = new GetInclinedSectionListInputData(beamShearSection);
|
||||
IGetInclinedSectionListLogic getInclinedSectionListLogic = new GetInclinedSectionListLogic(inclinedSectionInputDataLogic, TraceLogger);
|
||||
//IGetInclinedSectionListLogic getInclinedSectionListLogic = new GetInclinedSectionListLogic(inclinedSectionInputDataLogic, TraceLogger);
|
||||
IGetInclinedSectionListLogic getInclinedSectionListLogic = new GetInclinedSectionListLogic(inclinedSectionInputDataLogic, null);
|
||||
return getInclinedSectionListLogic.GetInclinedSections();
|
||||
}
|
||||
|
||||
private IForceTuple GetForceTupleByShearAction(IBeamShearAction beamShearAction, IInclinedSection inclinedSection, LimitStates limitState, CalcTerms calcTerm)
|
||||
{
|
||||
IGetDirectShearForceLogic getDirectShearForceLogic = new GetDirectShearForceLogic(beamShearAction, inclinedSection, limitState, calcTerm, TraceLogger);
|
||||
//IGetDirectShearForceLogic getDirectShearForceLogic = new GetDirectShearForceLogic(beamShearAction, inclinedSection, limitState, calcTerm, TraceLogger);
|
||||
IGetDirectShearForceLogic getDirectShearForceLogic = new GetDirectShearForceLogic(beamShearAction, inclinedSection, limitState, calcTerm, null);
|
||||
return getDirectShearForceLogic.CalculateShearForceTuple();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user