package Ġcom . har old admin . cn rad apter . utils Ċ Ċ import Ġokhttp 3 . Request Ċ import Ġok io . Timeout Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġjava . io . Inter rupted IOException Ċ import Ġjava . util . concurrent . Count DownLatch Ċ Ċ private Ġval ĠD UMMY _ REQUEST Ġ= ĠRequest . Builder () ĊĠĠĠ Ġ. url (" http :// example . com ") ĊĠĠĠ Ġ. build () Ċ Ċ /** Ċ Ġ* ĠCred its Ġto ĠJ ake ĠWh art on Ġfor Ġthis Ġclass Ċ Ġ*/ Ċ class ĠComp letable Call < T >( private Ġval Ġrequest : ĠRequest Ġ= ĠD UMMY _ REQUEST ) Ġ: ĠCall < T > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠAny () ĊĠĠĠ Ġprivate Ġvar Ġexecuted Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcanceled Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcallback : ĠCallback < T >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġdone Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠ Ġprivate Ġvar Ġexception : ĠThrowable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġresponse : ĠResponse < T >? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġcomplete With Exception ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. on Failure ( this , Ġt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone . count Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcomplete ( body : ĠT ) Ġ= Ġcomplete ( Response . success ( body )) ĊĊĠĠĠ Ġfun Ġcomplete ( response : ĠResponse < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . response Ġ= Ġresponse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. on Response ( this , Ġresponse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone . count Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest () Ġ= Ġrequest ĊĠĠĠ Ġoverride Ġfun Ġis Canceled () Ġ= Ġsynchronized ( lock ) Ġ{ Ġcanceled Ġ} ĊĠĠĠ Ġoverride Ġfun Ġis Executed () Ġ= Ġsynchronized ( lock ) Ġ{ Ġexecuted Ġ} ĊĠĠĠ Ġoverride Ġfun Ġclone () Ġ= ĠComp letable Call < T >( request ) ĊĊĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c anceled ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanceled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠInter rupted IOException (" c anceled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . exception Ġ= Ġexception ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. on Failure ( this , Ġexception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone . count Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute (): ĠResponse < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck (! executed ) Ġ{ Ġ" Already Ġexecuted Ġ" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecuted Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone . await () ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exception Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġexception !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġenqueue ( callback : ĠCallback < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exception Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Failure ( this , Ġexception !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( response Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Response ( this , Ġresponse !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtimeout (): ĠTimeout Ġ= Ġthrow ĠUnsupportedOperationException (" Timeout Ġnot Ġsupported Ġfor Ġcomplet able Ġcall ") Ċ } Ċ