/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠHe ide lp ay ĠGmbH Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* ĠĊ Ġ* ĠĠĠĠĠ Ġhttp :// 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 Ġcom . he ide lp ay . android . backend Ċ Ċ import Ġcom . he ide lp ay . android . He ide lp ay Error Ċ import Ġcom . he ide lp ay . android . types . ServerError Details Ċ import Ġorg . json . JSONObject Ċ Ċ /** Ċ Ġ* Ġenumeration Ġof Ġerrors Ġfrom Ġthe ĠBackend ĠService Ċ Ġ*/ Ċ internal Ġsealed Ġclass ĠBackend Error Ġ: ĠException () Ġ{ ĊĊĠĠĠ Ġ/// Ġthe Ġrequest Ġdata Ġor Ġurl Ġis Ġinvalid Ġand Ġa ĠURL Ġcan 't Ġbe Ġcreated ĊĠĠĠ Ġclass ĠInvalid Request Ġ: ĠBackend Error () ĊĊĠĠĠ Ġ/// Ġthe Ġserver Ġdata Ġare Ġin Ġa Ġformat Ġthat Ġwasn 't Ġexpected ĊĠĠĠ Ġclass ĠInvalid Server Response Ġ: ĠBackend Error () ĊĊĠĠĠ Ġ/// Ġthe Ġsystem Ġreported Ġthat Ġthere Ġis Ġno Ġconnection Ġto Ġthe Ġinternet ĊĠĠĠ Ġclass ĠNo Internet Ġ: ĠBackend Error () ĊĊĠĠĠ Ġ/// Ġrequest Ġfailed Ġon Ġa Ġsystem Ġlevel . Ġserver Ġmay Ġnot Ġbe Ġreached Ġat Ġall ĊĠĠĠ Ġclass ĠRequest Failed ( val Ġerror : ĠException ) Ġ: ĠBackend Error () ĊĊĠĠĠ Ġ/// Ġthe Ġserver Ġwas Ġreached Ġand Ġrespon ded Ġwith Ġa ĠHTTP Ġerror Ġcode Ġ>= Ġ 4 0 0 ĊĠĠĠ Ġclass ĠServer HTTPError ( val Ġhttp Code : ĠInt ) Ġ: ĠBackend Error () ĊĊĠĠĠ Ġ// Ġthe Ġserver Ġwas Ġreached Ġand Ġrespon ded Ġwith Ġa ĠJSON Ġerror Ġobject Ġwhich Ġwas Ġparsed ĊĠĠĠ Ġ// Ġand Ġthe Ġconcrete Ġerror Ġinformation Ġis Ġprovided Ġas Ġan Ġarr y Ġof Ġtype ĠServer Error ĊĠĠĠ Ġclass ĠServer ResponseError ( val Ġerrors : ĠList < Backend ServerError >) Ġ: ĠBackend Error () ĊĊĠĠĠ Ġ/// Ġequals Ġimplementation ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġis ĠBackend Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠInvalid Request Ġ&& Ġother Ġis ĠInvalid Request ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠInvalid Server Response Ġ&& Ġother Ġis ĠInvalid Server Response ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠNo Internet Ġ&& Ġother Ġis ĠNo Internet ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠRequest Failed Ġ&& Ġother Ġis ĠRequest Failed ) Ġreturn Ġthis . error Ġ== Ġother . error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠServer HTTPError Ġ&& Ġother Ġis ĠServer HTTPError ) Ġreturn Ġthis . http Code Ġ== Ġother . http Code ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ /// Ġmap Ġa ĠBackend Error Ġto Ġa ĠHe ide lp ay Error Ċ internal Ġfun ĠHe ide lp ay Error . Companion . map From Backend Error ( backend Error : ĠBackend Error ): ĠHe ide lp ay Error Ġ{ ĊĠĠĠ Ġwhen Ġ( backend Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠBackend Error . Invalid Request , Ġis ĠBackend Error . Invalid Server Response , Ġis ĠBackend Error . Request Failed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHe ide lp ay Error . General Processing Error () ĊĠĠĠĠĠĠĠ Ġis ĠBackend Error . No Internet Ġ-> Ġreturn ĠHe ide lp ay Error . No Internet Connection () ĊĠĠĠĠĠĠĠ Ġis ĠBackend Error . Server HTTPError Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( backend Error . http Code Ġ== Ġ 4 0 1 Ġ|| Ġbackend Error . http Code Ġ== Ġ 4 0 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHe ide lp ay Error . Not Authorized () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHe ide lp ay Error . General Processing Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠBackend Error . Server ResponseError Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠServer Error Details . from Backend Errors ( backend Error . errors )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHe ide lp ay Error . ServerError ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHe ide lp ay Error . General Processing Error () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġtype Ġused Ġto Ġdecode Ġthe Ġerror Ġjson Ġof Ġthe Ġserver Ċ Ġ*/ Ċ internal Ġclass ĠBackend ServerError Response ( val Ġurl : ĠString , Ġval Ġtimestamp : ĠString , Ġval Ġerrors : ĠList < Backend ServerError >) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom JSON String ( json String : ĠString ): ĠBackend ServerError Response ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJSONObject ( json String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( jsonObject . opt JSONArray (" errors ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= Ġmutable ListOf < Backend ServerError >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerrors JSONArray Ġ= ĠjsonObject . opt JSONArray (" errors ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġerrors JSONArray . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBackend ServerError . from JSONObject ( errors JSONArray . opt JSONObject ( index )) ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBackend ServerError Response ( jsonObject . opt String (" url "), ĠjsonObject . opt String (" timestamp "), Ġerrors ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġtype Ġused Ġto Ġdecode Ġthe Ġerror Ġjson Ġof Ġthe Ġserver Ċ Ġ*/ Ċ internal Ġclass ĠBackend ServerError ( val Ġcode : ĠString , Ġval Ġmerchant Message : ĠString , Ġval Ġcustomer Message : ĠString ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom JSONObject ( jsonObject : ĠJSONObject ): ĠBackend ServerError ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBackend ServerError ( jsonObject . opt String (" code "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠjsonObject . opt String (" merchant Message "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠjsonObject . opt String (" customer Message ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ