SessionZeroWasm/SessionZero/Pages/Test.razor
2025-06-30 22:51:23 -05:00

183 lines
6.1 KiB
Plaintext

@page "/szf-parser-test"
@using SessionZero.Data
@using Microsoft.Extensions.Logging
@inject SzfParser SzfParser
@inject ILogger<SzfParser> Logger
<h1 class="page-title">SZF Parser Test Page</h1>
<div class="row">
<div class="col-6">
<div class="form-group">
<textarea id="szf-input" class="form-control" @bind="szfCode" rows="20"></textarea>
</div>
<button class="btn btn-primary mt-2" @onclick="ParseSzf">Parse SZF</button>
</div>
<div class="col-6">
@if (parsedObject != null)
{
<h4>Parsed Object Metadata</h4>
<table class="table">
<tbody>
<tr><th>Object Type</th><td>@parsedObject.ObjectType</td></tr>
<tr><th>Schema Version</th><td>@parsedObject.SchemaVersion</td></tr>
<tr><th>Name</th><td>@parsedObject.Name</td></tr>
<tr><th>Version</th><td>@parsedObject.Version</td></tr>
<tr><th>ID</th><td>@parsedObject.Id</td></tr>
<tr><th>Author</th><td>@parsedObject.Author</td></tr>
<tr><th>Description</th><td>@parsedObject.Description</td></tr>
</tbody>
</table>
@if (parsedObject.ExtendedMetadata.Any())
{
<h5>Extended Metadata</h5>
<table class="table">
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
@foreach (var meta in parsedObject.ExtendedMetadata)
{
<tr>
<td>@meta.Key</td>
<td>@meta.Value</td>
</tr>
}
</tbody>
</table>
}
@if (parsedObject is Dataset dataset && dataset.Entries.Any())
{
<h4 class="mt-4">Entries</h4>
@foreach (var entry in dataset.Entries)
{
<div class="card mb-3">
<div class="card-header">
<h5>@entry.Name</h5>
</div>
<div class="card-body">
@if (entry.Fields.Any())
{
<table class="table table-bordered table-sm">
<tbody>
@foreach (var field in entry.Fields)
{
<tr>
<td style="width: 30%;"><strong>@field.Name</strong></td>
<td>@field.Value</td>
</tr>
}
</tbody>
</table>
}
@foreach (var section in entry.Sections)
{
@RenderSection(section)
}
</div>
</div>
}
}
}
@if (errorMessages.Any())
{
<div class="alert alert-danger mt-3">
<h4>Errors</h4>
<ul>
@foreach (var error in errorMessages)
{
<li>@error</li>
}
</ul>
</div>
}
</div>
</div>
<div class="row mt-4">
<div class="col-12">
<h4>Logs</h4>
<pre class="bg-light p-3">@string.Join("\n", logMessages)</pre>
</div>
</div>
@code {
private string szfCode = string.Empty;
private SzfObject? parsedObject;
private List<string> logMessages = new List<string>();
private List<string> errorMessages = new List<string>();
private void ParseSzf()
{
logMessages.Clear();
errorMessages.Clear();
parsedObject = null;
Log("Starting SZF parsing...");
if (string.IsNullOrWhiteSpace(szfCode))
{
const string message = "SZF code input is empty.";
LogError(message);
errorMessages.Add(message);
return;
}
try
{
parsedObject = SzfParser.Parse(szfCode);
Log("SZF content parsed successfully.");
Log($"Object Type: {parsedObject.ObjectType}");
Log($"Schema Version: {parsedObject.SchemaVersion}");
}
catch (Exception ex)
{
const string message = "An error occurred during parsing.";
LogError(message, ex);
errorMessages.Add($"{message} See logs for details.");
}
}
private void Log(string message)
{
Logger.LogInformation(message);
logMessages.Add($"[INFO] {message}");
}
private void LogError(string message, Exception? ex = null)
{
Logger.LogError(ex, message);
logMessages.Add($"[ERROR] {message}{(ex is not null ? $": {ex.Message}" : "")}");
}
private RenderFragment RenderSection(DatasetSection dataSection) =>@<div class="card mt-2" style="margin-left: 20px;">
<div class="card-header py-1">
<strong>@dataSection.Name</strong>
</div>
<div class="card-body py-2">
@if (dataSection.Fields.Any())
{
<table class="table table-bordered table-sm mb-0">
<tbody>
@foreach (var field in dataSection.Fields)
{
<tr>
<td style="width: 30%;"><strong>@field.Name</strong></td>
<td>@field.Value</td>
</tr>
}
</tbody>
</table>
}
@foreach (var subSection in dataSection.Subsections)
{
@RenderSection(subSection)
}
</div>
</div>;
}