183 lines
6.1 KiB
Plaintext
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>;
|
|
} |