/** Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAn i Trend Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġco . anit rend . arch . data . request . callback Ċ Ċ import Ġco . anit rend . arch . data . request . contract . I Request Helper Ċ import Ġco . anit rend . arch . data . request . wrapper . Request Wrapper Ċ import Ġco . anit rend . arch . domain . entities . Request Error Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ /** Ċ Ġ* ĠA Ġrequest Ġcallback Ġfor Ġupdating Ġrequest Ġstatus Ġto Ġthe Ġ[ helper ] Ċ Ġ* Ċ Ġ* Ġ@ param Ġwrapper ĠThe Ġwrapper Ġthat Ġwas Ġexecuted Ċ Ġ* Ġ@ param Ġhelper ĠThe Ġhelper Ġto Ġreport Ġto Ċ Ġ* Ċ Ġ* Ġ@ since Ġv 1 . 3 . 0 Ċ Ġ*/ Ċ class ĠRequest Callback ( ĊĠĠĠ Ġprivate Ġval Ġwrapper : ĠRequest Wrapper , ĊĠĠĠ Ġprivate Ġval Ġhelper : ĠI Request Helper Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcalled Ġ= ĠAtomic Boolean () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġthis Ġmethod Ġwhen Ġthe Ġrequest Ġsucceeds Ġand Ġnew Ġdata Ġis Ġfetched . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġwhen Ġ[ record Failure ]/ [ record Success ] Ġhas Ġalready Ġbeen Ġcalled ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IllegalStateException :: class ) ĊĠĠĠ Ġsuspend Ġfun Ġrecord Success () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( called . compare AndSet ( false , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . record Result ( wrapper , Ġnull ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" already Ġcalled Ġrecord Success Ġor Ġrecord Failure ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġthis Ġmethod Ġwith Ġthe Ġfailure Ġmessage Ġand Ġthe Ġrequest Ġcan Ġbe Ġretried Ġvia ĊĠĠĠĠ Ġ* Ġ[ I Request Helper . retry With Status ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġthrowable ĠThe Ġerror Ġthat Ġoccurred Ġwhile Ġcarry ing Ġout Ġthe Ġrequest . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġwhen Ġ[ record Failure ]/ [ record Success ] Ġhas Ġalready Ġbeen Ġcalled ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( IllegalStateException :: class ) ĊĠĠĠ Ġsuspend Ġfun Ġrecord Failure ( throwable : ĠRequest Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( called . compare AndSet ( false , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . record Result ( wrapper , Ġthrowable ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" already Ġcalled Ġrecord Success Ġor Ġrecord Failure ") ĊĠĠĠ Ġ} Ċ } Ċ