Description
The CommandSet class allows you to create a set of commands and events supported by a commandable object. In addition, it supports command interceptors and command call chains.
Important points
- CommandSets can be used as an alternative commandable interface to a business object.
- This class can be used to auto generate multiple external services for a business object.
Constructors
Creates an empty CommandSet object.
public
constructor()
Instance methods
addCommand
Adds a command to this command set.
See ICommand
public
addCommand(command: ICommand): void
- command: ICommand - command to add.
addCommandSet
Adds all of the commands and events from a specified command set into this one.
public
addCommandSet(commandSet: CommandSet): void
- commandSet: CommandSet - CommandSet to add.
addCommands
Adds multiple commands to this command set.
See ICommand
public
addCommands(commands: ICommand[]): void
- commands: ICommand[] - array of commands to add.
addEvent
Adds an event to this command set.
See IEvent
public
addEvent(event: IEvent): void
- event: IEvent - event to add.
addEvents
Adds multiple events to this command set.
See IEvent
public
addEvents(events: IEvent[]): void
- event: IEvent[] - array of events to add.
addInterceptor
Adds a command interceptor to this command set.
public
addInterceptor(interceptor: ICommandInterceptor): void
- interceptor: ICommandInterceptor interceptor to add.
addListener
Adds a listener to receive notifications on fired events.
See IEventListener
public
addListener(listener: IEventListener): void
- listener: IEventListener - listener to add.
execute
Executes a command specificed by its name.
See ICommand, Parameters
public
execute(context: IContext, commandName: string, args: Parameters): Promise<any>
- context: IContext - (optional) a context to trace execution through a call chain.
- commandName: string - name of the command that is to be executed.
- args: Parameters - parameters (arguments) to pass to the command for execution.
- returns: Promise<any> - execution result
findCommand
Searches for a command by its name.
See ICommand
public
findCommand(commandName: string): ICommand
- commandName: ICommand - name of the command to search for.
- returns: ICommand - command, whose name matches the provided name.
findEvent
Searches for an event by its name in this command set.
public
findEvent(eventName: string): IEvent
- eventName: string - name of the event to search for.
- returns: IEvent - event, whose name matches the provided name.
getCommands
Gets all commands registered in this command set.
See ICommand
public
getCommands(): ICommand[]
- returns: ICommand[] - list of commands.
getEvents
Gets all events registred in this command set.
See IEvent
public
getEvents(): IEvent[]
- returns: IEvent[] - list of events.
notify
Fires an event specified by its name and notifies all registered listeners
public
notify(context: IContext, eventName: string, args: Parameters): void
- context: IContext - (optional) a context to trace execution through a call chain.
- eventName: string - name of the event that is to be fired.
- args: Parameters - event arguments (parameters).
removeListener
Removes a previosly added listener.
See IEventListener
public
removeListener(listener: IEventListener): void
- listener: IEventListener - listener to remove.
validate
Validates the args for a command specified by its name using a defined schema. If the validation schema is not defined, then the methods returns no errors. It returns a validation error if the command is not found.
public
validate(commandName: string, args: Parameters): ValidationResult[]
- commandName: string - name of the command for which the ‘args’ must be validated.
- args: Parameters - parameters (arguments) to validate.
- returns: ValidationResult[] - array of ValidationResults. If no command is found by the given name, then the returned array of ValidationResults will contain a single entry, whose type will be ValidationResultType.Error.
Examples
type MyDataCommandSet struct {
*CommandSet
_controller IMyDataController
}
// Any data controller interface
func (dcs *MyDataCommandSet) CreateMyDataCommandSet(controller IMyDataController) {
dcs._controller = controller
dcs.AddCommand(dcs.makeGetMyDataCommand())
}
func (dcs *MyDataCommandSet) makeGetMyDataCommand() ICommand {
return NewCommand(
"get_mydata",
nil,
func(ctx context.Context, args *exec.Parameters) (any, err) {
var param = args.GetAsString("param")
return dcs._controller.GetMyData(ctx, param)
},
)
}