package Ġorg . ny pl . simpl ified . ui . catalog Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġorg . library simpl ified . services . api . Service Directory Type Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Event Login StateChanged Ċ import Ġorg . ny pl . simpl ified . accounts . api . AccountID Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Login State . Account LoggedIn Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Login State . Account Logging In Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Login State . Account Logging In Waiting For External Authentication Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Login State . Account Logging Out Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Login State . Account Login Failed Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Login State . Account Logout Failed Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Login State . Account Not LoggedIn Ċ import Ġorg . ny pl . simpl ified . books . api . Book Ċ import Ġorg . ny pl . simpl ified . books . api . Book ID Ċ import Ġorg . ny pl . simpl ified . books . book _ registry . Book Registry Type Ċ import Ġorg . ny pl . simpl ified . books . book _ registry . Book Status Ċ import Ġorg . ny pl . simpl ified . books . book _ registry . Book Status Download Error Details Ċ import Ġorg . ny pl . simpl ified . books . book _ registry . Book Status Re voke Error Details Ċ import Ġorg . ny pl . simpl ified . books . book _ registry . Book With Status Ċ import Ġorg . ny pl . simpl ified . books . controller . api . Books Controller Type Ċ import Ġorg . ny pl . simpl ified . profiles . controller . api . Profiles Controller Type Ċ import Ġorg . ny pl . simpl ified . task recorder . api . Task Recorder Ċ import Ġorg . ny pl . simpl ified . task recorder . api . Task Result Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . Serializable Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* ĠA Ġview Ġmodel Ġthat Ġcovers Ġthe Ġbasics Ġof Ġbook Ġborrow ing . ĠIn Ġthe Ġfuture , Ġmore Ġof Ġthis Ċ Ġ* Ġshould Ġbe Ġmoved Ġinto Ġthe Ġbooks Ġcontroller . Ċ Ġ*/ Ċ Ċ class ĠCatalog Borrow ViewModel ( ĊĠ Ġprivate Ġval Ġservices : ĠService Directory Type Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠ Ġprivate Ġval Ġlogger Ġ= ĊĠĠĠ ĠLoggerFactory . getLogger ( Catalog Borrow ViewModel :: class . java ) ĊĊĠ Ġprivate Ġval Ġbooks Controller : ĠBooks Controller Type Ġ= ĊĠĠĠ Ġthis . services . require Service ( Books Controller Type :: class . java ) ĊĠ Ġprivate Ġval Ġprofiles Controller : ĠPro files Controller Type Ġ= ĊĠĠĠ Ġthis . services . require Service ( Profiles Controller Type :: class . java ) ĊĠ Ġprivate Ġval Ġbook Registry : ĠBook Registry Type Ġ= ĊĠĠĠ Ġthis . services . require Service ( Book Registry Type :: class . java ) ĊĊĠ Ġprivate Ġval Ġbook Borrow Attempts : ĠConcurrent HashMap < Book Target , ĠDis posable > Ġ= ĊĠĠĠ ĠConcurrent HashMap () ĊĊĠ Ġprivate Ġdata Ġclass ĠBook Target ( ĊĠĠĠ Ġval Ġaccount ID : ĠAccount ID , ĊĠĠĠ Ġval Ġbook ID : ĠBook ID ĊĠ Ġ) ĊĊĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠ Ġval Ġcopy Ġ= Ġthis . book Borrow Attempts . toMap () ĊĠĠĠ Ġfor Ġ( entry Ġin Ġcopy . entries ) Ġ{ ĊĠĠĠĠĠ Ġthis . unsubscribe ( entry . key ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġthis . book Borrow Attempts . clear () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġa Ġlogin Ġis Ġrequired Ġon Ġthe Ġcurrent Ġaccount ĊĠĠ Ġ*/ ĊĊĠ Ġfun Ġis Login Required ( account ID : ĠAccount ID ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġaccount Ġ= Ġthis . profiles Controller . profile Current (). account ( account ID ) ĊĠĠĠĠĠ Ġval Ġrequires Login Ġ= Ġaccount . requires Credentials ĊĠĠĠĠĠ Ġval Ġis Not LoggedIn Ġ= Ġaccount . login State Ġ! is ĠAccount LoggedIn ĊĠĠĠĠĠ Ġrequires Login Ġ&& Ġis Not LoggedIn ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġthis . logger . error (" could Ġnot Ġretrieve Ġaccount : Ġ", Ġe ) ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġexecute After Login ( ĊĠĠĠ Ġaccount ID : ĠAccount ID , ĊĠĠĠ Ġbook ID : ĠBook ID , ĊĠĠĠ Ġrun On Success : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġrun On Cancel : Ġ() Ġ-> ĠUnit ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġbook Target Ġ= ĊĠĠĠĠĠ ĠBook Target ( ĊĠĠĠĠĠĠĠ Ġaccount ID Ġ= Ġaccount ID , ĊĠĠĠĠĠĠĠ Ġbook ID Ġ= Ġbook ID ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġsubscription Ġ= ĊĠĠĠĠĠ Ġthis . profiles Controller . account Events () ĊĠĠĠĠĠĠĠ Ġ. of Type ( Account Event Login StateChanged :: class . java ) ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġevent Ġ-> Ġevent . account ID Ġ== Ġbook Target . account ID Ġ} ĊĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAccount Logging In , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAccount Logging In Waiting For External Authentication , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAccount Logging Out Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStill Ġin Ġprogress ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAccount Not LoggedIn , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAccount Logout Failed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAccount Login Failed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . unsubscribe ( book Target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAccount LoggedIn Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . unsubscribe ( book Target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġthis . logger . debug ("[ {} ][ {}] Ġsubscribed ", Ġbook Target . account ID , Ġbook Target . book ID ) ĊĠĠĠ Ġthis . book Borrow Attempts [ book Target ] Ġ= Ġsubscription ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġunsubscribe ( target : ĠBook Target ) Ġ{ ĊĠĠĠ Ġthis . logger . debug ("[ {} ][ {}] Ġun subscribed ", Ġtarget . account ID , Ġtarget . book ID ) ĊĠĠĠ Ġthis . book Borrow Attempts . remove ( target )?. dispose () ĊĠ Ġ} ĊĊĠ Ġ/* ĊĠĠ Ġ* ĠTry Ġborrow ing , Ġperforming Ġthe Ġauthentication Ġdialog Ġstep Ġif Ġnecessary . ĊĠĠ Ġ*/ ĊĊĠ Ġfun Ġtry Borrow Maybe Authenticated ( ĊĠĠĠ Ġbook : ĠBook ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . book Registry . update If Status Is More Important ( ĊĠĠĠĠĠ ĠBook With Status ( ĊĠĠĠĠĠĠĠ Ġbook , ĠBook Status . Request ing Loan ( book . id , Ġ"") ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ(! this . is Login Required ( book . account )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġthis . try Borrow Authenticated ( book ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthis . execute After Login ( ĊĠĠĠĠĠ Ġaccount ID Ġ= Ġbook . account , ĊĠĠĠĠĠ Ġbook ID Ġ= Ġbook . id , ĊĠĠĠĠĠ Ġrun On Success Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . is Login Required ( book . account )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . try Borrow Authenticated ( book ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . on Borrow Attempt Cancelled ( book ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġrun On Cancel Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Borrow Attempt Cancelled ( book ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Borrow Attempt Cancelled ( book : ĠBook ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" borrow Ġattempt Ġcancelled ") ĊĠĠĠ Ġthis . book Registry . update ( Book With Status ( book , ĠBook Status . from Book ( book ))) ĊĠ Ġ} ĊĊĠ Ġ/* ĊĠĠ Ġ* ĠTry Ġrev oking , Ġperforming Ġthe Ġauthentication Ġdialog Ġstep Ġif Ġnecessary . ĊĠĠ Ġ*/ ĊĊĠ Ġfun Ġtry Re voke Maybe Authenticated ( ĊĠĠĠ Ġbook : ĠBook ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . book Registry . update If Status Is More Important ( ĊĠĠĠĠĠ ĠBook With Status ( ĊĠĠĠĠĠĠĠ Ġbook , ĠBook Status . Request ing Re voke ( book . id ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ(! this . is Login Required ( book . account )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġthis . try Re voke Authenticated ( book ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthis . execute After Login ( ĊĠĠĠĠĠ Ġaccount ID Ġ= Ġbook . account , ĊĠĠĠĠĠ Ġbook ID Ġ= Ġbook . id , ĊĠĠĠĠĠ Ġrun On Success Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . is Login Required ( book . account )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . try Re voke Authenticated ( book ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . on Re voke Attempt Cancelled ( book ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġrun On Cancel Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Re voke Attempt Cancelled ( book ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Re voke Attempt Cancelled ( book : ĠBook ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" revoke Ġattempt Ġcancelled ") ĊĠĠĠ Ġthis . book Registry . update ( Book With Status ( book , ĠBook Status . from Book ( book ))) ĊĠ Ġ} ĊĊĠ Ġ/* ĊĠĠ Ġ* ĠTry Ġre serving , Ġperforming Ġthe Ġauthentication Ġdialog Ġstep Ġif Ġnecessary . ĊĠĠ Ġ*/ ĊĊĠ Ġfun Ġtry Reserve Maybe Authenticated ( ĊĠĠĠ Ġbook : ĠBook ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . book Registry . update If Status Is More Important ( ĊĠĠĠĠĠ ĠBook With Status ( ĊĠĠĠĠĠĠĠ Ġbook , ĠBook Status . Request ing Loan ( book . id , Ġ"") ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ(! this . is Login Required ( book . account )) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġthis . try Reserve Authenticated ( book ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthis . execute After Login ( ĊĠĠĠĠĠ Ġaccount ID Ġ= Ġbook . account , ĊĠĠĠĠĠ Ġbook ID Ġ= Ġbook . id , ĊĠĠĠĠĠ Ġrun On Success Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . is Login Required ( book . account )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . try Reserve Authenticated ( book ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . on Reserve Attempt Cancelled ( book ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġrun On Cancel Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Reserve Attempt Cancelled ( book ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġon Reserve Attempt Cancelled ( book : ĠBook ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" reserve Ġattempt Ġcancelled ") ĊĠĠĠ Ġthis . book Registry . update ( Book With Status ( book , ĠBook Status . from Book ( book ))) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtry Reserve Authenticated ( ĊĠĠĠ Ġbook : ĠBook ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" re serving : Ġ{}", Ġbook . id ) ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġthis . books Controller . book Borrow WithDefault Ac quisition ( ĊĠĠĠĠĠĠĠ Ġaccount ID Ġ= Ġbook . account , ĊĠĠĠĠĠĠĠ Ġbook ID Ġ= Ġbook . id , ĊĠĠĠĠĠĠĠ Ġentry Ġ= Ġbook . entry ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠUnit ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġthis . logger . error (" failed Ġto Ġstart Ġborrow Ġtask : Ġ", Ġe ) ĊĠĠĠĠĠ Ġthis . book Registry . update If Status Is More Important ( ĊĠĠĠĠĠĠĠ ĠBook With Status ( book , ĠBook Status . Failed Loan ( book . id , Ġthis . fail Minimal ( e ) Ġ{ Ġex Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠBook Status Download Error Details . Unexpected Exception ( ex ) ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtry Re voke Authenticated ( ĊĠĠĠ Ġbook : ĠBook ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" rev oking : Ġ{}", Ġbook . id ) ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġthis . books Controller . book Re voke ( ĊĠĠĠĠĠĠĠ Ġaccount ID Ġ= Ġbook . account , ĊĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġbook . id ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠUnit ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġthis . logger . error (" failed Ġto Ġstart Ġrev ocation Ġtask : Ġ", Ġe ) ĊĠĠĠĠĠ Ġthis . book Registry . update If Status Is More Important ( ĊĠĠĠĠĠĠĠ ĠBook With Status ( book , ĠBook Status . Failed Re voke ( book . id , Ġthis . fail Minimal ( e ) Ġ{ Ġex Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠBook Status Re voke Error Details . Unexpected Exception ( ex ) ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġtry Borrow Authenticated ( ĊĠĠĠ Ġbook : ĠBook ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" borrow ing : Ġ{}", Ġbook . id ) ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġthis . books Controller . book Borrow WithDefault Ac quisition ( ĊĠĠĠĠĠĠĠ Ġaccount ID Ġ= Ġbook . account , ĊĠĠĠĠĠĠĠ Ġbook ID Ġ= Ġbook . id , ĊĠĠĠĠĠĠĠ Ġentry Ġ= Ġbook . entry ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠUnit ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġthis . logger . error (" failed Ġto Ġstart Ġborrow Ġtask : Ġ", Ġe ) ĊĠĠĠĠĠ Ġthis . book Registry . update If Status Is More Important ( ĊĠĠĠĠĠĠĠ ĠBook With Status ( book , ĠBook Status . Failed Loan ( book . id , Ġthis . fail Minimal ( e ) Ġ{ Ġex Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠBook Status Download Error Details . Unexpected Exception ( ex ) ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġtry Dismiss Borrow Error ( ĊĠĠĠ Ġaccount ID : ĠAccount ID , ĊĠĠĠ Ġbook ID : ĠBook ID ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" dis missing Ġborrow Ġerror : Ġ{}", Ġbook ID ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġthis . books Controller . book Borrow Failed Dismiss ( account ID , Ġbook ID ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġthis . logger . error (" failed Ġto Ġdismiss Ġtask Ġerror : Ġ", Ġe ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġtry Dismiss Re voke Error ( ĊĠĠĠ Ġaccount ID : ĠAccount ID , ĊĠĠĠ Ġbook ID : ĠBook ID ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" dis missing Ġre voke Ġerror : Ġ{}", Ġbook ID ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġthis . books Controller . book Re voke Failed Dismiss ( account ID , Ġbook ID ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġthis . logger . error (" failed Ġto Ġdismiss Ġre voke Ġerror : Ġ", Ġe ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġtry Cancel Download ( ĊĠĠĠ Ġaccount ID : ĠAccount ID , ĊĠĠĠ Ġbook ID : ĠBook ID ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" c ancell ing : Ġ{}", Ġbook ID ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġthis . books Controller . book Download Cancel ( account ID , Ġbook ID ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġthis . logger . error (" failed Ġto Ġcancel Ġdownload : Ġ", Ġe ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġtry Delete ( ĊĠĠĠ Ġaccount ID : ĠAccount ID , ĊĠĠĠ Ġbook ID : ĠBook ID ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġthis . logger . debug (" de leting : Ġ{}", Ġbook ID ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġthis . books Controller . book Delete ( account ID , Ġbook ID ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġthis . logger . error (" failed Ġto Ġstart Ġdeletion : Ġ", Ġe ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġ< T Ġ: ĠSerializable > Ġfail Minimal ( ĊĠĠĠ Ġexception : ĠThrowable , ĊĠĠĠ Ġerror Make : Ġ( Throwable ) Ġ-> ĠT ĊĠ Ġ): ĠTask Result . Failure < T , ĠUnit > Ġ{ ĊĠĠĠ Ġval Ġrecorder Ġ= ĠTask Recorder . create < T >() ĊĠĠĠ Ġrecorder . begin New Step (" Starting Ġrev ocation Ġtask ...") ĊĠĠĠ Ġrecorder . current Step Failed ( ĊĠĠĠĠĠ Ġmessage Ġ= Ġexception . message Ġ?: Ġexception . java Class . canonical Name , ĊĠĠĠĠĠ Ġerror Value Ġ= Ġerror Make . invoke ( exception ), ĊĠĠĠĠĠ Ġexception Ġ= Ġexception ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġrecorder . finish Failure < Unit >() ĊĠ Ġ} Ċ } Ċ