using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.WorkPlanes; using StructureHelperCommon.Services; namespace StructureHelperLogics.Models.CrossSections { public class CrossSectionCloneStrategy : ICloneStrategy { private ICloneStrategy repositoryCloneStrategy; private IUpdateStrategy workPlaneUpdateStrategy; private CrossSection targetObject; public CrossSectionCloneStrategy(ICloneStrategy repositoryCloneStrategy, IUpdateStrategy workPlaneUpdateStrategy) { this.repositoryCloneStrategy = repositoryCloneStrategy; this.workPlaneUpdateStrategy = workPlaneUpdateStrategy; } public CrossSectionCloneStrategy() { } public ICrossSection GetClone(ICrossSection sourceObject) { repositoryCloneStrategy ??= new CrossSectionRepositoryCloneStrategy(new DeepCloningStrategy()); ICrossSectionRepository newRepository = repositoryCloneStrategy.GetClone(sourceObject.SectionRepository); targetObject = new() { SectionRepository = newRepository }; CheckObject.IsNull(targetObject.WorkPlaneProperty); CheckObject.IsNull(sourceObject.WorkPlaneProperty); workPlaneUpdateStrategy ??= new WorkPlanePropertyUpdateStrategy(); workPlaneUpdateStrategy.Update(targetObject.WorkPlaneProperty, sourceObject.WorkPlaneProperty); return targetObject; } } }