using System; using System.Linq; namespace InABox.Core { public interface IEnclosedEntity : ISubObject { } public abstract class EnclosedEntity : BaseObject, IEnclosedEntity { private BaseObject? _linkedParent; private string? _linkedPath; public void SetLinkedParent(BaseObject parent) { _linkedParent = parent; } public void SetLinkedPath(string path) { _linkedPath = path; } protected override IOriginalValues CreateOriginalValues() { return new SubObjectOriginalValues(this); } protected override ILoadedColumns CreateLoadedColumns() { return new SubObjectLoadedColumns(this); } public BaseObject? GetLinkedParent() => _linkedParent; public string? GetLinkedPath() => _linkedPath; protected override void DoPropertyChanged(string name, object? before, object? after) { LinkedProperties.GetParent(this)?.CascadePropertyChanged(LinkedProperties.GetPath(this) + "." + name, before, after); if (LinkedProperties.Find(this, name, out var link, out var parent)) { link.Update(this, parent); } } } }