diff --git a/DataAccess/DTOs/Converters/AnalysisFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/AnalysisFromDTOConvertStrategy.cs index 1a0a8ba..271c0a0 100644 --- a/DataAccess/DTOs/Converters/AnalysisFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/AnalysisFromDTOConvertStrategy.cs @@ -77,7 +77,7 @@ namespace DataAccess.DTOs.Converters versionProcessorConvertStrategy.ReferenceDictionary = ReferenceDictionary; versionProcessorConvertStrategy.TraceLogger = TraceLogger; IVersionProcessor versionProcessor = versionProcessorConvertStrategy.Convert(source); - TraceLogger?.AddMessage("Version processor converting has been finished succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Version processor converting has been finished successfully", TraceLogStatuses.Service); return versionProcessor; } @@ -89,7 +89,7 @@ namespace DataAccess.DTOs.Converters convertCrossSectionNdmAnalysisStrategy.TraceLogger = TraceLogger; var convertLogic = new DictionaryConvertStrategy(this, convertCrossSectionNdmAnalysisStrategy); ICrossSectionNdmAnalysis crossSectionNdmAnalysis = convertLogic.Convert(source); - TraceLogger?.AddMessage("Cross-Section Ndm Analysis converting has been finished succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Cross-Section Ndm Analysis converting has been finished successfully", TraceLogStatuses.Service); return crossSectionNdmAnalysis; } diff --git a/DataAccess/DTOs/Converters/ConcreteLibMaterialFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ConcreteLibMaterialFromDTOConvertStrategy.cs index 2ea37a0..c221e4c 100644 --- a/DataAccess/DTOs/Converters/ConcreteLibMaterialFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ConcreteLibMaterialFromDTOConvertStrategy.cs @@ -28,7 +28,7 @@ namespace DataAccess.DTOs TraceLogger?.AddMessage("Concrete library material converting is started", TraceLogStatuses.Service); ConcreteLibMaterial newItem = new(source.Id); updateStrategy.Update(newItem, source); - TraceLogger?.AddMessage("Concrete library material converting has been finished succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Concrete library material converting has been finished successfully", TraceLogStatuses.Service); return newItem; } } diff --git a/DataAccess/DTOs/Converters/CrossSectionFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/CrossSectionFromDTOConvertStrategy.cs index 1b6a64f..d681740 100644 --- a/DataAccess/DTOs/Converters/CrossSectionFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/CrossSectionFromDTOConvertStrategy.cs @@ -49,7 +49,7 @@ namespace DataAccess.DTOs convertStrategy.ReferenceDictionary = ReferenceDictionary; convertStrategy.TraceLogger = TraceLogger; newItem.SectionRepository = GetNewCrossSectionRepository(source.SectionRepository); - TraceLogger?.AddMessage("Cross-Section converting has been finished succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Cross-Section converting has been finished successfully", TraceLogStatuses.Service); return newItem; } diff --git a/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisFromDTOConvertStrategy.cs index f8fe4e3..757da66 100644 --- a/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisFromDTOConvertStrategy.cs @@ -51,7 +51,7 @@ namespace DataAccess.DTOs.Converters TraceLogger?.AddMessage("Cross-section sonverting is started"); CrossSectionNdmAnalysis newItem = new(source.Id); updateStrategy.Update(newItem, source); - TraceLogger?.AddMessage("Cross-section analysis was obtained succesfully"); + TraceLogger?.AddMessage("Cross-section analysis was obtained successfully"); return newItem; } diff --git a/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisToDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisToDTOConvertStrategy.cs index a98f817..2400c07 100644 --- a/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisToDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/CrossSectionNdmAnalysisToDTOConvertStrategy.cs @@ -68,7 +68,7 @@ namespace DataAccess.DTOs.Converters }; TraceLogger?.AddMessage("Convert version processor is started", TraceLogStatuses.Service); newItem.VersionProcessor = convertLogic.Convert(source.VersionProcessor); - TraceLogger?.AddMessage("Cross-section ndm analysis has been converted succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Cross-section ndm analysis has been converted successfully", TraceLogStatuses.Service); return newItem; } diff --git a/DataAccess/DTOs/Converters/CrossSectionRepositoryFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/CrossSectionRepositoryFromDTOConvertStrategy.cs index 7b11c07..61a79cc 100644 --- a/DataAccess/DTOs/Converters/CrossSectionRepositoryFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/CrossSectionRepositoryFromDTOConvertStrategy.cs @@ -20,7 +20,7 @@ namespace DataAccess.DTOs public class CrossSectionRepositoryFromDTOConvertStrategy : ConvertStrategy { private const string convertStarted = " converting is started"; - private const string convertFinished = " converting has been finished succesfully"; + private const string convertFinished = " converting has been finished successfully"; private CrossSectionRepository newRepository; private IHasPrimitivesProcessLogic primitivesProcessLogic = new HasPrimitivesProcessLogic(); diff --git a/DataAccess/DTOs/Converters/ElasticMaterialFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ElasticMaterialFromDTOConvertStrategy.cs index e60fda1..55c4071 100644 --- a/DataAccess/DTOs/Converters/ElasticMaterialFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ElasticMaterialFromDTOConvertStrategy.cs @@ -28,7 +28,7 @@ namespace DataAccess.DTOs TraceLogger?.AddMessage("Elastic material converting is started", TraceLogStatuses.Service); ElasticMaterial newItem = new(source.Id); updateStrategy.Update(newItem, source); - TraceLogger?.AddMessage("Elastic material converting has been finished succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Elastic material converting has been finished successfully", TraceLogStatuses.Service); return newItem; } } diff --git a/DataAccess/DTOs/Converters/FRMaterialFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/FRMaterialFromDTOConvertStrategy.cs index e1f5489..5fedd3f 100644 --- a/DataAccess/DTOs/Converters/FRMaterialFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/FRMaterialFromDTOConvertStrategy.cs @@ -28,7 +28,7 @@ namespace DataAccess.DTOs TraceLogger?.AddMessage("Fiber reinforcement material converting is started", TraceLogStatuses.Service); FRMaterial newItem = new(source.MaterialType, source.Id); updateStrategy.Update(newItem, source); - TraceLogger?.AddMessage("FiberReinforcement material converting has been finished succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("FiberReinforcement material converting has been finished successfully", TraceLogStatuses.Service); return newItem; } } diff --git a/DataAccess/DTOs/Converters/ForceCombinationListFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ForceCombinationListFromDTOConvertStrategy.cs index f02c79e..552720b 100644 --- a/DataAccess/DTOs/Converters/ForceCombinationListFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ForceCombinationListFromDTOConvertStrategy.cs @@ -57,7 +57,7 @@ namespace DataAccess.DTOs TraceLogger?.AddMessage($"Mx = {newDesignTuple.ForceTuple.Mx}, My = {newDesignTuple.ForceTuple.My}, Nz = {newDesignTuple.ForceTuple.Nz}"); newItem.DesignForces.Add(newDesignTuple); } - TraceLogger?.AddMessage($"Force combination list name = {newItem.Name} has been finished succesfully"); + TraceLogger?.AddMessage($"Force combination list name = {newItem.Name} has been finished successfully"); return newItem; } } diff --git a/DataAccess/DTOs/Converters/HasForceActionsProcessLogic.cs b/DataAccess/DTOs/Converters/HasForceActionsProcessLogic.cs index b076c9d..e3b72a7 100644 --- a/DataAccess/DTOs/Converters/HasForceActionsProcessLogic.cs +++ b/DataAccess/DTOs/Converters/HasForceActionsProcessLogic.cs @@ -12,7 +12,7 @@ namespace DataAccess.DTOs public class HasForceActionsProcessLogic : IHasForceActionsProcessLogic { private const string convertStarted = " converting is started"; - private const string convertFinished = " converting has been finished succesfully"; + private const string convertFinished = " converting has been finished successfully"; public IShiftTraceLogger TraceLogger { get; set; } public Dictionary<(Guid id, Type type), ISaveable> ReferenceDictionary { get; set; } diff --git a/DataAccess/DTOs/Converters/HasPrimitivesProcessLogic.cs b/DataAccess/DTOs/Converters/HasPrimitivesProcessLogic.cs index 4f14efb..e411ef9 100644 --- a/DataAccess/DTOs/Converters/HasPrimitivesProcessLogic.cs +++ b/DataAccess/DTOs/Converters/HasPrimitivesProcessLogic.cs @@ -12,7 +12,7 @@ namespace DataAccess.DTOs.Converters public class HasPrimitivesProcessLogic : IHasPrimitivesProcessLogic { private const string convertStarted = " converting is started"; - private const string convertFinished = " converting has been finished succesfully"; + private const string convertFinished = " converting has been finished successfully"; public IHasPrimitives Source { get; set; } public IHasPrimitives Target { get; set; } diff --git a/DataAccess/DTOs/Converters/HeadMaterialFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/HeadMaterialFromDTOConvertStrategy.cs index e47560d..44584f9 100644 --- a/DataAccess/DTOs/Converters/HeadMaterialFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/HeadMaterialFromDTOConvertStrategy.cs @@ -40,7 +40,7 @@ namespace DataAccess.DTOs IHelperMaterial helperMaterial = GetHelperMaterial(source.HelperMaterial); newItem.HelperMaterial = helperMaterial; //GlobalRepository - TraceLogger?.AddMessage($"Head material Name = {newItem.Name} converting has been finished succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage($"Head material Name = {newItem.Name} converting has been finished successfully", TraceLogStatuses.Service); return newItem; } diff --git a/DataAccess/DTOs/Converters/NdmPrimitiveFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/NdmPrimitiveFromDTOConvertStrategy.cs index 776638d..b7c6fc2 100644 --- a/DataAccess/DTOs/Converters/NdmPrimitiveFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/NdmPrimitiveFromDTOConvertStrategy.cs @@ -91,7 +91,7 @@ namespace DataAccess.DTOs rebarConvertStrategy.ReferenceDictionary = ReferenceDictionary; rebarConvertStrategy.TraceLogger = TraceLogger; RebarNdmPrimitive newItem = rebarConvertStrategy.Convert(rebar); - TraceLogger?.AddMessage($"Primtive has been obtained succesfully, Name = {newItem.Name}"); + TraceLogger?.AddMessage($"Primtive has been obtained successfully, Name = {newItem.Name}"); newItem.HostPrimitive = GetHostPrimitive(rebar); return newItem; } @@ -115,7 +115,7 @@ namespace DataAccess.DTOs pointConvertStrategy.ReferenceDictionary = ReferenceDictionary; pointConvertStrategy.TraceLogger = TraceLogger; PointNdmPrimitive newItem = pointConvertStrategy.Convert(point); - TraceLogger?.AddMessage($"Primtive has been obtained succesfully, Name = {newItem.Name}"); + TraceLogger?.AddMessage($"Primtive has been obtained successfully, Name = {newItem.Name}"); return newItem; } @@ -125,7 +125,7 @@ namespace DataAccess.DTOs ellipseConvertStrategy.ReferenceDictionary = ReferenceDictionary; ellipseConvertStrategy.TraceLogger = TraceLogger; EllipseNdmPrimitive newItem = ellipseConvertStrategy.Convert(ellipse); - TraceLogger?.AddMessage($"Primtive has been obtained succesfully, Name = {newItem.Name}"); + TraceLogger?.AddMessage($"Primtive has been obtained successfully, Name = {newItem.Name}"); return newItem; } @@ -135,7 +135,7 @@ namespace DataAccess.DTOs rectangleConvertStrategy.ReferenceDictionary = ReferenceDictionary; rectangleConvertStrategy.TraceLogger = TraceLogger; RectangleNdmPrimitive newItem = rectangleConvertStrategy.Convert(rectangle); - TraceLogger?.AddMessage($"Primtive has been obtained succesfully, Name = {newItem.Name}"); + TraceLogger?.AddMessage($"Primtive has been obtained successfully, Name = {newItem.Name}"); return newItem; } } diff --git a/DataAccess/DTOs/Converters/ProjectFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ProjectFromDTOConvertStrategy.cs index b60c3e9..0e48a2a 100644 --- a/DataAccess/DTOs/Converters/ProjectFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ProjectFromDTOConvertStrategy.cs @@ -1,82 +1,69 @@ using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Analyses; -using StructureHelperCommon.Models.Loggers; using StructureHelperCommon.Models.Projects; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace DataAccess.DTOs { - public class ProjectFromDTOConvertStrategy : IConvertStrategy + public class ProjectFromDTOConvertStrategy : ConvertStrategy { - private IUpdateStrategy updateStrategy; - private IConvertStrategy visualAnalysisConvertStrategy = new VisualAnaysisFromDTOConvertStrategy(); + private IUpdateStrategy _updateStrategy; + private IConvertStrategy _convertLogic; - public ProjectFromDTOConvertStrategy(IUpdateStrategy updateStrategy) + public ProjectFromDTOConvertStrategy(IUpdateStrategy updateStrategy, + IConvertStrategy convertLogic, + Dictionary<(Guid id, Type type), ISaveable> refDictinary, + IShiftTraceLogger? traceLogger) { - this.updateStrategy = updateStrategy; + _updateStrategy = updateStrategy; + _convertLogic = convertLogic; + ReferenceDictionary = refDictinary; + TraceLogger = traceLogger; } - public ProjectFromDTOConvertStrategy() : this (new ProjectUpdateStrategy()) - { - - } + public ProjectFromDTOConvertStrategy( + Dictionary<(Guid id, Type type), ISaveable> refDictinary, + IShiftTraceLogger? traceLogger) + : this( + new ProjectUpdateStrategy(), + new DictionaryConvertStrategy( + refDictinary, + new VisualAnaysisFromDTOConvertStrategy(refDictinary, traceLogger), + traceLogger), + refDictinary, + traceLogger) + { } - public Dictionary<(Guid id, Type type), ISaveable> ReferenceDictionary { get; set; } - public IShiftTraceLogger TraceLogger { get; set; } - - public Project Convert(ProjectDTO source) - { - Check(); - TraceLogger?.AddMessage("Converting project is started", TraceLogStatuses.Info); - try - { - Project newItem = GetProject(source); - return newItem; - } - catch (Exception ex) - { - TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Error); - TraceLogger?.AddMessage(ex.Message, TraceLogStatuses.Error); - throw; - } - } - - private Project GetProject(ProjectDTO source) - { - TraceLogger?.AddMessage("Converting of project is started", TraceLogStatuses.Service); - Project newItem = new(); - updateStrategy.Update(newItem, source); - visualAnalysisConvertStrategy.ReferenceDictionary = ReferenceDictionary; - visualAnalysisConvertStrategy.TraceLogger = TraceLogger; - var convertLogic = new DictionaryConvertStrategy(this, visualAnalysisConvertStrategy); + public override Project GetNewItem(ProjectDTO source) +{ + TraceLogger?.AddMessage("Converting of project is started"); + Project newItem = new(source.Id); + List analyses = GetAnalyses(source, newItem); newItem.VisualAnalyses.Clear(); - TraceLogger?.AddMessage($"Source project has {source.VisualAnalyses.Count()} analyses", TraceLogStatuses.Service); - foreach (var item in source.VisualAnalyses) - { - var visualAnalysis = convertLogic.Convert(item); - newItem.VisualAnalyses.Add(visualAnalysis); - } + newItem.VisualAnalyses.AddRange(analyses); if (newItem.VisualAnalyses.Any()) { - TraceLogger?.AddMessage($"Totaly {newItem.VisualAnalyses.Count()} were(was) obtained", TraceLogStatuses.Service); + TraceLogger?.AddMessage($"Totaly {newItem.VisualAnalyses.Count} were(was) obtained"); } else { - TraceLogger?.AddMessage($"Project does not have any analyses", TraceLogStatuses.Warning); + TraceLogger?.AddMessage($"Project does not have any analyses, it is possible to work with project", TraceLogStatuses.Warning); } - TraceLogger?.AddMessage("Converting of project has completed succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Converting of project has been finished successfully"); return newItem; } - private void Check() + public List GetAnalyses(ProjectDTO source, Project newItem) { - var checkLogic = new CheckConvertLogic(this); - checkLogic.Check(); + _updateStrategy.Update(newItem, source); + TraceLogger?.AddMessage($"Source project has {source.VisualAnalyses.Count} analyses"); + List analyses = new(); + foreach (var item in source.VisualAnalyses) + { + var visualAnalysis = _convertLogic.Convert(item); + analyses.Add(visualAnalysis); + } + return analyses; } } } diff --git a/DataAccess/DTOs/Converters/ReinforcementLibMaterialFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/ReinforcementLibMaterialFromDTOConvertStrategy.cs index 3d8b698..f3d13dd 100644 --- a/DataAccess/DTOs/Converters/ReinforcementLibMaterialFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/ReinforcementLibMaterialFromDTOConvertStrategy.cs @@ -28,7 +28,7 @@ namespace DataAccess.DTOs TraceLogger?.AddMessage("Reinforcement library material converting is started", TraceLogStatuses.Service); ReinforcementLibMaterial newItem = new(source.Id); updateStrategy.Update(newItem, source); - TraceLogger?.AddMessage("Reinforcement library material converting has been finished succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Reinforcement library material converting has been finished successfully", TraceLogStatuses.Service); return newItem; } } diff --git a/DataAccess/DTOs/Converters/VersionItemFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/VersionItemFromDTOConvertStrategy.cs index 439a8b4..995fd2e 100644 --- a/DataAccess/DTOs/Converters/VersionItemFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/VersionItemFromDTOConvertStrategy.cs @@ -64,7 +64,7 @@ namespace DataAccess.DTOs crossSectionConvertStrategy.TraceLogger = TraceLogger; var convertLogic = new DictionaryConvertStrategy(this, crossSectionConvertStrategy); ICrossSection newItem = convertLogic.Convert(source); - TraceLogger?.AddMessage("Cross-Section converting has been finished succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Cross-Section converting has been finished successfully", TraceLogStatuses.Service); return newItem; } diff --git a/DataAccess/DTOs/Converters/VersionProcessorFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/VersionProcessorFromDTOConvertStrategy.cs index c03fbec..6344dce 100644 --- a/DataAccess/DTOs/Converters/VersionProcessorFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/VersionProcessorFromDTOConvertStrategy.cs @@ -59,7 +59,7 @@ namespace DataAccess.DTOs newItem.Versions.Add(dateVersion); } TraceLogger?.AddMessage($"Totaly {newItem.Versions.Count} version(s) was(were) obtained", TraceLogStatuses.Service); - TraceLogger?.AddMessage("Version processor has been converted succesfully", TraceLogStatuses.Service); + TraceLogger?.AddMessage("Version processor has been converted successfully", TraceLogStatuses.Service); return newItem; } diff --git a/DataAccess/DTOs/Converters/VisualAnaysisFromDTOConvertStrategy.cs b/DataAccess/DTOs/Converters/VisualAnaysisFromDTOConvertStrategy.cs index e098651..ee57296 100644 --- a/DataAccess/DTOs/Converters/VisualAnaysisFromDTOConvertStrategy.cs +++ b/DataAccess/DTOs/Converters/VisualAnaysisFromDTOConvertStrategy.cs @@ -12,42 +12,37 @@ using System.Threading.Tasks; namespace DataAccess.DTOs { - public class VisualAnaysisFromDTOConvertStrategy : IConvertStrategy + public class VisualAnaysisFromDTOConvertStrategy : ConvertStrategy { - private IConvertStrategy analysisConvertStrategy = new AnalysisFromDTOConvertStrategy(); - public Dictionary<(Guid id, Type type), ISaveable> ReferenceDictionary { get; set; } - public IShiftTraceLogger TraceLogger { get; set; } + private IConvertStrategy analysisConvertStrategy; - public IVisualAnalysis Convert(IVisualAnalysis source) + public VisualAnaysisFromDTOConvertStrategy(IConvertStrategy analysisConvertStrategy, + Dictionary<(Guid id, Type type), ISaveable> refDictinary, + IShiftTraceLogger? traceLogger) { - Check(); - try - { - VisualAnalysis newItem = GetAnalysis(source); - return newItem; - } - catch (Exception ex) - { - TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Error); - TraceLogger?.AddMessage(ex.Message, TraceLogStatuses.Error); - throw; - } + this.analysisConvertStrategy = analysisConvertStrategy; + ReferenceDictionary = refDictinary; + TraceLogger = traceLogger; } - private VisualAnalysis GetAnalysis(IVisualAnalysis source) + public VisualAnaysisFromDTOConvertStrategy( + Dictionary<(Guid id, Type type), ISaveable> refDictinary, + IShiftTraceLogger? traceLogger) + : this( + new AnalysisFromDTOConvertStrategy(), + refDictinary, + traceLogger) + { } + + public override VisualAnalysis GetNewItem(IVisualAnalysis source) { + TraceLogger?.AddMessage($"Visual Analysis Name = {source.Analysis.Name} converting is started"); analysisConvertStrategy.ReferenceDictionary = ReferenceDictionary; analysisConvertStrategy.TraceLogger = TraceLogger; IAnalysis analysis = analysisConvertStrategy.Convert(source.Analysis); VisualAnalysis newItem = new(source.Id, analysis); - TraceLogger?.AddMessage($"Visual Analysis was obtained succesfully", TraceLogStatuses.Debug); + TraceLogger?.AddMessage($"Visual Analysis Name = {newItem.Analysis.Name} was obtained successfully"); return newItem; } - - private void Check() - { - var checkLogic = new CheckConvertLogic(this); - checkLogic.Check(); - } } } diff --git a/DataAccess/DTOs/DTOEntities/ProjectDTO.cs b/DataAccess/DTOs/DTOEntities/ProjectDTO.cs index 95abbe6..455558d 100644 --- a/DataAccess/DTOs/DTOEntities/ProjectDTO.cs +++ b/DataAccess/DTOs/DTOEntities/ProjectDTO.cs @@ -20,7 +20,7 @@ namespace DataAccess.DTOs public bool IsActual { get; set; } [JsonProperty("VisualAnalyses")] - public List VisualAnalyses { get; private set; } = new(); + public List VisualAnalyses { get; set; } = new(); [JsonIgnore] public string FileName { get; set; } diff --git a/DataAccess/Infrastructures/CheckRootObjectLogic.cs b/DataAccess/Infrastructures/CheckRootObjectLogic.cs new file mode 100644 index 0000000..9f3aa7b --- /dev/null +++ b/DataAccess/Infrastructures/CheckRootObjectLogic.cs @@ -0,0 +1,75 @@ +using DataAccess.DTOs; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Projects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public class CheckRootObjectLogic : ICheckEntityLogic + { + public IRootObjectDTO Entity { get; set; } + + public string CheckResult { get; private set; } + + public IShiftTraceLogger? TraceLogger { get; set; } + + public CheckRootObjectLogic(IShiftTraceLogger? traceLogger) + { + TraceLogger = traceLogger; + } + + public bool Check() + { + bool result = true; + string checkResult = string.Empty; + var checkRootResult = CheckRootObject(); + if (checkRootResult.checkResult = false) + { + checkResult += checkRootResult.errorString; + result = false; + } + CheckResult = checkResult; + return result; + } + + private (bool checkResult, string errorString) CheckRootObject() + { + bool checkRootResult = true; + string errorString = string.Empty; + + if (Entity.FileVersion is null) + { + checkRootResult = false; + errorString += "Section of file version is damaged"; + TraceLogger?.AddMessage(errorString, TraceLogStatuses.Error); + return (checkRootResult, errorString); + } + var fileVersion = Entity.FileVersion; + var checkLogic = new CheckFileVersionLogic() + { + FileVersion = fileVersion, + TraceLogger = TraceLogger + }; + var checkResult = checkLogic.Check(); + if (checkResult == false) + { + checkRootResult = false; + errorString += checkLogic.CheckResult; + return (checkRootResult, errorString); + } + if (Entity.Project is null) + { + checkRootResult = false; + errorString += "Section of project is damaged"; + TraceLogger?.AddMessage(errorString, TraceLogStatuses.Error); + return (checkRootResult, errorString); + } + return (checkRootResult, errorString); + } + } +} diff --git a/DataAccess/Infrastructures/FileOpenLogic.cs b/DataAccess/Infrastructures/FileOpenLogic.cs index a40b67a..71e318f 100644 --- a/DataAccess/Infrastructures/FileOpenLogic.cs +++ b/DataAccess/Infrastructures/FileOpenLogic.cs @@ -16,10 +16,41 @@ namespace DataAccess.Infrastructures public class FileOpenLogic : IFileOpenLogic { private string fileName; - private Dictionary<(Guid id, Type type), ISaveable> refDictinary; - + private IGetProjectLogic getProjectLogic; public IShiftTraceLogger? TraceLogger { get; set; } + public OpenProjectResult OpenFile() + { + var result = new OpenProjectResult() + { + IsValid = true + }; + if (GetFilePath() == false) + { + result.IsValid = false; + return result; + } + return OpenFile(fileName); + } + + public OpenProjectResult OpenFile(string fileName) + { + var result = new OpenProjectResult() + { + IsValid = true + }; + if (!File.Exists(fileName)) + { + result.IsValid = false; + TraceLogger?.AddMessage($"File {fileName} does not exists", TraceLogStatuses.Error); + return result; + } + getProjectLogic = new GetProjectLogic(TraceLogger); + getProjectLogic.TraceLogger = TraceLogger; + getProjectLogic.FileName = fileName; + return getProjectLogic.GetProject(); + } + private bool GetFilePath() { var inputData = new OpenFileInputData() @@ -37,106 +68,6 @@ namespace DataAccess.Infrastructures return true; } - public OpenProjectResult OpenFile() - { - var result = new OpenProjectResult() - { - IsValid = true - }; - if (GetFilePath() == false) - { - result.IsValid = false; - return result; - } - if (!File.Exists(fileName)) - { - result.IsValid = false; - TraceLogger?.AddMessage($"File {fileName} does not exists", TraceLogStatuses.Error); - return result; - } - string jsonData = File.ReadAllText(fileName); - RootObjectDTO? rootObject = GetRootObject(jsonData); - if (rootObject.FileVersion is null) - { - var errorString = "Section of file version is damaged"; - result.Description += errorString; - result.IsValid = false; - return result; - } - var fileVersion = rootObject.FileVersion; - var checkLogic = new CheckFileVersionLogic() - { - FileVersion = fileVersion, - TraceLogger = TraceLogger - }; - var checkResult = checkLogic.Check(); - if (checkResult == false) - { - result.IsValid = false; - result.Description += checkLogic.CheckResult; - } - else - { - if (rootObject.Project is null) - { - var errorString = "Section of project is damaged"; - result.Description += errorString; - result.IsValid = false; - return result; - } - Project project = GetProject(rootObject); - project.FullFileName = fileName; - result.Project = project; - } - return result; - } - private Project GetProject(RootObjectDTO? rootObject) - { - if (rootObject.Project is null) - { - - } - var currentVersion = ProgramSetting.GetCurrentFileVersion(); - IFileVersion fileVersion = rootObject.FileVersion; - TraceLogger?.AddMessage($"File version is {fileVersion.VersionNumber}.{fileVersion.SubVersionNumber}, current version is {currentVersion.VersionNumber}.{currentVersion.SubVersionNumber}"); - refDictinary = new Dictionary<(Guid id, Type type), ISaveable>(); - IConvertStrategy convertStrategy = new ProjectFromDTOConvertStrategy() - { - ReferenceDictionary = refDictinary, - TraceLogger = TraceLogger - }; - Project project = convertStrategy.Convert(rootObject.Project); - return project; - } - - private RootObjectDTO? GetRootObject(string jsonData) - { - JsonSerializerSettings settings = GetSettings(); - RootObjectDTO rootObject = JsonConvert.DeserializeObject(jsonData, settings); - return rootObject; - } - - private JsonSerializerSettings GetSettings() - { - List<(Type type, string name)> typesNames = TypeBinderListFactory.GetTypeNameList(TypeFileVersion.version_v1); - TypeBinder typeBinder = new(typesNames); - var settings = new JsonSerializerSettings - { - - Converters = new List - { - new FileVersionDTOJsonConverter(TraceLogger), // Add the specific converter - new ProjectDTOJsonConverter(TraceLogger) - }, - SerializationBinder = typeBinder, - Formatting = Formatting.Indented, - PreserveReferencesHandling = PreserveReferencesHandling.All, - MissingMemberHandling = MissingMemberHandling.Ignore, - TypeNameHandling = TypeNameHandling.All, - NullValueHandling = NullValueHandling.Include - }; - return settings; - } } } diff --git a/DataAccess/Infrastructures/FileSaveLogic.cs b/DataAccess/Infrastructures/FileSaveLogic.cs index b74beee..6c8ed14 100644 --- a/DataAccess/Infrastructures/FileSaveLogic.cs +++ b/DataAccess/Infrastructures/FileSaveLogic.cs @@ -12,24 +12,33 @@ namespace DataAccess.Infrastructures { public class FileSaveLogic : IFileSaveLogic { - private IFileVersion version; - private Dictionary<(Guid id, Type type), ISaveable> refDictinary; - public IShiftTraceLogger? TraceLogger { get; set; } - public void SaveFile(IProject project) + public SaveFileResult SaveFile(IProject project) { + SaveFileResult result = new(); if (project.FullFileName == string.Empty || project.FullFileName == "") { - var result = SelectFileName(project); - if (result.IsValid == false) + var selectResult = SelectFileName(project); + if (selectResult.IsValid == false) { - TraceLogger?.AddMessage(result.Description); - return; + TraceLogger?.AddMessage(selectResult.Description); + result.IsValid = false; + return result; } - project.FullFileName = result.FileName; + project.FullFileName = selectResult.FileName; } - SaveToFile(project); + result.FileName = project.FullFileName; + try + { + SaveToFile(project); + } + catch (Exception ex) + { + result.IsValid = false; + result.Description += ex.Message; + } + return result; } private SaveFileResult SelectFileName(IProject project) @@ -47,115 +56,24 @@ namespace DataAccess.Infrastructures private void SaveToFile(IProject project) { - try + ISaveProjectToFileLogic saveProjectLogic = new SaveProjectToFileLogic(TraceLogger) { - version = ProgramSetting.GetCurrentFileVersion(); - refDictinary = new Dictionary<(Guid id, Type type), ISaveable>(); - FileVersionDTO versionDTO = GetVersionDTO(); - var versionString = Serialize(versionDTO, TraceLogger); - File.Delete(project.FullFileName); - refDictinary = new Dictionary<(Guid id, Type type), ISaveable>(); - ProjectDTO projectDTO = GetProjectDTO(project); - RootObjectDTO rootObject = new() - { - FileVersion = versionDTO, - Project = projectDTO - }; - var rootString = Serialize(rootObject, TraceLogger); - SaveStringToFile(project, rootString); - } - catch (Exception ex) - { - TraceLogger?.AddMessage(ex.Message, TraceLogStatuses.Error); - } - - } - - private void SaveStringToFile(IProject project, string versionString) - { - try - { - File.WriteAllText(project.FullFileName, versionString); - TraceLogger?.AddMessage($"File {project.FullFileName} was saved successfully", TraceLogStatuses.Service); - } - catch (Exception ex) - { - TraceLogger?.AddMessage(ex.Message, TraceLogStatuses.Error); - } - } - - private ProjectDTO GetProjectDTO(IProject project) - { - ProjectToDTOConvertStrategy convertStrategy = new() - { - ReferenceDictionary = refDictinary, - TraceLogger = TraceLogger + Project = project }; - DictionaryConvertStrategy dictionaryConvertStrategy = new() - { - ConvertStrategy = convertStrategy, - ReferenceDictionary = refDictinary, - TraceLogger = TraceLogger - }; - ProjectDTO projectDTO = dictionaryConvertStrategy.Convert(project); - return projectDTO; + saveProjectLogic.SaveProject(); } - private FileVersionDTO GetVersionDTO() - { - FileVersionToDTOConvertStrategy fileVersionDTOConvertStrategy = new() - { - ReferenceDictionary = refDictinary, - TraceLogger = TraceLogger - }; - DictionaryConvertStrategy dictionaryConvertStrategy = new() - { - ConvertStrategy = fileVersionDTOConvertStrategy, - ReferenceDictionary = refDictinary, - TraceLogger = TraceLogger - }; - var versionDTO = dictionaryConvertStrategy.Convert(version); - return versionDTO; - } - private static string Serialize(object obj, IShiftTraceLogger logger) - { - JsonSerializerSettings settings = GetSerializingSettings(logger); - string serializedObject = JsonConvert.SerializeObject(obj, settings); - return serializedObject; - } - - private static JsonSerializerSettings GetSerializingSettings(IShiftTraceLogger logger) - { - List<(Type type, string name)> typesNames = TypeBinderListFactory.GetTypeNameList(TypeFileVersion.version_v1); - TypeBinder typeBinder = new(typesNames); - List jsonConverters = new List - { - new FileVersionDTOJsonConverter(logger), - new ProjectDTOJsonConverter(logger) - }; - - var settings = new JsonSerializerSettings - { - Converters = jsonConverters, - SerializationBinder = typeBinder, - Formatting = Formatting.Indented, - PreserveReferencesHandling = PreserveReferencesHandling.All, - MissingMemberHandling = MissingMemberHandling.Ignore, - TypeNameHandling = TypeNameHandling.All, - NullValueHandling = NullValueHandling.Include - }; - return settings; - } - - public void SaveFileAs(IProject project) + public SaveFileResult SaveFileAs(IProject project) { var tmpFullFileName = project.FullFileName; - SaveFile(project); - if (project.FullFileName == string.Empty) + project.FullFileName = string.Empty; + var result = SaveFile(project); + if (result.IsValid == false) { project.FullFileName = tmpFullFileName; } + return result; } } } diff --git a/DataAccess/Infrastructures/GetJsonDataByRootObjectLogic.cs b/DataAccess/Infrastructures/GetJsonDataByRootObjectLogic.cs new file mode 100644 index 0000000..6a09af9 --- /dev/null +++ b/DataAccess/Infrastructures/GetJsonDataByRootObjectLogic.cs @@ -0,0 +1,42 @@ +using DataAccess.DTOs; +using Newtonsoft.Json; +using StructureHelperCommon.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public class GetJsonDataByRootObjectLogic : IGetJsonDataByRootObjectLogic + { + private IGetJsonSettingsLogic getJsonSettingsLogic; + + public GetJsonDataByRootObjectLogic(IGetJsonSettingsLogic getJsonSettingsLogic) + { + this.getJsonSettingsLogic = getJsonSettingsLogic; + } + + public GetJsonDataByRootObjectLogic(IShiftTraceLogger traceLogger) : this (new GetJsonSettingsLogic(traceLogger)) + { + + } + + public IRootObjectDTO RootObject { get; set; } + public IShiftTraceLogger? TraceLogger { get; set; } + + public string GetJsonData() + { + var rootString = Serialize(RootObject); + return rootString; + } + + private string Serialize(object obj) + { + JsonSerializerSettings settings = getJsonSettingsLogic.GetSettings(); + string serializedObject = JsonConvert.SerializeObject(obj, settings); + return serializedObject; + } + } +} diff --git a/DataAccess/Infrastructures/GetJsonSettingsLogic.cs b/DataAccess/Infrastructures/GetJsonSettingsLogic.cs new file mode 100644 index 0000000..aeb3159 --- /dev/null +++ b/DataAccess/Infrastructures/GetJsonSettingsLogic.cs @@ -0,0 +1,51 @@ +using DataAccess.DTOs; +using DataAccess.JsonConverters; +using Newtonsoft.Json; +using NLog; +using StructureHelperCommon.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public class GetJsonSettingsLogic : IGetJsonSettingsLogic + { + public IShiftTraceLogger? TraceLogger { get; set; } + + public GetJsonSettingsLogic(IShiftTraceLogger? traceLogger) + { + TraceLogger = traceLogger; + } + + public JsonSerializerSettings GetSettings() + { + List<(Type type, string name)> typesNames = TypeBinderListFactory.GetTypeNameList(TypeFileVersion.version_v1); + TypeBinder typeBinder = new(typesNames); + List jsonConverters = GetConverters(); + + var settings = new JsonSerializerSettings + { + Converters = jsonConverters, + SerializationBinder = typeBinder, + Formatting = Formatting.Indented, + PreserveReferencesHandling = PreserveReferencesHandling.All, + MissingMemberHandling = MissingMemberHandling.Ignore, + TypeNameHandling = TypeNameHandling.All, + NullValueHandling = NullValueHandling.Include + }; + return settings; + } + + private List GetConverters() + { + return new List + { + new FileVersionDTOJsonConverter(TraceLogger), + new ProjectDTOJsonConverter(TraceLogger) + }; + } + } +} diff --git a/DataAccess/Infrastructures/GetProjectLogic.cs b/DataAccess/Infrastructures/GetProjectLogic.cs new file mode 100644 index 0000000..d0b91a8 --- /dev/null +++ b/DataAccess/Infrastructures/GetProjectLogic.cs @@ -0,0 +1,79 @@ +using DataAccess.DTOs; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Infrastructures.Settings; +using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Models.Projects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public class GetProjectLogic : IGetProjectLogic + { + private IGetRootObjectByJsonDataLogic getRootObjectLogic; + private RootObjectDTO? rootObject; + private ICheckEntityLogic checkEntityLogic; + private OpenProjectResult result; + + public GetProjectLogic(IGetRootObjectByJsonDataLogic getRootObjectLogic, + ICheckEntityLogic checkEntityLogic, + IShiftTraceLogger traceLogger) + { + this.getRootObjectLogic = getRootObjectLogic; + this.checkEntityLogic = checkEntityLogic; + TraceLogger = traceLogger; + } + + public GetProjectLogic(IShiftTraceLogger traceLogger) : this ( + new GetRootObjectLogic(traceLogger), + new CheckRootObjectLogic(traceLogger), + traceLogger) + { + + } + + public string FileName { get; set; } + public IShiftTraceLogger TraceLogger { get; set; } + + public OpenProjectResult GetProject() + { + result = new OpenProjectResult() + { + IsValid = true + }; + string jsonData = File.ReadAllText(FileName); + getRootObjectLogic.JsonData = jsonData; + rootObject = getRootObjectLogic.GetRootObject(); + checkEntityLogic.Entity = rootObject; + var checkResult = checkEntityLogic.Check(); + if (checkResult == false) + { + TraceLogger?.AddMessage(checkEntityLogic.CheckResult, TraceLogStatuses.Error); + result.Description += checkEntityLogic.CheckResult; + result.IsValid = false; + return result; + } + Project project = GetProjectByRootObject(rootObject); + project.FullFileName = FileName; + result.Project = project; + return result; + } + + + + private Project GetProjectByRootObject(RootObjectDTO? rootObject) + { + var currentVersion = ProgramSetting.GetCurrentFileVersion(); + IFileVersion fileVersion = rootObject.FileVersion; + TraceLogger?.AddMessage($"File version is {fileVersion.VersionNumber}.{fileVersion.SubVersionNumber}, current version is {currentVersion.VersionNumber}.{currentVersion.SubVersionNumber}"); + Dictionary<(Guid id, Type type), ISaveable> refDictinary = new Dictionary<(Guid id, Type type), ISaveable>(); + IConvertStrategy convertStrategy = new ProjectFromDTOConvertStrategy(refDictinary, TraceLogger); + Project project = convertStrategy.Convert(rootObject.Project); + return project; + } + } +} diff --git a/DataAccess/Infrastructures/GetRootObjectByProjectLogic.cs b/DataAccess/Infrastructures/GetRootObjectByProjectLogic.cs new file mode 100644 index 0000000..84756b0 --- /dev/null +++ b/DataAccess/Infrastructures/GetRootObjectByProjectLogic.cs @@ -0,0 +1,69 @@ +using DataAccess.DTOs; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Infrastructures.Settings; +using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Projects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public class GetRootObjectByProjectLogic : IGetRootObjectByProjectLogic + { + private readonly IFileVersion version = ProgramSetting.GetCurrentFileVersion(); + private Dictionary<(Guid id, Type type), ISaveable> refDictinary = new Dictionary<(Guid id, Type type), ISaveable>(); + + public IShiftTraceLogger? TraceLogger { get; set; } + + public GetRootObjectByProjectLogic(IShiftTraceLogger? traceLogger) + { + TraceLogger = traceLogger; + } + + public IProject Project { get; set; } + + public RootObjectDTO? GetRootObject() + { + FileVersionDTO fileVersion = GetVersionDTO(); + ProjectDTO project = GetProjectDTO(); + return new RootObjectDTO() { FileVersion = fileVersion, Project = project }; + } + + private FileVersionDTO GetVersionDTO() + { + FileVersionToDTOConvertStrategy fileVersionDTOConvertStrategy = new() + { + ReferenceDictionary = refDictinary, + TraceLogger = TraceLogger + }; + DictionaryConvertStrategy dictionaryConvertStrategy = new() + { + ConvertStrategy = fileVersionDTOConvertStrategy, + ReferenceDictionary = refDictinary, + TraceLogger = TraceLogger + }; + var versionDTO = dictionaryConvertStrategy.Convert(version); + return versionDTO; + } + + private ProjectDTO GetProjectDTO() + { + ProjectToDTOConvertStrategy convertStrategy = new() + { + ReferenceDictionary = refDictinary, + TraceLogger = TraceLogger + }; + DictionaryConvertStrategy dictionaryConvertStrategy = new() + { + ConvertStrategy = convertStrategy, + ReferenceDictionary = refDictinary, + TraceLogger = TraceLogger + }; + ProjectDTO projectDTO = dictionaryConvertStrategy.Convert(Project); + return projectDTO; + } + } +} diff --git a/DataAccess/Infrastructures/GetRootObjectLogic.cs b/DataAccess/Infrastructures/GetRootObjectLogic.cs new file mode 100644 index 0000000..a0f6f9f --- /dev/null +++ b/DataAccess/Infrastructures/GetRootObjectLogic.cs @@ -0,0 +1,53 @@ +using DataAccess.DTOs; +using Newtonsoft.Json; +using StructureHelperCommon.Infrastructures.Exceptions; +using StructureHelperCommon.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public class GetRootObjectLogic : IGetRootObjectByJsonDataLogic + { + private IGetJsonSettingsLogic jsonSettingsLogic; + + public GetRootObjectLogic( + IGetJsonSettingsLogic jsonSettingsLogic, + IShiftTraceLogger traceLogger) + { + this.jsonSettingsLogic = jsonSettingsLogic; + TraceLogger = traceLogger; + } + + public GetRootObjectLogic(IShiftTraceLogger traceLogger) : this (new GetJsonSettingsLogic(traceLogger), traceLogger) + { + + } + + public string JsonData { get; set; } + public IShiftTraceLogger TraceLogger { get; set; } + + public RootObjectDTO? GetRootObject() + { + jsonSettingsLogic.TraceLogger = TraceLogger; + JsonSerializerSettings settings = jsonSettingsLogic.GetSettings(); + TraceLogger?.AddMessage("Deserialization of data is started"); + RootObjectDTO rootObject; + try + { + rootObject = JsonConvert.DeserializeObject(JsonData, settings); + } + catch (Exception ex) + { + string errorString = "Error of deserialization of json data" + ex.Message; + TraceLogger?.AddMessage(errorString, TraceLogStatuses.Error); + throw new StructureHelperException(errorString); + } + TraceLogger?.AddMessage("Deserialization of data has been finished successfully"); + return rootObject; + } + } +} diff --git a/DataAccess/Infrastructures/IFileOpenLogic.cs b/DataAccess/Infrastructures/IFileOpenLogic.cs index c9c45df..aa14dfe 100644 --- a/DataAccess/Infrastructures/IFileOpenLogic.cs +++ b/DataAccess/Infrastructures/IFileOpenLogic.cs @@ -6,5 +6,6 @@ namespace DataAccess.Infrastructures public interface IFileOpenLogic : ILogic { OpenProjectResult OpenFile(); + OpenProjectResult OpenFile(string fileName); } } \ No newline at end of file diff --git a/DataAccess/Infrastructures/IFileSaveLogic.cs b/DataAccess/Infrastructures/IFileSaveLogic.cs index 4cd5f0a..8d22c1c 100644 --- a/DataAccess/Infrastructures/IFileSaveLogic.cs +++ b/DataAccess/Infrastructures/IFileSaveLogic.cs @@ -1,5 +1,6 @@ using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Projects; +using StructureHelperCommon.Services.FileServices; using System; using System.Collections.Generic; using System.Linq; @@ -10,7 +11,7 @@ namespace DataAccess.Infrastructures { public interface IFileSaveLogic : ILogic { - void SaveFile(IProject project); - void SaveFileAs(IProject project); + SaveFileResult SaveFile(IProject project); + SaveFileResult SaveFileAs(IProject project); } } diff --git a/DataAccess/Infrastructures/IGetJsonDataByRootObjectLogic.cs b/DataAccess/Infrastructures/IGetJsonDataByRootObjectLogic.cs new file mode 100644 index 0000000..0ede7a4 --- /dev/null +++ b/DataAccess/Infrastructures/IGetJsonDataByRootObjectLogic.cs @@ -0,0 +1,12 @@ +using DataAccess.DTOs; +using StructureHelperCommon.Infrastructures.Interfaces; + +namespace DataAccess.Infrastructures +{ + public interface IGetJsonDataByRootObjectLogic : ILogic + { + IRootObjectDTO RootObject { get; set; } + + string GetJsonData(); + } +} \ No newline at end of file diff --git a/DataAccess/Infrastructures/IGetJsonSettingsLogic.cs b/DataAccess/Infrastructures/IGetJsonSettingsLogic.cs new file mode 100644 index 0000000..c858961 --- /dev/null +++ b/DataAccess/Infrastructures/IGetJsonSettingsLogic.cs @@ -0,0 +1,15 @@ +using Newtonsoft.Json; +using StructureHelperCommon.Infrastructures.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public interface IGetJsonSettingsLogic : ILogic + { + JsonSerializerSettings GetSettings(); + } +} diff --git a/DataAccess/Infrastructures/IGetProjectLogic.cs b/DataAccess/Infrastructures/IGetProjectLogic.cs new file mode 100644 index 0000000..766bbab --- /dev/null +++ b/DataAccess/Infrastructures/IGetProjectLogic.cs @@ -0,0 +1,18 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Projects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public interface IGetProjectLogic : ILogic + { + string FileName { get; set; } + IShiftTraceLogger TraceLogger { get; set; } + OpenProjectResult GetProject(); + } +} diff --git a/DataAccess/Infrastructures/IGetRootObjectByJsonDataLogic.cs b/DataAccess/Infrastructures/IGetRootObjectByJsonDataLogic.cs new file mode 100644 index 0000000..4a03244 --- /dev/null +++ b/DataAccess/Infrastructures/IGetRootObjectByJsonDataLogic.cs @@ -0,0 +1,16 @@ +using DataAccess.DTOs; +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public interface IGetRootObjectByJsonDataLogic : IGetRootObjectLogic + { + string JsonData { get; set; } + } +} diff --git a/DataAccess/Infrastructures/IGetRootObjectByProjectLogic.cs b/DataAccess/Infrastructures/IGetRootObjectByProjectLogic.cs new file mode 100644 index 0000000..3ea3ec2 --- /dev/null +++ b/DataAccess/Infrastructures/IGetRootObjectByProjectLogic.cs @@ -0,0 +1,14 @@ +using StructureHelperCommon.Models.Projects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public interface IGetRootObjectByProjectLogic : IGetRootObjectLogic + { + IProject Project { get; set; } + } +} diff --git a/DataAccess/Infrastructures/IGetRootObjectLogic.cs b/DataAccess/Infrastructures/IGetRootObjectLogic.cs new file mode 100644 index 0000000..eda3a33 --- /dev/null +++ b/DataAccess/Infrastructures/IGetRootObjectLogic.cs @@ -0,0 +1,10 @@ +using DataAccess.DTOs; +using StructureHelperCommon.Infrastructures.Interfaces; + +namespace DataAccess.Infrastructures +{ + public interface IGetRootObjectLogic : ILogic + { + RootObjectDTO? GetRootObject(); + } +} \ No newline at end of file diff --git a/DataAccess/Infrastructures/IProjectAccessLogic.cs b/DataAccess/Infrastructures/IProjectAccessLogic.cs index c5a59b8..0f3360e 100644 --- a/DataAccess/Infrastructures/IProjectAccessLogic.cs +++ b/DataAccess/Infrastructures/IProjectAccessLogic.cs @@ -12,7 +12,8 @@ namespace DataAccess.Infrastructures public interface IProjectAccessLogic : ILogic { OpenProjectResult OpenProject(); - void SaveProject(IProject project); - void SaveProjectAs(IProject project); + OpenProjectResult OpenProject(string fileName); + SaveFileResult SaveProject(IProject project); + SaveFileResult SaveProjectAs(IProject project); } } diff --git a/DataAccess/Infrastructures/ISaveProjectToFileLogic.cs b/DataAccess/Infrastructures/ISaveProjectToFileLogic.cs new file mode 100644 index 0000000..d7b9d58 --- /dev/null +++ b/DataAccess/Infrastructures/ISaveProjectToFileLogic.cs @@ -0,0 +1,12 @@ +using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Models.Projects; + +namespace DataAccess.Infrastructures +{ + public interface ISaveProjectToFileLogic : ILogic + { + IProject Project { get; set; } + + void SaveProject(); + } +} \ No newline at end of file diff --git a/DataAccess/Infrastructures/ProjectAccessLogic.cs b/DataAccess/Infrastructures/ProjectAccessLogic.cs index edeb7ec..e0be272 100644 --- a/DataAccess/Infrastructures/ProjectAccessLogic.cs +++ b/DataAccess/Infrastructures/ProjectAccessLogic.cs @@ -32,16 +32,24 @@ namespace DataAccess.Infrastructures return openLogic.OpenFile(); } - public void SaveProject(IProject project) + public OpenProjectResult OpenProject(string fileName) { - saveLogic.TraceLogger = TraceLogger; - saveLogic.SaveFile(project); + openLogic.TraceLogger = TraceLogger; + return openLogic.OpenFile(fileName); } - public void SaveProjectAs(IProject project) + public SaveFileResult SaveProject(IProject project) { saveLogic.TraceLogger = TraceLogger; - saveLogic.SaveFileAs(project); + var result = saveLogic.SaveFile(project); + return result; + } + + public SaveFileResult SaveProjectAs(IProject project) + { + saveLogic.TraceLogger = TraceLogger; + var result = saveLogic.SaveFileAs(project); + return result; } } } diff --git a/DataAccess/Infrastructures/SaveProjectToFileLogic.cs b/DataAccess/Infrastructures/SaveProjectToFileLogic.cs new file mode 100644 index 0000000..9ef9269 --- /dev/null +++ b/DataAccess/Infrastructures/SaveProjectToFileLogic.cs @@ -0,0 +1,61 @@ +using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Projects; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataAccess.Infrastructures +{ + public class SaveProjectToFileLogic : ISaveProjectToFileLogic + { + private IGetRootObjectByProjectLogic getRootObjectLogic; + private IGetJsonDataByRootObjectLogic getJsonDataLogic; + + public SaveProjectToFileLogic( + IGetRootObjectByProjectLogic getRootObjectLogic, + IGetJsonDataByRootObjectLogic getJsonDataLogic, + IShiftTraceLogger traceLogger) + { + this.getRootObjectLogic = getRootObjectLogic; + this.getJsonDataLogic = getJsonDataLogic; + TraceLogger = traceLogger; + } + + public SaveProjectToFileLogic(IShiftTraceLogger traceLogger) : this ( + new GetRootObjectByProjectLogic(traceLogger), + new GetJsonDataByRootObjectLogic(traceLogger), + traceLogger + ) + { + + } + + public IProject Project { get; set; } + public IShiftTraceLogger? TraceLogger { get; set; } + + public void SaveProject() + { + getRootObjectLogic.Project = Project; + var rootObject = getRootObjectLogic.GetRootObject(); + getJsonDataLogic.RootObject = rootObject; + var jsonData = getJsonDataLogic.GetJsonData(); + SaveStringToFile(jsonData); + } + + private void SaveStringToFile(string jsonData) + { + try + { + File.Delete(Project.FullFileName); + File.WriteAllText(Project.FullFileName, jsonData); + TraceLogger?.AddMessage($"File {Project.FullFileName} was saved successfully", TraceLogStatuses.Service); + } + catch (Exception ex) + { + TraceLogger?.AddMessage(ex.Message, TraceLogStatuses.Error); + } + } + } +} diff --git a/DataAccess/JsonConverters/BaseJsonConverter.cs b/DataAccess/JsonConverters/BaseJsonConverter.cs index 13cae23..f1dc0ca 100644 --- a/DataAccess/JsonConverters/BaseJsonConverter.cs +++ b/DataAccess/JsonConverters/BaseJsonConverter.cs @@ -6,8 +6,6 @@ using System.Reflection; namespace DataAccess.JsonConverters { - - public abstract class BaseJsonConverter : JsonConverter { private IWriteJsonLogic writeJsonLogic; diff --git a/StructureHelper/App.xaml.cs b/StructureHelper/App.xaml.cs index 80467cf..cdcd4b3 100644 --- a/StructureHelper/App.xaml.cs +++ b/StructureHelper/App.xaml.cs @@ -4,6 +4,8 @@ using StructureHelper.Windows.MainWindow; using StructureHelperLogics.Services.NdmCalculations; using System.Windows; using Autofac; +using System; +using System.IO; namespace StructureHelper { @@ -31,9 +33,40 @@ namespace StructureHelper Container = builder.Build(); Scope = Container.Resolve(); + // Get the command-line arguments + string[] args = Environment.GetCommandLineArgs(); - var window = Scope.Resolve(); - window.Show(); + // Check if there is an argument provided for a file + if (args.Length > 1) // args[0] is the application path + { + OpenSpecifiedFile(args); + } + else + { + // No file specified, open normally + var window = new AnalysesManagerView(); + window.Show(); + } + } + + private static void OpenSpecifiedFile(string[] args) + { + string filePath = args[1]; + + // Optional: Validate the file path + if (File.Exists(filePath)) + { + // Pass the file path to your main window or handling logic + var vm = new AnalysesManagerViewModel(); + vm.FileLogic.OpenNewFile(filePath); + //var window = Scope.Resolve(vm); + var window = new AnalysesManagerView(vm); + window.Show(); + } + else + { + MessageBox.Show("File does not exist."); + } } protected override void OnExit(ExitEventArgs e) diff --git a/StructureHelper/Documentation/Manuals/Руководство пользователя.docx b/StructureHelper/Documentation/Manuals/Руководство пользователя.docx index a0f2745..ebd6179 100644 Binary files a/StructureHelper/Documentation/Manuals/Руководство пользователя.docx and b/StructureHelper/Documentation/Manuals/Руководство пользователя.docx differ diff --git a/StructureHelper/Documentation/Manuals/Руководство пользователя.pdf b/StructureHelper/Documentation/Manuals/Руководство пользователя.pdf index 0c762e0..b2f3f1d 100644 Binary files a/StructureHelper/Documentation/Manuals/Руководство пользователя.pdf and b/StructureHelper/Documentation/Manuals/Руководство пользователя.pdf differ diff --git a/StructureHelper/Infrastructure/UI/Icons/SH_лого_16.ico b/StructureHelper/Infrastructure/UI/Icons/SH_лого_16.ico new file mode 100644 index 0000000..176e418 Binary files /dev/null and b/StructureHelper/Infrastructure/UI/Icons/SH_лого_16.ico differ diff --git a/StructureHelper/Libraries/LoaderCalculator.dll b/StructureHelper/Libraries/LoaderCalculator.dll index 083e55c..a3ad125 100644 Binary files a/StructureHelper/Libraries/LoaderCalculator.dll and b/StructureHelper/Libraries/LoaderCalculator.dll differ diff --git a/StructureHelper/SH_лого_16.ico b/StructureHelper/SH_лого_16.ico new file mode 100644 index 0000000..176e418 Binary files /dev/null and b/StructureHelper/SH_лого_16.ico differ diff --git a/StructureHelper/StructureHelper.csproj b/StructureHelper/StructureHelper.csproj index dd1b343..95a1d97 100644 --- a/StructureHelper/StructureHelper.csproj +++ b/StructureHelper/StructureHelper.csproj @@ -9,6 +9,7 @@ disable 7.0 false + Infrastructure\UI\Icons\SH_лого_16.ico @@ -53,6 +54,10 @@ + + + + diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/GeometryCalculatorViews/GeometryCalculatorResultView.xaml b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/GeometryCalculatorViews/GeometryCalculatorResultView.xaml index e7cddb7..af86d09 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/GeometryCalculatorViews/GeometryCalculatorResultView.xaml +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/GeometryCalculatorViews/GeometryCalculatorResultView.xaml @@ -7,7 +7,7 @@ xmlns:vm="clr-namespace:StructureHelper.Windows.ViewModels.Calculations.Calculators.GeometryCalculatorVMs" mc:Ignorable="d" d:DataContext="{d:DesignInstance vm:GeometryCalculatorResultViewModel}" - Title="Geometry Properies" Height="450" Width="850" WindowStartupLocation="CenterScreen"> + Title="Geometry Properties" Height="450" Width="850" WindowStartupLocation="CenterScreen"> @@ -27,7 +27,7 @@ - + diff --git a/StructureHelper/Windows/MainWindow/Analyses/AnalysesLogic.cs b/StructureHelper/Windows/MainWindow/Analyses/AnalysesLogic.cs index 7eff43b..c7ab311 100644 --- a/StructureHelper/Windows/MainWindow/Analyses/AnalysesLogic.cs +++ b/StructureHelper/Windows/MainWindow/Analyses/AnalysesLogic.cs @@ -101,6 +101,10 @@ namespace StructureHelper.Windows.MainWindow SelectedAnalysis.Analysis.Name = name; SelectedAnalysis.Analysis.Tags = tags; } + else + { + ProgramSetting.SetCurrentProjectToNotActual(); + } } } private void DeleteAnalysis() @@ -111,6 +115,7 @@ namespace StructureHelper.Windows.MainWindow if (dialogResult == DialogResult.Yes) { ProgramSetting.CurrentProject.VisualAnalyses.Remove(SelectedAnalysis); + ProgramSetting.SetCurrentProjectToNotActual(); } } } @@ -119,6 +124,7 @@ namespace StructureHelper.Windows.MainWindow if (SelectedAnalysis is null) { return; } SelectedAnalysis.ActionToRun = ActionToRun; SelectedAnalysis?.Run(); + ProgramSetting.SetCurrentProjectToNotActual(); } private void AddCrossSectionNdmAnalysis() { @@ -127,7 +133,7 @@ namespace StructureHelper.Windows.MainWindow analysis.Tags = "#New group"; var visualAnalysis = new VisualAnalysis(analysis); ProgramSetting.CurrentProject.VisualAnalyses.Add(visualAnalysis); - //ProgramSetting.SetCurrentProjectToNotActual(); + ProgramSetting.SetCurrentProjectToNotActual(); } private void ActionToRun() diff --git a/StructureHelper/Windows/MainWindow/Analyses/FileLogic.cs b/StructureHelper/Windows/MainWindow/Analyses/FileLogic.cs index e914866..17d50a1 100644 --- a/StructureHelper/Windows/MainWindow/Analyses/FileLogic.cs +++ b/StructureHelper/Windows/MainWindow/Analyses/FileLogic.cs @@ -6,6 +6,7 @@ using StructureHelperCommon.Infrastructures.Settings; using StructureHelperCommon.Models; using StructureHelperCommon.Models.Analyses; using StructureHelperCommon.Models.Projects; +using StructureHelperCommon.Services.FileServices; using StructureHelperLogics.Models.CrossSections; using System; using System.Linq; @@ -63,20 +64,26 @@ namespace StructureHelper.Windows.MainWindow ProgramSetting.Projects.Add(newProject); return newProject; } - private void SaveAsFile() + private SaveFileResult SaveAsFile() { var project = ProgramSetting.CurrentProject; traceLogger = new ShiftTraceLogger(); projectAccessLogic.TraceLogger = traceLogger; - projectAccessLogic.SaveProjectAs(project); + var result = projectAccessLogic.SaveProjectAs(project); ShowEntries(); + return result; } - private void ExitProgram() + public bool ExitProgram() { - foreach (var project in ProgramSetting.Projects) + var collection = ProgramSetting.Projects.ToList(); + foreach (var project in collection) { - CloseFile(project); + if (CloseFile(project) == false) + { + return false; + }; } + return true; } public bool CloseFile() { @@ -95,10 +102,20 @@ namespace StructureHelper.Windows.MainWindow ProgramSetting.Projects.Remove(project); return true; } - var dialogResult = MessageBox.Show($"Save file?", $"File {project.FullFileName} is not saved", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); + DialogResult dialogResult = GetDialog(project); if (dialogResult == DialogResult.Yes) { - SaveFile(project); + var result = SaveFile(project); + if (result.IsValid = false) + { + return false; + } + } + else if (dialogResult == DialogResult.No) + { + project.IsActual = true; + ProgramSetting.Projects.Remove(project); + return true; } else if (dialogResult == DialogResult.Cancel) { @@ -108,17 +125,24 @@ namespace StructureHelper.Windows.MainWindow CloseFile(project); return true; } + + private static DialogResult GetDialog(IProject project) + { + return MessageBox.Show($"File {project.FullFileName} has unsaved changes", $"StructureHelper: Save file?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); + } + private void SaveFile() { var project = ProgramSetting.CurrentProject; SaveFile(project); } - private void SaveFile(IProject project) + private SaveFileResult SaveFile(IProject project) { traceLogger = new ShiftTraceLogger(); projectAccessLogic.TraceLogger = traceLogger; - projectAccessLogic.SaveProject(project); + var result = projectAccessLogic.SaveProject(project); ShowEntries(); + return result; } private void OpenFile() { @@ -128,29 +152,47 @@ namespace StructureHelper.Windows.MainWindow { return; } + OpenNewFile(currentProject); + } + + private void OpenNewFile(IProject currentProject) + { traceLogger = new ShiftTraceLogger(); projectAccessLogic.TraceLogger = traceLogger; - try + var result = projectAccessLogic.OpenProject(); + if (result.IsValid == true) { - var result = projectAccessLogic.OpenProject(); - if (result.IsValid == true) - { - result.Project.IsActual = true; - ProgramSetting.Projects.Clear(); - ProgramSetting.Projects.Add(result.Project); - } - else - { - ProgramSetting.Projects.Add(currentProject); - } + result.Project.IsActual = true; + ProgramSetting.Projects.Clear(); + ProgramSetting.Projects.Add(result.Project); } - catch (Exception ex) + else { - traceLogger?.AddMessage(ex.Message, TraceLogStatuses.Error); + ProgramSetting.Projects.Add(currentProject); } ShowEntries(); ParentVM.AnalysesLogic.Refresh(); } + + public void OpenNewFile(string fileName) + { + traceLogger = new ShiftTraceLogger(); + projectAccessLogic.TraceLogger = traceLogger; + var result = projectAccessLogic.OpenProject(fileName); + if (result.IsValid == true) + { + result.Project.IsActual = true; + ProgramSetting.Projects.Clear(); + ProgramSetting.Projects.Add(result.Project); + } + else + { + ProgramSetting.Projects.Add(new Project()); + } + ShowEntries(); + ParentVM.AnalysesLogic.Refresh(); + } + private void ShowEntries() { var filteredEntries = traceLogger.TraceLoggerEntries.Where(x => x.Priority < 300); diff --git a/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml b/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml index a84b9a4..8f3953e 100644 --- a/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml +++ b/StructureHelper/Windows/MainWindow/AnalysesManagerView.xaml @@ -40,7 +40,26 @@ -