package Ġio . un th rott led . am ii . promotion Ċ Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . project . Project Manager Ċ import Ġcom . intellij . openapi . wm . WindowManager Ċ import Ġcom . intellij . util . concurrency . Ed t Scheduled ExecutorService Ċ import Ġio . un th rott led . am ii . tools . do OrElse Ċ import Ġio . un th rott led . am ii . tools . to Optional Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ enum Ġclass ĠProm otion Status Ġ{ ĊĠ ĠAC CEPT ED , ĠRE JECT ED , ĠBLOCK ED , ĠERROR Ċ } Ċ Ċ data Ġclass ĠProm otion Results ( ĊĠ Ġval Ġstatus : ĠProm otion Status Ċ ) Ċ Ċ object ĠAn i Me me Promotion Service Ġ{ ĊĠ Ġfun Ġrun Promotion ( ĊĠĠĠ Ġis New User : ĠBoolean , ĊĠĠĠ Ġpromotion Definition : ĠProm otion Definition , ĊĠĠĠ Ġon Promotion : Ġ( Promotion Results ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Reject : Ġ() Ġ-> ĠUnit , ĊĠ Ġ) Ġ{ ĊĠĠĠ ĠAn i Me me Plugin Promotion Runner ( isNew User , Ġpromotion Definition , Ġon Promotion , Ġon Reject ) ĊĠ Ġ} Ċ } Ċ Ċ class ĠAn i Me me Plugin Promotion Runner ( ĊĠ Ġprivate Ġval Ġis New User : ĠBoolean , ĊĠ Ġprivate Ġval Ġpromotion Definition : ĠProm otion Definition , ĊĠ Ġprivate Ġval Ġon Promotion : Ġ( Promotion Results ) Ġ-> ĠUnit , ĊĠ Ġprivate Ġval Ġon Reject : Ġ() Ġ-> ĠUnit Ċ ) Ġ: ĠRunnable Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġrun () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠ ĠAn i Me me Plugin Promotion . run Promotion ( isNew User , Ġpromotion Definition , Ġon Promotion , Ġon Reject ) ĊĠ Ġ} Ċ } Ċ Ċ object ĠAn i Me me Plugin Promotion Ġ{ ĊĠ Ġfun Ġrun Promotion ( ĊĠĠĠ Ġis New User : ĠBoolean , ĊĠĠĠ Ġpromotion Definition : ĠProm otion Definition , ĊĠĠĠ Ġon Promotion : Ġ( Promotion Results ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Reject : Ġ() Ġ-> ĠUnit , ĊĠ Ġ) Ġ{ ĊĠĠĠ ĠApplication Manager . getApplication (). execute On P ooled Thread Ġ{ ĊĠĠĠĠĠ Ġ// Ġdownload Ġassets Ġon Ġnon - awt Ġthread ĊĠĠĠĠĠ Ġval Ġpromotion Assets Ġ= ĠProm otion Assets ( isNew User , Ġpromotion Definition ) ĊĊĠĠĠĠĠ Ġ// Ġschedule Ġcode Ġexecution Ġto Ġrun Ġon Ġthe ĠE DT Ġthread ĊĠĠĠĠĠ Ġ// Ġso Ġwe Ġcan Ġsuggest Ġa Ġwindow ĊĠĠĠĠĠ ĠE dt Scheduled ExecutorService . getInstance (). schedule ( ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠProject Manager . getInstance (). open Projects ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Optional () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . first () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . getInstance (). suggest Parent Window ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OrElse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAn i Me me Promotion Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpromotion Assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpromotion Definition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Promotion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Reject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ ĠTimeUnit . SECONDS ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ