package Ġcom . simplify . android . sdk Ċ Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġjava . util . ArrayList ĊĊ Ċ class ĠSimpl ify Map Ġ: ĠLinkedHashMap < String , ĠAny > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġarray Index Pattern Ġ= Ġ"( .* )\\ [( .* )\\ ] ". to Regex () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġan Ġidentical Ġcopy Ġof Ġthe Ġmap ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġm ĠThe Ġmap Ġto Ġcopy ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠA Ġcopy Ġof Ġthe Ġoriginal Ġmap ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnormalize ( m : ĠMutable Map < String , ĠAny >): ĠMutable Map < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpm Ġ= ĠSimpl ify Map () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm . keys . forEach Ġ{ Ġk Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġv Ġ= Ġm [ k ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> Ġpm . set ( k , Ġnormalize ( v Ġas ĠMutable List < Any > )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMap < *, Ġ*> Ġ-> Ġpm . set ( k , Ġnormalize ( v Ġas ĠMutable Map < String , ĠAny > )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString , Ġis ĠDouble , Ġis ĠFloat , Ġis ĠNumber , Ġis ĠBoolean Ġ-> Ġpm . set ( k , Ġv ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpm . set ( k , Ġv . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpm ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġnormalize ( l : ĠMutable List < Any >): ĠMutable List < Any > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpl Ġ= ĠArrayList < Any >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġl . forEach Ġ{ v Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( v ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> Ġpl . add ( normalize ( v Ġas ĠMutable List < Any > )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMap < *, Ġ*> Ġ-> Ġpl . add ( normalize ( v Ġas ĠMutable Map < String , ĠAny > )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString , Ġis ĠDouble , Ġis ĠFloat , Ġis ĠNumber , Ġis ĠBoolean Ġ-> Ġpl . add ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpl . add ( v . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpl ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġan Ġempty Ġmap Ġwith Ġthe Ġdefault Ġcapacity Ġand Ġload Ġfactor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor () Ġ: Ġsuper () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġan Ġempty Ġmap Ġwith Ġthe Ġspecified Ġcapacity Ġand Ġdefault Ġload Ġfactor . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Capacity Ġthe Ġinitial Ġcapacity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( initial Capacity : ĠInt ) Ġ: Ġsuper ( initial Capacity ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġan Ġempty Ġmap Ġwith Ġthe Ġspecified Ġcapacity Ġand Ġload Ġfactor . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Capacity Ġthe Ġinitial Ġcapacity ĊĠĠĠĠ Ġ* Ġ@ param Ġload Factor ĠĠĠĠĠ Ġthe Ġload Ġfactor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( initial Capacity : ĠInt , Ġload Factor : ĠFloat ) Ġ: Ġsuper ( initial Capacity , Ġload Factor ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġmap Ġwith Ġthe Ġsame Ġmappings Ġas Ġin Ġthe Ġspec if ed Ġmap . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmap Ġthe Ġmap Ġwhose Ġmappings Ġare Ġto Ġbe Ġplaced Ġin Ġthis Ġmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( map : ĠMap < String , ĠAny >) Ġ: Ġsuper ( map ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġmap Ġbased Ġof Ġthe Ġspe fic ied ĠJSON Ġstring . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġjson Map String Ġthe ĠJSON Ġstring Ġused Ġto Ġconstruct Ġthe Ġmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( json Map String : ĠString ?) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠGson (). fromJson < Map < out ĠString , ĠAny >>( json Map String , Ġobject Ġ: ĠType Token < Map < out ĠString , ĠAny >>() Ġ{} . type ) ĊĠĠĠĠĠĠĠ Ġput All ( map ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġmap Ġwith Ġan Ġinitial Ġmapping Ġof Ġkey Path Ġto Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Path Ġkey Ġpath Ġwith Ġwhich Ġthe Ġspecified Ġvalue Ġis Ġto Ġbe Ġassociated . ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue ĠĠ Ġvalue Ġto Ġbe Ġassociated Ġwith Ġthe Ġspecified Ġkey Ġpath . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( key Path : ĠString , Ġvalue : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġput ( key Path , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAssoci ates Ġthe Ġspecified Ġvalue Ġto Ġthe Ġspecified Ġkey Ġpath . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġkey Ġpath Ġto Ġwhich Ġthe Ġspecified Ġvalue Ġis Ġto Ġbe Ġassociated . ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue ĠĠ Ġthe Ġvalue Ġwhich Ġis Ġto Ġbe Ġassociated Ġwith Ġthe Ġspecified Ġkey Ġpath . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġ Ġif Ġpart Ġof Ġthe Ġkey Ġpath Ġdoes Ġnot Ġmatch Ġthe Ġexpected Ġtype . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException Ġif Ġusing Ġan Ġarray Ġindex Ġin Ġthe Ġkey Ġpath Ġis Ġout Ġof Ġbounds . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġput ( key : ĠString , Ġvalue : ĠAny ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproperties Ġ= Ġkey . split ("\\ .". to Regex ()) ĊĠĠĠĠĠĠĠ Ġvar Ġdestination Object : ĠMutable Map < String , ĠAny > Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġif Ġ( properties . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġproperties . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Ġ= Ġproperties [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Object Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperty . contains ("[ ") Ġ-> Ġget Destination Map ( property , Ġdestination Object , Ġi Ġ== Ġproperties . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠgetProperty Map From ( property , Ġdestination Object ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( key . contains (" [" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Object Ġ= Ġget Destination Map ( key , Ġthis , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġneed Ġto Ġtake Ġcare Ġof Ġthe Ġcase Ġwhere Ġwe Ġare Ġinserting Ġa Ġvalue Ġinto Ġan Ġarray Ġrather Ġthan ĊĠĠĠĠĠĠĠ Ġ// Ġmap Ġ( Ġeg Ġmap . put (" a [ 2 ]", Ġ 1 2 3 ); ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Object Ġ=== Ġthis Ġ-> Ġsuper . put ( key , Ġvalue !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠMap < *, Ġ*> Ġ-> Ġ{ ĠĠĠĠ Ġ// Ġif Ġputting Ġa Ġmap , Ġcall Ġput Ġall ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Object . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠSimpl ify Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm . put All ( value Ġas ĠMap < out ĠString , ĠAny >) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Object [ properties [ properties . size Ġ- Ġ 1 ]] Ġ= Ġm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Object ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdestination Object . put ( properties [ properties . size Ġ- Ġ 1 ], Ġvalue !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAssoci ates Ġthe Ġspecified Ġvalue Ġto Ġthe Ġspecified Ġkey Ġpath Ġand Ġreturns Ġa Ġreference Ġto ĊĠĠĠĠ Ġ* Ġthis Ġmap . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Path Ġkey Ġpath Ġto Ġwhich Ġthe Ġspecified Ġvalue Ġis Ġto Ġbe Ġassociated . ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue ĠĠ Ġthe Ġvalue Ġwhich Ġis Ġto Ġbe Ġassociated Ġwith Ġthe Ġspecified Ġkey Ġpath . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġmap ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġ Ġif Ġpart Ġof Ġthe Ġkey Ġpath Ġdoes Ġnot Ġmatch Ġthe Ġexpected Ġtype . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException Ġif Ġusing Ġan Ġarray Ġindex Ġin Ġthe Ġkey Ġpath Ġis Ġout Ġof Ġbounds . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset ( key Path : ĠString , Ġvalue : ĠAny ): ĠSimpl ify Map Ġ{ ĊĠĠĠĠĠĠĠ Ġput ( key Path , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvalue Ġassociated Ġwith Ġthe Ġspecified Ġkey Ġpath Ġor Ġnull Ġif Ġthere Ġis Ġno Ġassociated Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Path Ġkey Ġpath Ġwhose Ġassociated Ġvalue Ġis Ġto Ġbe Ġreturned ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvalue Ġto Ġwhich Ġthe Ġspecified Ġkey Ġis Ġmapped ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġ Ġif Ġpart Ġof Ġthe Ġkey Ġpath Ġdoes Ġnot Ġmatch Ġthe Ġexpected Ġtype . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException Ġif Ġusing Ġan Ġarray Ġindex Ġin Ġthe Ġkey Ġpath Ġis Ġout Ġof Ġbounds . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget ( key : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġkey . split ("\\ .". to Regex ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( keys . size Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġarray Index Pattern . find ( keys [ 0 ]) ?. group Values ?. let Ġ{ Ġgroups Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġgroups [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġsuper . get ( k ) Ġas ? ĠList < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Property Ġ'$ k ' Ġis Ġnot Ġan Ġarray ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġo Ġas ĠList < Map < String , ĠAny >> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// get Ġlast Ġitem Ġif Ġnone Ġspecified ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġif Ġ( groups [ 2 ]. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInteger . parseInt ( groups [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġl . size Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġl [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġsuper . get ( keys [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġfind Last Map In Key Path ( key ) ĠĠĠĠ Ġ// Ġhandles Ġkey Paths Ġbeyond Ġ' root ' Ġkey Path . Ġi . e . Ġ" x . y ĠOR Ġx . y []. z , Ġetc ." ĊĊĠĠĠĠĠĠĠ Ġ// Ġretrieve Ġthe Ġvalue Ġat Ġthe Ġend Ġof Ġthe Ġobject Ġpath Ġi . e . Ġx . y . z , Ġthis Ġretrieves Ġwhatever Ġis Ġin Ġ' z ' ĊĠĠĠĠĠĠĠ Ġreturn Ġmap !!. get ( keys [ keys . size Ġ- Ġ 1 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġtrue Ġif Ġthere Ġis Ġa Ġvalue Ġassociated Ġwith Ġthe Ġspecified Ġkey Ġpath . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġkey Ġpath Ġwhose Ġassociated Ġvalue Ġis Ġto Ġbe Ġtested ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthis Ġmap Ġcontains Ġan Ġvalue Ġassociated Ġwith Ġthe Ġspecified Ġkey Ġpath ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġ Ġif Ġpart Ġof Ġthe Ġkey Ġpath Ġdoes Ġnot Ġmatch Ġthe Ġexpected Ġtype . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException Ġif Ġusing Ġan Ġarray Ġindex Ġin Ġthe Ġkey Ġpath Ġis Ġout Ġof Ġbounds . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcontains Key ( key : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġkey . split ("\\ .". to Regex ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( keys . size Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġarray Index Pattern . find ( keys [ 0 ]) ?. group Values ?. let Ġ{ Ġgroups Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġgroups [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġsuper . get ( k ) Ġas ? ĠMutable List < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Property Ġ'$ k ' Ġis Ġnot Ġan Ġarray ") Ġ Ġ// Ġget Ġthe Ġlist Ġfrom Ġthe Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġo Ġas ĠMutable List < Mutable Map < String , ĠAny >> Ġ Ġ// Ġget Ġthe Ġlist Ġfrom Ġthe Ġmap ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ġ= Ġif Ġ( groups [ 2 ]. isNotEmpty ()) ĠInteger . parseInt ( groups [ 2 ]) Ġelse Ġl . size Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ>= Ġ 0 Ġ&& Ġindex Ġ< Ġl . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġsuper . containsKey ( keys [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġfind Last Map In Key Path ( key ) Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġmap . containsKey ( keys [ keys . size Ġ- Ġ 1 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġthe Ġvalue Ġassociated Ġwith Ġthe Ġspecified Ġkey Ġpath Ġfrom Ġthe Ġmap . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey Ġkey Ġpath Ġwhose Ġassociated Ġvalue Ġis Ġto Ġbe Ġremoved ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġ Ġif Ġpart Ġof Ġthe Ġkey Ġpath Ġdoes Ġnot Ġmatch Ġthe Ġexpected Ġtype . ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException Ġif Ġusing Ġan Ġarray Ġindex Ġin Ġthe Ġkey Ġpath Ġis Ġout Ġof Ġbounds . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġremove ( key : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġkey . split ("\\ .". to Regex ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( keys . size Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġarray Index Pattern . find ( keys [ 0 ]) ?. group Values ?. let Ġ{ Ġgroups Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġgroups [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġsuper . get ( k ) Ġas ? ĠMutable List < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Property Ġ'$ k ' Ġis Ġnot Ġan Ġarray ") Ġ Ġ// Ġget Ġthe Ġlist Ġfrom Ġthe Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġo Ġas ĠMutable List < Mutable Map < String , ĠAny >> Ġ Ġ// Ġget Ġthe Ġlist Ġfrom Ġthe Ġmap ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ġ= Ġif Ġ( groups [ 2 ]. isNotEmpty ()) ĠInteger . parseInt ( groups [ 2 ]) Ġelse Ġl . size Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl . remove At ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġsuper . remove ( keys [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġfind Last Map In Key Path ( key ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmap !!. remove ( keys [ keys . size Ġ- Ġ 1 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Last Map In Key Path ( key Path : ĠString ): ĠMutable Map < String , ĠAny >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġkey Path . split ("\\ .". to Regex ()) ĊĊĠĠĠĠĠĠĠ Ġvar Ġmap : ĠMutable Map < String , ĠAny >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. keys . size Ġ- Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġthis Key Ġ= Ġkeys [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Ġ= Ġarray Index Pattern . find ( keys [ i ]) ?. group Values ?. let Ġ{ Ġgroups Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Key Ġ= Ġgroups [ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo : ĠAny ? Ġ= Ġ( if Ġ( null Ġ== Ġmap ) Ġsuper . get ( this Key ) Ġelse Ġmap ! ![ this Key ]) Ġas ? ĠList < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Property Ġ'$ this Key ' Ġis Ġnot Ġan Ġarray ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġo Ġas ĠMutable List < Mutable Map < String , ĠAny >> ? ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex : ĠInt ? Ġ= Ġl !!. size Ġ- Ġ 1 ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// get Ġlast Ġitem Ġif Ġnone Ġspecified ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( "" Ġ!= Ġgroups [ 2 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= ĠInteger . parseInt ( groups [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl [ index !! ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġif Ġ( map Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . get ( this Key ) Ġas ĠMutable Map < String , ĠAny >? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ this Key ] Ġas ĠMutable Map < String , ĠAny >? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Destination Map ( property : ĠString , Ġdestination Object : ĠMutable Map < String , ĠAny >, Ġcreate Map : ĠBoolean ): ĠMutable Map < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġarray Index Pattern . find ( property )?. group Values ?. let Ġ{ Ġgroups Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprop Name Ġ= Ġgroups [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt ? Ġ= Ġif Ġ( groups [ 2 ]. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInteger . parseInt ( groups [ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Or Add ToList ( destination Object , Ġprop Name , Ġindex , Ġcreate Map ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġdestination Object ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Or Add ToList ( destination Object : ĠMutable Map < String , ĠAny >, Ġprop Name : ĠString , Ġindex : ĠInt ?, Ġcreate Map : ĠBoolean ): ĠMutable Map < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdest Object Ġ= Ġdestination Object ĊĊĠĠĠĠĠĠĠ Ġvar Ġlist Ġ= ĠArrayList < Mutable Map < String , ĠAny >>() ĊĠĠĠĠĠĠĠ Ġ// Ġfind Ġexisting Ġlist Ġor Ġput Ġthe Ġnew Ġlist ĊĠĠĠĠĠĠĠ Ġif Ġ( dest Object . containsKey ( prop Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġdest Object [ prop Name ] Ġas ? ĠList < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Property Ġ'$ prop Name ' Ġis Ġnot Ġan Ġarray ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġo Ġas ĠArrayList < Mutable Map < String , ĠAny >> ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdest Object [ prop Name ] Ġ= Ġlist ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġexisting Ġobject Ġin Ġthe Ġlist Ġat Ġthe Ġindex ĊĠĠĠĠĠĠĠ Ġvar Ġproperty Value : ĠMutable Map < String , ĠAny >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġnull Ġ&& Ġlist . size Ġ> Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Value Ġ= Ġlist [ index ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġno Ġobject Ġat Ġthe Ġindex , Ġcreate Ġa Ġnew Ġmap Ġand Ġadd Ġit ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġproperty Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Value Ġ= Ġjava . util . Linked HashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( property Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( index , Ġproperty Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġreturn Ġthe Ġmap Ġretrieved Ġfrom Ġor Ġadded Ġto Ġthe Ġlist ĊĠĠĠĠĠĠĠ Ġdest Object Ġ= Ġproperty Value ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdest Object ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetProperty Map From ( property : ĠString , Ġobj : ĠMutable Map < String , ĠAny >): ĠMutable Map < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġa Ġnew Ġmap Ġat Ġthe Ġkey Ġspecified Ġif Ġit Ġdoesn 't Ġalready Ġexist ĊĠĠĠĠĠĠĠ Ġif Ġ(! obj . containsKey ( property )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠLinkedHashMap < String , ĠAny >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj [ property ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġobj [ property ] ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( o Ġis ĠMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġo Ġas ĠMutable Map < String , ĠAny > ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" cannot Ġchange Ġnested Ġproperty Ġto Ġmap ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }