Files
StructureHelper/StructureHelperLogics/Models/BeamShears/BeamShearCalculator.cs
Evgeny Redikultsev 382ff6ed36 Add beam shear window
2025-03-02 21:30:39 +05:00

91 lines
2.7 KiB
C#

using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Calculators;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperLogics.Models.BeamShears
{
public class BeamShearCalculator : IBeamShearCalculator
{
private ICheckInputDataLogic<IBeamShearCalculatorInputData> checkInputDataLogic;
private IGetResultByInputDataLogic<IBeamShearCalculatorInputData, IBeamShearCalculatorResult> calculationLogic;
private IBeamShearCalculatorResult result;
public Guid Id { get; }
public string Name { get; set; } = string.Empty;
public IBeamShearCalculatorInputData InputData { get; set; } = new BeamShearCalculatorInputData(Guid.NewGuid());
public IResult Result => result;
public IShiftTraceLogger? TraceLogger { get; set; }
public BeamShearCalculator(Guid id)
{
Id = id;
}
public object Clone()
{
throw new NotImplementedException();
}
public void Run()
{
PrepareNewResult();
PrepareInputData();
try
{
InitializeStrategies();
if (CheckInputData() == false) { return;}
CalculateResult();
}
catch (Exception ex)
{
result.IsValid = false;
TraceLogger?.AddMessage(ex.Message, TraceLogStatuses.Error);
}
}
private void PrepareInputData()
{
throw new NotImplementedException();
}
private bool CheckInputData()
{
var checkResult = checkInputDataLogic.Check();
if (checkResult == false)
{
result.IsValid = false;
result.Description += checkInputDataLogic.CheckResult;
TraceLogger?.AddMessage(checkInputDataLogic.CheckResult, TraceLogStatuses.Error);
}
return checkResult;
}
private void CalculateResult()
{
result = calculationLogic.GetResultByInputData(InputData);
}
private void InitializeStrategies()
{
checkInputDataLogic ??= new CheckBeamShearCalculatorInputDataLogic(InputData, TraceLogger);
calculationLogic ??= new BeamShearCalculatorLogic(TraceLogger);
}
private void PrepareNewResult()
{
result = new BeamShearCalculatorResult()
{
IsValid = true,
Description = string.Empty
};
}
}
}