package Ġio . kom mon s . design patterns . abstract document Ċ Ċ /** Ċ Ġ* ĠAbstract Document Ċ Ġ* Ċ Ġ* Ġ@ author Ġdeb op Ċ Ġ* Ġ@ since Ġ 2 8 / 0 9 / 2 0 1 9 Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Document ( private Ġval Ġproperties : ĠMutable Map < String , ĠAny ?> ): ĠDocument Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġset ( key : ĠString , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġproperties [ key ] Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ( key : ĠString ): ĠAny ? Ġ= Ġproperties [ key ] ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġchildren ( key : ĠString , Ġconstructor : Ġ( Mutable Map < String , ĠAny ?> ) Ġ-> ĠT ): ĠSequence < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsequence Of ( get ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit Ġas ? ĠList < Mutable Map < String , ĠAny ? >> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . map Ġ{ Ġconstructor ( it ) Ġ}. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ( java Class . name ). append ("[ ") ĊĠĠĠĠĠĠĠ Ġproperties . as Sequence (). join To ( this , Ġprefix Ġ= Ġ"[", Ġpostfix Ġ= Ġ"] ") Ġ{ Ġ"${ it . key } Ġ: Ġ${ it . value }" Ġ} ĊĠĠĠĠĠĠĠ Ġappend (" ]") ĊĠĠĠ Ġ} Ċ }