package Ġcz . pal da 9 7 . lp client . model . entities . pipeline Ċ Ċ import Ġcz . pal da 9 7 . lp client . model . Either Ċ import Ġcz . pal da 9 7 . lp client . model . tr ave lo bject s . Common Functions Ċ import Ġcz . pal da 9 7 . lp client . model . tr ave lo bject s . Ld Constants Ċ Ċ /** Ċ Ġ* Ġ@ property Ġjson ĠJson Ld Ġcontaining Ġbindings . Ċ Ġ*/ Ċ class ĠBinding Factory ( private Ġval Ġjson : ĠString ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠParse Ġ[ json ] Ġto Ġlist Ġof Ġ[ bindings ][ Binding ]. ĊĠĠĠĠ Ġ* Ġ@ return ĠBind ings Ġor Ġnull Ġon Ġerror . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġparse (): ĠList < Binding >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot ArrayList Ġ= Ġwhen Ġ( val Ġres Ġ= ĠCommon Functions . getRoot ArrayList ( json )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Left Ġ-> Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEither . Right Ġ-> Ġres . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( root ArrayList . size Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġroot Map Ġ= Ġroot ArrayList [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġtemplate Id Ġ= ĠCommon Functions . give Me That Id ( root Map ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġsemi Root Element Ġ= ĠCommon Functions . prepare Sem i Root Element ( root Map ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġbinding List : ĠMutable List < Binding > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġsemi Root Element . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġit Ġas ? ĠMap < *, Ġ*> Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtypes Ġ= ĠCommon Functions . give Me Th ose Types ( map ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( types . contains ( Ld Constants . TYPE _ PORT _ INPUT ) Ġ|| Ġtypes . contains ( Ld Constants . TYPE _ PORT _ OUTPUT ) Ġ|| Ġtypes . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL d Constants . TYPE _ RUNTIME _ CONFIGURATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= Ġparse Binding ( map , Ġtemplate Id , Ġtypes ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding List . add ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* private Ġfun Ġtypes To Type ( types : ĠList < String >): ĠBinding . Type ? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( types . contains ( Ld Constants . TYPE _ PORT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( types . contains ( Ld Constants . TYPE _ PORT _ INPUT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBinding . Type . INPUT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( types . contains ( Ld Constants . TYPE _ PORT _ OUTPUT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBinding . Type . OUTPUT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( types . contains ( Ld Constants . TYPE _ RUNTIME _ CONFIGURATION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinding . Type . CONFIGURATION ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠ Ġprivate Ġfun Ġtypes To Type ( types : ĠList < String >): ĠBinding . Type ? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( types . contains ( Ld Constants . TYPE _ PORT _ INPUT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinding . Type . INPUT ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( types . contains ( Ld Constants . TYPE _ PORT _ OUTPUT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinding . Type . OUTPUT ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( types . contains ( Ld Constants . TYPE _ RUNTIME _ CONFIGURATION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBinding . Type . CONFIGURATION ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Binding ( map : ĠMap < *, Ġ* >, Ġtemplate Id : ĠString , Ġtypes : ĠList < String >): ĠBinding ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġtypes To Type ( types ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠCommon Functions . give Me That Id ( map ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġbinding Value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Functions . give Me That String ( map , ĠL d Constants . BINDING , ĠL d Constants . VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġpref Label Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Functions . give Me That String ( map , ĠL d Constants . PRE F _ LABEL , ĠL d Constants . VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn ĠBinding ( template Id , Ġtype , Ġbinding Value , Ġpref Label , Ġid ) ĊĠĠĠ Ġ} Ċ }