CommandSet

Contains a set of commands and events supported by a commandable object. The CommandSet supports command interceptors and command call chains.

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

addCommandSet

Adds all of the commands and events from a specified command set into this one.

public addCommandSet(commandSet: CommandSet): void

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

addListener

Adds a listener to receive notifications on fired events.
See IEventListener

public addListener(listener: IEventListener): void

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

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)
				},
			)
		}

See also