package Ġtech . k zen . lib . common . model . attribute Ċ Ċ import Ġtech . k zen . lib . common . util . Digest Ċ import Ġtech . k zen . lib . common . util . Digest ible Ċ import Ġtech . k zen . lib . platform . collect . Persistent List Ċ import Ġtech . k zen . lib . platform . collect . to Persistent List ĊĊ Ċ data Ġclass ĠAttribute N esting ( ĊĠĠĠ Ġval Ġsegments : ĠPersistent List < Attribute Segment > Ċ ): ĊĠĠĠ ĠDigest ible Ċ { ĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġempty Ġ= ĠAttribute N esting ( Persistent List ()) ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġparse ( asString : ĠString ): ĠAttribute N esting Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( asString Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= ĠAttribute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split On Delimiter ( asString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠAttribute Segment . parse ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Persistent List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAttribute N esting ( segments ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġfun Ġshift (): ĠAttribute N esting Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAttribute N esting ( segments . sub List ( 1 , Ġsegments . size )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġpush ( segment : ĠAttribute Segment ): ĠAttribute N esting Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAttribute N esting ( segments . add ( segment )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġpush ( attribute N esting : ĠAttribute N esting ): ĠAttribute N esting Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAttribute N esting ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsegments . addAll ( attribute N esting . segments )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġparent (): ĠAttribute N esting Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAttribute N esting ( segments . sub List ( 0 , Ġsegments . size Ġ- Ġ 1 )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------------------------------------------------------- ------------------------------------------------ - ĊĠĠĠ Ġoverride Ġfun Ġdigest ( sink : ĠDigest . Sink ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsink . add Digest ible List ( segments ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġas String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsegments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( Attribute Path . delimiter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . asString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġas String () ĊĠĠĠ Ġ} Ċ }