package Ġcn . lu o . y uan . ma ze . model Ċ Ċ import Ġcn . lu o . y uan . ma ze . exception . Already Ack nowledge Ċ import Ġcn . lu o . y uan . ma ze . utils . Field . Companion . SERVER _ VERSION Ċ import Ġjava . io . Serializable Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . locks . Re entrant Lock Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġgl uo Ġon Ġ 6 / 1 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠExchange Object ( val Ġexchange : ĠID Model , Ġval Ġowner Id : ĠString ) Ġ: ĠSerializable , ĠID Model Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠserialVersionUID : ĠLong Ġ= ĠSERVER _ VERSION ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġdelete : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġfun Ġis Delete (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdelete ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmark Delete () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġexpected Key Word Ġ= Ġ"" ĊĠĠĠ Ġvar Ġexpected Type : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġsubmit Time Ġ= Ġ 0 L ; ĊĠĠĠ Ġvar Ġchanged Time Ġ= Ġ 0 L ; ĊĠĠĠ Ġvar Ġtype Ġ= Ġ 0 ; ĊĠĠĠ Ġvar Ġchanged : ĠExchange Object ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġlock : ĠRe entrant Lock Ġ= ĠRe entrant Lock () ĊĠĠĠ Ġvar Ġacknowledge Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock . try Lock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// use Ġfield Ġto Ġaccess Ġthis Ġfile Ġif Ġyou Ġwant Ġto Ġdo Ġsome Ġdifferent Ġin Ġthe Ġset Ġor Ġget ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAlready Ack nowledge ( exchange . toString () Ġ+ Ġ" Ġhas Ġbeen Ġacknowled ged !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetId (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexchange . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetId ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexchange . id Ġ= Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange ( changed : ĠExchange Object ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lock . try Lock ( 5 0 0 , ĠTimeUnit . MILLISECONDS )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . changed Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Time Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . changed Ġ= Ġchanged ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . unlock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( exchange Ġis ĠName Object ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexchange . displayName ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ