package Ġorg . tok end . template . features . ky c . logic Ċ Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . rx kotlin . to Single Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġorg . tok end . sdk . api . blobs . model . Blob Ċ import Ġorg . tok end . sdk . api . blobs . model . Blob Type Ċ import Ġorg . tok end . sdk . factory . Gson Factory Ċ import Ġorg . tok end . template . di . providers . Account Provider Ċ import Ġorg . tok end . template . di . providers . Repository Provider Ċ import Ġorg . tok end . template . di . providers . Wallet Info Provider Ċ import Ġorg . tok end . template . features . key value . model . KeyValue Entry Record Ċ import Ġorg . tok end . template . features . ky c . model . Active K yc Ċ import Ġorg . tok end . template . features . ky c . model . K yc Form Ċ import Ġorg . tok end . template . features . ky c . model . K yc Request State Ċ import Ġorg . tok end . template . features . ky c . storage . K yc Request State Repository Ċ import Ġorg . tok end . template . logic . Tx Manager Ċ import Ġorg . tok end . wallet . Network Params Ċ import Ġorg . tok end . wallet . PublicKey Factory Ċ import Ġorg . tok end . wallet . Transaction Ċ import Ġorg . tok end . wallet . Transaction Builder Ċ import Ġorg . tok end . wallet . xd r .* Ċ Ċ /** Ċ Ġ* ĠCreates Ġand Ġsubmit s Ġchange - role Ġrequest Ġwith Ġgeneral ĠK Y C Ġdata . Ċ Ġ* ĠSets Ġnew ĠK Y C Ġstate Ġin Ġ[ K yc Request State Repository ] Ġon Ġcomplete . Ċ Ġ*/ Ċ class ĠSubmit K yc Request UseCase ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġform : ĠK yc Form , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġwallet Info Provider : ĠWallet Info Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġaccount Provider : ĠAccount Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrepository Provider : ĠRepository Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtx Manager : ĠTx Manager , ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠrequestId To Submit : ĠLong Ġ= Ġ 0 L , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġexplicit Role To Set : ĠLong ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġdata Ġclass ĠSub mitted Request Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Review Required : ĠBoolean ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġvar Ġrole To Set : ĠLong Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġform Blob Id : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnetwork Params : ĠNetwork Params ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtransaction Result X dr : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsubmitted Request Attributes : ĠSub mitted Request Attributes ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnew K yc Request State : ĠK yc Request State ĊĊĠĠĠ Ġfun Ġperform (): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Role To Set () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġrole To Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . role To Set Ġ= Ġrole To Set ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Form As Blob () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġform Blob Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . form Blob Id Ġ= Ġform Blob Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Network Params () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġnetwork Params Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . network Params Ġ= Ġnetwork Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġtransaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx Manager . submit ( transaction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . transaction Result X dr Ġ= Ġresponse . result Meta X dr !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Submitted Request Attributes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġsubmitted Request Attributes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . submitted Request Attributes Ġ= Ġsubmitted Request Attributes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget New K yc Request State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġnew K yc State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . new K yc Request State Ġ= Ġnew K yc State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Repositories () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ignore Element () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Role To Set (): ĠSingle < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( explicit Role To Set Ġ!= Ġnull Ġ&& Ġexplicit Role To Set Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( explicit Role To Set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrole Key Ġ= Ġform . role Key ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrepository Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. key Value Entries () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ensure Entries ( listOf ( role Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit [ role Key ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠKey Value Entry Record . Number Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . value Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupload Form As Blob (): ĠSingle < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġform Json Ġ= ĠGson Factory (). getBase Gson (). toJson ( form ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrepository Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. blobs () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( Blob ( Blob Type . KY C _ FORM , Ġform Json )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Blob :: id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Network Params (): ĠSingle < Network Params > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepository Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. system Info () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Network Params () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Transaction (): ĠSingle < Transaction > Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠaccountId Ġ= Ġwallet Info Provider . get Wallet Info ()?. accountId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠSingle . error ( IllegalStateException (" No Ġwallet Ġinfo Ġfound ")) ĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġaccount Provider . get Account () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĠSingle . error ( IllegalStateException (" Cannot Ġobtain Ġcurrent Ġaccount ")) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . defer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= ĠCreate Change Role Request Op ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest ID Ġ= ĠrequestId To Submit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Account Ġ= ĠPublicKey Factory . from AccountId ( accountId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Role To Set Ġ= Ġrole To Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreator Details Ġ= Ġ"{\" blob _ id \":\" $ form Blob Id \" }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Tasks Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġext Ġ= ĠCreate Change Role Request Op . Create Change Role Request Op Ext . Empty Version () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransaction Builder ( network Params , ĠaccountId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Operation ( Operation . Operation Body . Create Change Role Request ( operation )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction . add Signature ( account ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . just ( transaction ) ĊĠĠĠĠĠĠĠ Ġ}. subscribe On ( Schedulers . new Thread ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Submitted Request Attributes (): ĠSingle < Submitted Request Attributes > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġ( Transaction Meta . from Base 6 4 ( transaction Result X dr ) Ġas ĠTransaction Meta . Empty Version ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. operations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. changes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġis ĠLed ger Entry Change . Created Ġ|| Ġit Ġis ĠLed ger Entry Change . Updated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠLed ger Entry Change . Created ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . created . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it Ġas ĠLed ger Entry Change . Updated ). updated . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance ( Ledger Entry . Ledger Entry Data . Review able Request :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. reviewable Request ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSub mitted Request Attributes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġrequest . request ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Review Required Ġ= Ġrequest . tasks . pending Tasks Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. to Single () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget New K yc Request State (): ĠSingle < K yc Request State . Submitted < K yc Form >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( submitted Request Attributes . is Review Required ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK yc Request State . Submitted . Pending ( form , Ġsubmitted Request Attributes . id , Ġrole To Set ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK yc Request State . Submitted . Approved ( form , Ġsubmitted Request Attributes . id , Ġrole To Set ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Repositories (): ĠSingle < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ky c Request State () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( new K yc Request State ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! submitted Request Attributes . is Review Required ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository Provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. active K yc () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( Active K yc . Form ( form )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . just ( true ) ĊĠĠĠ Ġ} Ċ Ċ }