| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- --[[
- * @author PureMVC Lua Native Port Sean
- * @author Copyright(c) 2006-2012 Futurescale, Inc., Some rights reserved.
- *
- * @class puremvc.MacroCommand
- * @extends puremvc.Notifier
- *
- * A base command implementation that executes other commands, such as
- * {@link puremvc.SimpleCommand SimpleCommand}
- * or {@link puremvc.MacroCommand MacroCommand}
- * subclasses.
- *
- * A MacroCommand maintains an list of
- * command constructor references called *SubCommands*.
- *
- * When #execute is called, the MacroCommand
- * instantiates and calls #execute on each of its *SubCommands* in turn.
- * Each *SubCommand* will be passed a reference to the original
- * {@link puremvc.Notification Notification}
- * that was passed to the MacroCommands #execute method
- *
- * Unlike {@link puremvc.SimpleCommand SimpleCommand},
- * your subclass should not override #execute but instead, should
- * override the #initializeMacroCommand method, calling #addSubCommand once for
- * each *SubCommand* to be executed.
- *
- * If your subclass does define a constructor, be sure to call "super" like so
- *
- * function MyMacroCommand ()
- * {
- * MacroCommand.call(this);
- * };
- * @constructor
- ]]
- local Notifier = require( framework.PACKAGE_NAME .. '/patterns/observer/Notifier')
- local MacroCommand = class('MacroCommand', Notifier)
- function MacroCommand:ctor()
- MacroCommand.super.ctor(self)
- self.subCommands= {}
- self:initializeMacroCommand()
- end
- --[[
- * @protected
- * Initialize the MacroCommand.
- *
- * In your subclass, override this method to
- * initialize the MacroCommand's *SubCommand*
- * list with command class references like
- * this:
- *
- * // Initialize MyMacroCommand
- * MyMacroCommand.prototype.initializeMacroCommand= function ()
- * {
- * this.addSubCommand( com.me.myapp.controller.FirstCommand );
- * this.addSubCommand( com.me.myapp.controller.SecondCommand );
- * this.addSubCommand( com.me.myapp.controller.ThirdCommand );
- * };
- *
- * Note that *SubCommand*s may be any command implementor,
- * MacroCommands or SimpleCommands are both acceptable.
- * @return {void}
- ]]
- function MacroCommand:initializeMacroCommand() end
- --[[
- * @protected
- * Add a *SubCommand*
- *
- * The *SubCommand*s will be called in First In / First Out (FIFO) order
- * @param {Function} commandClassRef
- * A reference to a subclassed SimpleCommand or MacroCommand constructor
- ]]
- function MacroCommand:addSubCommand(commandClassRef)
- table.insert(self.subCommands, commandClassRef)
- end
- --[[
- * Execute this MacroCommands *SubCommands*
- *
- * The *SubCommand*s will be called in First In / First Out (FIFO) order
- * @param {puremvc.Notification} note
- * The Notification object to be passed to each *SubCommand*
- ]]
- function MacroCommand:execute(note)
- -- SIC- TODO optimize
- while(#self.subCommands > 0) do
- local ref= table.remove(self.subCommands, 1)
- local cmd= ref.new()
- cmd:initializeNotifier(self.multitonKey)
- cmd:execute(note)
- end
- end
- return MacroCommand
|