/* ĠCopyright ĠAir ship Ġand ĠContributors Ġ*/ Ċ Ċ package Ġcom . ur ban air ship . chat . api Ċ Ċ import Ġandroidx . annotation . Restrict To Ċ import Ġcom . ur ban air ship . Logger Ċ import Ġcom . ur ban air ship . json . Json Exception Ċ import Ġcom . ur ban air ship . json . Json Map Ċ import Ġcom . ur ban air ship . json . JsonValue Ċ Ċ /** Ċ Ġ* ĠSe aled Ġclass Ġrepresenting Ġvarious Ġresponse Ġand Ġmessage Ġpayload s Ġwe Ġmay Ġreceive Ġfrom Ġthe Ġserver . Ċ Ġ*/ Ċ @ Restrict To ( Restrict To . Scope . LIBRARY _ GROUP ) Ċ internal Ġsealed Ġclass ĠChat Response Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ TYPE Ġ= Ġ" type " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ PAYLOAD Ġ= Ġ" payload " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ SUCCESS Ġ= Ġ" success " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ MESSAGE Ġ= Ġ" message " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ MESSAGES Ġ= Ġ" messages " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ MESSAGE _ ID Ġ= Ġ" message _ id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ CREATED _ ON Ġ= Ġ" created _ on " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ DIRECTION Ġ= Ġ" direction " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ TEXT Ġ= Ġ" text " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ ATTACHMENT Ġ= Ġ" attachment " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ REQUEST _ ID Ġ= Ġ" request _ id " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ MESSAGE _ RECE IVED Ġ= Ġ" message _ received " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ CONVER S ATION _ LOADED Ġ= Ġ" conversation _ loaded " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ NEW _ MESSAGE Ġ= Ġ" new _ message " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠAt tempts Ġto Ġparse Ġthe Ġraw Ġ[ text ] Ġreceived Ġover Ġthe ĠWebSocket Ġinto Ġa Ġ` Chat Response ` Ġtype . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġuses Ġthe Ġ` type ` Ġfield Ġand Ġ`@ Serial Name ` Ġannotations Ġon Ġthe Ġdata Ġclasses Ġbelow Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġdetermine Ġthe Ġcorrect Ġclass Ġto Ġparse Ġinto . ĠIf Ġ[ text ] Ġis Ġblank Ġor ĊĠĠĠĠĠĠĠĠ Ġ* Ġboth Ġparsing Ġattempts Ġfail , Ġ` null ` Ġwill Ġbe Ġreturned . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġparse ( text : ĠString ): ĠChat Response ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . isBlank ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Map Ġ= ĠJson Value . parse String ( text ). opt Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġtype Ġ= Ġjson Map . opt ( KEY _ TYPE ). opt String ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ MESSAGE _ RECE IVED Ġ-> ĠMessage Received . parse ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ CONVER S ATION _ LOADED Ġ-> ĠCon versation Loaded . parse ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ NEW _ MESSAGE Ġ-> ĠNew Message . parse ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠJson Exception (" Unknown Ġresponse Ġtype : Ġ'$ type '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . error ( e , Ġ" Failed Ġto Ġparse Ġchat Ġresponse Ġpayload : Ġ'$ text '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠPayload Ġfor Ġthe Ġresponse Ġreturned Ġafter Ġa Ġnew Ġmessage Ġis Ġsent Ġsuccessfully . Ġ*/ ĊĠĠĠ Ġinternal Ġdata Ġclass ĠMessage Received ( val Ġmessage : ĠMessage Received Payload ) Ġ: ĠChat Response () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġparse ( json : ĠString ): ĠMessage Received Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Map Ġ= ĠJson Value . parse String ( json ). opt Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpayload Json Ġ= Ġjson Map . opt ( KEY _ PAYLOAD ). opt Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġrequire NotNull ( payload Json . opt ( KEY _ SUCCESS ). boolean ) Ġ{ Ġ"' $ KEY _ SUCCESS ' Ġmay Ġnot Ġbe Ġnull !" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Json Ġ= Ġpayload Json . opt ( KEY _ MESSAGE ). opt Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠMessage . fromJson Map ( message Json ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMessage Received ( message Ġ= ĠMessage Received Payload ( success , Ġmessage )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġdata Ġclass ĠMessage Received Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage : ĠMessage ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠPayload Ġfor Ġthe Ġresponse Ġreturned Ġafter Ġthe Ġconversation Ġis Ġrequested . Ġ*/ ĊĠĠĠ Ġinternal Ġdata Ġclass ĠCon versation Loaded ( val Ġconversation : ĠCon versation Payload ) Ġ: ĠChat Response () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġparse ( json : ĠString ): ĠCon versation Loaded Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Map Ġ= ĠJson Value . parse String ( json ). opt Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpayload Json Ġ= Ġjson Map . opt ( KEY _ PAYLOAD ). opt Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessages Ġ= Ġpayload Json . opt ( KEY _ MESSAGES ). list ?. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage . fromJson Map ( it . opt Map ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠlistOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCon versation Loaded ( conversation Ġ= ĠCon versation Payload ( messages Ġ= Ġmessages )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġdata Ġclass ĠCon versation Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessages : ĠList < Message >? ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠPayload Ġfor Ġa Ġnew Ġmessage Ġin Ġthe Ġconversation , Ġsent Ġby Ġthe Ġother Ġparty . Ġ*/ ĊĠĠĠ Ġinternal Ġdata Ġclass ĠNew Message ( val Ġmessage : ĠNew Message Payload ) Ġ: ĠChat Response () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġparse ( json : ĠString ): ĠNew Message Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Map Ġ= ĠJson Value . parse String ( json ). opt Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpayload Json Ġ= Ġjson Map . opt ( KEY _ PAYLOAD ). opt Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠMessage . fromJson Map ( payload Json . opt ( KEY _ MESSAGE ). opt Map ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNew Message ( message Ġ= ĠNew Message Payload ( message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinternal Ġdata Ġclass ĠNew Message Payload ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage : ĠMessage ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠA Ġmessage . Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠMessage ( ĊĠĠĠĠĠĠĠ Ġ/** ĠID Ġof Ġthe Ġmessage . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠmessageId : ĠString , ĊĠĠĠĠĠĠĠ Ġ/** ĠWhen Ġthe Ġmessage Ġwas Ġcreated . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcreated On : ĠString , ĊĠĠĠĠĠĠĠ Ġ/** ĠWhether Ġthis Ġmessage Ġwas Ġsent Ġ( 0 ) Ġor Ġreceived Ġ( 1 ). Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġdirection : ĠInt , ĊĠĠĠĠĠĠĠ Ġ/** ĠMessage Ġtext . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtext : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ/** ĠAn Ġattachment ĠURL . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġattachment : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ/** ĠRequest ĠID . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠrequestId : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġfun Ġfrom Json Map ( json Map : ĠJson Map ): ĠMessage Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmessageId Long Ġ= Ġjson Map . opt ( KEY _ MESSAGE _ ID ). getLong ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( message Id Long Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJson Exception ("' $ KEY _ MESSAGE _ ID ' Ġmay Ġnot Ġbe Ġnull !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmessageId Ġ= ĠmessageId Long . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated On Ġ= Ġrequire NotNull ( json Map . opt ( KEY _ CREATED _ ON ). string ) Ġ{ Ġ"' $ KEY _ CREATED _ ON ' Ġmay Ġnot Ġbe Ġnull !" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirection Ġ= Ġjson Map . opt ( KEY _ DIRECTION ). getInt (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( direction Ġ!= Ġ- 1 ) Ġ{ Ġ"' $ KEY _ DIRECTION ' Ġis Ġinvalid !" Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġjson Map . opt ( KEY _ TEXT ). string ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattachment Ġ= Ġjson Map . opt ( KEY _ ATTACHMENT ). string ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠrequestId Ġ= Ġjson Map . opt ( KEY _ REQUEST _ ID ). string ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmessageId Ġ= ĠmessageId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated On Ġ= Ġcreated On , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġdirection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachment Ġ= Ġattachment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠrequestId Ġ= ĠrequestId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ