package Ġcom . example . flow Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġcom . example . base . User Acc Model Ċ import Ġcom . example . external . External Account name API Ċ import Ġnet . cord a . core . flows .* Ċ import Ġnet . cord a . core . utilities . Progress Tracker Ċ import Ġnet . cord a . core . utilities . Progress Tracker . Step Ċ import Ġnet . cord a . core . utilities . unwrap Ċ Ċ @ Initi ating Flow Ċ @ Start able By RPC Ċ class ĠEn quire Name Acc User Flow ( private Ġval Ġuser Acc : ĠUser Acc Model ) Ġ: ĠFlow Logic < User Acc Model >() Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠF IND _ PAR TY Ġ: ĠStep (" Generating Ġtransaction Ġbased Ġon Ġnew ĠIO U .") ĊĠĠĠĠĠĠĠ Ġobject ĠS END _ REQUEST Ġ: ĠStep (" Verify ing Ġcontract Ġconstraints .") ĊĠĠĠĠĠĠĠ Ġobject ĠG ATHER ING _ RESULT Ġ: ĠStep (" Signing Ġtransaction Ġwith Ġour Ġprivate Ġkey .") ĊĊĠĠĠĠĠĠĠ Ġfun Ġtracker () Ġ= ĠProgress Tracker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF IND _ PAR TY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS END _ REQUEST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG ATHER ING _ RESULT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġprogress Tracker Ġ= Ġtracker () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġflow Ġlogic Ġis Ġencaps ulated Ġwithin Ġthe Ġcall () Ġmethod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall (): ĠUser Acc Model Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠF IND _ PAR TY ĊĠĠĠĠĠĠĠ Ġval Ġb ic Ġ= Ġuser Acc . bic . toString () ĊĠĠĠĠĠĠĠ Ġval Ġmaybe Other Party Ġ= Ġservice Hub . identity Service . part ies FromName ( bic , Ġexact Match Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( maybe Other Party . size Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġreturn ĠUser Acc Model ( account No Ġ= Ġ"", Ġaccount Name Ġ= Ġ"", Ġb ic Ġ= Ġ"", ĠX 5 0 0 Name Ġ= Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( maybe Other Party . first () Ġ== Ġour Identity ) Ġthrow ĠIllegalArgumentException (" Failed Ġrequirement : ĠNo Ġen quiry Ġby Ġself ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Party Ġ= Ġmaybe Other Party . single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠS END _ REQUEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġinitiate Flow ( other Party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġsession . send And Receive < User Acc Model >( user Acc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠG ATHER ING _ RESULT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresp . unwrap Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Initi ated By ( En quire Name Acc User Flow :: class ) ĊĠĠĠ Ġclass ĠEn quire Name Acc User Handler ( private Ġval Ġsession : ĠFlow Session ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠRE CE IV ING _ REQUEST Ġ= Ġobject Ġ: ĠProgress Tracker . Step (" Re ceiving Ġquery Ġaccount Ġname Ġrequest ") Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠIN V OK ING _ API _ SERVICE Ġ= Ġobject Ġ: ĠProgress Tracker . Step (" Inv oking Ġapi Ġservice Ġfor Ġthe Ġaccount Ġname ") Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠRET UR NING _ ACC Ġ= Ġobject Ġ: ĠProgress Tracker . Step (" Return Ġname Ġof Ġaccount ") Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġprogress Tracker Ġ= ĠProgress Tracker ( RECE IV ING _ REQUEST , ĠIN V OK ING _ API _ SERVICE , ĠRET UR NING _ ACC ) ĊĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠRE CE IV ING _ REQUEST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount : ĠUser Acc Model Ġ= Ġsession . receive < User Acc Model >(). unwrap Ġ{ Ġit Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠIN V OK ING _ API _ SERVICE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠAccount Name API Ġ= Ġservice Hub . cord a Service ( External Account name API . Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠAccount Name API . query AccountName ( account ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠRET UR NING _ ACC ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . send ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }