From 800b5d9def8535710ed5720553c99c995893d8b9 Mon Sep 17 00:00:00 2001 From: chrisbell Date: Sun, 25 Jan 2026 16:47:29 -0600 Subject: [PATCH] Added SZ singleton and services --- .noai | 0 SzCli/Program.cs | 7 +- SzCli/Test.cs | 19 +++- SzCore/DataObjects/SzDataset.cs | 1 + SzCore/DataObjects/SzTemplateField.cs | 2 +- .../Defaults/DefaultLocalFileManager.cs | 10 +- SzCore/SZ.cs | 107 ++++++++++++++++++ SzCore/SzDataHandler.cs | 6 + 8 files changed, 140 insertions(+), 12 deletions(-) create mode 100644 .noai rename SzCli/LocalFileManager.cs => SzCore/Defaults/DefaultLocalFileManager.cs (88%) create mode 100644 SzCore/SZ.cs create mode 100644 SzCore/SzDataHandler.cs diff --git a/.noai b/.noai new file mode 100644 index 0000000..e69de29 diff --git a/SzCli/Program.cs b/SzCli/Program.cs index 7164b2f..775e722 100644 --- a/SzCli/Program.cs +++ b/SzCli/Program.cs @@ -1,12 +1,13 @@ using System; using SzCore; +using SzCore.Defaults; namespace SzCli; public class Program { - private static readonly ISzFileManager _fileManager = new LocalFileManager(); - private static readonly ISzLogger _logger = new Logger(_fileManager); + private static readonly DefaultLocalFileManager _fileManager = new(); + private static readonly Logger _logger = new(_fileManager); public static void Main(string[] args) { @@ -24,6 +25,6 @@ public class Program var loadedDataset = parser.LoadDataset(dataset.Id); _logger.Log($"Successfully loaded dataset? {loadedDataset != null}. Id is {loadedDataset?.Id}"); - _logger.Log(loadedDataset?.DataObjects["test"].Fields["value"].Value); + _logger.Log(loadedDataset?.DataObjects["test"].Fields["value"].Value ?? "Could not get value of test.value"); } } \ No newline at end of file diff --git a/SzCli/Test.cs b/SzCli/Test.cs index 4bfe6d9..36f4ced 100644 --- a/SzCli/Test.cs +++ b/SzCli/Test.cs @@ -6,11 +6,28 @@ public static class Test { public static SzDataset CreateTestDataset() { + var dt = new SzDataObjectTemplate(){ + Name = "SzCore - Basic Item", + Id = "szcore-item-basic", + DataObjectType = "item", + Uuid = Guid.NewGuid() + }; + + var testTemplateField = new SzTemplateField() + { + Id = "cost", + FieldType = SzFieldType.Number, + DefaultValue = "20" + }; + + dt.TemplateFields.Add(testTemplateField.Id, testTemplateField); + var ds = new SzDataset() { Name = "TestDataset", Id = "test-dataset", - DataObjectTemplateId = "0", + DataObjectTemplateId = dt.Id, + DataObjectTemplateUuid = dt.Uuid, DataObjectType = "item", Uuid = Guid.NewGuid(), }; diff --git a/SzCore/DataObjects/SzDataset.cs b/SzCore/DataObjects/SzDataset.cs index 845d6e2..cbbdb85 100644 --- a/SzCore/DataObjects/SzDataset.cs +++ b/SzCore/DataObjects/SzDataset.cs @@ -8,5 +8,6 @@ public class SzDataset public required string DataObjectType {get; set;} public required string DataObjectTemplateId {get; set;} + public Guid? DataObjectTemplateUuid {get; set;} public Dictionary DataObjects {get; set;} = []; } diff --git a/SzCore/DataObjects/SzTemplateField.cs b/SzCore/DataObjects/SzTemplateField.cs index 07c59f6..8493166 100644 --- a/SzCore/DataObjects/SzTemplateField.cs +++ b/SzCore/DataObjects/SzTemplateField.cs @@ -2,8 +2,8 @@ namespace SzCore.DataObjects; public class SzTemplateField { - public required string Name {get; set;} public required string Id {get; set;} + public required SzFieldType FieldType { get; set; } public bool IsList {get; set;} = false; public string DefaultValue {get; set;} = ""; public bool IsSpecialType {get; set;} = false; diff --git a/SzCli/LocalFileManager.cs b/SzCore/Defaults/DefaultLocalFileManager.cs similarity index 88% rename from SzCli/LocalFileManager.cs rename to SzCore/Defaults/DefaultLocalFileManager.cs index d239068..073f724 100644 --- a/SzCli/LocalFileManager.cs +++ b/SzCore/Defaults/DefaultLocalFileManager.cs @@ -1,10 +1,6 @@ -using System.Reflection.Metadata; -using SzCore; -using SzCore.DataObjects; +namespace SzCore.Defaults; -namespace SzCli; - -public class LocalFileManager : ISzFileManager +public class DefaultLocalFileManager : ISzFileManager { public string DataPath { @@ -52,4 +48,4 @@ public class LocalFileManager : ISzFileManager return null; } } -} +} \ No newline at end of file diff --git a/SzCore/SZ.cs b/SzCore/SZ.cs new file mode 100644 index 0000000..731fba0 --- /dev/null +++ b/SzCore/SZ.cs @@ -0,0 +1,107 @@ +using System.Net.NetworkInformation; + +namespace SzCore; + +public static class SZ +{ + private static ISzFileManager? _fileManager; + private static ISzLogger? _logger; + + public static bool IsInitalized { get; private set; } = false; + + public static ISzFileManager LocalFileManager + { + get + { + CheckInitialization(); + if (_fileManager is null) throw new Exception("SZ._fileManager is null"); + return _fileManager; + } + } + + public static ISzLogger Logger + { + get + { + CheckInitialization(); + if (_logger is null) throw new Exception("SZ._logger is null"); + return _logger; + } + } + + private static Dictionary _services = []; + private static List _protectedServices = []; + + /// + /// Initalizes the SZ singleton in SzCore + /// + public static void Init(ISzFileManager fileManager, ISzLogger logger) + { + if (IsInitalized) throw new Exception("Cannot initalize SZ more than once."); + + _logger = logger; + _fileManager = fileManager; + + if (_logger is null) + { + throw new Exception("SZ.Init failed: Logger was null"); + } + + if (_fileManager is null) + { + throw new Exception("SZ.Init failed: LocalFileManager was null"); + } + + AddService(fileManager, true); + AddService(logger, true); + + IsInitalized = true; + + logger.Log(" -- SZ CORE INITALIZED -- "); + } + + /// + /// Tries to add a service + /// + /// The object instance. + /// Sets if the service should be protected (not able to be deleted). + /// True if the service was successfully added. False otherwise. + /// Throws if SZ.CheckInitialization() fails + public static bool AddService(object instance, bool isProtected = false) + { + CheckInitialization(); + + var result = _services.TryAdd(instance.GetType(), instance); + if (!result) return false; + + if (isProtected) + { + if (_protectedServices.Contains(instance.GetType())) return false; + + _protectedServices.Add(instance.GetType()); + } + + return result; + } + + public static T? GetService() + { + CheckInitialization(); + + if (!_services.ContainsKey(typeof(T))) return default(T); + return (T)_services[typeof(T)]; + } + + public static bool RemoveService(Type type) + { + CheckInitialization(); + + if (_protectedServices.Contains(type)) return false; + return _services.Remove(type); + } + + private static void CheckInitialization() + { + if (!IsInitalized) throw new Exception("SZ.Init has not been called."); + } +} \ No newline at end of file diff --git a/SzCore/SzDataHandler.cs b/SzCore/SzDataHandler.cs new file mode 100644 index 0000000..755cb95 --- /dev/null +++ b/SzCore/SzDataHandler.cs @@ -0,0 +1,6 @@ +namespace SzCore; + +public static class SzDataHandler +{ + +} \ No newline at end of file