Add work plane property saving

This commit is contained in:
Evgeny Redikultsev
2025-01-25 19:21:34 +05:00
parent bbc6ade283
commit 3a946a29bc
37 changed files with 765 additions and 324 deletions

View File

@@ -1,4 +1,5 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.WorkPlanes;
using StructureHelperCommon.Services;
using StructureHelperLogics.NdmCalculations.Primitives;
using StructureHelperLogics.NdmCalculations.Primitives.Logics;
@@ -13,27 +14,47 @@ namespace StructureHelperLogics.Models.CrossSections
public class CrossSectionUpdateStrategy : IUpdateStrategy<ICrossSection>
{
private IUpdateStrategy<ICrossSectionRepository> repositoryUpdateStrategy;
private IUpdateStrategy<IWorkPlaneProperty> workPlaneUpdateStrategy;
public CrossSectionUpdateStrategy(IUpdateStrategy<ICrossSectionRepository> repositoryUpdateStrategy)
public CrossSectionUpdateStrategy(IUpdateStrategy<ICrossSectionRepository> repositoryUpdateStrategy,
IUpdateStrategy<IWorkPlaneProperty> workPlaneUpdateStrategy)
{
this.repositoryUpdateStrategy = repositoryUpdateStrategy;
this.workPlaneUpdateStrategy = workPlaneUpdateStrategy;
}
public CrossSectionUpdateStrategy() : this (
new CrossSectionRepositoryUpdateStrategy()
)
{
}
public CrossSectionUpdateStrategy() { }
public void Update(ICrossSection targetObject, ICrossSection sourceObject)
{
CheckObject.IsNull(targetObject, sourceObject);
CheckObject.IsNull(targetObject);
CheckObject.IsNull(sourceObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
UpdateRepository(targetObject, sourceObject);
UpdateWorkPlane(targetObject, sourceObject);
}
private void UpdateWorkPlane(ICrossSection targetObject, ICrossSection sourceObject)
{
if (sourceObject.WorkPlaneProperty is null)
{
targetObject.WorkPlaneProperty = new WorkPlaneProperty(Guid.NewGuid());
return;
}
targetObject.WorkPlaneProperty ??= new WorkPlaneProperty(Guid.NewGuid());
workPlaneUpdateStrategy ??= new WorkPlanePropertyUpdateStrategy();
workPlaneUpdateStrategy.Update(targetObject.WorkPlaneProperty, sourceObject.WorkPlaneProperty);
}
private void UpdateRepository(ICrossSection targetObject, ICrossSection sourceObject)
{
CheckObject.IsNull(targetObject.SectionRepository);
CheckObject.IsNull(sourceObject.SectionRepository);
targetObject.SectionRepository.Calculators.Clear();
targetObject.SectionRepository.Primitives.Clear();
targetObject.SectionRepository.ForceActions.Clear();
targetObject.SectionRepository.HeadMaterials.Clear();
repositoryUpdateStrategy ??= new CrossSectionRepositoryUpdateStrategy();
repositoryUpdateStrategy.Update(targetObject.SectionRepository, sourceObject.SectionRepository);
}
}