de.jsystems.framework.common.action
Class ActionManager

java.lang.Object
  extended byde.jsystems.framework.common.action.ActionManager

public class ActionManager
extends Object

Am ActionManager werden alle Actions fuer die Views eines Controllers registriert. Nicht mehr der Controller ist der Listener fuer alles, sondern fuer jede gewuenschte Aktion steht eine Klasse zur Verfuegung. Das erhoeht zwar etwas die Anzahl zu schreibender Klassen, vermindert aber die Groesse der einzelnen Source-Dateien und erhoeht die Wiederverwendbarkeit der Implementierungen. Die entsprechenden Actionklassen werden direkt in den Controls hinterlegt. Dazu implementieren die einzelnen Klassen aus dem Package de.jsystems.framework.controls verschiedene Interfaces, die Auskunft ueber die unterstuetzten Events der Controls geben. Diese Interfaces geben auch die Methoden zum setzen und auslesen des Namens der zugehoerigen Actionklasse vor. Dabei werden diese Klassen vom ActionManager erzeugt.
Zu beachten ist, das die Typen der fuer ein Event hinterlegten Action-Klassen selbst auch vom richtigen Typ sind, da sonst die entsprechenden Listener nicht gesetzt werden koennen. Eine Klasse wird nur genau einmal pro ActionManager erzeugt. Somit kann dann ein und dieselbe Action zum Beispiel mit einem Menuepunkt, einem Button der Toolbar und gleichzeitig auch mit einem Button aus der Oberflaeche verbunden werden. Alle drei Controls wuerden nun beim Anklicken die gleiche Aktion ausfuehren. Ueber den ActionManager koennen auch alle mit der Action verbundenen Controls deaktiviert werden, sofern das Objekt, dass das Interface IActionInterface implementiert, ueber eine Methode setEnabled(boolean) verfuegt, mit der es sich inaktiv schalten laesst. Objekte vom Typ JComponent haben diese Methode immer. Und das sind normalerweise auch die Art Controls, denen man eine Action hinzufuegt.

Ein Objekt vom Typ ActionManager befindet sich in jedem Controller. Ueber die Methode Controller.registerViewActionControls(BusinessView) werden dann alle Controls der BusinessView ausgelesen, die das Interface IActionInterface implementieren. Sofern deren getActionClassFor-Methoden einen String zurueckgeben, der nicht leer ist, wird versucht, diese Klasse zu erzeugen und mit dem Control zu verbinden.

Ueber den Namen der Actionklasse kann auch gezielt eine Action abgeschaltet werden, wenn das noetig sein sollte.

Die erzeugten Actions haben als Umgebung immer die View, auf der sie sich befinden sowie den zugehoerigen Controller. Zu diesem Controller gehoert auch der ActionManager, bei dem die Action registriert wurde.

Falls beim Ausfuehren der Action eine Exception auftritt, so wird diese in der Exception gespeichert. Zusaetzlich findet auch ein Eintrag in der MessageList des zugehoerigen Controllers statt. Der Controller wird dann ueber die Methode Controller.exceptionInAction(AbstractAction, Exception) ueber die Exception informiert sowie ueber die Action, in der der Fehler aufgetreten ist.

Version:
1.0
Copyright by Jens Homm 2001 - 2003
Author:
Jens Homm JSYSTEMS

Constructor Summary
ActionManager(Controller controller)
          Erzeugt einen neuen ActionManager.
 
Method Summary
 AbstractAction addAction(String name, IActionInterface actionControl)
          Registriert die uebergebene Action fuer das uebergebene Control.
 AbstractAction addAction(String name, IActionInterface actionControl, BusinessView view)
          Fuegt dem ActionManager eine neue Action hinzu.
 void disableAction(String name)
          Deaktiviert die Action.
 void enableAction(String name)
          Aktiviert die Action.
 void removeAction(String name)
          Loescht die uebergebene Action aus den internen Listen des ActionManagers.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ActionManager

public ActionManager(Controller controller)
Erzeugt einen neuen ActionManager. Dabei ist der uebergebene Controller der Controller, der diesen ActionManager enthaelt. Der Controller versorgt beim registrieren einer View diesen ActionManager mit den zu erzeugenden Actions.

Parameters:
controller - Der Controller, dem dieser ActionManager gehoert.
Method Detail

addAction

public AbstractAction addAction(String name,
                                IActionInterface actionControl,
                                BusinessView view)
                         throws CreateActionException
Fuegt dem ActionManager eine neue Action hinzu. Diese Action gehoert zu dem uebergebenen Control. Nachdem die Action erzeugt wurde, wird das Control der Action uebergeben. Das ist notwendig, damit ueber die Action das Control deaktiviert werden kann. Falls es unter dem uebergebenen Namen schon eine Action im ActionManager gibt, wird nur noch das Control der Action hinzugefuegt, sofern beide Controls zur gleichen View gehoeren. Keiner der drei Parameter darf NULL und der Name darf nicht leer sein. Die durch den Namen spezifizierte Klasse muss vom Typ AbstractAction sein. Falls die Action gerade deaktiviert ist wird das hier uebergebene Control auch deaktiviert. Wenn auf verschiedenen Views Controls mit der gleichen Action versehen werden, so wird diese Action trotzdem mehrmals erzeugt, da die Actions auch immer mit der View initialisiert werden, zu der das Control gehoert.

Parameters:
name - Der Name der zu erzeugenden Action.
actionControl - Das Control, das diese Action antriggert.
view - Die View zu der das Control gehoert.
Returns:
Die erzeugte Action.
Throws:
CreateActionException - wen beim erzeugen der Action ein Fehler auftritt.

addAction

public AbstractAction addAction(String name,
                                IActionInterface actionControl)
                         throws CreateActionException
Registriert die uebergebene Action fuer das uebergebene Control. Hier wird jetzt keine View benoetigt. Wenn es unter dem uebergebenen Namen schon eine Action gibt, so wird lediglich noch das Control der Action hinzugefuegt. Keiner der beiden Parameter darf NULL sein und der Name darf nicht leer sein.

Parameters:
name - Der vollqualifizierte Klassenname der Action.
actionControl - Das Control bei dem die Action registriert werden soll.
Returns:
Die erzeugte Action.
Throws:
CreateActionException - wenn beim erzeugen der Action ein Fehler auftritt.

enableAction

public void enableAction(String name)
Aktiviert die Action. An allen mit der Action verbundenen Controls wird die Methode setEnabled(true) aufgerufen, sofern die Controls ueber eine solche Methode verfuegen. Falls der uebergebene Name NULL oder leer ist oder es unter diesem Namen keine Action gibt, passiert nichts. Ueberprueft werden sowohl die Actions, die ohne View registriert wurden als auch alle Actions die den gleichen Namen haben wie der uebergebene, egal zu welcher View die Action gehoert. Sobald die Methode aufgerufen wurde werden die ausgelösten Events wieder an die entsprechenden doXXX-Methoden weitergeleitet.

Parameters:
name - Der Name der zu aktivierenden Action.

disableAction

public void disableAction(String name)
Deaktiviert die Action. An allen mit der Action verbundenen Controls wird die Methode setEnabled(false) aufgerufen, sofern die Controls ueber eine solche Methode verfuegen. Falls der uebergebene Name NULL oder leer ist oder es unter diesem Namen keine Action gibt, passiert nichts. Ueberprueft werden sowohl die Actions, die ohne View registriert wurden als auch alle Actions die den gleichen Namen haben wie der uebergebene, egal zu welcher View die Action gehoert. Sobald diese Methode aufgerufen wurde ist die Eventverarbeitung in den Actions unterbrochen. Die ausgelösten Events werden nicht mehr an die doXXX-Methoden weitergeleitet.

Parameters:
name - Der Name der zu deaktivierenden Action.

removeAction

public void removeAction(String name)
Loescht die uebergebene Action aus den internen Listen des ActionManagers. Dabei werden alle registrierten Actions mit dem uebergebenen Namen geloescht, egal ob sie mit oder ohne View registriert wurden. Die Action wird als Listener an allen Controls wieder deregistriert. Auch die Controls in der Action werden aus der Action geloescht.

Parameters:
name - Der vollqualifizierte Klassennmae der Action.