Add VisualAnalysisDTO

This commit is contained in:
Evgeny Redikultsev
2024-09-14 19:03:35 +05:00
parent 5a9e7c3c4f
commit c10d6eb94e
84 changed files with 958 additions and 410 deletions

View File

@@ -27,5 +27,7 @@
public static string ObjectNotFound => "#0018: Object not found";
public static string ErrorDuring(string operation) => string.Format("Errors appeared during {0}, see detailed information", operation);
public static string CalculationError => "#0019: Error of calculation";
public static string SourceObject => "#0020: Source object";
public static string TargetObject => "#0021: Target object";
}
}

View File

@@ -0,0 +1,19 @@
using StructureHelperCommon.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Infrastructures.Interfaces
{
public abstract class BaseUpdateStrategy<T> : IUpdateStrategy<T>
{
public abstract void Update(T targetObject, T sourceObject);
public void Check(T targetObject, T sourceObject)
{
CheckObject.IsNull(targetObject, sourceObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; };
}
}
}

View File

@@ -17,7 +17,7 @@ namespace StructureHelperCommon.Infrastructures.Interfaces
public IShiftTraceLogger? TraceLogger { get; set; }
public IConvertStrategy<T,V> ConvertStrategy { get; set; }
public Dictionary<(Guid id, Type type), ISaveable> ReferenceDictionary { get; set; }
public T ConvertFrom(V source)
public T Convert(V source)
{
ICheckInputData();
T val;
@@ -31,32 +31,12 @@ namespace StructureHelperCommon.Infrastructures.Interfaces
}
else
{
val = ConvertStrategy.ConvertFrom(source);
val = ConvertStrategy.Convert(source);
ReferenceDictionary.Add(key, val);
TraceLogger?.AddMessage($"New value of {typeof(T)} (Id = {val.Id}) was added to dictionary", TraceLogStatuses.Debug);
}
return val;
}
public V ConvertTo(T source)
{
ICheckInputData();
V val;
var key = (source.Id, typeof(V));
if (ReferenceDictionary.ContainsKey(key))
{
ISaveable existValue;
ReferenceDictionary.TryGetValue(key, out existValue);
val = (V)existValue;
TraceLogger?.AddMessage($"Value of {typeof(V)} (Id = {existValue.Id}) exists already", TraceLogStatuses.Debug);
}
else
{
val = ConvertStrategy.ConvertTo(source);
ReferenceDictionary.Add(key, val);
TraceLogger?.AddMessage($"New value of {typeof(V)} (Id = {val.Id}) was added to dictionary", TraceLogStatuses.Debug);
}
return val;
}
private void ICheckInputData()
{
if(ReferenceDictionary is null)

View File

@@ -11,8 +11,8 @@ namespace StructureHelperCommon.Infrastructures.Interfaces
where T :ISaveable
where V :ISaveable
{
Dictionary<(Guid id, Type type), ISaveable> ReferenceDictionary { get; set; }
IShiftTraceLogger TraceLogger { get; set; }
V ConvertTo(T source);
T ConvertFrom(V source);
T Convert(V source);
}
}

View File

@@ -0,0 +1,20 @@
using StructureHelperCommon.Models.Shapes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Infrastructures.Interfaces
{
/// <summary>
/// Implement center of geometry shape on 2D plane
/// </summary>
public interface IHasCenter2D
{
/// <summary>
/// 2D point of center
/// </summary>
IPoint2D Center {get;set;}
}
}

View File

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Analyses
{
public class Version : IVersion
public class DateVersion : IDateVersion
{
public DateTime DateTime { get; set; }

View File

@@ -0,0 +1,22 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Analyses
{
public class DateVersionUpdateStrategy : IUpdateStrategy<IDateVersion>
{
public void Update(IDateVersion targetObject, IDateVersion sourceObject)
{
CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject);
CheckObject.IsNull(targetObject, ErrorStrings.TargetObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; };
targetObject.DateTime = sourceObject.DateTime;
}
}
}

View File

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Analyses
{
public interface IAnalysis : ISaveable
public interface IAnalysis : ISaveable, ICloneable
{
string Name { get; set; }
string Tags { get; set; }

View File

@@ -7,9 +7,9 @@ using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Analyses
{
public interface IVersion
public interface IDateVersion
{
DateTime DateTime { get; }
DateTime DateTime { get; set; }
ISaveable Item { get; set; }
}
}

View File

@@ -10,7 +10,7 @@ namespace StructureHelperCommon.Models.Analyses
public interface IVersionProcessor : ISaveable
{
void AddVersion(ISaveable newItem);
List<IVersion> Versions { get; }
IVersion GetCurrentVersion();
List<IDateVersion> Versions { get; }
IDateVersion GetCurrentVersion();
}
}

View File

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Analyses
{
public interface IVisualAnalysis : ISaveable
public interface IVisualAnalysis : ISaveable, ICloneable
{
IAnalysis Analysis {get;set;}
void Run();

View File

@@ -9,7 +9,7 @@ namespace StructureHelperCommon.Models.Analyses
{
public class VersionProcessor : IVersionProcessor
{
public List<IVersion> Versions { get; }
public List<IDateVersion> Versions { get; }
public Guid Id { get; }
@@ -24,14 +24,14 @@ namespace StructureHelperCommon.Models.Analyses
}
private void AddVersion(IVersion version)
private void AddVersion(IDateVersion version)
{
Versions.Add(version);
}
public void AddVersion(ISaveable newItem)
{
var version = new Version()
var version = new DateVersion()
{
DateTime = DateTime.Now,
Item = newItem
@@ -40,7 +40,7 @@ namespace StructureHelperCommon.Models.Analyses
}
public IVersion GetCurrentVersion()
public IDateVersion GetCurrentVersion()
{
return Versions[^1];
}

View File

@@ -0,0 +1,18 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Analyses;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Analyses
{
public class VisualAnalysisUpdateStrategy : IUpdateStrategy<IVisualAnalysis>
{
public void Update(IVisualAnalysis targetObject, IVisualAnalysis sourceObject)
{
throw new NotImplementedException();
}
}
}

View File

@@ -12,7 +12,8 @@ namespace StructureHelperCommon.Models.Projects
{
public void Update(IFileVersion targetObject, IFileVersion sourceObject)
{
CheckObject.IsNull(targetObject, sourceObject);
CheckObject.IsNull(targetObject);
CheckObject.IsNull(sourceObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; };
targetObject.VersionNumber = sourceObject.VersionNumber;
targetObject.SubVersionNumber = sourceObject.SubVersionNumber;

View File

@@ -0,0 +1,39 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models.Analyses;
using StructureHelperCommon.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Projects
{
public class ProjectUpdateStrategy : IUpdateStrategy<IProject>
{
private IUpdateStrategy<IVisualAnalysis> updateStrategy;
public ProjectUpdateStrategy(IUpdateStrategy<IVisualAnalysis> updateStrategy)
{
this.updateStrategy = updateStrategy;
}
public ProjectUpdateStrategy() : this(new VisualAnalysisUpdateStrategy())
{
}
public void Update(IProject targetObject, IProject sourceObject)
{
CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject);
CheckObject.IsNull(targetObject, ErrorStrings.TargetObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
targetObject.VisualAnalyses.Clear();
foreach (var item in sourceObject.VisualAnalyses)
{
targetObject.VisualAnalyses.Add(item.Clone() as IVisualAnalysis);
}
}
}
}

View File

@@ -1,4 +1,6 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -17,6 +19,8 @@ namespace StructureHelperCommon.Models.Shapes
/// <inheritdoc />
public void Update(IPoint2D targetObject, IPoint2D sourceObject)
{
CheckObject.IsNull(sourceObject, ErrorStrings.SourceObject);
CheckObject.IsNull(targetObject, ErrorStrings.TargetObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
targetObject.X = sourceObject.X;
targetObject.Y = sourceObject.Y;

View File

@@ -1,4 +1,5 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -11,6 +12,8 @@ namespace StructureHelperCommon.Models.Shapes
{
public void Update(IRectangleShape targetObject, IRectangleShape sourceObject)
{
CheckObject.IsNull(sourceObject);
CheckObject.IsNull(targetObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
targetObject.Width = sourceObject.Width;
targetObject.Height = sourceObject.Height;

View File

@@ -0,0 +1,59 @@
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperCommon.Models.Shapes.Logics
{
public class ShapeUpdateStrategy : IUpdateStrategy<IShape>
{
public void Update(IShape targetObject, IShape sourceObject)
{
CheckObject.IsNull(targetObject);
CheckObject.IsNull(sourceObject);
if (ReferenceEquals(targetObject, sourceObject)) { return; }
if (sourceObject is IRectangleShape sourceRectangle)
{
ProcessRectangles(targetObject, sourceRectangle);
}
else if (sourceObject is ICircleShape sourceCircle)
{
ProcessCircles(targetObject, sourceCircle);
}
else
{
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown);
}
}
private static void ProcessCircles(IShape targetObject, ICircleShape sourceCircle)
{
if (targetObject is ICircleShape targetCircle)
{
var updateLogic = new CircleShapeUpdateStrategy();
updateLogic.Update(targetCircle, sourceCircle);
}
else
{
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + ": target object is not circle");
}
}
private static void ProcessRectangles(IShape targetObject, IRectangleShape sourceRectangle)
{
if (targetObject is IRectangleShape targetRectangle)
{
var updateLogic = new RectangleShapeUpdateStrategy();
updateLogic.Update(targetRectangle, sourceRectangle);
}
else
{
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + ": target object is not rectangle");
}
}
}
}