package Ġto ky o . a ie uo . mine flow . utils Ċ Ċ import Ġcn . n uk kit . utils . Config Ċ import Ġto ky o . a ie uo . mine flow . form API . Form Ċ import Ġto ky o . a ie uo . mine flow . trigger . Trigger Holder Ċ import Ġto ky o . a ie uo . mine flow . trigger . form . Form Trigger Ċ Ċ class ĠForm Manager ( val Ġconfig : ĠConfig ) Ġ{ ĊĊĠĠĠ Ġval Ġall : ĠMutable Map < String , ĠForm > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġfor Ġ(( name , Ġ_ data ) Ġin Ġconfig . all ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġ_ data Ġas ĠMap < String , Ġ*> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall [ name ] Ġ= ĠForm . createFrom Array ( data [" form "] Ġas ĠMap < String , ĠAny >, Ġname ) Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave All () Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . save () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexists Form ( name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġall . containsKey ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Form ( name : ĠString , Ġform : ĠForm ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġform . type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" form " Ġto Ġjson Serializable ToMap ( form . json Serialize ()), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġall [ name ] Ġ= Ġform ĊĠĠĠĠĠĠĠ Ġconfig . set ( name , Ġdata ) ĊĠĠĠĠĠĠĠ Ġconfig . save () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Form ( name : ĠString ): ĠForm ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġall [ name ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Form ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġall . remove ( name ) ĊĠĠĠĠĠĠĠ Ġconfig . remove ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Not D uplicated Name ( name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! exists Form ( name )) Ġreturn Ġname ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( exists Form ("$ name Ġ($ count ) ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ name Ġ($ count )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Assigned Recipes ( form Name : ĠString ): ĠMap < String , ĠList < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrecipes Ġ= Ġmutable Map Of < String , ĠMutable List < String >>() ĊĠĠĠĠĠĠĠ Ġval Ġcontainers Ġ= ĠTrigger Holder . get Recipes With Sub Key ( Form Trigger . create ( form Name )) ĊĠĠĠĠĠĠĠ Ġfor Ġ(( name , Ġcontainer ) Ġin Ġcontainers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( recipe Ġin Ġcontainer . getAll Recipe (). values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"${ recipe . group }/${ recipe . name }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! recipes . containsKey ( path )) Ġrecipes [ path ] Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipes [ path ]?. add ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrecipes ĊĠĠĠ Ġ} Ċ }