80 lines
2.6 KiB
C#
80 lines
2.6 KiB
C#
using System.Text.Json.Serialization;
|
|
|
|
namespace EnvelopeGenerator.Web.Models.Annotation;
|
|
|
|
public class AnnotationParams
|
|
{
|
|
public AnnotationParams()
|
|
{
|
|
_AnnotationJSObjectInitor = new(CreateAnnotationJSObject);
|
|
}
|
|
|
|
public Background? Background { get; init; }
|
|
|
|
#region Annotation
|
|
[JsonIgnore]
|
|
public Annotation? DefaultAnnotation { get; init; }
|
|
|
|
private readonly List<Annotation> _annots = new List<Annotation>();
|
|
|
|
public bool TryGet(string name, out Annotation annotation)
|
|
{
|
|
#pragma warning disable CS8601 // Possible null reference assignment.
|
|
annotation = _annots.FirstOrDefault(a => a.Name == name);
|
|
#pragma warning restore CS8601 // Possible null reference assignment.
|
|
return annotation is not null;
|
|
}
|
|
|
|
public required IEnumerable<Annotation> Annotations
|
|
{
|
|
get => _annots;
|
|
init
|
|
{
|
|
_annots = value.ToList();
|
|
|
|
if (DefaultAnnotation is not null)
|
|
foreach (var annot in _annots)
|
|
annot.Default = DefaultAnnotation;
|
|
|
|
foreach (var annot in _annots)
|
|
{
|
|
#region set bound annotations
|
|
// horizontal
|
|
if (annot.HorBoundAnnotName is string horBoundAnnotName)
|
|
if (TryGet(horBoundAnnotName, out var horBoundAnnot))
|
|
annot.HorBoundAnnot = horBoundAnnot;
|
|
else
|
|
throw new InvalidOperationException($"{horBoundAnnotName} added as bound anotation. However, it is not defined.");
|
|
|
|
// vertical
|
|
if (annot.VerBoundAnnotName is string verBoundAnnotName)
|
|
if (TryGet(verBoundAnnotName, out var verBoundAnnot))
|
|
annot.VerBoundAnnot = verBoundAnnot;
|
|
else
|
|
throw new InvalidOperationException($"{verBoundAnnotName} added as bound anotation. However, it is not defined.");
|
|
#endregion
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region AnnotationJSObject
|
|
private Dictionary<string, IAnnotation> CreateAnnotationJSObject()
|
|
{
|
|
var dict = _annots.ToDictionary(a => a.Name.ToLower(), a => a as IAnnotation);
|
|
|
|
if (Background is not null)
|
|
{
|
|
Background.Locate(_annots);
|
|
dict.Add(Background.Name.ToLower(), Background);
|
|
}
|
|
|
|
return dict;
|
|
}
|
|
|
|
private readonly Lazy<Dictionary<string, IAnnotation>> _AnnotationJSObjectInitor;
|
|
|
|
public Dictionary<string, IAnnotation> AnnotationJSObject => _AnnotationJSObjectInitor.Value;
|
|
#endregion
|
|
}
|