package Ġio . scal . command based architecture . commands Ċ Ċ /** Ċ Ġ* ĠStrategy Ġthat Ġwill Ġbe Ġused Ġby ĠCommand Manager Ġto Ġcontrol Ġcommand Ġexecution Ġflow . Ċ Ġ*/ Ċ interface ĠExecution Strategy Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġbefore Ġadding Ġcommand Ġto Ġpending . ĊĠĠĠĠ Ġ* ĠIf Ġreturns Ġfalse Ġ- Ġcommand Ġwill Ġbe Ġskipped Ġand Ġnever Ġbe Ġexecuted . ĊĠĠĠĠ Ġ* ĠIf Ġtrue Ġ- Ġcommand Ġwill Ġbe Ġexecuted Ġsomewhere Ġin Ġthe Ġfuture . ĊĠĠĠĠ Ġ* Ġ@ return Ġif Ġthe Ġcommand Ġshould Ġbe Ġadded Ġto Ġexecution Ġqueue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshould AddTo Pending Actions ( ĊĠĠĠĠĠĠĠ Ġpending Action Commands : ĠList < Command < *, Ġ* >>, ĊĠĠĠĠĠĠĠ Ġrunning Action Commands : ĠList < Command < *, Ġ* >> ĊĠĠĠ Ġ): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġbefore Ġpending Action Command Ġexecution Ġto Ġknow Ġif Ġthis Ġcommand Ġshould Ġwait Ġsome Ġtime . ĊĠĠĠĠ Ġ* ĠCalls Ġduring Ġthe Ġexecution Ġphase Ġof Ġthe Ġcommand Ġwith Ġimplementing Ġstrategy . ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġcommand Ġshould Ġwait ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshould Block Other Task ( pending Action Command : ĠCommand < *, Ġ* >): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġon Ġthe Ġcommand Ġthat Ġwant Ġto Ġexecute Ġto Ġknow Ġif Ġit Ġis Ġa Ġgood Ġtime Ġfor Ġthis . ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġcommand Ġshould Ġbe Ġexecuted ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshould Execute Action ( ĊĠĠĠĠĠĠĠ Ġpending Action Commands : ĠList < Command < *, Ġ* >>, ĊĠĠĠĠĠĠĠ Ġrunning Action Commands : ĠList < Command < *, Ġ* >> ĊĠĠĠ Ġ): ĠBoolean Ċ } Ċ Ċ /** Ċ Ġ* ĠAllows Ġconcurrent Ġexecution Ġalways . Ċ Ġ*/ Ċ open Ġclass ĠConcurrent Strategy Ġ: ĠExecution Strategy Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġshould AddTo Pending Actions ( ĊĠĠĠĠĠĠĠ Ġpending Action Commands : ĠList < Command < *, Ġ* >>, ĊĠĠĠĠĠĠĠ Ġrunning Action Commands : ĠList < Command < *, Ġ* >> ĊĠĠĠ Ġ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġshould Block Other Task ( pending Action Command : ĠCommand < *, Ġ* >): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġshould Execute Action ( ĊĠĠĠĠĠĠĠ Ġpending Action Commands : ĠList < Command < *, Ġ* >>, ĊĠĠĠĠĠĠĠ Ġrunning Action Commands : ĠList < Command < *, Ġ* >> ĊĠĠĠ Ġ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġtrue Ċ } Ċ Ċ /** Ċ Ġ* ĠAllows Ġconcurrent Ġexecution Ġonly Ġif Ġthere Ġare Ġno Ġrunning Ġcommands Ġwith Ġsame Ġstrategy Ġand Ġtag . Ċ Ġ* ĠAlso Ġwill Ġremove Ġany Ġpending Ġcommand Ġwith Ġthe Ġsame Ġtag Ġand Ġreplace Ġwith Ġa Ġnew Ġone . Ċ Ġ*/ Ċ open Ġclass ĠConcurrent Strategy With Tag ( private Ġval Ġtag : ĠAny ) Ġ: ĠConcurrent Strategy () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġshould AddTo Pending Actions ( ĊĠĠĠĠĠĠĠ Ġpending Action Commands : ĠList < Command < *, Ġ* >>, ĊĠĠĠĠĠĠĠ Ġrunning Action Commands : ĠList < Command < *, Ġ* >> ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! pending Action Commands . any Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . strategy . let Ġ{ Ġit Ġis ĠConcurrent Strategy With Tag Ġ&& Ġit . tag Ġ== Ġtag Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Execute Action ( ĊĠĠĠĠĠĠĠ Ġpending Action Commands : ĠList < Command < *, Ġ* >>, ĊĠĠĠĠĠĠĠ Ġrunning Action Commands : ĠList < Command < *, Ġ* >> ĊĠĠĠ Ġ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġ! running Action Commands . any Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . strategy . let Ġ{ Ġit Ġis ĠConcurrent Strategy With Tag Ġ&& Ġit . tag Ġ== Ġtag Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠWill Ġbe Ġadded Ġto Ġthe Ġqueue Ġonly Ġif Ġthere Ġare Ġno Ġother Ġtasks Ġwith Ġthis Ġstrategy Ġin Ġpending Ġand Ġrunning Ġqueues . Ċ Ġ* ĠWill Ġbe Ġexecuted Ġonly Ġas Ġa Ġsingle Ġtask Ġand Ġblock Ġall Ġother Ġtasks Ġfrom Ġexecution . Ċ Ġ*/ Ċ open Ġclass ĠSingle Strategy Ġ: ĠExecution Strategy Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġshould AddTo Pending Actions ( ĊĠĠĠĠĠĠĠ Ġpending Action Commands : ĠList < Command < *, Ġ* >>, ĊĠĠĠĠĠĠĠ Ġrunning Action Commands : ĠList < Command < *, Ġ* >> ĊĠĠĠ Ġ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġ! pending Action Commands . any Ġ{ Ġit . strategy Ġis ĠSingle Strategy Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! running Action Commands . any Ġ{ Ġit . strategy Ġis ĠSingle Strategy Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Block Other Task ( pending Action Command : ĠCommand < *, Ġ* >): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġshould Execute Action ( ĊĠĠĠĠĠĠĠ Ġpending Action Commands : ĠList < Command < *, Ġ* >>, ĊĠĠĠĠĠĠĠ Ġrunning Action Commands : ĠList < Command < *, Ġ* >> ĊĠĠĠ Ġ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġrunning Action Commands . isEmpty () Ċ } Ċ Ċ /** Ċ Ġ* ĠSame Ġas ĠSingle Strategy Ġbut Ġwill Ġbe Ġadded Ġto Ġthe Ġpending Ġqueue Ġonly Ġif Ġthere Ġare Ġno Ġpending Ġor Ċ Ġ* Ġrunning Ġtask Ġwith Ġa Ġstrategy Ġof Ġthe Ġsame Ġtag . Ċ Ġ*/ Ċ open Ġclass ĠSingle With Tag Strategy ( private Ġval Ġtag : ĠAny ) Ġ: ĠSingle Strategy () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġshould AddTo Pending Actions ( ĊĠĠĠĠĠĠĠ Ġpending Action Commands : ĠList < Command < *, Ġ* >>, ĊĠĠĠĠĠĠĠ Ġrunning Action Commands : ĠList < Command < *, Ġ* >> ĊĠĠĠ Ġ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġ! pending Action Commands . any Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . strategy . let Ġ{ Ġit Ġis ĠSingle With Tag Strategy Ġ&& Ġit . tag Ġ== Ġtag Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! running Action Commands . any Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . strategy . let Ġ{ Ġit Ġis ĠSingle With Tag Strategy Ġ&& Ġit . tag Ġ== Ġtag Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ }