package Ġy an dex . cloud . toolkit . api . resource . impl Ċ Ċ import Ġcom . intellij . openapi . diagnostic . logger Ċ import Ġcom . intellij . openapi . project . Project Ċ import Ġio . grpc . Status RuntimeException Ċ import Ġy an dex . cloud . toolkit . api . auth . impl . Cloud Auth ServiceImpl Ċ import Ġy an dex . cloud . toolkit . api . resource .* Ċ import Ġy an dex . cloud . toolkit . util .* Ċ import Ġy an dex . cloud . toolkit . util . remote . resource . Missing Resource Loading Error Ċ import Ġy an dex . cloud . toolkit . util . remote . resource . Present able Resource Status Ċ import Ġy an dex . cloud . toolkit . util . remote . resource . Resource Loading Error Ċ import Ġjava . util . concurrent . Comp letableFuture Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Future Ċ Ċ class ĠCloud Resource Task Manager ( threads : ĠInt ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= Ġlogger < Cloud Auth ServiceImpl >() ĊĊĠĠĠ Ġprivate Ġval Ġexecutor Ġ= ĠExec utors . new Fixed ThreadPool ( threads ) ĊĠĠĠ Ġprivate Ġval Ġtasks Ġ= Ġmutable Map Of < Dependent Resource < *, Ġ* >, ĠTask < *, Ġ* >>() ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġ< P Ġ: ĠCloud Resource , ĠR > Ġtry Add Task ( ĊĠĠĠĠĠĠĠ Ġdep res : ĠDepend ent Resource < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġtask Factory : Ġ() Ġ-> ĠCloud Resource Task Manager . Task < P , ĠR > ĊĠĠĠ Ġ): ĠFuture < Maybe < R >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġsynchronized ( tasks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . get Or Put ( dep res , Ġtask Factory ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠTask < P , ĠR > ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtask . future ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< P Ġ: ĠCloud Resource , ĠR > Ġhandle Async ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġparent : ĠP , ĊĠĠĠĠĠĠĠ Ġdependency : ĠCloud Dependency < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġloader : ĠCloud Dependency Loader < P , ĠR >, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ(() Ġ-> ĠUnit )? ĊĠĠĠ Ġ): ĠFuture < Maybe < R >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdep res Ġ= Ġdependency . of ( parent ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Add Task ( dep res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAsync Task ( project , Ġparent , Ġdep res , Ġloader , ĠonSuccess ). also ( executor :: execute ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< P Ġ: ĠCloud Resource , ĠR > Ġhandle Sync ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġparent : ĠP , ĊĠĠĠĠĠĠĠ Ġdependency : ĠCloud Dependency < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġloader : ĠCloud Dependency Loader < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġshow Error Notifications : ĠBoolean ĊĠĠĠ Ġ): ĠFuture < Maybe < R >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdep res Ġ= Ġdependency . of ( parent ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Add Task ( dep res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSync Task ( project , Ġparent , Ġdep res , Ġloader , Ġ{}, Ġshow Error Notifications ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< P Ġ: ĠCloud Resource , ĠR > Ġperform Load ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġparent : ĠP , ĊĠĠĠĠĠĠĠ Ġdependency : ĠCloud Dependency < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġloader : ĠCloud Dependency Loader < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġshow Error Notifications : ĠBoolean ĊĠĠĠ Ġ): ĠPair < Cloud Dependency Loading Result , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠCloud Dependency Loading Result () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloader . load ( parent , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult Ġto Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠStatus RuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Loading Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . status . description Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPresent able Resource Status . by Status RE ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Error Notifications ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPROCESS _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Y an dex ĠCloud ĠResource ĠLoading ĠFailed ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . status . description Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show At ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠResource Loading Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . put ( parent , Ġdependency , Ġe ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Error Notifications ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= Ġerror Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPROCESS _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Y an dex ĠCloud ĠResource ĠLoading ĠFailed ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). with Actions ( e ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . show At ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Loading Error ( e . message Ġ?: Ġ"", ĠPresent able Resource Status . Failed To Load ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Error Notifications ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPROCESS _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Y an dex ĠCloud ĠResource ĠLoading ĠFailed ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Error Ġ- Ġ" Ġ+ Ġe . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show At ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ("[ Y an dex ĠCloud ] ĠUnexpected Ġresource Ġloading Ġerror ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult Ġto Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠAsync Task < P Ġ: ĠCloud Resource , ĠR >( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġparent : ĠP , ĊĠĠĠĠĠĠĠ Ġdep res : ĠDepend ent Resource < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġloader : ĠCloud Dependency Loader < P , ĠR >, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ(() Ġ-> ĠUnit )? , ĊĠĠĠ Ġ) Ġ: ĠTask < P , ĠR >( project , Ġparent , Ġdep res , Ġloader , ĠonSuccess , Ġtrue ), ĠRunnable Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġfuture Ġ= ĠCompletableFuture < Maybe < R >>() ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfuture . complete ( do Work ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠSync Task < P Ġ: ĠCloud Resource , ĠR >( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġparent : ĠP , ĊĠĠĠĠĠĠĠ Ġdep res : ĠDepend ent Resource < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġloader : ĠCloud Dependency Loader < P , ĠR >, ĊĠĠĠĠĠĠĠ ĠonSuccess : Ġ(() Ġ-> ĠUnit )? , ĊĠĠĠĠĠĠĠ Ġshow Error Notifications : ĠBoolean ĊĠĠĠ Ġ) Ġ: ĠTask < P , ĠR >( project , Ġparent , Ġdep res , Ġloader , ĠonSuccess , Ġshow Error Notifications ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġfuture Ġ= ĠLazy Future ( this :: do Work ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġabstract Ġinner Ġclass ĠTask < P Ġ: ĠCloud Resource , ĠR >( ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġval Ġparent : ĠP , ĊĠĠĠĠĠĠĠ Ġval Ġdep res : ĠDepend ent Resource < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġval Ġloader : ĠCloud Dependency Loader < P , ĠR >, ĊĠĠĠĠĠĠĠ Ġval ĠonSuccess : Ġ(() Ġ-> ĠUnit )? , ĊĠĠĠĠĠĠĠ Ġval Ġshow Error Notifications : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġabstract Ġval Ġfuture : ĠFuture < Maybe < R >> ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Removed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġfun Ġdo Work (): ĠMaybe < R > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( result , Ġsuccess ) Ġ= Ġperform Load ( project , Ġparent , Ġdep res . dependency , Ġloader , Ġshow Error Notifications ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCloud Resource Storage . instance . update Resources ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( success ) ĠonSuccess ?. invoke () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult [ dep res ] Ġ?: ĠNo Value ( Missing Resource Loading Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġremove () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Removed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( tasks ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . remove ( dep res , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Removed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPROCESS _ ID Ġ= Ġ" yandex - cloud - resource - loading " ĊĠĠĠ Ġ} Ċ }