diff --git a/DataAccess/DTOs/Converters/AnalysisToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/AnalysisToDTOConvertStrategy.cs index c7fdcff..bc6b0f6 100644 --- a/DataAccess/DTOs/Converters/AnalysisToDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/AnalysisToDTOConvertStrategy.cs @@ -3,32 +3,32 @@ using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Analyses; using StructureHelperLogic.Models.Analyses; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using static System.Windows.Forms.VisualStyles.VisualStyleElement.ToolTip; +using StructureHelperLogics.Models.Analyses; -namespace DataAccess.DTOs.Converters +namespace DataAccess.DTOs { - public class AnalysisToDTOConvertStrategy : IConvertStrategy + public class AnalysisToDTOConvertStrategy : ConvertStrategy { private const string Message = "Analysis type is"; - private IConvertStrategy convertCrossSectionNdmAnalysisStrategy = new CrossSectionNdmAnalysisToDTOConvertStrategy(); - private DictionaryConvertStrategy convertLogic; - public Dictionary<(Guid id, Type type), ISaveable> ReferenceDictionary { get; set; } - public IShiftTraceLogger TraceLogger { get; set; } + private IConvertStrategy crossSectionConvertLogic; + private IConvertStrategy beamShearConvertLogic; - public IAnalysis Convert(IAnalysis source) + public AnalysisToDTOConvertStrategy(Dictionary<(Guid id, Type type), ISaveable> referenceDictionary, IShiftTraceLogger traceLogger) : base(referenceDictionary, traceLogger) + { + } + + public override IAnalysis GetNewItem(IAnalysis source) { - Check(); IAnalysis analysis; if (source is ICrossSectionNdmAnalysis crossSectionNdmAnalysis) { analysis = GetCrossSectionNdmAnalysisDTO(crossSectionNdmAnalysis); } + else if (source is IBeamShearAnalysis beamShearAnalysis) + { + analysis = GetBeamShearAnalysis(beamShearAnalysis); + } else { string errorString = ErrorStrings.ObjectTypeIsUnknownObj(source); @@ -41,23 +41,26 @@ namespace DataAccess.DTOs.Converters } return analysis; } + private BeamShearAnalysisDTO GetBeamShearAnalysis(IBeamShearAnalysis beamShearAnalysis) + { + TraceLogger?.AddMessage(Message + " Beam Shear Analysis", TraceLogStatuses.Debug); + beamShearConvertLogic ??= new DictionaryConvertStrategy + (this, + new BeamShearAnalysisToDTOConvertStrategy(ReferenceDictionary, TraceLogger) + ); + BeamShearAnalysisDTO newItem = beamShearConvertLogic.Convert(beamShearAnalysis); + return newItem; + } private CrossSectionNdmAnalysisDTO GetCrossSectionNdmAnalysisDTO(ICrossSectionNdmAnalysis crossSectionNdmAnalysis) { TraceLogger?.AddMessage(Message + " Cross-Section Ndm Analysis", TraceLogStatuses.Debug); - convertCrossSectionNdmAnalysisStrategy.ReferenceDictionary = ReferenceDictionary; - convertCrossSectionNdmAnalysisStrategy.TraceLogger = TraceLogger; - convertLogic = new DictionaryConvertStrategy(this, convertCrossSectionNdmAnalysisStrategy); - CrossSectionNdmAnalysisDTO crossSectionNdmAnalysisDTO = convertLogic.Convert(crossSectionNdmAnalysis); - return crossSectionNdmAnalysisDTO; - } - - private void Check() - { - var checkLogic = new CheckConvertLogic(); - checkLogic.ConvertStrategy = this; - checkLogic.TraceLogger = TraceLogger; - checkLogic.Check(); + crossSectionConvertLogic ??= new DictionaryConvertStrategy + (this, + new CrossSectionNdmAnalysisToDTOConvertStrategy(ReferenceDictionary, TraceLogger) + ); + CrossSectionNdmAnalysisDTO newItem = crossSectionConvertLogic.Convert(crossSectionNdmAnalysis); + return newItem; } } } diff --git a/DataAccess/DTOs/Converters/BeamShearAnalysisToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/BeamShearAnalysisToDTOConvertStrategy.cs new file mode 100644 index 0000000..3f03431 --- /dev/null +++ b/DataAccess/DTOs/Converters/BeamShearAnalysisToDTOConvertStrategy.cs @@ -0,0 +1,31 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models; +using StructureHelperLogics.Models.Analyses; + +namespace DataAccess.DTOs +{ + public class BeamShearAnalysisToDTOConvertStrategy : ConvertStrategy + { + private IUpdateStrategy updateStrategy; + + public BeamShearAnalysisToDTOConvertStrategy(Dictionary<(Guid id, Type type), ISaveable> referenceDictionary, IShiftTraceLogger traceLogger) : base(referenceDictionary, traceLogger) + { + } + + public override BeamShearAnalysisDTO GetNewItem(IBeamShearAnalysis source) + { + updateStrategy ??= new BeamShearAnalysisUpdateStrategy(); + try + { + NewItem = new(source.Id); + updateStrategy.Update(NewItem, source); + return NewItem; + } + catch (Exception ex) + { + TraceErrorByEntity(this, ex.Message); + throw; + } + } + } +} diff --git a/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisToDTOConvertStrategy.cs index 2400c07..484a9e6 100644 --- a/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisToDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisToDTOConvertStrategy.cs @@ -4,13 +4,8 @@ using StructureHelperCommon.Models.Analyses; using StructureHelperCommon.Models.Loggers; using StructureHelperLogic.Models.Analyses; using StructureHelperLogics.Models.Analyses; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace DataAccess.DTOs.Converters +namespace DataAccess.DTOs { internal class CrossSectionNdmAnalysisToDTOConvertStrategy : IConvertStrategy { @@ -37,6 +32,16 @@ namespace DataAccess.DTOs.Converters } + public CrossSectionNdmAnalysisToDTOConvertStrategy(Dictionary<(Guid id, Type type), ISaveable> referenceDictionary, IShiftTraceLogger? traceLogger) + : this( + new CrossSectionNdmAnalysisUpdateStrategy(), + new VersionProcessorToDTOConvertStrategy(), + null) + { + ReferenceDictionary = referenceDictionary; + TraceLogger = traceLogger; + } + public CrossSectionNdmAnalysisDTO Convert(ICrossSectionNdmAnalysis source) { try diff --git a/DataAccess/DTOs/Converters/ProjectToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ProjectToDTOConvertStrategy.cs index 25ed00d..7f8316b 100644 --- a/DataAccess/DTOs/Converters/ProjectToDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ProjectToDTOConvertStrategy.cs @@ -1,49 +1,33 @@ using StructureHelperCommon.Infrastructures.Interfaces; -using StructureHelperCommon.Infrastructures.Settings; -using StructureHelperCommon.Models; using StructureHelperCommon.Models.Analyses; using StructureHelperCommon.Models.Projects; -using StructureHelperLogics.Models.CrossSections; -using StructureHelperLogics.NdmCalculations.Analyses.ByForces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace DataAccess.DTOs { - public class ProjectToDTOConvertStrategy : IConvertStrategy + public class ProjectToDTOConvertStrategy : ConvertStrategy { private IUpdateStrategy updateStrategy; - private IConvertStrategy convertStrategy; private DictionaryConvertStrategy convertLogic; - public Dictionary<(Guid id, Type type), ISaveable> ReferenceDictionary { get; set; } - public IShiftTraceLogger TraceLogger { get; set; } - public ProjectToDTOConvertStrategy(IUpdateStrategy updateStrategy, IConvertStrategy convertStrategy) - { - this.updateStrategy = updateStrategy; - this.convertStrategy = convertStrategy; - } - - public ProjectToDTOConvertStrategy() : this(new ProjectUpdateStrategy(), new VisualAnalysisToDTOConvertStrategy()) + public ProjectToDTOConvertStrategy() { } - public ProjectDTO Convert(IProject source) + public ProjectToDTOConvertStrategy( + IUpdateStrategy updateStrategy, + DictionaryConvertStrategy convertLogic) { - Check(); - ProjectDTO newItem = new() - { - Id = source.Id - }; + this.updateStrategy = updateStrategy; + this.convertLogic = convertLogic; + } + + public override ProjectDTO GetNewItem(IProject source) + { + InitializeStrategies(); + ProjectDTO newItem = new(source.Id); updateStrategy.Update(newItem, source); - convertStrategy.ReferenceDictionary = ReferenceDictionary; - convertStrategy.TraceLogger = TraceLogger; - convertLogic = new DictionaryConvertStrategy(this, convertStrategy); newItem.VisualAnalyses.Clear(); foreach (var item in source.VisualAnalyses) { @@ -51,15 +35,15 @@ namespace DataAccess.DTOs newItem.VisualAnalyses.Add(newVisualAnalysis); } return newItem; - } - private void Check() + private void InitializeStrategies() { - var checkLogic = new CheckConvertLogic(); - checkLogic.ConvertStrategy = this; - checkLogic.TraceLogger = TraceLogger; - checkLogic.Check(); + updateStrategy ??= new ProjectUpdateStrategy(); + convertLogic ??= new DictionaryConvertStrategy + (this, + new VisualAnalysisToDTOConvertStrategy(ReferenceDictionary, TraceLogger) + ); } } } diff --git a/DataAccess/DTOs/Converters/VisualAnalysisToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/VisualAnalysisToDTOConvertStrategy.cs index a350d3a..c3c0a5c 100644 --- a/DataAccess/DTOs/Converters/VisualAnalysisToDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/VisualAnalysisToDTOConvertStrategy.cs @@ -1,35 +1,16 @@ -using DataAccess.DTOs.Converters; -using StructureHelperCommon.Infrastructures.Interfaces; -using StructureHelperCommon.Infrastructures.Settings; +using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Analyses; using StructureHelperCommon.Models.Loggers; -using StructureHelperCommon.Models.Projects; -using StructureHelperLogic.Models.Analyses; -using StructureHelperLogics.Models.CrossSections; -using StructureHelperLogics.NdmCalculations.Analyses.ByForces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; + +//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia +//All rights reserved. namespace DataAccess.DTOs { internal class VisualAnalysisToDTOConvertStrategy : ConvertStrategy { - private IConvertStrategy convertStrategy; - - public VisualAnalysisToDTOConvertStrategy(IConvertStrategy convertStrategy) - { - this.convertStrategy = convertStrategy; - } - - public VisualAnalysisToDTOConvertStrategy() : this(new AnalysisToDTOConvertStrategy()) - { - - } + private IConvertStrategy convertLogic; public override VisualAnalysisDTO GetNewItem(IVisualAnalysis source) { @@ -40,30 +21,29 @@ namespace DataAccess.DTOs return visualAnalysisDTO; } + public VisualAnalysisToDTOConvertStrategy + (Dictionary<(Guid id, Type type), ISaveable> referenceDictionary, + IShiftTraceLogger traceLogger) + : base(referenceDictionary, traceLogger) + { + } + private VisualAnalysisDTO GetNewAnalysis(IVisualAnalysis source) { - VisualAnalysisDTO visualAnalysisDTO = new() + InitializeStrategies(); + VisualAnalysisDTO visualAnalysisDTO = new(source.Id) { - Id = source.Id + Analysis = convertLogic.Convert(source.Analysis) }; - convertStrategy.ReferenceDictionary = ReferenceDictionary; - convertStrategy.TraceLogger = TraceLogger; - var convertLogic = new DictionaryConvertStrategy(this, convertStrategy) - { - ReferenceDictionary = ReferenceDictionary, - ConvertStrategy = convertStrategy, - TraceLogger = TraceLogger - }; - visualAnalysisDTO.Analysis = convertLogic.Convert(source.Analysis); return visualAnalysisDTO; } - private void Check() + private void InitializeStrategies() { - var checkLogic = new CheckConvertLogic(); - checkLogic.ConvertStrategy = this; - checkLogic.TraceLogger = TraceLogger; - checkLogic.Check(); + convertLogic ??= new DictionaryConvertStrategy + (this, + new AnalysisToDTOConvertStrategy(ReferenceDictionary, TraceLogger) + ); } } } diff --git a/DataAccess/DTOs/DTOEntities/BeamShearAnalysisDTO.cs b/DataAccess/DTOs/DTOEntities/BeamShearAnalysisDTO.cs index e417db5..8529a30 100644 --- a/DataAccess/DTOs/DTOEntities/BeamShearAnalysisDTO.cs +++ b/DataAccess/DTOs/DTOEntities/BeamShearAnalysisDTO.cs @@ -3,7 +3,7 @@ using StructureHelperCommon.Models.Analyses; using StructureHelperLogics.Models.Analyses; using System.Windows.Media; -namespace DataAccess.DTOs.DTOEntities +namespace DataAccess.DTOs { public class BeamShearAnalysisDTO : IBeamShearAnalysis { @@ -18,6 +18,10 @@ namespace DataAccess.DTOs.DTOEntities [JsonProperty("Color")] public Color Color { get; set; } public IVersionProcessor VersionProcessor { get; set; } = new VersionProcessorDTO(); + public BeamShearAnalysisDTO(Guid id) + { + Id = id; + } public object Clone() diff --git a/DataAccess/DTOs/DTOEntities/ProjectDTO.cs b/DataAccess/DTOs/DTOEntities/ProjectDTO.cs index 455558d..5647ba4 100644 --- a/DataAccess/DTOs/DTOEntities/ProjectDTO.cs +++ b/DataAccess/DTOs/DTOEntities/ProjectDTO.cs @@ -13,16 +13,19 @@ namespace DataAccess.DTOs public class ProjectDTO : IProject { [JsonProperty("Id")] - public Guid Id { get; set; } + public Guid Id { get;} [JsonIgnore] public string FullFileName { get; set; } [JsonIgnore] public bool IsActual { get; set; } - [JsonProperty("VisualAnalyses")] public List VisualAnalyses { get; set; } = new(); - [JsonIgnore] public string FileName { get; set; } + + public ProjectDTO(Guid id) + { + Id = id; + } } } diff --git a/DataAccess/DTOs/DTOEntities/VisualAnalysisDTO.cs b/DataAccess/DTOs/DTOEntities/VisualAnalysisDTO.cs index fa49e73..0bb0b1f 100644 --- a/DataAccess/DTOs/DTOEntities/VisualAnalysisDTO.cs +++ b/DataAccess/DTOs/DTOEntities/VisualAnalysisDTO.cs @@ -13,12 +13,16 @@ namespace DataAccess.DTOs { [JsonProperty("Id")] - public Guid Id { get; set; } + public Guid Id { get;} [JsonProperty("Analysis")] public IAnalysis Analysis { get; set; } [JsonIgnore] public Action ActionToRun { get; set; } + public VisualAnalysisDTO(Guid id) + { + Id = id; + } public object Clone() { return this; diff --git a/DataAccess/Infrastructures/FileSaveLogic.cs b/DataAccess/Infrastructures/FileSaveLogic.cs index 84394fb..d1cb61f 100644 --- a/DataAccess/Infrastructures/FileSaveLogic.cs +++ b/DataAccess/Infrastructures/FileSaveLogic.cs @@ -30,6 +30,7 @@ namespace DataAccess.Infrastructures catch (Exception ex) { result.IsValid = false; + TraceLogger?.AddMessage(ex.Message, TraceLogStatuses.Error); result.Description += ex.Message; } return result; diff --git a/StructureHelper/Windows/BeamShears/ExportActionResultToCSVLogic.cs b/StructureHelper/Windows/BeamShears/ExportActionResultToCSVLogic.cs index 9cf1525..4cd1399 100644 --- a/StructureHelper/Windows/BeamShears/ExportActionResultToCSVLogic.cs +++ b/StructureHelper/Windows/BeamShears/ExportActionResultToCSVLogic.cs @@ -1,11 +1,8 @@ -using StructureHelperCommon.Models.Calculators; -using StructureHelperLogics.Models.BeamShears; +using StructureHelperLogics.Models.BeamShears; using StructureHelperLogics.NdmCalculations.Analyses; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; + +//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia +//All rights reserved. namespace StructureHelper.Windows.BeamShears { diff --git a/StructureHelper/Windows/BeamShears/ShearDiagramLogic.cs b/StructureHelper/Windows/BeamShears/ShearDiagramLogic.cs index 2e65268..66fca70 100644 --- a/StructureHelper/Windows/BeamShears/ShearDiagramLogic.cs +++ b/StructureHelper/Windows/BeamShears/ShearDiagramLogic.cs @@ -49,6 +49,7 @@ namespace StructureHelper.Windows.BeamShears var valueList = new List { results[i].InputData.InclinedSection.EndCoord, + results[i].InputData.InclinedSection.EndCoord / results[i].InputData.InclinedSection.EffectiveDepth, results[i].InputData.ForceTuple.Nz * unitForce.Multiplyer, results[i].InputData.ForceTuple.Qy * unitForce.Multiplyer, results[i].TotalStrength * unitForce.Multiplyer, @@ -68,9 +69,10 @@ namespace StructureHelper.Windows.BeamShears List strings = new() { "End coord", + "a/d-ratio", "Nz", "Qy", - "Qlim", + "Qult", "Qb", "Qsw", "Uf" diff --git a/StructureHelperCommon/Infrastructures/Interfaces/ConvertStrategy.cs b/StructureHelperCommon/Infrastructures/Interfaces/ConvertStrategy.cs index 3c408b8..0e513b3 100644 --- a/StructureHelperCommon/Infrastructures/Interfaces/ConvertStrategy.cs +++ b/StructureHelperCommon/Infrastructures/Interfaces/ConvertStrategy.cs @@ -19,6 +19,12 @@ namespace StructureHelperCommon.Infrastructures.Interfaces TraceLogger = traceLogger; } + protected ConvertStrategy(IConvertStrategy convertStrategy) + { + ReferenceDictionary = convertStrategy.ReferenceDictionary; + TraceLogger = convertStrategy.TraceLogger; + } + public ConvertStrategy() { diff --git a/StructureHelperCommon/Models/Analyses/IAnalysis.cs b/StructureHelperCommon/Models/Analyses/IAnalysis.cs index fbbdc55..beda1ff 100644 --- a/StructureHelperCommon/Models/Analyses/IAnalysis.cs +++ b/StructureHelperCommon/Models/Analyses/IAnalysis.cs @@ -1,19 +1,21 @@ using StructureHelperCommon.Infrastructures.Interfaces; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Media; namespace StructureHelperCommon.Models.Analyses { + /// + /// Implements propertis of analysis + /// public interface IAnalysis : ISaveable, ICloneable { string Name { get; set; } string Tags { get; set; } string Comment { get; set; } Color Color { get; set; } + /// + /// Processor of subversions of analysis + /// IVersionProcessor VersionProcessor { get; set; } } } diff --git a/StructureHelperLogics/Models/Analyses/BeamShearAnalysis.cs b/StructureHelperLogics/Models/Analyses/BeamShearAnalysis.cs index b269b0a..a6c7ffd 100644 --- a/StructureHelperLogics/Models/Analyses/BeamShearAnalysis.cs +++ b/StructureHelperLogics/Models/Analyses/BeamShearAnalysis.cs @@ -9,14 +9,20 @@ using System.Windows.Media; namespace StructureHelperLogics.Models.Analyses { + /// public class BeamShearAnalysis : IBeamShearAnalysis { - + /// public Guid Id { get; } + /// public string Name { get; set; } = string.Empty; + /// public string Tags { get; set; } = string.Empty; + /// public string Comment { get; set; } = string.Empty; + /// public Color Color { get; set; } = Color.FromRgb(128, 0, 0); + /// public IVersionProcessor VersionProcessor { get; set; } = new VersionProcessor(); public BeamShearAnalysis(Guid id) { diff --git a/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs b/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs index c4e2096..a4f09a5 100644 --- a/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs +++ b/StructureHelperLogics/Models/Analyses/BeamShearAnalysisUpdateStrategy.cs @@ -3,12 +3,6 @@ using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Analyses; using StructureHelperCommon.Services; using StructureHelperLogics.Models.BeamShears; -using StructureHelperLogics.Models.CrossSections; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace StructureHelperLogics.Models.Analyses { diff --git a/StructureHelperLogics/Models/Analyses/IBeamShearAnalysis.cs b/StructureHelperLogics/Models/Analyses/IBeamShearAnalysis.cs index 939f5d5..08c5960 100644 --- a/StructureHelperLogics/Models/Analyses/IBeamShearAnalysis.cs +++ b/StructureHelperLogics/Models/Analyses/IBeamShearAnalysis.cs @@ -7,6 +7,9 @@ using System.Threading.Tasks; namespace StructureHelperLogics.Models.Analyses { + /// + /// Implemants properties for analysis of beam for shear + /// public interface IBeamShearAnalysis : IAnalysis { } diff --git a/StructureHelperLogics/Models/BeamShears/BeamShear.cs b/StructureHelperLogics/Models/BeamShears/BeamShear.cs index 31c0355..6aa54c8 100644 --- a/StructureHelperLogics/Models/BeamShears/BeamShear.cs +++ b/StructureHelperLogics/Models/BeamShears/BeamShear.cs @@ -1,16 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using StructureHelperCommon.Infrastructures.Interfaces; namespace StructureHelperLogics.Models.BeamShears { public class BeamShear : IBeamShear { - + private ICloneStrategy cloneStrategy; public Guid Id { get; } - public IBeamShearRepository Repository { get; } = new BeamShearRepository(Guid.NewGuid()); + public IBeamShearRepository Repository { get; set; } = new BeamShearRepository(Guid.NewGuid()); public BeamShear(Guid id) { Id = id; @@ -18,7 +14,10 @@ namespace StructureHelperLogics.Models.BeamShears public object Clone() { - throw new NotImplementedException(); + var cloningStrategy = new DeepCloningStrategy(); + cloneStrategy = new BeamShearCloneStrategy(cloningStrategy); + var newItem = cloneStrategy.GetClone(this); + return newItem; } } } diff --git a/StructureHelperLogics/Models/BeamShears/BeamShearRepository.cs b/StructureHelperLogics/Models/BeamShears/BeamShearRepository.cs index 6a26ab1..8c9c269 100644 --- a/StructureHelperLogics/Models/BeamShears/BeamShearRepository.cs +++ b/StructureHelperLogics/Models/BeamShears/BeamShearRepository.cs @@ -1,25 +1,16 @@ using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Calculators; using StructureHelperCommon.Models.Forces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace StructureHelperLogics.Models.BeamShears { public class BeamShearRepository : IBeamShearRepository { - + private ICloneStrategy cloneStrategy; public Guid Id { get; } - public List Actions { get; } = new(); - public List Calculators { get; } = new(); - public List Sections { get; } = new(); - public List Stirrups { get; } = new(); @@ -30,7 +21,10 @@ namespace StructureHelperLogics.Models.BeamShears public object Clone() { - throw new NotImplementedException(); + var cloningStrategy = new DeepCloningStrategy(); + cloneStrategy = new BeamShearRepositoryCloneStrategy(cloningStrategy); + var newItem = cloneStrategy.GetClone(this); + return newItem; } } } diff --git a/StructureHelperLogics/Models/BeamShears/IBeamShear.cs b/StructureHelperLogics/Models/BeamShears/IBeamShear.cs index 39c52c4..392a1ea 100644 --- a/StructureHelperLogics/Models/BeamShears/IBeamShear.cs +++ b/StructureHelperLogics/Models/BeamShears/IBeamShear.cs @@ -9,6 +9,6 @@ namespace StructureHelperLogics.Models.BeamShears { public interface IBeamShear : ISaveable, ICloneable { - IBeamShearRepository Repository { get; } + IBeamShearRepository Repository { get; set; } } } diff --git a/StructureHelperLogics/Models/BeamShears/IBeamShearRepository.cs b/StructureHelperLogics/Models/BeamShears/IBeamShearRepository.cs index faa3b8b..6b586d3 100644 --- a/StructureHelperLogics/Models/BeamShears/IBeamShearRepository.cs +++ b/StructureHelperLogics/Models/BeamShears/IBeamShearRepository.cs @@ -1,11 +1,8 @@ using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Calculators; -using StructureHelperCommon.Models.Forces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; + +//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia +//All rights reserved. namespace StructureHelperLogics.Models.BeamShears { diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCloneStrategy.cs new file mode 100644 index 0000000..6b1852d --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCloneStrategy.cs @@ -0,0 +1,31 @@ +using StructureHelperCommon.Infrastructures.Interfaces; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class BeamShearCloneStrategy : ICloneStrategy + { + private ICloningStrategy cloningStrategy; + private ICloneStrategy cloneStrategy; + private BeamShear beamShear; + public BeamShearCloneStrategy(ICloningStrategy cloningStrategy) + { + this.cloningStrategy = cloningStrategy; + } + + public IBeamShear GetClone(IBeamShear sourceObject) + { + InitializeStrategies(); + beamShear = new(Guid.NewGuid()) + { + Repository = cloneStrategy.GetClone(sourceObject.Repository) + }; + return beamShear; + } + + private void InitializeStrategies() + { + cloningStrategy = new DeepCloningStrategy(); + cloneStrategy ??= new BeamShearRepositoryCloneStrategy(cloningStrategy); + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearRepositoryCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearRepositoryCloneStrategy.cs new file mode 100644 index 0000000..09a5c5c --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearRepositoryCloneStrategy.cs @@ -0,0 +1,37 @@ +using StructureHelperCommon.Infrastructures.Interfaces; + +//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia +//All rights reserved. + +namespace StructureHelperLogics.Models.BeamShears +{ + public class BeamShearRepositoryCloneStrategy : ICloneStrategy + { + private ICloningStrategy cloningStrategy; + private IUpdateStrategy actionUpdateStrategy; + private IUpdateStrategy sectionUpdateStrategy; + private IUpdateStrategy stirrupUpdateStrategy; + private BeamShearRepository targetRepository; + + public BeamShearRepositoryCloneStrategy(ICloningStrategy cloningStrategy) + { + this.cloningStrategy = cloningStrategy; + } + public IBeamShearRepository GetClone(IBeamShearRepository sourceObject) + { + InitializeStrategies(); + targetRepository = new(Guid.NewGuid()); + actionUpdateStrategy.Update(targetRepository, sourceObject); + sectionUpdateStrategy.Update(targetRepository, sourceObject); + stirrupUpdateStrategy.Update(targetRepository, sourceObject); + return targetRepository; + } + + private void InitializeStrategies() + { + actionUpdateStrategy ??= new HasActionsUpdateCloneStrategy(cloningStrategy); + sectionUpdateStrategy ??= new HasSectionsUpdateCloneStrategy(cloningStrategy); + stirrupUpdateStrategy ??= new HasStirrupsUpdateCloneStrategy(cloningStrategy); + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasActionsUpdateCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasActionsUpdateCloneStrategy.cs new file mode 100644 index 0000000..7e27796 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasActionsUpdateCloneStrategy.cs @@ -0,0 +1,29 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Services; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class HasActionsUpdateCloneStrategy : IUpdateStrategy + { + private readonly ICloningStrategy cloningStrategy; + + public HasActionsUpdateCloneStrategy(ICloningStrategy cloningStrategy) + { + this.cloningStrategy = cloningStrategy; + } + + public void Update(IHasBeamShearActions targetObject, IHasBeamShearActions sourceObject) + { + CheckObject.IsNull(cloningStrategy); + CheckObject.IsNull(sourceObject); + CheckObject.IsNull(targetObject); + if (ReferenceEquals(targetObject, sourceObject)) { return; } + targetObject.Actions.Clear(); + foreach (var item in sourceObject.Actions) + { + var newItem = cloningStrategy.Clone(item); + targetObject.Actions.Add(newItem); + } + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasSectionsUpdateCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasSectionsUpdateCloneStrategy.cs new file mode 100644 index 0000000..3e22199 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasSectionsUpdateCloneStrategy.cs @@ -0,0 +1,29 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Services; + +namespace StructureHelperLogics.Models.BeamShears +{ + public class HasSectionsUpdateCloneStrategy : IUpdateStrategy + { + private readonly ICloningStrategy cloningStrategy; + + public HasSectionsUpdateCloneStrategy(ICloningStrategy cloningStrategy) + { + this.cloningStrategy = cloningStrategy; + } + + public void Update(IHasBeamShearSections targetObject, IHasBeamShearSections sourceObject) + { + CheckObject.IsNull(cloningStrategy); + CheckObject.IsNull(sourceObject); + CheckObject.IsNull(targetObject); + if (ReferenceEquals(targetObject, sourceObject)) { return; } + targetObject.Sections.Clear(); + foreach (var item in sourceObject.Sections) + { + IBeamShearSection newSection = cloningStrategy.Clone(item); + targetObject.Sections.Add(newSection); + } + } + } +} diff --git a/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasStirrupsUpdateCloneStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasStirrupsUpdateCloneStrategy.cs new file mode 100644 index 0000000..c003ee0 --- /dev/null +++ b/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/HasStirrupsUpdateCloneStrategy.cs @@ -0,0 +1,34 @@ +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 +{ + public class HasStirrupsUpdateCloneStrategy : IUpdateStrategy + { + private readonly ICloningStrategy cloningStrategy; + + public HasStirrupsUpdateCloneStrategy(ICloningStrategy cloningStrategy) + { + this.cloningStrategy = cloningStrategy; + } + + public void Update(IHasStirrups targetObject, IHasStirrups sourceObject) + { + CheckObject.IsNull(cloningStrategy); + CheckObject.IsNull(sourceObject); + CheckObject.IsNull(targetObject); + if (ReferenceEquals(targetObject, sourceObject)) { return; } + targetObject.Stirrups.Clear(); + foreach (var item in sourceObject.Stirrups) + { + IStirrup newStirrup = cloningStrategy.Clone(item); + targetObject.Stirrups.Add(newStirrup); + } + } + } +} diff --git a/StructureHelperLogics/Models/CrossSections/CrossSectionRepositoryCloneStrategy.cs b/StructureHelperLogics/Models/CrossSections/CrossSectionRepositoryCloneStrategy.cs index d69dff3..ffb15af 100644 --- a/StructureHelperLogics/Models/CrossSections/CrossSectionRepositoryCloneStrategy.cs +++ b/StructureHelperLogics/Models/CrossSections/CrossSectionRepositoryCloneStrategy.cs @@ -11,7 +11,7 @@ namespace StructureHelperLogics.Models.CrossSections { public class CrossSectionRepositoryCloneStrategy : ICloneStrategy { - private ICloningStrategy cloningStrategy; + private readonly ICloningStrategy cloningStrategy; private CrossSectionRepository targetRepository; private IUpdateStrategy forcesUpdateStrategy; private IUpdateStrategy materialsUpdateStrategy; diff --git a/StructureHelperTests/UnitTests/BeamShearTests/GetDirectShearForceLogicTests.cs b/StructureHelperTests/UnitTests/BeamShearTests/GetDirectShearForceLogicTests.cs index e4530c4..3e6f1b7 100644 --- a/StructureHelperTests/UnitTests/BeamShearTests/GetDirectShearForceLogicTests.cs +++ b/StructureHelperTests/UnitTests/BeamShearTests/GetDirectShearForceLogicTests.cs @@ -4,6 +4,7 @@ using StructureHelperCommon.Models.Forces; using StructureHelperCommon.Models; using StructureHelperLogics.Models.BeamShears.Logics; using StructureHelperLogics.Models.BeamShears; +using StructureHelperCommon.Infrastructures.Enums; namespace StructureHelperTests.UnitTests.BeamShearTests { @@ -23,18 +24,18 @@ namespace StructureHelperTests.UnitTests.BeamShearTests { _mockLogger = new Mock(); _mockSummaryForceLogic = new Mock(); - var mockAxisAction = new Mock(); + var mockAction = new Mock(); var mockInclinedSection = new Mock(); var mockShearLoad = new Mock(); - mockAxisAction.Setup(a => a.SupportForce.ForceTuple.Qx).Returns(100.0); - mockAxisAction.Setup(a => a.ShearLoads).Returns(new List { mockShearLoad.Object }); + mockAction.Setup(a => a.SupportAction.SupportForce.ForceTuple.Qx).Returns(100.0); + mockAction.Setup(a => a.SupportAction.ShearLoads).Returns(new List { mockShearLoad.Object }); mockInclinedSection.Setup(i => i.StartCoord).Returns(2.0); mockInclinedSection.Setup(i => i.EndCoord).Returns(5.0); _mockSummaryForceLogic.Setup(s => s.GetSumShearForce(mockShearLoad.Object, 2.0, 5.0)).Returns(new ForceTuple() { Qy = 50.0}); - _logic = new GetDirectShearForceLogic(mockAxisAction.Object, mockInclinedSection.Object, _mockLogger.Object, _mockSummaryForceLogic.Object); + _logic = new GetDirectShearForceLogic(mockAction.Object, mockInclinedSection.Object, LimitStates.ULS, CalcTerms.ShortTerm, _mockLogger.Object, _mockSummaryForceLogic.Object); } [Test] diff --git a/StructureHelperTests/UnitTests/ConvertStrategiesTest/ProjectFromDTOConvertStrategyTests.cs b/StructureHelperTests/UnitTests/ConvertStrategiesTest/ProjectFromDTOConvertStrategyTests.cs index 3f34d8f..172bafd 100644 --- a/StructureHelperTests/UnitTests/ConvertStrategiesTest/ProjectFromDTOConvertStrategyTests.cs +++ b/StructureHelperTests/UnitTests/ConvertStrategiesTest/ProjectFromDTOConvertStrategyTests.cs @@ -38,7 +38,7 @@ namespace StructureHelperTests.UnitTests.ConvertStrategiesTest public void GetNewItem_ShouldLogStartAndEndMessages() { // Arrange - var projectDto = new ProjectDTO + var projectDto = new ProjectDTO(Guid.Empty) { VisualAnalyses = new List { new Mock().Object } }; @@ -59,7 +59,7 @@ namespace StructureHelperTests.UnitTests.ConvertStrategiesTest public void GetNewItem_ShouldLogWarningIfNoAnalyses() { // Arrange - var projectDto = new ProjectDTO + var projectDto = new ProjectDTO(Guid.Empty) { VisualAnalyses = Enumerable.Empty().ToList() }; @@ -75,7 +75,7 @@ namespace StructureHelperTests.UnitTests.ConvertStrategiesTest public void GetAnalyses_ShouldConvertEachVisualAnalysisAndLogCount() { // Arrange - var projectDto = new ProjectDTO + var projectDto = new ProjectDTO(Guid.Empty) { VisualAnalyses = new List { new Mock().Object, new Mock().Object } }; @@ -98,7 +98,7 @@ namespace StructureHelperTests.UnitTests.ConvertStrategiesTest public void GetAnalyses_ShouldLogConvertedAnalysisCount() { // Arrange - var projectDto = new ProjectDTO + var projectDto = new ProjectDTO(Guid.Empty) { VisualAnalyses = new List { new Mock().Object } };