This repository has been archived on 2026-01-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
SessionZero-Client/SessionZero/Data/SzObject.cs

96 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using SessionZero.Data.Sztl;
namespace SessionZero.Data;
public class SzObject
{
public string Id { get; set; }
public string Uuid { get; set; }
public string TemplateId { get; set; }
public Dictionary<string, SzField> Fields { get; set; } = new();
public Dictionary<string, SzFieldGroup> FieldGroups { get; set; } = new();
public virtual object? GetFieldValue(string fieldPath)
{
if (string.IsNullOrEmpty(fieldPath)) return null;
var parts = fieldPath.Split('.');
if (parts.Length == 1)
{
if (Fields.TryGetValue(parts[0], out var field))
return field.Value;
return null;
}
SzFieldGroup? currentGroup = null;
for (int i = 0; i < parts.Length - 1; i++)
{
var key = parts[i];
currentGroup = currentGroup == null
? FieldGroups.GetValueOrDefault(key)
: currentGroup.SubGroups.GetValueOrDefault(key);
if (currentGroup == null) return null;
}
var lastPart = parts[^1];
if (currentGroup != null)
{
if (currentGroup.Fields.TryGetValue(lastPart, out var field))
return field.Value;
}
return Fields.TryGetValue(lastPart, out var topField) ? topField.Value : null;
}
public virtual T GetFieldValue<T>(string fieldPath)
{
var val = GetFieldValue(fieldPath);
if (val == null) return default!;
return (T)Convert.ChangeType(val, typeof(T));
}
public virtual string GetFieldValueAsString(string fieldPath)
{
var val = GetFieldValue(fieldPath);
return val?.ToString() ?? string.Empty;
}
public virtual void SetFieldValue(string fieldPath, object value)
{
if (string.IsNullOrEmpty(fieldPath)) return;
var parts = fieldPath.Split('.');
if (parts.Length == 1)
{
if (Fields.ContainsKey(parts[0]))
Fields[parts[0]].Value = value;
return;
}
SzFieldGroup? currentGroup = null;
for (int i = 0; i < parts.Length - 1; i++)
{
var key = parts[i];
currentGroup = currentGroup == null
? FieldGroups.GetValueOrDefault(key)
: currentGroup.SubGroups.GetValueOrDefault(key);
if (currentGroup == null) return;
}
var lastPart = parts[^1];
if (currentGroup != null)
{
if (currentGroup.Fields.ContainsKey(lastPart))
currentGroup.Fields[lastPart].Value = value;
}
else if (Fields.ContainsKey(lastPart))
{
Fields[lastPart].Value = value;
}
}
}