package Ġcom . world turn er . me de ia . schema . validation Ċ Ċ import Ġcom . world turn er . me de ia . api . Failed Validation Result Ċ import Ġcom . world turn er . me de ia . api . Ok Validation Result Ċ import Ġcom . world turn er . me de ia . api . Validation Result Ċ import Ġcom . world turn er . me de ia . parser . Json Token Data Ċ import Ġcom . world turn er . me de ia . parser . Json Token Location Ċ import Ġcom . world turn er . me de ia . parser . Json TokenType . END _ ARRAY Ċ import Ġcom . world turn er . me de ia . parser . Json TokenType . START _ ARRAY Ċ import Ġcom . world turn er . me de ia . schema . validation . stream . Schema Validator Instance Ċ import Ġjava . net . URI Ċ Ċ class ĠArray Validator ( ĊĠĠĠ Ġval Ġadditional Items : ĠSchema Validator ?, ĊĠĠĠ Ġval Ġitems : ĠList < Schema Validator > ?, ĊĠĠĠ Ġval Ġall Items : ĠSchema Validator ?, ĊĠĠĠ Ġval Ġmax Items : ĠInt ?, ĊĠĠĠ Ġval Ġmin Items : ĠInt ?, ĊĠĠĠ Ġval Ġcontains : ĠSchema Validator ? Ċ ) Ġ: ĠSchema Validator Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate Instance ( start Level : ĠInt ): ĠSchema Validator Instance Ġ= ĊĠĠĠĠĠĠĠ ĠArray Validator Instance ( this , Ġstart Level ) ĊĊĠĠĠ Ġoverride Ġfun Ġrecord Unknown Refs ( unknown Refs : ĠMutable Collection < URI >) Ġ{ ĊĠĠĠĠĠĠĠ Ġadditional Items ?. let Ġ{ Ġit . record Unknown Refs ( unknown Refs ) Ġ} ĊĠĠĠĠĠĠĠ Ġall Items ?. let Ġ{ Ġit . record Unknown Refs ( unknown Refs ) Ġ} ĊĠĠĠĠĠĠĠ Ġitems ?. forEach Ġ{ Ġit . record Unknown Refs ( unknown Refs ) Ġ} ĊĠĠĠĠĠĠĠ Ġcontains ?. let Ġ{ Ġit . record Unknown Refs ( unknown Refs ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Items : ĠSchema Validator ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems : ĠList < Schema Validator > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Items : ĠSchema Validator ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Items : ĠInt ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Items : ĠInt ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontains : ĠSchema Validator ? ĊĠĠĠĠĠĠĠ Ġ): ĠArray Validator ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Any NotNull ( additional Items , Ġitems , Ġall Items , Ġmax Items , Ġmin Items , Ġcontains )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray Validator ( additional Items , Ġitems , Ġall Items , Ġmax Items , Ġmin Items , Ġcontains ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠArray Validator Instance ( val Ġvalidator : ĠArray Validator , Ġval Ġstart Level : ĠInt ) Ġ: ĊĠĠĠ ĠSchema Validator Instance Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġfirst Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġitem Count Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcontains Matched Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġall Items Instance : ĠSchema Validator Instance ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcontains Instance : ĠSchema Validator Instance ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Item Instance : ĠSchema Validator Instance ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( token : ĠJson Token Data , Ġlocation : ĠJson Token Location ): ĠValidation Result ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( first Ġ&& Ġtoken . type Ġ!= ĠSTART _ ARRAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠOk Validation Result ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfirst Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( location . level Ġ== Ġstart Level Ġ+ Ġ 1 Ġ&& Ġtoken . type . first Token ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalidator . contains ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains Instance Ġ= Ġit . create Instance ( location . level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( validator . all Items Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Items Instance Ġ= Ġvalidator . all Items . create Instance ( location . level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( validator . items Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Count Ġ< Ġvalidator . items . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Item Instance Ġ= Ġvalidator . items [ item Count ]. create Instance ( location . level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( validator . additional Items Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Item Instance Ġ= Ġvalidator . additional Items . create Instance ( location . level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġall Items Instance ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġit . validate ( token , Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠFailed Validation Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFailed Validation Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule Ġ= Ġ" items ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Schema Ġfor Ġall Ġitems Ġfailed Ġto Ġvalidate ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= Ġlocation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Ġ= Ġset Of ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Items Instance Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontains Instance ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġit . validate ( token , Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . valid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains Matched Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains Instance Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent Item Instance ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġit . validate ( token , Ġlocation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠFailed Validation Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFailed Validation Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= Ġlocation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule Ġ= Ġ" items / additional Items ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Schema Ġfor Ġitems Ġfailed Ġto Ġvalidate ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetails Ġ= Ġset Of ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Item Instance Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( token . type . last Token Ġ&& Ġlocation . level Ġ== Ġstart Level Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Count ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( token . type Ġ== ĠEND _ ARRAY Ġ&& Ġlocation . level Ġ== Ġstart Level ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcomplete Validation ( location ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcomplete Validation ( location : ĠJson Token Location ): ĠValidation Result Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidator . contains ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! contains Matched ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFailed Validation Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= Ġlocation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule Ġ= Ġ" contains ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Items Ġdon 't Ġcontain Ġan Ġitem Ġthat Ġmatches Ġthe Ġ' contains ' Ġschema Value " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvalidator . max Items ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Count Ġ> Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFailed Validation Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= Ġlocation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule Ġ= Ġ" max Items ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Value Ġ$ item Count Ġis Ġgreater Ġthan Ġmax Items Ġ$ it " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvalidator . min Items ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Count Ġ< Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFailed Validation Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= Ġlocation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrule Ġ= Ġ" min Items ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Value Ġ$ item Count Ġis Ġsmaller Ġthan Ġmin Items Ġ$ it " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠOk Validation Result ĊĠĠĠ Ġ} Ċ }