package Ġorg . el k oser ver . feature . caps Ċ Ċ import Ġcom . gr ack . nano json . JsonObject Ċ import Ġorg . el k oser ver . foundation . json . Clock Using Object Ċ import Ġorg . el k oser ver . foundation . json . Deliver er Ċ import Ġorg . el k oser ver . foundation . json . Json Method Ċ import Ġorg . el k oser ver . foundation . json . MessageHandler Exception Ċ import Ġorg . el k oser ver . foundation . json . Opt Boolean Ċ import Ġorg . el k oser ver . foundation . json . Opt Integer Ċ import Ġorg . el k oser ver . foundation . json . Opt String Ċ import Ġorg . el k oser ver . json . Json Literal Ċ import Ġorg . el k oser ver . json . get Optional Boolean Ċ import Ġorg . el k oser ver . json . get Optional Long Ċ import Ġorg . el k oser ver . server . context . model . Basic Object Ċ import Ġorg . el k oser ver . server . context . model . Item Ċ import Ġorg . el k oser ver . server . context . model . Mod Ċ import Ġorg . el k oser ver . server . context . model . Object Completion Watcher Ċ import Ġorg . el k oser ver . server . context . model . User Ċ import Ġorg . el k oser ver . server . context . model . msg Delete Ċ import Ġjava . time . Clock Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġimplementing Ġcapability Ġmods Ġthat Ġgrant Ġaccess Ġto Ġpriv ileged Ċ Ġ* Ġoperations . Ċ Ġ*/ Ċ abstract Ġclass ĠCap Ġinternal Ġconstructor ( desc : ĠJsonObject ) Ġ: ĠMod (), ĠObject Completion Watcher , ĠClock Using Object Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScope Ġflag : Ġif Ġtrue , Ġholder Ġcan Ġtransfer Ġthe Ġcapability Ġto Ġanother ĊĠĠĠĠ Ġ* Ġholder . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġam Trans f err able Ġ= Ġdesc . get Optional Boolean (" trans f err able ", Ġtrue ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScope Ġflag : Ġif Ġtrue , Ġholder Ġcan Ġdelete Ġthis Ġcapability . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġam De letable Ġ= Ġdesc . get Optional Boolean (" de letable ", Ġtrue ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExp iration Ġtime . Ġ ĠAfter Ġthis Ġtime , Ġthis Ġcapability Ġwill Ġno Ġlonger ĊĠĠĠĠ Ġ* Ġfunction . Ġ ĠValue Ġis Ġsystem Ġtime Ġin Ġmilliseconds . Ġ ĠA Ġvalue Ġof Ġ 0 Ġindicates ĊĠĠĠĠ Ġ* Ġthat Ġthe Ġcapability Ġnever Ġexpires . Ġ ĠA Ġvalue Ġof Ġ- 1 Ġindicates Ġthat Ġthe ĊĠĠĠĠ Ġ* Ġcapability Ġis Ġep hemeral , Ġi . e ., Ġthat Ġit Ġexpires Ġwhen Ġthe Ġholder Ġexits . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġmy Expiration Ġ= Ġdesc . get Optional Long (" expiration ", Ġ 0 L ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclock : ĠClock ĊĊĠĠĠ Ġoverride Ġfun Ġset Clock ( clock : ĠClock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . clock Ġ= Ġclock ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMark Ġthe Ġitem Ġas Ġvisible Ġonly Ġto Ġits Ġholder . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠApplication Ġcode Ġshould Ġnot Ġcall Ġthis Ġmethod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġobject Is Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġ(` object `() Ġas ? ĠItem )?. setVisibility ( Basic Object . VIS _ PERSON AL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncode Ġthe Ġbasic Ġcapability Ġparameters Ġas Ġpart Ġof Ġencoding Ġthis ĊĠĠĠĠ Ġ* Ġcapability Ġmod . Ġ ĠThis Ġmethod Ġmust Ġbe Ġcalled Ġby Ġthe Ġencode () Ġmethod Ġof ĊĠĠĠĠ Ġ* Ġeach Ġsubclass . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlit Ġ ĠThe ĠJSON Literal Ġinto Ġwhich Ġthis Ġcapability Ġmod Ġis Ġbeing ĊĠĠĠĠ Ġ* Ġencoded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencode Default Parameters ( lit : ĠJson Literal ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! am De letable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlit . add Parameter (" de letable ", Ġam De letable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! am Trans f err able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlit . add Parameter (" trans f err able ", Ġam Trans f err able ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( 0 Ġ< Ġmy Expiration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlit . add Parameter (" expiration ", Ġmy Expiration ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGuard Ġfunction Ġto Ġguarantee Ġthat Ġan Ġoperation Ġbeing Ġattempted Ġby Ġa Ġuser ĊĠĠĠĠ Ġ* Ġis Ġbeing Ġapplied Ġto Ġa Ġcapability Ġthat Ġis Ġactually Ġavailable Ġto Ġthat ĊĠĠĠĠ Ġ* Ġuser . Ġ ĠTo Ġbe Ġavailable , Ġthe Ġcapability Ġmust Ġbe Ġattached Ġto Ġan Ġobject ĊĠĠĠĠ Ġ* Ġthat Ġis Ġreachable Ġby Ġthe Ġuser Ġand Ġit Ġmust Ġnot Ġbe Ġexpired . Ġ ĠIf Ġthis ĊĠĠĠĠ Ġ* Ġcapability Ġis Ġnot Ġavailable , Ġthis Ġmethod Ġwill Ġthrow Ġa Ġ[ MessageHandler Exception ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠMessage Handler Exception Ġif Ġthe Ġtest Ġfails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġensure Valid ( from : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Reach able ( from ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Expired ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" capability Ġexpired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġif Ġthis Ġcapability Ġhas Ġexpired . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthis Ġcapability Ġhas Ġexpired , Ġfalse Ġif Ġit Ġis Ġstill ĠOK Ġto ĊĠĠĠĠ Ġ* Ġuse . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Expired : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ 0 Ġ< Ġmy Expiration Ġ&& Ġmy Expiration Ġ< Ġclock . millis () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġa Ġ' delete ' Ġmessage . Ġ ĠThis Ġis Ġa Ġrequest Ġfrom Ġa Ġclient Ġto Ġdelete ĊĠĠĠĠ Ġ* Ġthe Ġcapability Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġrequest Ġwill Ġbe Ġrejected Ġif Ġthe Ġcapability Ġis Ġmarked Ġas ĊĠĠĠĠ Ġ* Ġun de letable Ġand Ġis Ġnot Ġexpired . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< u > recv </ u >: Ġ` Ġ{ Ġto :* REF *, Ġop :" delete " Ġ} Ġ`< br ></ br > ĊĠĠĠĠ Ġ* Ġ< u > send </ u >: Ġ` Ġ{ Ġto :* REF *, Ġop :" delete " Ġ} Ġ` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom Ġ ĠThe Ġuser Ġwho Ġsent Ġthe Ġmessage . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Json Method ĊĠĠĠ Ġfun Ġdelete ( from : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Reach able ( from ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! am De letable Ġ&& Ġ! is Expired ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" attempt Ġto Ġdelete Ġnon - de letable Ġcapability ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcap Ġ= Ġ` object `() Ġas ĠItem ĊĠĠĠĠĠĠĠ Ġ( holder () Ġas ĠDel iver er ). send ( msg Delete ( cap )) ĊĠĠĠĠĠĠĠ Ġcap . delete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġa Ġ' set label ' Ġmessage . Ġ ĠThis Ġis Ġa Ġrequest Ġfrom Ġa Ġclient Ġto Ġchange ĊĠĠĠĠ Ġ* Ġthe Ġlabel Ġof Ġthe Ġcapability Ġobject . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< u > recv </ u >: Ġ` Ġ{ Ġto :* REF *, Ġop :" set label ", ĊĠĠĠĠ Ġ* Ġlabel :* STR * Ġ} Ġ`< br ></ br > ĊĠĠĠĠ Ġ* Ġ< u > send </ u >: Ġno Ġreply Ġis Ġsent . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom Ġ ĠThe Ġuser Ġwho Ġsent Ġthe Ġmessage . ĊĠĠĠĠ Ġ* Ġ@ param Ġlabel Ġ ĠThe Ġnew Ġlabel Ġstring . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Json Method (" label ") ĊĠĠĠ Ġfun Ġset label ( from : ĠUser , Ġlabel : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Reach able ( from ) ĊĠĠĠĠĠĠĠ Ġ` object ` (). name Ġ= Ġlabel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġa Ġ' transfer ' Ġmessage . Ġ ĠThis Ġis Ġa Ġrequest Ġfrom Ġa Ġclient Ġto Ġpass ĊĠĠĠĠ Ġ* Ġpos session Ġof Ġthe Ġcapability Ġobject Ġto Ġsome body Ġelse . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġrequest Ġwill Ġbe Ġrejected Ġif Ġthe Ġcapability Ġis Ġmarked Ġas ĊĠĠĠĠ Ġ* Ġun trans f err able . Ġ ĠYes , Ġthis Ġis Ġun enforce able Ġdue Ġto Ġthe Ġpossibility Ġof ĊĠĠĠĠ Ġ* Ġproxy ing , Ġbut Ġmarketing Ġsol ips ism Ġmust Ġbe Ġserved . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< u > recv </ u >: Ġ` Ġ{ Ġto :* REF *, Ġop :" transfer ", Ġdest :* DEST REF * Ġ} Ġ`< br ></ br > ĊĠĠĠĠ Ġ* Ġ< u > send </ u >: Ġ` Ġ{ Ġto :* REF *, Ġop :" delete " Ġ} Ġ`< br ></ br > ĊĠĠĠĠ Ġ* Ġ< u > send </ u >: Ġ` Ġ{ Ġto :* DEST REF *, Ġop :" make ", Ġ... Ġ} Ġ` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom Ġ ĠThe Ġuser Ġwho Ġsent Ġthe Ġmessage . ĊĠĠĠĠ Ġ* Ġ@ param Ġdest Ref Ġ ĠReference Ġto Ġuser Ġor Ġcontext Ġthat Ġis Ġto Ġreceive Ġthe ĊĠĠĠĠ Ġ* Ġcapability . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Json Method (" dest ") ĊĠĠĠ Ġfun Ġtransfer ( from : ĠUser , Ġdest Ref : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Reach able ( from ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! am Trans f err able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" attempt Ġto Ġtransfer Ġnon - trans f err able Ġcapability ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Holder Ġ= Ġcontext ()[ dest Ref ] ĊĠĠĠĠĠĠĠ Ġif Ġ( new Holder Ġ== Ġnull Ġ|| Ġnew Holder Ġis ĠItem ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠXXX ĠTODO ĠIMPORT ANT : Ġdoesn 't Ġwork Ġif Ġdest Ġis Ġoffline ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" invalid Ġtransfer Ġdestination Ġ$ dest Ref ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcap Ġ= Ġ` object `() Ġas ĠItem ĊĠĠĠĠĠĠĠ Ġ( holder () Ġas ĠDel iver er ). send ( msg Delete ( cap )) ĊĠĠĠĠĠĠĠ Ġcap . set Container ( new Holder ) ĊĠĠĠĠĠĠĠ Ġcap . send Object Description ( new Holder Ġas ĠDel iver er , Ġnew Holder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandle Ġa Ġ' spawn ' Ġmessage . Ġ ĠThis Ġis Ġa Ġrequest Ġfrom Ġa Ġclient Ġto Ġcreate Ġa ĊĠĠĠĠ Ġ* Ġcopy Ġof Ġthe Ġcapability Ġobject , Ġwith Ġpossibly Ġreduced Ġscope Ġof Ġpowers . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġwill Ġreject , Ġas Ġan Ġillegal Ġrights Ġamp l ification , Ġany ĊĠĠĠĠ Ġ* Ġattempt Ġto Ġspawn Ġa Ġcapability Ġthat Ġis Ġun de letable Ġwhen Ġthe Ġbase ĊĠĠĠĠ Ġ* Ġcapability Ġis Ġde letable , Ġtrans f err able Ġwhen Ġthe Ġbase Ġcapability Ġis ĊĠĠĠĠ Ġ* Ġun trans f err able , Ġor Ġwhich Ġhas Ġa Ġlater Ġexpiration Ġtime Ġthan Ġthe Ġbase ĊĠĠĠĠ Ġ* Ġcapability . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġ' dest ' Ġdesign ates Ġa Ġdifferent Ġholder , Ġthe Ġoperation Ġwill Ġalso Ġbe ĊĠĠĠĠ Ġ* Ġreg arded Ġas Ġa Ġtransfer Ġand Ġsubject ed Ġto Ġall Ġthe Ġsame Ġchecks Ġas Ġa Ġcall Ġto ĊĠĠĠĠ Ġ* Ġ[ transfer ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ< u > recv </ u >: Ġ` Ġ{ Ġto :* REF *, Ġop :" spawn ", Ġdest :* opt DEST REF *, ĊĠĠĠĠ Ġ* Ġtrans f err able :* opt BOOL *, ĊĠĠĠĠ Ġ* Ġduration :* opt LONG *, ĊĠĠĠĠ Ġ* Ġexpiration :* opt LONG * Ġ} Ġ`< br ></ br > ĊĠĠĠĠ Ġ* Ġ< u > send </ u >: Ġ` Ġ{ Ġto :* DEST REF *, Ġop :" make ", Ġ... Ġ} Ġ` ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom Ġ ĠThe Ġuser Ġwho Ġsent Ġthe Ġmessage . ĊĠĠĠĠ Ġ* Ġ@ param Ġdest Ġ ĠReference Ġto Ġcontainer Ġinto Ġwhich Ġthe Ġnew Ġcapability Ġis Ġto ĊĠĠĠĠ Ġ* Ġbe Ġplaced . Ġ ĠIf Ġomitted , Ġdefaults Ġto Ġthe Ġsending Ġuser . Ġ ĠIf Ġthis ĊĠĠĠĠ Ġ* Ġcapability Ġis Ġnon - trans f err able , Ġmust Ġrefer Ġto Ġthe Ġsending Ġuser Ġor Ġa ĊĠĠĠĠ Ġ* Ġcontainer Ġcontained Ġby Ġthe Ġsending Ġuser . ĊĠĠĠĠ Ġ* Ġ@ param Ġtrans f err able Ġ ĠFlag Ġindicating Ġwhether Ġthe Ġnew Ġcapability Ġis Ġto ĊĠĠĠĠ Ġ* Ġbe Ġtrans f err able . Ġ ĠIf Ġomitted , Ġdefaults Ġto Ġthe Ġsame Ġvalue Ġas Ġthis ĊĠĠĠĠ Ġ* Ġcapability . Ġ ĠIt Ġis Ġnot Ġpermitted Ġto Ġset Ġthis Ġparameter Ġto ĊĠĠĠĠ Ġ* Ġtrue Ġif Ġthis Ġcapability Ġis Ġnot Ġitself Ġtrans f err able . ĊĠĠĠĠ Ġ* Ġ@ param Ġdelete able Ġ ĠFlag Ġindicating Ġwhether Ġthe Ġnew Ġcapability Ġis Ġto Ġbe ĊĠĠĠĠ Ġ* Ġdelete able . Ġ ĠIf Ġomitted , Ġdefaults Ġto Ġtrue . Ġ ĠIt Ġis Ġnot Ġpermitted Ġto ĊĠĠĠĠ Ġ* Ġset Ġthis Ġparameter Ġto Ġfalse Ġif Ġthis Ġcapability Ġis Ġitself Ġde letable . ĊĠĠĠĠ Ġ* Ġ@ param Ġduration Ġ ĠExp iration Ġtime Ġof Ġthe Ġnew Ġcapability , Ġexpressed Ġas Ġan ĊĠĠĠĠ Ġ* Ġoffset Ġ( in Ġmilliseconds ) Ġfrom Ġthe Ġpresent . Ġ ĠA Ġvalue Ġof Ġ 0 Ġ( the ĊĠĠĠĠ Ġ* Ġdefault ) Ġindicates Ġthat Ġthe Ġcapability Ġis Ġpermanent . ĊĠĠĠĠ Ġ* Ġ@ param Ġexpiration Ġ ĠExp iration Ġtime Ġof Ġthe Ġnew Ġcapability , Ġexpressed Ġas ĊĠĠĠĠ Ġ* Ġan Ġabsolute Ġsystem Ġtime Ġ( in Ġmilliseconds ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Json Method (" dest ", Ġ" trans f err able ", Ġ" de letable ", Ġ" duration ", Ġ" expiration ") ĊĠĠĠ Ġfun Ġspawn ( from : ĠUser , Ġdest : ĠOpt String , Ġtrans f err able : ĠOpt Boolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete able : ĠOpt Boolean , Ġduration : ĠOpt Integer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpiration : ĠOpt Integer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Reach able ( from ) ĊĠĠĠĠĠĠĠ Ġval Ġdest Ref Ġ= Ġdest . value OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġif Ġ( dest Ref Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ()[ dest Ref ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( container Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" can 't Ġfind Ġspawn Ġdestination Ġ$ dest Ref ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Trans f err able Ġ= Ġtrans f err able . value ( am Trans f err able ) ĊĠĠĠĠĠĠĠ Ġval Ġnew De letable Ġ= Ġtrans f err able . value ( true ) ĊĠĠĠĠĠĠĠ Ġif Ġ( new Trans f err able Ġ&& Ġ! am Trans f err able Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! new De letable Ġ&& Ġam De letable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" il legal Ġrights Ġamp l ification ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! am Trans f err able Ġ&& Ġcontainer . holder () Ġ!== Ġfrom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" capability Ġis Ġnot Ġtrans f err able ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Duration Ġ= Ġduration . value ( 0 ). to Long () ĊĠĠĠĠĠĠĠ Ġvar Ġnew Expiration Ġ= Ġexpiration . value ( 0 ). to Long () ĊĠĠĠĠĠĠĠ Ġif Ġ( new Expiration Ġ== Ġ 0 L Ġ&& Ġnew Duration Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Expiration Ġ= Ġmy Expiration ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( new Expiration Ġ== Ġ 0 L ) Ġ{ Ġ/* Ġnew Duration Ġ!= Ġ 0 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Expiration Ġ= Ġnew Duration Ġ+ Ġclock . millis () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( new Duration Ġ!= Ġ 0 L ) Ġ{ Ġ/* Ġ&& Ġnew Expiration Ġ!= Ġ 0 Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" can 't Ġspecify Ġboth Ġduration Ġand Ġexpiration ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpire OK Ġ= Ġwhen Ġ( my Expiration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 L Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 L Ġ-> Ġnew Expiration Ġ== Ġ- 1 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnew Expiration Ġ<= Ġmy Expiration ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! expire OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" il legal Ġrights Ġamp l ification ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcap Item Ġ= Ġcontainer . create Item (` object ` (). name !! , Ġfalse , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclone () Ġas ĠCap ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClone NotSupportedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMessage Handler Exception (" this Ġcan 't Ġhappen ") ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġam Trans f err able Ġ= Ġnew Trans f err able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġam De letable Ġ= Ġnew De letable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Expiration Ġ= Ġnew Expiration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattach To ( cap Item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcap Item . object Is Complete () ĊĠĠĠĠĠĠĠ Ġcap Item . send Object Description ( cap Item . holder () Ġas ĠDel iver er , Ġcontainer ) ĊĠĠĠ Ġ} Ċ } Ċ