3.12.3. Die Schnittstelle ICommandAction

Die Schnittstelle ICommandAction erweitert die Schnittstelle IAction um den Aspekt von Commands. Jowidgets liefert dafür eine Defaultimplementierung, so dass die Schnittstelle ICommandAction normalerweise nicht selbst implementiert wird, sondern nur die zugehörigen Commands. Es folgt eine Beschreibung der zusätzlich zu IAction vorhandenen Methoden:

Descriptor Methoden

Mit Hilfe der folgenden Methoden können text, tooltipText und icon geändert werden.

    void setText(String text);

    void setToolTipText(final String toolTipText);

    void setIcon(IImageConstant icon);
Enabled State

Mit der folgenden Methode kann der gloable enabled State geändert werden:

    void setEnabled(boolean enabled);

Wird ein IEnabledChecker verwendet, wird dieser nur ausgewertet, wenn der globale enabled State true ist.

Setzen, Ändern und Auslesen des Command

Mit Hilfe der folgenden Methoden kann der Command gesetzt und geändert werden:

    void setCommand(ICommand command);

    void setCommand(ICommandExecutor executor);

    void setCommand(ICommandExecutor executor, IEnabledChecker enabledChecker);

    void setCommand(ICommandExecutor executor, IExceptionHandler exceptionHandler);

    void setCommand(
        ICommandExecutor executor, 
        IEnabledChecker enabledChecker, 
        IExceptionHandler exceptionHandler);

Die erste Methode verwendet dazu die ICommand Schnittstelle, die anderen Methoden erlauben das Setzen eines Command mit Hilfe der einzelnen Aspekte (Executor, EnabledChecker, ExceptionHandler). Dabei werden immer alle Aspekte neu gesetzt (die nicht angegebenen werden Aspkete werden zu null). Ein Command kann explizit auf null gesetzt werden. Die Action wird dadurch automatisch disabled.

Die folgende Methode liefert das derzeit gesetzte Command:

    ICommand getCommand();
Exception Handling

Für alle Exceptions, welche nicht durch den Command behandelt wurden, kann ein Action ExceptionHandler wie folgt gesetzt werden:

    void setActionExceptionHandler(IExceptionHandler exceptionHandler);
Action Builder

Um eine Implementierung der Schnittstelle ICommandAction zu erhalten, kann ein IActionBuilder verwendet werden. Diesen erhält man u.A. von der Accessor Klasse org.jowidgets.api.command.Action mit Hilfe der statischen Methode:

    public static IActionBuilder builder() {...}

Die Schnittstelle IActionBuilder hat die folgenden Methoden:

    IActionBuilder setText(String text);

    IActionBuilder setToolTipText(String toolTipText);

    IActionBuilder setIcon(IImageConstant icon);

    IActionBuilder setMnemonic(Character mnemonic);

    IActionBuilder setMnemonic(char mnemonic);

    IActionBuilder setAccelerator(Accelerator accelerator);

    IActionBuilder setAccelerator(char key, Modifier... modifier);

    IActionBuilder setAccelerator(VirtualKey virtualKey, Modifier... modifier);

    IActionBuilder setEnabled(boolean enabled);

    IActionBuilder setCommand(ICommand command);

    IActionBuilder setCommand(ICommandExecutor command);

    IActionBuilder setCommand(ICommandExecutor command, IEnabledChecker executableStateChecker);

    IActionBuilder setCommand(ICommandExecutor command, IExceptionHandler exceptionHandler);

    IActionBuilder setCommand(
        ICommandExecutor command, 
        IEnabledChecker enabledChecker, 
        IExceptionHandler exceptionHandler);

    IActionBuilder setActionExceptionHandler(IExceptionHandler exceptionHandler);

    ICommandAction build();

Die Parameter haben die gleiche Semantik wie die der Schnittstelle ICommandAction.

Das folgende Beispiel zeigt die Verwendung:

  1  public final class SaveActionFactory {
  2  
  3      private SaveActionFactory() {}
  4  
  5      public static IAction create(final IDataModel dataModel) {
  6          final IActionBuilder builder = Action.builder();
  7  
  8          builder.setText("Save");
  9          builder.setToolTipText("Saves the text");
 10          builder.setAccelerator(VirtualKey.S, Modifier.CTRL);
 11          builder.setIcon(IconsSmall.DISK);
 12  
 13          builder.setCommand(SaveCommandFactory.create(dataModel));
 14  
 15          return builder.build();
 16      }
 17  }

Anmerkung: Im obigen Beispiel wird bewusst eine IAction und keine ICommandAction zurückgegeben. Dadurch wird signalisiert, dass die Action nicht durch den Nutzer der Methode nachträglich modifiziert werden soll.


Siehe auch PDF Version dieses Dokuments, Jowidgets API Spezifikation