package Ġast . sp . labels ĊĊ Ċ sealed Ġclass ĠEx traction Label ( var Ġf lipped : ĠBoolean Ġ= Ġfalse ){ ĊĠĠĠ Ġabstract Ġfun Ġcopy (): ĠEx traction Label ĊĊĠĠĠ Ġsealed Ġclass ĠCondition Label ( open Ġval Ġprocess : ĠString , Ġopen Ġval Ġexpression : ĠString ) Ġ: ĠEx traction Label (){ ĊĊĠĠĠĠĠĠĠ Ġclass ĠThen Label ( override Ġval Ġprocess : ĠString , Ġoverride Ġval Ġexpression : ĠString ) Ġ: ĠCondition Label ( process , Ġexpression ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcopy () Ġ= ĠThen Label ( process , Ġexpression ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" if Ġ$ process .$ expression Ġthen Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclass ĠElse Label ( override Ġval Ġprocess : ĠString , Ġoverride Ġval Ġexpression : ĠString ) Ġ: ĠCondition Label ( process , Ġexpression ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcopy () Ġ= ĠElse Label ( process , Ġexpression ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" if Ġ$ process .$ expression Ġelse Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠInteraction Label ( open Ġval Ġsender : ĠString , Ġopen Ġval Ġreceiver : ĠString , Ġopen Ġval Ġexpression : ĠString ) Ġ: ĠEx traction Label (){ ĊĠĠĠĠĠĠĠ Ġclass ĠCommunication Label ( override Ġval Ġsender : ĠString , Ġoverride Ġval Ġreceiver : ĠString , Ġoverride Ġval Ġexpression : ĠString ): ĠInteraction Label ( sender , Ġreceiver , Ġexpression ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcopy () Ġ= ĠCommunication Label ( sender , Ġreceiver , Ġexpression ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ"$ sender .$ expression ->$ receiver " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclass ĠSelection Label ( override Ġval Ġsender : ĠString , Ġoverride Ġval Ġreceiver : ĠString , Ġval Ġlabel : ĠString ): ĠInteraction Label ( sender , Ġreceiver , Ġlabel ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcopy () Ġ= ĠSelection Label ( sender , Ġreceiver , Ġexpression ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ"$ sender ->$ receiver [$ label ]" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠMult icom Label ( val Ġlabels : ĠArrayList < Interaction Label >): ĠEx traction Label (){ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcopy () Ġ= ĠMult icom Label ( labels . map Ġ{ Ġit . copy () Ġ}. toList () Ġas ĠArrayList < Interaction Label >) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġlabels . join ToString ( separator Ġ= Ġ Ġ", Ġ", Ġprefix Ġ= Ġ" (", Ġpostfix Ġ= Ġ") ") ĊĠĠĠ Ġ} Ċ }