Files
StructureHelper/StructureHelperCommon/Models/Forces/BeamShearActions/BeamShearLoadUpdateStrategy.cs
2025-03-23 21:24:22 +05:00

55 lines
2.3 KiB
C#

using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Forces.BeamShearActions
{
public class BeamShearLoadUpdateStrategy : IUpdateStrategy<IBeamSpanLoad>
{
private IUpdateStrategy<IConcentratedForce> concentratedForceUpdateStrategy;
private IUpdateStrategy<IDistributedLoad> distributedLoadUpdateStrategy;
public void Update(IBeamSpanLoad targetObject, IBeamSpanLoad sourceObject)
{
CheckObject.IsNull(targetObject);
CheckObject.IsNull(sourceObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
InitializeStrategies();
UpdateObjects(targetObject, sourceObject);
}
private void UpdateObjects(IBeamSpanLoad targetObject, IBeamSpanLoad sourceObject)
{
if (sourceObject is IDistributedLoad distributedSource)
{
if (targetObject is IDistributedLoad distributedTarget)
{
distributedLoadUpdateStrategy.Update(distributedTarget, distributedSource);
return;
}
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(targetObject) + ": target object is not distributed load");
}
if (sourceObject is IConcentratedForce concentratedSource)
{
if (targetObject is IConcentratedForce concentratedTarget)
{
concentratedForceUpdateStrategy.Update(concentratedTarget, concentratedSource);
return;
}
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(targetObject) + ": target object is not concentrated force");
}
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(sourceObject));
}
private void InitializeStrategies()
{
concentratedForceUpdateStrategy ??= new ConcentratedForceUpdateStrategy();
distributedLoadUpdateStrategy ??= new DistributedLoadUpdateStrategy();
}
}
}