/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 2 1 ĠF U JIT SU ĠCLO UD ĠTE CH NO LOG IES ĠLIMITED ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* Ġ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 . n if cloud . mb a as . core Ċ Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠUser Ġinformation Ġhandle Ġclass Ċ Ġ* Ċ Ġ* ĠN CM B User Ġclass Ġis Ġused Ġto Ġretrieve Ġand Ġsave , Ġupdate Ġthe Ġinstallation Ġuser Ġdata , Ċ Ġ* Ġalso Ġto Ġsign Ġup Ġand Ġlogin / logout Ġthe Ġuser . Ċ Ġ* ĠBasic Ġfeatures Ġare Ġinherit Ġfrom ĠN CM B Object Ġand ĠN CM B Base Ċ Ġ*/ Ċ Ċ open Ġclass ĠN CM B User : ĠN CM B Object Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġc urren User ĠfileName ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠUSER _ FILENAME Ġ= Ġ" currentUser " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġquery ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġquery ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġother Fields : ĠJSONObject Ġ= ĠJSONObject () ĊĊĠĠĠ Ġval Ġignore Keys : ĠList < String > Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠ Ġ" objectId ", Ġ" userName ", Ġ" password ", ĊĠĠĠĠĠĠĠ Ġ" mail Address ", Ġ" mail Address Confirm ", ĊĠĠĠĠĠĠĠ Ġ" acl ", Ġ" auth Data ", ĊĠĠĠĠĠĠĠ Ġ" create Date ", Ġ" update Date " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor Ġwith Ġclass Ġname ĊĠĠĠĠ Ġ* Ġ@ param ĠclassName Ġclass Ġname Ġfor Ġdata Ġstore ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor () Ġ: Ġsuper (" user ") Ġ{ ĊĠĠĠĠĠĠĠ Ġm Ignore Keys Ġ= Ġignore Keys ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructor Ġwith Ġclass Ġname ĊĠĠĠĠ Ġ* Ġ@ param ĠclassName Ġclass Ġname Ġfor Ġdata Ġstore ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( params : ĠJSONObject ) Ġ: Ġsuper (" user ", Ġparams ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Ignore Keys Ġ= Ġignore Keys ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params . has (" session Token ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN CM B . SESSION _ TOKEN Ġ= Ġparams . getString (" session Token ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġ" Invalid Ġuser Ġinformation ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġuser Ġname Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar ĠuserName : ĠString ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġuser Ġname ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠString Ġuser Ġname ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetUser Info (" userName ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġset Ġuser Ġname ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠuserName Ġuser Ġname Ġstring ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġset ( userName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset UserInfo (" userName ", ĠuserName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġpassword Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġpassword : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetUser Info (" password ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġset Ġpassword ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġpassword Ġpassword Ġstring ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġset ( password ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset UserInfo (" password ", Ġpassword ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsession Ġtoken Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġsession Token : ĠString ? ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġsession Token ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġsession Token ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( getCurrent User (). getString (" session Token ") Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetCurrent User (). getString (" session Token ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġsession Token ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsession Token ĠString Ġsession Token ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġset ( session Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset UserInfo (" session Token ", Ġsession Token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMail Ġaddress Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmail Address : ĠString ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġmail Ġaddress ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠString Ġmail Ġaddress ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetUser Info (" mail Address ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġmail Ġaddress ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmail Address ĠString Ġmail Ġaddress ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġset ( mail Address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset UserInfo (" mail Address ", Ġmail Address ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetUser Info ( user Key : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Fields . getString ( user Key ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset UserInfo ( user Key : ĠString , Ġuser Value : ĠString ? ){ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Fields . put ( user Key , Ġuser Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Update Keys . add ( user Key ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsave Without Login Ġto ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġsave Without Login (){ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( userName Ġ== Ġnull Ġ|| Ġpassword Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . REQUIRED , Ġ" username Ġor Ġpassword Ġnot Ġset ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( key Ġin Ġm Fields . keys ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . put ( key , Ġm Fields [ key ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . save User ( this , Ġparams , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsave Ġcurrent ĠN CM B User Ġto Ġuser Ġmanagement ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġfrom ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġsave (){ ĊĠĠĠĠĠĠĠ Ġval Ġobject Id Ġ= Ġget ObjectId () Ġ?: Ġreturn Ġsave Without Login () ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠJSONObject Ġ= ĠuserService . update User ( this , Ġobject Id , Ġcreate Update Json Data ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! result . isNull (" update Date ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Fields . put (" update Date ", Ġresult . getString (" update Date ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġlogin Ġwith Ġusername Ġand Ġpassword ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠuserName Ġuser Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword Ġpassword ĊĠĠĠĠ Ġ* Ġ@ return ĠN CM B User Ġobject Ġthat Ġlogged - in ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġopen Ġfun Ġlogin (): ĠN CM B User Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġif ( userName Ġ== Ġnull Ġ|| Ġpassword Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . REQUIRED , Ġ" username Ġor Ġpassword Ġnot Ġset ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠuserService . login ByName ( userName , Ġpassword ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġlogin Ġwith Ġusername Ġand Ġpassword ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠuserName Ġuser Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword Ġpassword ĊĠĠĠĠ Ġ* Ġ@ return ĠN CM B User Ġobject Ġthat Ġlogged - in ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġopen Ġfun Ġlogin ( login UserName : ĠString , Ġlogin Password : ĠString ): ĠN CM B User Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ ĠuserName Ġ= Ġlogin UserName ĊĠĠĠĠĠĠĠ Ġpassword Ġ= Ġlogin Password ĊĠĠĠĠĠĠĠ Ġreturn ĠuserService . login ByName ( userName , Ġpassword ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġcurrent Ġuser Ġobject ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġuser ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġfun ĠgetCurrent User (): ĠN CM B User Ġ{ ĊĠĠĠĠĠĠĠ ĠN CM B Local File . check N CM B Context () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// create ĠcurrentUser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current user Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent user Ġ= ĠN CM B User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ãĥŃ ãĥ¼ãĤ « ãĥ« ãĥķãĤ¡ãĤ¤ãĥ« ãģ« ãĥŃãĤ° ãĤ¤ãĥ³ æĥħåł± ãģĮãģĤ ãĤĮãģ° åıĸå¾Ĺ ãĢģ ãģª ãģĳ ãĤĮãģ° æĸ° è¦ı ä½ľæĪĲ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentUser File : ĠFile Ġ= ĠN CM B Local File . create ( USER _ FILENAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentUser File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ãĥŃ ãĥ¼ãĤ « ãĥ« ãĥķãĤ¡ãĤ¤ãĥ« ãģĭãĤī ãĥŃãĤ° ãĤ¤ãĥ³ æĥħåł± ãĤĴåıĸå¾Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Data : ĠJSONObject Ġ= ĠN CM B Local File . readFile ( currentUser File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent user Ġ= ĠN CM B User ( local Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent user Ġas ĠN CM B User ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Todo Ġ åĮ ¿ åĲį èªį è¨¼ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDecision Ġwhether Ġlogged Ġin ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturn Ġtrue Ġif Ġlogged Ġin ĊĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġfun Ġis Authenticated (): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= ĠgetCurrent User () Ċ // ĠĠĠĠĠĠĠ Ġval Ġsession Token Ġ= Ġget Session Token () Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( currentUser Ġ!= Ġnull Ġ&& Ġsession Token Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget ObjectId (). equals ( currentUser . getObject Id ()) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġfalse Ċ // ĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ/** Ċ // ĠĠĠĠ Ġ* ĠCheck Ġfor Ġspecified Ġprovider 's Ġauthentication Ġdata Ġis Ġlinked Ċ // ĠĠĠĠ Ġ* Ċ // ĠĠĠĠ Ġ* Ġ@ param Ġprovider Ġfacebook Ġor Ġtwitter Ġor Ġgoogle Ġor Ġanonymous Ċ // ĠĠĠĠ Ġ* Ġ@ return ĠReturn Ġtrue Ġif Ġauthentication Ġdata Ġis Ġlinked Ċ // ĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġfun Ġis Linked With ( provider : ĠString ): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Fields . has (" auth Data ") Ġ&& Ġm Fields . getJSONObject (" auth Data "). has ( provider ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( e . message ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġ/** Ċ // ĠĠĠĠ Ġ* ĠGet Ġauth Data Ċ // ĠĠĠĠ Ġ* Ċ // ĠĠĠĠ Ġ* Ġ@ return ĠJSONObject Ġor Ġnull Ċ // ĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġfun Ġget Auth Data (): ĠJSONObject ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Fields . isNull (" auth Data ")) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġm Fields . getJSONObject (" auth Data ") Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠJSON Exception ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( error . message ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġ/** Ċ // ĠĠĠĠ Ġ* ĠGet ĠSpec ified ĠAuthentication ĠData Ċ // ĠĠĠĠ Ġ* Ċ // ĠĠĠĠ Ġ* Ġ@ param Ġprovider ĠString Ġ" facebook " Ġor Ġ" twitter " Ġor Ġ" google " Ġor Ġ" anonymous " Ċ // ĠĠĠĠ Ġ* Ġ@ return ĠSpec ified ĠAuthentication ĠData Ġor Ġnull Ċ // ĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġfun Ġget Auth Data ( provider : ĠString ): ĠJSONObject ? Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Fields . isNull (" auth Data ") Ġ|| Ġm Fields . getJSONObject (" auth Data "). isNull ( provider )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġm Fields . getJSONObject (" auth Data "). getJSONObject ( provider ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠJSON Exception ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( error . message ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġ@ Throws ( JSONException :: class ) Ċ // ĠĠĠ Ġfun Ġcreate Auth Data ( params : ĠAny ): ĠJSONObject Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġvar Ġauth Data JSON : ĠJSONObject Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( params . java Class Ġ== ĠN CM B Anonymous Parameters :: class . java ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġauth Data JSON Ġ= Ġcreate Anonymous Auth Data ( params Ġas ĠN CM B Anonymous Parameters ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġauth Data JSON . put (" type ", Ġ" anonymous ") Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Parameters Ġmust Ġbe ĠN CM B Facebook Parameters Ġor ĠN CM BT w itter Parameters Ġor ĠN CM B Google Parameters ") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġauth Data JSON Ċ // ĠĠĠ Ġ} Ċ // ĠĠĠ Ġ@ Throws ( JSONException :: class ) Ċ // ĠĠĠ Ġfun Ġcreate Anonymous Auth Data ( params : ĠN CM B Anonymous Parameters ): ĠJSONObject Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġauth Data Json Ġ= ĠJSONObject () Ċ // ĠĠĠĠĠĠĠ Ġauth Data Json . put (" id ", Ġparams . userId ) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġauth Data Json Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ/** Ċ // ĠĠĠĠ Ġ* Ġlogin Ġwith Ġparameter Ġthat Ġcan Ġbe Ġobtained Ġafter Ġthe ĠOAuth Ġauthentication Ċ // ĠĠĠĠ Ġ* Ċ // ĠĠĠĠ Ġ* Ġ@ param Ġauth Data ĠN CM B Facebook Parameters Ġor ĠN CM BT w itter Parameters Ġor ĠN CM B Google Parameters Ċ // ĠĠĠĠ Ġ* Ġ@ return ĠAuth enticated Ġuser Ċ // ĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend Ċ // ĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) Ċ // ĠĠĠ Ġopen Ġfun Ġlogin With ( auth Data : ĠAny ): ĠN CM B User Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġobj Service Ġ= ĠN CM B UserService () Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġobj Service . register By Oauth ( create Auth Data ( auth Data )) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . message !! ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġ/** Ċ // ĠĠĠĠ Ġ* ĠLogin Ġwith Ġanonymous Ċ // ĠĠĠĠ Ġ* Ċ // ĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend Ċ // ĠĠĠĠ Ġ*/ Ċ // ĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) Ċ // ĠĠĠ Ġopen Ġfun Ġlogin With Anonymous (): ĠN CM B User Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġanonymous Parameters Ġ= ĠN CM B Anonymous Parameters ( create UUID ()) Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġlogin With ( anonymous Parameters ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġopen Ġfun Ġcreate UUID (): ĠString Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠUUID . randomUUID (). toString () Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLogin Ġwith Ġusername Ġand Ġpassword Ġin Ġbackground ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠuserName Ġuser Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword Ġpassword ĊĠĠĠĠ Ġ* Ġ@ param Ġlogin Callback Ġcallback Ġwhen Ġfinished ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġfun Ġlogin In Background ( login Callback : ĠN CM B Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġif ( userName Ġ== Ġnull Ġ|| Ġpassword Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . REQUIRED , Ġ" username Ġor Ġpassword Ġnot Ġset ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠuserService . login ByName In Background ( userName , Ġpassword , Ġlogin Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLogin Ġwith Ġusername Ġand Ġpassword Ġin Ġbackground ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠuserName Ġuser Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġpassword Ġpassword ĊĠĠĠĠ Ġ* Ġ@ param Ġlogin Callback Ġcallback Ġwhen Ġfinished ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġfun Ġlogin In Background ( userName : ĠString , Ġpassword : ĠString , Ġlogin Callback : ĠN CM B Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ ĠuserService . login ByName In Background ( userName , Ġpassword , Ġlogin Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsign Ġup Ġto ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠN CM B User Ġobject Ġthat Ġsigned Ġup ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġopen Ġfun Ġsign Up (): ĠN CM B User Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= ĠN CM B User () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( userName Ġ== Ġnull Ġ|| Ġpassword Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . REQUIRED , Ġ" username Ġor Ġpassword Ġnot Ġset ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( key Ġin Ġm Fields . keys ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . put ( key , Ġm Fields [ key ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= ĠuserService . sign Up User ( params , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Fields Ġ= Ġuser . m Fields ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsign Ġup Ġto ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠN CM B User Ġobject Ġthat Ġsigned Ġup ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġopen Ġfun Ġsign Up ( sign Up UserName : ĠString , Ġsign Up Password : ĠString ): ĠN CM B User Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= ĠN CM B User () ĊĠĠĠĠĠĠĠ ĠuserName Ġ= Ġsign Up UserName ĊĠĠĠĠĠĠĠ Ġpassword Ġ= Ġsign Up Password ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( key Ġin Ġm Fields . keys ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . put ( key , Ġm Fields [ key ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= ĠuserService . sign Up User ( params , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Fields Ġ= Ġuser . m Fields ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . message !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsign Ġup Ġto ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġopen Ġfun Ġsign Up In Background ( sign Up Callback : ĠN CM B Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( userName Ġ== Ġnull Ġ|| Ġpassword Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . REQUIRED , Ġ" username Ġor Ġpassword Ġnot Ġset ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( key Ġin Ġm Fields . keys ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . put ( key , Ġm Fields [ key ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . sign Up User In Background ( params , Ġfalse , Ġsign Up Callback ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . message !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsign Ġup Ġto ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġopen Ġfun Ġsign Up In Background ( sign Up UserName : ĠString , Ġsign Up Password : ĠString , Ġsign Up Callback : ĠN CM B Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ ĠuserName Ġ= Ġsign Up UserName ĊĠĠĠĠĠĠĠ Ġpassword Ġ= Ġsign Up Password ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( key Ġin Ġm Fields . keys ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . put ( key , Ġm Fields [ key ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . sign Up User In Background ( params , Ġfalse , Ġsign Up Callback ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠN CM B Exception ( N CM B Exception . INVALID _ JSON , Ġe . message !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġfetch () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Id Ġ= Ġget ObjectId () ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġif Ġ( objectId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser : ĠN CM B User Ġ= ĠuserService . fetch User ( this , Ġobject Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Fields Ġ= Ġuser . m Fields ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġfetch In Background ( fetch Callback : ĠN CM B Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Id Ġ= Ġget ObjectId () ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġif Ġ( objectId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . fetch User In Background ( this , Ġobject Id , Ġfetch Callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġdelete () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Id Ġ= Ġget ObjectId () ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( objectId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . delete User ( this , Ġobject Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Fields Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Update Keys . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠN CM B Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġdelete In Background ( delete Callback : ĠN CM B Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobject Id Ġ= Ġget ObjectId () ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( objectId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . delete User In Background ( this , Ġobject Id , Ġdelete Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Fields Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Update Keys . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠN CM B Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġlogout Ġfrom ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġopen Ġfun Ġlogout () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ ĠuserService . logout User ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġlogout Ġfrom ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠN CM B Exception Ġexception Ġsdk Ġinternal Ġor ĠN IF CLOUD Ġmobile Ġbackend ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( N CM B Exception :: class ) ĊĠĠĠ Ġopen Ġfun Ġlogout In Background ( logout Callback : ĠN CM B Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserService Ġ= ĠN CM B UserService () ĊĠĠĠĠĠĠĠ ĠuserService . logout User In Background ( this , Ġlogout Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĉĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġcurrent Ġuser ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent user : ĠN CM B User ? Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ