package Ġcom . wall ace . r pg . open legend Ċ Ċ import Ġcom . wall ace . r pg . open legend . ontology . Open le ged Ċ import Ġorg . apache . jena . rdf . model . Model Ċ import Ġorg . apache . jena . rdf . model . Model Factory Ċ import Ġorg . apache . jena . ri ot . Lang Ċ import Ġorg . apache . jena . ri ot . RDF Data Mgr Ċ import Ġorg . yaml . s na key aml . Yaml Ċ import Ġjava . io .* Ċ import Ġjava . net . URL Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġyaml Ġ= ĠYaml () ĊĊĠĠĠ Ġval Ġbo ons Ġ= Ġget Bo ons ( yaml ) ĊĠĠĠ Ġbo ons ToFile ( bo ons ) ĊĊĠĠĠ Ġval Ġban es Ġ= Ġget Ban es ( yaml ) ĊĠĠĠ Ġban es ToFile ( ban es ) ĊĊĠĠĠ Ġval Ġfe ats Ġ= Ġget Fe ats ( yaml ) ĊĠĠĠ Ġfe ats ToFile ( feats ) ĊĊĠĠĠ Ġval Ġper ks Fl aws InputStream Ġ= ĊĠĠĠĠĠĠĠ ĠURL (" https :// raw . githubusercontent . com / wall ace g 0 9 / core - rules / master / core / src / 0 5 - per ks - fl aws / 0 1 - chapter - five . md ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. open Stream () ĊĊĠĠĠ Ġparse Per ks And Fl aws ( per ks Fl aws InputStream ) Ċ Ċ // ĠĠĠ Ġval Ġfeat Pr ere q Types Ġ= Ġfe ats . map Ġ{ Ġit . prerequisites . map Ġ{ Ġ( it . value Ġas ĠMap < String , ĠAny >). keys Ġ}. flatten () Ġ}. flatten (). distinct () Ċ // ĠĠĠ Ġprintln ( feat Pr ere q Types ) ĊĊ Ċ } Ċ Ċ fun Ġget Bo ons ( yaml : ĠYaml ): ĠList < Bo on > Ġ{ ĊĠĠĠ Ġval Ġbo on Stream Ġ= ĠURL (" https :// raw . githubusercontent . com / wall ace g 0 9 / core - rules / master / bo ons / bo ons . yml "). open Stream () ĊĊĠĠĠ Ġreturn Ġyaml . load < List < Map < String , ĠAny >> >( bo on Stream ). map Ġ{ ĊĠĠĠĠĠĠĠ ĠBo on ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġbo ons ToFile ( bo ons : ĠList < Bo on >) Ġ{ ĊĠĠĠ Ġval Ġbo on Model Ġ= ĠModel Factory . create Default Model (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Ns Prefix (" ol ", ĠOpen le ged . NS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbo ons . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . to Model ( bo on Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsave Model (" bo ons . ttl ", Ġbo on Model ) Ċ } Ċ Ċ fun Ġget Ban es ( yaml : ĠYaml ): ĠList < B ane > Ġ{ ĊĠĠĠ Ġval Ġb ane Stream Ġ= ĠURL (" https :// raw . githubusercontent . com / wall ace g 0 9 / core - rules / master / ban es / ban es . yml "). open Stream () ĊĊĠĠĠ Ġreturn Ġyaml . load < List < Map < String , ĠAny >> >( b ane Stream ). map Ġ{ ĊĠĠĠĠĠĠĠ ĠB ane ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġban es ToFile ( ban es : ĠList < B ane >) Ġ{ ĊĠĠĠ Ġval Ġb ane Model Ġ= ĠModel Factory . create Default Model (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Ns Prefix (" ol ", ĠOpen le ged . NS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġban es . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . to Model ( b ane Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsave Model (" ban es . ttl ", Ġb ane Model ) Ċ } Ċ Ċ fun Ġget Fe ats ( yaml : ĠYaml ): ĠList < Feat > Ġ{ ĊĠĠĠ Ġval Ġfeat Stream Ġ= ĠURL (" https :// raw . githubusercontent . com / wall ace g 0 9 / core - rules / master / feats / feats . yml "). open Stream () ĊĊĠĠĠ Ġreturn Ġyaml . load < List < Map < String , ĠAny >> >( feat Stream ). map Ġ{ ĊĠĠĠĠĠĠĠ ĠFe at ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġfe ats ToFile ( feats : ĠList < Feat >) Ġ{ ĊĠĠĠ Ġval Ġfeat Model Ġ= ĠModel Factory . create Default Model (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Ns Prefix (" ol ", ĠOpen le ged . NS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfe ats . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . to Model ( feat Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsave Model (" feats . ttl ", Ġfeat Model ) Ċ } Ċ Ċ fun Ġsave Model ( filename : ĠString , Ġmodel : ĠModel , Ġlang : ĠLang Ġ= ĠLang . TTL ) Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= ĠFile (" rdf - seed er / src / main / resources / seed /$ filename "). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġparent File . mkdir s () ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠRDF Data Mgr . write ( File OutputStream ( file ), Ġmodel , Ġlang ) Ċ } Ċ Ċ private Ġfun Ġget Yaml Stream ( filename : ĠString ): ĠInputStream Ġ{ ĊĠĠĠ Ġreturn ĠYaml :: class . java . class Loader . getResource ( filename ). open Stream () Ċ } Ċ Ċ private Ġenum Ġclass ĠPer k Parse State Ġ{ ĊĠĠĠ ĠNE IT HER , ĠIN _ PER K , ĠIN _ FL AW Ċ } Ċ Ċ fun Ġparse Per ks And Fl aws ( stream : ĠInputStream ) Ġ{ ĊĠĠĠ Ġval Ġper k Lines Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġval Ġfl aw Lines Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġvar Ġstate Ġ= ĠPer k Parse State . NE IT HER ĊĊĠĠĠ ĠBufferedReader ( InputStream Reader ( stream )). use Lines Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġit . iterator () ĊĊĠĠĠĠĠĠĠ Ġiterator . forEach Remaining Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer k Parse State . IN _ PER K Ġ-> Ġper k Lines . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPer k Parse State . IN _ FL AW Ġ-> Ġfl aw Lines . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . contains (" ## ĠPer k ĠDescri ptions ")) Ġstate Ġ= ĠPer k Parse State . IN _ PER K ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( line . contains (" ## ĠFl aw ĠDescri ptions ")) Ġstate Ġ= ĠPer k Parse State . IN _ FL AW ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġper ks Ġ= Ġmutable ListOf < Per k >() ĊĠĠĠ Ġval Ġfl aws Ġ= Ġmutable ListOf < Fl aw >() ĊĊĠĠĠ Ġval Ġname Regex Ġ= Ġ""" ### Ġ(? < name >\ w + [\ s \ w ]*) """. to Regex () ĊĠĠĠ Ġval Ġeffect Reg x Ġ= Ġ""" (? < effect >\ w + [\ s \ w \ p { P unct }] *) """. to Regex () ĊĊĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġeffect : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġfor Ġ( per k Ġin Ġper k Lines ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( per k . isBlank ()) Ġcontinue ĊĊĠĠĠĠĠĠĠ Ġval Ġname Match Ġ= Ġname Regex . find ( per k ) ĊĠĠĠĠĠĠĠ Ġval Ġeffect Match Ġ= Ġeffect Reg x . find ( per k ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmatched Name Ġ= Ġname Match ?. groups ?. get (" name ") ?. value ĊĠĠĠĠĠĠĠ Ġval Ġmatched Effect Ġ= Ġeffect Match ?. groups ?. get (" effect ") ?. value ĊĊĠĠĠĠĠĠĠ Ġif Ġ( matched Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġmatched Name ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( matched Effect Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeffect Ġ= Ġmatched Effect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġper ks . add ( Per k ( name !! , Ġeffect )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Dis Ġf uck ed : Ġ$ per k ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( fl aw Ġin Ġfl aw Lines ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fl aw . isBlank ()) Ġcontinue ĊĊĠĠĠĠĠĠĠ Ġval Ġname Match Ġ= Ġname Regex . find ( fl aw ) ĊĠĠĠĠĠĠĠ Ġval Ġeffect Match Ġ= Ġeffect Reg x . find ( fl aw ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmatched Name Ġ= Ġname Match ?. groups ?. get (" name ") ?. value ĊĠĠĠĠĠĠĠ Ġval Ġmatched Effect Ġ= Ġeffect Match ?. groups ?. get (" effect ") ?. value ĊĊĠĠĠĠĠĠĠ Ġif Ġ( matched Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġmatched Name ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( matched Effect Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeffect Ġ= Ġmatched Effect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfl aws . add ( Fl aw ( name !! , Ġeffect )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Dis Ġf uck ed : Ġ$ fl aw ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġper k Model Ġ= ĠModel Factory . create Default Model (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Ns Prefix (" ol ", ĠOpen le ged . NS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġper ks . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . to Model ( per k Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsave Model (" per ks . ttl ", Ġper k Model ) ĊĊĠĠĠ Ġval Ġfl aw Model Ġ= ĠModel Factory . create Default Model (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Ns Prefix (" ol ", ĠOpen le ged . NS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfl aws . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . to Model ( fl aw Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsave Model (" fl aws . ttl ", Ġfl aw Model ) Ċ }