package Ġai . plat on . pulsar . common Ċ Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . file . Files Ċ import Ġjava . time . Duration Ċ import Ġjava . util .* Ċ Ċ object ĠFile Command Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( File Command :: class . java ) ĊĠĠĠ Ġprivate Ġval ĠCOMMAND _ FILE Ġ= ĠApp Paths . PATH _ LOCAL _ COMMAND ĊĠĠĠ Ġprivate Ġval ĠCHECK _ INTERVAL Ġ= ĠDuration . of Seconds ( 1 5 ) ĊĠĠĠ Ġprivate Ġval ĠLAST _ CHECK _ TIME : ĠMutable Map < String , ĠLong > Ġ= ĠHashMap () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġlocal Ġcommand Ġfile Ġto Ġsee Ġif Ġthere Ġare Ġpending Ġcommands ĊĠĠĠĠ Ġ* ĠSupported Ġlocal Ġfile Ġcommands Ġcan Ġbe Ġfound Ġin ĠApp Constants ĠCMD _* ĊĠĠĠĠ Ġ* ĠGeneral Ġcommand Ġoptions Ġare Ġsupported : ĊĠĠĠĠ Ġ* Ġ- perm : Ġthe Ġcommand Ġshould Ġbe Ġalways Ġkeep Ġin Ġthe Ġfile Ġand Ġexecute Ġevery Ġtime Ġthe Ġcommand Ġfile Ġis Ġchecked , ĊĠĠĠĠ Ġ* Ġotherwise Ġthe Ġcommand Ġis Ġexecuted Ġonly ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcommand ĠCheck Ġif Ġthe Ġ[ command ] Ġexists ĊĠĠĠĠ Ġ* Ġ@ param Ġcheck Interval ĠThe Ġcheck Ġinterval Ġin Ġseconds ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġcommand Ġis Ġexists Ġduring Ġthis Ġcheck Ġperiod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck ( command : ĠString , Ġcheck Interval : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcheck ( command , ĠDuration . of Seconds ( check Interval )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġlocal Ġcommand Ġfile Ġto Ġsee Ġif Ġthere Ġare Ġpending Ġcommands ĊĠĠĠĠ Ġ* ĠSupported Ġlocal Ġfile Ġcommands Ġcan Ġbe Ġfound Ġin ĠApp Constants ĠCMD _* ĊĠĠĠĠ Ġ* ĠGeneral Ġcommand Ġoptions Ġare Ġsupported : ĊĠĠĠĠ Ġ* Ġ- perm : Ġthe Ġcommand Ġshould Ġbe Ġalways Ġkeep Ġin Ġthe Ġfile Ġand Ġexecute Ġevery Ġtime Ġthe Ġcommand Ġfile Ġis Ġchecked , ĊĠĠĠĠ Ġ* Ġotherwise Ġthe Ġcommand Ġis Ġexecuted Ġonly ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcommand ĠCheck Ġif Ġthe Ġ[ command ] Ġexists ĊĠĠĠĠ Ġ* Ġ@ param Ġcheck Interval ĠThe Ġcheck Ġinterval ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġcommand Ġis Ġexists Ġduring Ġthis Ġcheck Ġperiod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġcheck ( command : ĠString , Ġcheck Interval : ĠDuration Ġ= ĠCHECK _ INTERVAL , Ġaction : Ġ() Ġ-> ĠUnit Ġ= Ġ{} ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Files . exists ( COMMAND _ FILE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġexist Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( File Command :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodified Time Ġ= ĠCOMMAND _ FILE . to File (). lastModified () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Check Time Ġ= ĠLAST _ CHECK _ TIME . get OrDefault ( command , Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Check Time Ġ<= Ġmodified Time Ġ&& Ġnow Ġ- Ġlast Check Time Ġ>= Ġcheck Interval . to Millis ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLAST _ CHECK _ TIME [ command ] Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlines Ġ= ĠFiles . read All Lines ( COMMAND _ FILE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexist Ġ= Ġlines . stream (). any Match Ġ{ Ġline : ĠString Ġ-> Ġline . contains ( command ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! StringUtils . contains IgnoreCase ( command , Ġ" Ġ- perm ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines . remove ( command ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . write ( COMMAND _ FILE , Ġlines ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ( e . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġexist ĊĠĠĠ Ġ} Ċ } Ċ