Skip to content

Commit 26a14fd

Browse files
committed
can now validate incorrectly formatted guids
1 parent 6d885fe commit 26a14fd

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

src/CIM.PreValidator.CLI/Program.cs

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,45 @@ private static async Task ExecuteAsync(string inputFilePath, string outputFilePa
4343
{
4444
var mrids = new HashSet<Guid>();
4545
var duplicateIds = new HashSet<Guid>();
46+
var invalidMrIds = new List<(int lineNumber, string invalidMrid)>();
4647

4748
using (var reader = XmlReader.Create(inputFilePath, new XmlReaderSettings { Async = true }))
4849
{
4950
while (await reader.ReadAsync().ConfigureAwait(false))
5051
{
5152
if (reader.NodeType == XmlNodeType.Element && reader.LocalName == "mRID")
5253
{
53-
var mrid = Guid.Parse(await reader.ReadElementContentAsStringAsync().ConfigureAwait(false));
54-
if (mrids.Contains(mrid))
54+
var mridXmlValue = await reader.ReadElementContentAsStringAsync().ConfigureAwait(false);
55+
if (Guid.TryParse(mridXmlValue, out var mrid))
5556
{
56-
duplicateIds.Add(mrid);
57-
}
57+
if (mrids.Contains(mrid))
58+
{
59+
duplicateIds.Add(mrid);
60+
}
61+
62+
mrids.Add(mrid);
5863

59-
mrids.Add(mrid);
64+
}
65+
else
66+
{
67+
var xmlInfo = (IXmlLineInfo)reader;
68+
invalidMrIds.Add((xmlInfo.LineNumber, mridXmlValue));
69+
}
6070
}
6171
}
6272
}
6373

64-
var validationErrors = duplicateIds.Select(x =>
74+
var validationErrorsInvalidMrids = invalidMrIds.Select(x =>
75+
new ValidationError
76+
{
77+
IdentifiedObjectId = $"INVALID_MRID_{x.invalidMrid}_{x.lineNumber}",
78+
Code = "INVALID_MRID",
79+
Description = $"Invalid MRID: {x.invalidMrid} on line {x.lineNumber}.",
80+
Severity = Severity.Error,
81+
IdentifiedObjectClass = "IdentifiedObject",
82+
});
83+
84+
var validationErrorDuplicateIds = duplicateIds.Select(x =>
6585
new ValidationError
6686
{
6787
IdentifiedObjectId = x.ToString(),
@@ -73,7 +93,12 @@ private static async Task ExecuteAsync(string inputFilePath, string outputFilePa
7393

7494
using (var sw = new StreamWriter(outputFilePath))
7595
{
76-
foreach (var validationError in validationErrors)
96+
foreach (var validationError in validationErrorsInvalidMrids)
97+
{
98+
await sw.WriteLineAsync(JsonSerializer.Serialize(validationError)).ConfigureAwait(false);
99+
}
100+
101+
foreach (var validationError in validationErrorDuplicateIds)
77102
{
78103
await sw.WriteLineAsync(JsonSerializer.Serialize(validationError)).ConfigureAwait(false);
79104
}

0 commit comments

Comments
 (0)