package Ġde . fh do . lemma . model _ processing . builtin _ ph ases . live _ validation Ċ Ċ import Ġde . fh do . lemma . model _ processing . annotations . Explicit ly Inv oked Model Processing Phase Ċ import Ġde . fh do . lemma . model _ processing . annotations . Intermediate Model Validator Ċ import Ġde . fh do . lemma . model _ processing . annotations . Source Model Validator Ċ import Ġde . fh do . lemma . model _ processing . annotations . find Annotated Classes Ċ import Ġde . fh do . lemma . model _ processing . ph ases . Abstract Model Processing Phase Ċ import Ġde . fh do . lemma . model _ processing . println Error Ċ import Ġde . fh do . lemma . model _ processing . builtin _ ph ases . No Validator Found Exception Ċ import Ġde . fh do . lemma . model _ processing . ph ases . Phase Exception Ċ import Ġde . fh do . lemma . model _ processing . ph ases . Phase Heap Ċ import Ġde . fh do . lemma . model _ processing . ph ases . validation . Abstract X text Model Validator Ċ import Ġio . github . class graph . Class Info Ċ import Ġjava . util . concurrent . ExecutionException Ċ import Ġkotlin . reflect . K Class Ċ Ċ internal Ġtype alias ĠValidator Class With Phase Arguments Ġ= ĠPair < Class Info , ĠArray < String >> Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof Ġthe Ġmodel Ġprocessor 's ĠLive ĠValidation Ġphase . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ Fl orian ĠR ade m acher ]( mailto : fl orian . r ade m acher @ fh - d ort m und . de ) Ċ Ġ*/ Ċ @ Explicit ly Inv oked Model Processing Phase (" live _ validation ", Ġtrue , Ġtrue ) Ċ internal Ġclass ĠLive Validation Phase Ġ: ĠAbstract Model Processing Phase () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExecute Ġthe Ġphase ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġprocess ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidators Ġ= Ġfind X text Model Validators ( processor Implementation Package ) ĊĠĠĠĠĠĠĠ Ġif Ġ( validators . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNo Validator Found Exception (" Live Ġvalidation Ġnot Ġpossible , Ġbecause Ġno ĠX text - enabled Ġmodel Ġvalidators Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" w ere Ġbe Ġfound Ġon Ġthe Ġclasspath ") ĊĊĠĠĠĠĠĠĠ Ġwith ( Phase CommandLine ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPhase Exception ( ex . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConnect Ġto Ġa Ġrunning ĠLive ĠValidation Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLive Validator ( validators ). start ( hostname , Ġport ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Live ĠValidation Ġclient Ġstarted Ġand Ġlistening Ġfor Ġvalidation Ġrequests Ġon Ġ$ hostname :$ port ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ex . cause Ġis ĠExecution Exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln Error (" Live ĠValidation Ġclient Ġcould Ġnot Ġconnect Ġto ĠLive ĠValidation Ġserver Ġexpected Ġon Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ hostname :$ port ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln Error (" Live ĠValidation Ġclient Ġcould Ġnot Ġbe Ġstarted : Ġ${ ex . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠHelper Ġto Ġfind , Ġper Ġfile Ġextension , ĠX text - enabled Ġmodel Ġvalidators Ġand Ġtheir Ġphase Ġarguments Ġon Ġthe Ġclasspath . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ Fl orian ĠR ade m acher ]( mailto : fl orian . r ade m acher @ fh - d ort m und . de ) Ċ Ġ*/ Ċ private Ġfun Ġfind X text Model Validators ( implementation Package : ĠString ) ĊĠĠĠ Ġ: ĠMap < String , ĠList < Validator Class With Phase Arguments >> Ġ{ ĊĠĠĠ Ġval Ġvalidators And Arguments For Extensions Ġ= Ġmutable Map Of < String , ĠMutable List < Validator Class With Phase Arguments >>() ĊĊĠĠĠ Ġ// ĠFind Ġall ĠX text - enabled Ġsource Ġand Ġintermediate Ġmodel Ġvalidators Ġwith Ġtheir Ġpossible Ġphase Ġarguments ĊĠĠĠ Ġval Ġx text Model Validators Ġ= Ġfind X text Model Validators ( implementation Package , ĠSource Model Validator :: class ) ĊĠĠĠĠĠĠĠ Ġ. to Mutable Map () ĊĠĠĠ Ġx text Model Validators . put All ( find X text Model Validators ( implementation Package , ĠInter mediate Model Validator :: class )) ĊĊĠĠĠ Ġ// ĠAdd Ġfound Ġvalidators Ġto Ġresult Ġmap Ġfor Ġthe Ġfile Ġextensions Ġthey Ġsupport ĊĠĠĠ Ġfor Ġ(( validator Info , Ġphase Arguments ) Ġin Ġx text Model Validators ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Instance Ġ= Ġvalidator Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load Class ( Abstract X text Model Validator :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getDeclared Constructor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance () ĊĠĠĠĠĠĠĠ Ġvalidator Instance . get Supported File Extensions (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! validators And Arguments For Extensions . containsKey ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidators And Arguments For Extensions [ it ] Ġ= Ġmutable ListOf ( validator Info Ġto Ġphase Arguments ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidators And Arguments For Extensions [ it ] !!. add ( validator Info Ġto Ġphase Arguments ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġvalidators And Arguments For Extensions Ċ } Ċ Ċ /** Ċ Ġ* ĠHelper Ġto Ġfind Ġall ĠX text - enabled Ġmodel Ġvalidators Ġwith Ġa Ġgiven Ġ[ annotation Class ] Ġon Ġthe Ġclasspath . ĠNext Ġto Ġthe Ċ Ġ* Ġ[ Class Info ], Ġeach Ġfound Ġvalidator Ġwill Ġbe Ġaccomp an ied Ġby Ġits Ġpossible Ġarguments Ġfrom Ġthe Ġrespective Ġvalidation Ġphase . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ Fl orian ĠR ade m acher ]( mailto : fl orian . r ade m acher @ fh - d ort m und . de ) Ċ Ġ*/ Ċ private Ġfun Ġfind X text Model Validators ( implementation Package : ĠString , Ġannotation Class : ĠK Class < out ĠAnnotation >) Ġ: ĊĠĠĠ ĠMap < Class Info , ĠArray < String >> Ġ{ ĊĠĠĠ Ġ// ĠGet Ġpossible Ġphase Ġarguments Ġfor Ġthe Ġvalidators ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġval Ġphase Arguments Ġ= Ġwhen Ġ( annotation Class ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSource Model Validator :: class Ġ-> ĠPhase Heap [" intermediate _ model _ validation ", Ġ" source Model Validation Phase Arguments "] ĊĠĠĠĠĠĠĠ ĠInter mediate Model Validator :: class Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPhase Heap [" intermediate _ model _ validation ", Ġ" intermediate Model Validation Phase Arguments "] ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Annotation Ġclass Ġmust Ġbe Ġof Ġtype Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Source Model Validator :: class . java . name } Ġor Ġ${ Intermediate Model Validator :: class . java . name }") ĊĠĠĠ Ġ} Ġas ? ĠArray < String > Ġ?: Ġempty Array () ĊĊĠĠĠ Ġreturn Ġfind Annotated Classes ( implementation Package , Ġannotation Class ) ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . extends Super class ( Abstract X text Model Validator :: class . java . name ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. associate With Ġ{ Ġphase Arguments Ġ} Ċ }