@@ -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