package Ġhm . b ink ley . layers Ċ Ċ import Ġorg . eclipse . j git . api . Git Ċ import Ġjava . util . Objects . hash Ċ import Ġjavax . script . Script Engine Ċ Ċ class ĠPers isted Layers ( ĊĠĠĠ Ġprivate Ġval Ġpersistence : ĠGit Persistence , ĊĠĠĠ Ġprivate Ġval Ġscripting : ĠScript ing , ĊĠĠĠ Ġprivate Ġval Ġ_ layers : ĠMutable List < Pers isted Layer > Ġ= Ġmutable ListOf () Ċ ) Ġ: ĠLay ers , ĊĠĠĠ ĠLay ers For RuleContext , ĊĠĠĠ ĠAuto Closeable Ġby Ġpersistence Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġlayers : ĠList < Layer > Ġ= Ġ_ layers ĊĊĠĠĠ Ġoverride Ġfun Ġas List (): ĠList < Map < String , ĠAny >> Ġ= Ġ_ layers ĊĊĠĠĠ Ġ// ĠTODO : ĠSimpl ify ĊĠĠĠ Ġoverride Ġfun Ġas Map (): ĠMap < String , ĠAny > Ġ= ĊĠĠĠĠĠĠĠ Ġtop Down Layers . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . entries ĊĠĠĠĠĠĠĠ Ġ}. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ!= Ġit . value . rule ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġit . value . rule Ġas ĠRule < Any > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġrule ( RuleContext ( key , Ġthis )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġto Ġvalue ĊĠĠĠĠĠĠĠ Ġ}. as Re versed (). toMap (). to Sorted Map () ĊĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġapplied Value For ( key : ĠString ) Ġ= Ġtop Down Layers . flatMap Ġ{ ĊĠĠĠĠĠĠĠ Ġit . entries ĊĠĠĠ Ġ}. filter Ġ{ ĊĠĠĠĠĠĠĠ Ġit . key Ġ== Ġkey ĊĠĠĠ Ġ}. first Ġ{ ĊĠĠĠĠĠĠĠ Ġnull Ġ!= Ġit . value . rule ĊĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ( it . value . rule !! Ġas ĠRule < T > )( RuleContext ( key , Ġthis )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAll Ġvalues Ġfor Ġ[ key ] Ġfrom Ġnewest Ġto Ġoldest . Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġall Values For ( key : ĠString ) Ġ= Ġtop Down Layers . map NotNull Ġ{ ĊĠĠĠĠĠĠĠ Ġit [ key ] ĊĠĠĠ Ġ}. map NotNull Ġ{ ĊĠĠĠĠĠĠĠ Ġit . value ĊĠĠĠ Ġ} Ġas ĠList < T > ĊĊĠĠĠ Ġprivate Ġval Ġtop Down Layers : ĠList < Layer > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ layers . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . enabled ĊĠĠĠĠĠĠĠ Ġ}. as Re versed () ĊĊĠĠĠ Ġoverride Ġfun Ġnew Layer ( ĊĠĠĠĠĠĠĠ Ġdescription : ĠString , Ġscript : ĠString , Ġnotes : ĠString ? ĊĠĠĠ Ġ): ĠLayer Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclean Description Ġ= Ġdescription . clean () ĊĠĠĠĠĠĠĠ Ġval Ġclean Script Ġ= Ġscript . clean () ĊĠĠĠĠĠĠĠ Ġval Ġclean Notes Ġ= Ġnotes ?. clean () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Layer ( clean Script ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeta From Git For ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave ( clean Description , Ġclean Script , Ġclean Notes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnew Layer (): ĠLayer Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġthis Ġ=== Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġother Ġis ĠPers isted Layers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġpersistence Ġ== Ġother . persistence ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġscripting Ġ== Ġother . script ing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ_ layers Ġ== Ġother ._ layers ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġhash ( persistence , Ġscripting , Ġ_ layers ) ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= ĊĠĠĠĠĠĠĠ Ġ"${ this :: class . simple Name }{ persistence =$ persistence , Ġscripting =$ script ing , Ġlayers List =$_ layers }" ĊĊĠĠĠ Ġinternal Ġfun Ġto Source Code () Ġ= Ġ_ layers . map Ġ{ ĊĠĠĠĠĠĠĠ Ġit . to Source Code () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġscript File ( fileName : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġpersistence . script File ( fileName ) ĊĊĠĠĠ Ġinternal Ġfun Ġ< R > Ġlet Git ( block : Ġ( Git ) Ġ-> ĠR ): ĠR Ġ= Ġpersistence . let Git ( block ) ĊĊĠĠĠ Ġinternal Ġfun Ġ< R > Ġlet Engine ( block : Ġ( Script Engine ) Ġ-> ĠR ): ĠR Ġ= ĊĠĠĠĠĠĠĠ Ġscripting . let Engine ( block ) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Layer ( script : ĠString ): ĠPers isted Layer Ġ= ĊĠĠĠĠĠĠĠ Ġscripting . let Engine Ġ{ Ġengine Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit ( script ). also Ġ{ Ġlayer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayer . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġengine . eval (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhm . b ink ley . layers .* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġhm . b ink ley . layers . rules .* ĊĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ script ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", Ġengine . create Bindings (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [" layer "] Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcommit ( script : ĠString ): ĠPers isted Layer Ġ= ĊĠĠĠĠĠĠĠ ĠPers isted Layer ( this , Ġ_ layers . size ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ layers . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . include ( script ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh () Ġ= Ġpersistence . refresh ( asList (). size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Layer ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMutable Layer . meta From Git For ( script File : ĠString ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġpersistence . let Git Ġ{ Ġgit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgit . log (). add Path ( script File ). call (). first (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeta [" commit - time "] Ġ= Ġit . commit Time . to Iso DateTime () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeta [" full - message "] Ġ= Ġit . full Message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ