package Ġcom . cent ury link . md w . studio . ui . widgets Ċ Ċ import Ġcom . cent ury link . md w . draw . edit . init Ċ import Ġcom . cent ury link . md w . draw . edit . is Readonly Ċ import Ġcom . cent ury link . md w . draw . edit . source Ċ import Ġcom . cent ury link . md w . model . asset . Page let Ċ import Ġcom . cent ury link . md w . model . asset . Page let . Widget Ċ import Ġcom . cent ury link . md w . model . variable . Variable Ċ import Ġcom . cent ury link . md w . model . workflow . Process Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠMap Ġwill Ġhave Ġbeen Ġconverted Ġto Ġa Ġtable Ġby Ġits Ġadapter . Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ class ĠMapping ( widget : ĠWidget ) Ġ: ĠTable ( widget , Ġfalse , Ġfalse ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġlisten To Ġ= Ġif Ġ( widget . source Ġ== Ġ" Sub process " Ġ) Ġ" process name " Ġelse Ġsuper . listen To ĊĊĠĠĠ Ġoverride Ġfun Ġinitial Column Widgets (): ĠList < Widget > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcol W id gs Ġ= Ġmutable ListOf < Widget >() ĊĊĠĠĠĠĠĠĠ Ġval Ġlabel Ġ= Ġif Ġ( widget . source Ġ== Ġnull ) Ġ" Input ĠVariable " Ġelse Ġ"${ widget . source } ĠVariable " ĊĠĠĠĠĠĠĠ Ġval Ġvar Widget Ġ= ĠWidget ( label , Ġ" text ") ĊĠĠĠĠĠĠĠ Ġvar Widget . init (" table ", Ġworkflow Obj ) ĊĠĠĠĠĠĠĠ Ġvar Widget . is Readonly Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcol W id gs . add ( var Widget ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtype Widget Ġ= ĠWidget (" Type ", Ġ" text ") ĊĠĠĠĠĠĠĠ Ġtype Widget . init (" table ", Ġworkflow Obj ) ĊĠĠĠĠĠĠĠ Ġtype Widget . is Readonly Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcol W id gs . add ( type Widget ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmode Widget Ġ= ĠWidget (" Mode ", Ġ" text ") ĊĠĠĠĠĠĠĠ Ġmode Widget . init (" table ", Ġworkflow Obj ) ĊĠĠĠĠĠĠĠ Ġmode Widget . is Readonly Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcol W id gs . add ( mode Widget ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpr Widget Ġ= ĠWidget (" Binding ĠExpression ", Ġ" text ") ĊĠĠĠĠĠĠĠ Ġexpr Widget . init (" table ", Ġworkflow Obj ) ĊĠĠĠĠĠĠĠ Ġcol W id gs . add ( expr Widget ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcol W id gs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbinding Variables : ĠList < Variable > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( widget . source Ġ== Ġ" Sub process ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproc Name Ġ= Ġworkflow Obj . getAttribute (" process name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( proc Name Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġset Ġyet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfile Ġ= Ġproject Setup . get Asset File ( proc Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ= Ġproject Setup . get Asset File ( proc Name Ġ+ Ġ". proc ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ?: Ġthrow ĠIOException (" Missing Ġsubprocess Ġasset : Ġ" Ġ+ Ġproc Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= ĠProcess . fromString ( String ( file . contents To ByteArray ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Binding Vars ( process , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Binding Vars ( workflow Obj . asset Ġas ĠProcess , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinitial Rows (): ĠMutable List < Array < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrows Ġ= Ġmutable ListOf < Array < String >>() ĊĠĠĠĠĠĠĠ Ġ// Ġinitialize Ġrows Ġfrom Ġwidget Ġvalue ĊĠĠĠĠĠĠĠ Ġwidget . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapping Json Ġ= Ġit Ġas ĠJSONObject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġclear Ġout Ġinvalid Ġmappings Ġ( left Ġover Ġfrom Ġold Ġvariables ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Remove Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġmapping Json . keySet ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding Variables . find Ġ{ Ġit . name Ġ== Ġkey Ġ} Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Remove . add ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! to Remove . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Remove . forEach Ġ{ Ġmapping Json . remove ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( binding Variable Ġin Ġbinding Variables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows . add ( array Of ( binding Variable . name , Ġbinding Variable . type , Ġbinding Variable . category , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping Json . opt String ( binding Variable . name ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrows ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Binding Vars ( process : ĠProcess , Ġinclude Out s : ĠBoolean ): ĠList < Variable > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Vars Ġ= Ġmutable ListOf < Variable >() ĊĠĠĠĠĠĠĠ Ġprocess . variables ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( variable Ġin Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variable . category Ġ== Ġ" INPUT " Ġ|| Ġvariable . category Ġ== Ġ" IN OUT " Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( include Out s Ġ&& Ġvariable . category Ġ== Ġ" OUTPUT ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Vars . add ( variable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding Vars . sortBy Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding Vars ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwidget Value From Rows ( rows : ĠList < Array < String >> ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdated Mapping Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġrows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Expr Ġ= Ġrow [ 3 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! binding Expr . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Mapping . put ( row [ 0 ], Ġbinding Expr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġupdated Mapping ĊĠĠĠ Ġ} Ċ }