edu.bonn.xulu.model
Class AbstractXuluModel

java.lang.Object
  extended by AbstractNamedObject
      extended by edu.bonn.xulu.model.AbstractXuluModel
All Implemented Interfaces:
XuluModel
Direct Known Subclasses:
AbstractStepModel

public abstract class AbstractXuluModel
extends AbstractNamedObject
implements XuluModel

Diese Klasse stellt eine Basis-Implementierung eines Xulu-Modells dar. Es werden alle Methoden des XuluModel-Interface implementiert, in dem entsprechende Flags sinnvoll gesetzt werden.
Eine konkrete Modell-Implementierung muss nur noch folgende Methoden implementieren:

Version:
1.0
Author:
Martin Schmitz (University of Bonn/Germany)

Field Summary
protected  ModelContentManager contManager
          Speichert den ContentManager fuer das Modell.
protected  boolean disposed
          Dieses Flag speichert, ob die internen Modell-Ressourcen "zerstoert" sind.
protected  Vector events
          Speichert die Ereignis-Typen, die waehrend des Modellablaufs geworfen werden.
protected  boolean initialised
          Dieses Flag speichert, ob die Modellierung initialisiert ist, also sich alle internen Ressourcen in einem Ausgangszustand befinden.
protected  Vector listeners
          Speichert die Listener fuer das Modell.
protected  ResourceProvider modelResourceProvider
          ResourceProvider fuer modellspezifische Uebersetzungen.
protected  boolean running
          Dieses Flag speichert, ob die Modellierung gerade laeuft.
protected  PrintStream statusOut
          Ausgabe-Stream fuer Statusausgaben.
protected  boolean stopped
          Dieses Flag speichert, ob das Modell gestoppt ist.
 
Constructor Summary
AbstractXuluModel(ModelContentManager contManager)
          Erzeugt ein neues Modell.
AbstractXuluModel(ModelContentManager contManager, String name)
          Erzeugt ein neues Modell.
 
Method Summary
 boolean addModelListener(ModelListener listener)
          Fuegt einen ModelListener hinzu.
protected  void checkBreakingCommands()
          Prueft, ob das Modell gestoppt ist.
static String determineCaption(Map<String,Object> captionMap, ResourceProvider rp, String captionKey, Object... captionParams)
          Ermittelt einn String-Wert aus der captionMap.
 void disposeModel()
          Diese Methode "zerstoert" das Modell, in dem es zunaechst gestoppt und dann performModelDispose() aufgerufen wird.
protected  void fireModelDisposed()
          Informiert alle ModelListener darueber, dass das Modell "zerstoert" wurde.
protected  void fireModelEvent(ModelEvent e)
          Informiert alle ModelListener ueber ein Modell-Ereinis.
protected  void fireModelInitialised()
          Informiert alle ModelListener darueber, dass das Modell initialisiert wurde.
protected  void fireModelStarted()
          Informiert alle ModelListener darueber, dass das Modell gestartet wurde.
protected  void fireModelStopped()
          Informiert alle ModelListener darueber, dass das Modell gestoppt wurde.
 ModelContentManager getContentManager()
          Liefert den ContentManager des Modells.
 Class<ModelEvent>[] getEvents()
          Liefert alle Ereignis-Typen, die waehrend des Modellablaufs initiiert werden.
 Component getModelSpecificGUI()
          Liefert immer null.
 ResourceProvider getResourceProvider()
          Liefert den ResourceProvider, der die Uebersetzungen fuer Modell-Ausgaben und modellspezifische GUI verwaltet.
 PrintStream getStatusOut()
          Liefert den Stream fuer Status-Ausgaben des Modells.
 void initModel()
          Initialisiert das Model, indem der Modell-Ablauf gestoppt und performModelInit() aufgerufen wird.
 boolean isDisposed()
          Prueft, ob das Modell (dessen interen Ressourcen) "zerstoert" ist.
 boolean isInitialised()
          Prueft, ob das Modell initialisiert ist - sich also im Ausgangszustand befindet - und bereit ist gestartet zu werden.
 boolean isRunning()
          Prueft, ob das Modell gerade laeuft.
 boolean isStopped()
          Prueft, ob das Modell gestoppt ist.
 void performError()
          Diese Methode wird aufgrufen, wenn ein unerwarteter Fehler bei der Modellierung auftritt, welcher das Beenden der Modellierung zu Folge hat.
abstract  void performModelDispose()
          Implementiert die eigentliche Freigabe der Modell-Ressourcen, indem alle internen Modell-Ressourcen aus dem Speicher geloescht und die externen wieder frei gegeben werden.
abstract  void performModelInit()
          Muss die eigentliche Initialisierung des Modells implementieren und alle internen Modell-Ressourcen auf einen Ausgangszustand zurueck setzen, so dass das Modell komplett neu gestartet werden kann.
abstract  void performModelStart()
          Implementiert den eigentlichen Modellablauf.
protected static void releaseAccess(Access a)
          Gibt ein Lese- oder Schreibrecht wieder frei.
 boolean removeModelListener(ModelListener listener)
          Entfernt einen ModelListener von dem Modell.
 void resetCaptions(Map<String,Object> captionMap)
          Belegt die sprachspezifischen Elemente des Modells (Status-Ausgaben, GUI) neu mit Elementen aus der Map.
 void setStatusOut(PrintStream out)
          Setzt den Stream fuer Status-Ausgaben des Modells.
 boolean startModelling()
          Startet die Modellierung, indem performModelStart() aufgerufen wird.
 void stopModelling()
          Stoppt die Modellierung.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

modelResourceProvider

protected ResourceProvider modelResourceProvider
ResourceProvider fuer modellspezifische Uebersetzungen. Diese Variable ist inital null und muss von der jeweiligen Modell-Implementierung belegt werden!!


statusOut

protected PrintStream statusOut
Ausgabe-Stream fuer Statusausgaben. Standardmaessig auf System.out eingestellt


contManager

protected ModelContentManager contManager
Speichert den ContentManager fuer das Modell. Diese Variable ist initial null und muss von der Implementierung befuellt werden!


listeners

protected Vector listeners
Speichert die Listener fuer das Modell.


stopped

protected boolean stopped
Dieses Flag speichert, ob das Modell gestoppt ist. Wird von startModelling() und stopModelling() gesetzt. Initial true.
Dieses Flag sollte an geeigneter Stelle im Modellablauf abgefragt werden, um z.B. einen Zwischenschritt abzubrechen.


running

protected boolean running
Dieses Flag speichert, ob die Modellierung gerade laeuft. Wird von startModelling() und stopModelling() gesetzt. Initial false.


initialised

protected boolean initialised
Dieses Flag speichert, ob die Modellierung initialisiert ist, also sich alle internen Ressourcen in einem Ausgangszustand befinden. Wird von initModel() und startModelling() gesetzt. Initial false.


disposed

protected boolean disposed
Dieses Flag speichert, ob die internen Modell-Ressourcen "zerstoert" sind. Wird von initModel() und disposeModel() gesetzt. Initial true.


events

protected Vector events
Speichert die Ereignis-Typen, die waehrend des Modellablaufs geworfen werden. Unterklassen koennen diese Liste erweitern.

See Also:
getEvents()
Constructor Detail

AbstractXuluModel

public AbstractXuluModel(ModelContentManager contManager,
                         String name)
Erzeugt ein neues Modell.

Parameters:
contManager - verwaltet die Modell-Ressourcen
name - Bezeichnung fuer das Modell

AbstractXuluModel

public AbstractXuluModel(ModelContentManager contManager)
Erzeugt ein neues Modell.

Parameters:
contManager - verwaltet die Modell-Ressourcen
Method Detail

getContentManager

public ModelContentManager getContentManager()
Liefert den ContentManager des Modells.

Specified by:
getContentManager in interface XuluModel

setStatusOut

public void setStatusOut(PrintStream out)
Setzt den Stream fuer Status-Ausgaben des Modells.

Specified by:
setStatusOut in interface XuluModel

getStatusOut

public PrintStream getStatusOut()
Liefert den Stream fuer Status-Ausgaben des Modells.

Specified by:
getStatusOut in interface XuluModel

initModel

public void initModel()
Initialisiert das Model, indem der Modell-Ablauf gestoppt und performModelInit() aufgerufen wird. Darueberhinaus wird das running-Flag auf false, das stopped-Flag auf true, das initialised-Flag auf true und das disposed-Flag auf false gesetzt.

Specified by:
initModel in interface XuluModel

performModelInit

public abstract void performModelInit()
Muss die eigentliche Initialisierung des Modells implementieren und alle internen Modell-Ressourcen auf einen Ausgangszustand zurueck setzen, so dass das Modell komplett neu gestartet werden kann.


isInitialised

public boolean isInitialised()
Prueft, ob das Modell initialisiert ist - sich also im Ausgangszustand befindet - und bereit ist gestartet zu werden.

Specified by:
isInitialised in interface XuluModel
See Also:
initialised

startModelling

public boolean startModelling()
Startet die Modellierung, indem performModelStart() aufgerufen wird. Desweiteren wird das running-Flag auf true, das initialised-Flag auf false und das stopped-Flag auf false gesesetzt.

Specified by:
startModelling in interface XuluModel
Returns:
false wenn das Modell auf irgendeine Art (kontrolliert oder Fehler) abgebrochen wurde; true nur wenn das Modell komplett durchgelaufen ist

checkBreakingCommands

protected void checkBreakingCommands()
                              throws ModelCanceledException
Prueft, ob das Modell gestoppt ist. Ist dies der Fall wird eine ModelCanceledException geworfen.
Diese Methode sollte an geeigneten Stellen waehrend des Modellablaufs aufgerufen werden, um diesen aufgrund eines externen Befehls abzubrechen. Die Exception wird in der startModelling()-Methode wieder abgefangen.

Throws:
ModelCanceledException - falls das Modell gestoppt ist

performModelStart

public abstract void performModelStart()
Implementiert den eigentlichen Modellablauf. Dies kann z.B. durch einen einfachen Befehlsablauf oder eine Schleife geschehen.


isRunning

public boolean isRunning()
Prueft, ob das Modell gerade laeuft.

Specified by:
isRunning in interface XuluModel
See Also:
running

stopModelling

public void stopModelling()
Stoppt die Modellierung. Diese Implementierung setzt lediglich das running-Flag auf false und das stopped-Flag auf true.
Die Implementierung muss (in performModelStart()) selbst auf isStopped() oder das stopped-Flag checken, um eine Schleife oder zeitaufwaendige Zwischenschritte abzubrechen.

Specified by:
stopModelling in interface XuluModel

isStopped

public boolean isStopped()
Prueft, ob das Modell gestoppt ist.

Specified by:
isStopped in interface XuluModel
See Also:
stopped

disposeModel

public void disposeModel()
Diese Methode "zerstoert" das Modell, in dem es zunaechst gestoppt und dann performModelDispose() aufgerufen wird. Desweiteren wird das disposed-Flag auf true gesetzt.

Specified by:
disposeModel in interface XuluModel

performModelDispose

public abstract void performModelDispose()
Implementiert die eigentliche Freigabe der Modell-Ressourcen, indem alle internen Modell-Ressourcen aus dem Speicher geloescht und die externen wieder frei gegeben werden.


isDisposed

public boolean isDisposed()
Prueft, ob das Modell (dessen interen Ressourcen) "zerstoert" ist.

Specified by:
isDisposed in interface XuluModel
See Also:
disposed

performError

public void performError()
Diese Methode wird aufgrufen, wenn ein unerwarteter Fehler bei der Modellierung auftritt, welcher das Beenden der Modellierung zu Folge hat. Diese Implementierung ruft lediglich disposeModel() auf.

Specified by:
performError in interface XuluModel

addModelListener

public boolean addModelListener(ModelListener listener)
Fuegt einen ModelListener hinzu.

Specified by:
addModelListener in interface XuluModel
Parameters:
listener - neuer ModelListener
Returns:
true wenn dass Hinzufuegen erfolgreich war (siehe Vector.add(Object))

removeModelListener

public boolean removeModelListener(ModelListener listener)
Entfernt einen ModelListener von dem Modell.

Specified by:
removeModelListener in interface XuluModel
Parameters:
listener - zu entfernender ModelListener
Returns:
true wenn dass Entfernen erfolgreich war (siehe Vector.remove(Object))

fireModelEvent

protected void fireModelEvent(ModelEvent e)
Informiert alle ModelListener ueber ein Modell-Ereinis.


fireModelInitialised

protected void fireModelInitialised()
Informiert alle ModelListener darueber, dass das Modell initialisiert wurde.


fireModelStarted

protected void fireModelStarted()
Informiert alle ModelListener darueber, dass das Modell gestartet wurde.


fireModelStopped

protected void fireModelStopped()
Informiert alle ModelListener darueber, dass das Modell gestoppt wurde.


fireModelDisposed

protected void fireModelDisposed()
Informiert alle ModelListener darueber, dass das Modell "zerstoert" wurde.


getModelSpecificGUI

public Component getModelSpecificGUI()
Liefert immer null. Sub-Klassen koennen diese Methode ueberschreiben und eine spezielle (zusaetzliche) Modell-GUI zurueck geben.

Specified by:
getModelSpecificGUI in interface XuluModel
Returns:
null wenn das Modell keine zusaetzliche GUI zur Verfuegung stellt

getEvents

public Class<ModelEvent>[] getEvents()
Liefert alle Ereignis-Typen, die waehrend des Modellablaufs initiiert werden.

Specified by:
getEvents in interface XuluModel
Returns:
leerer Array, falls keine Ereignisse initiiert werden

releaseAccess

protected static void releaseAccess(Access a)
Gibt ein Lese- oder Schreibrecht wieder frei. Dabei wird zunaechst geprueft, ob das uebergebene Objekt nicht null ist.


getResourceProvider

public ResourceProvider getResourceProvider()
Liefert den ResourceProvider, der die Uebersetzungen fuer Modell-Ausgaben und modellspezifische GUI verwaltet.

Specified by:
getResourceProvider in interface XuluModel
Returns:
null, wenn das Modell nicht multi-lingual ist

resetCaptions

public void resetCaptions(Map<String,Object> captionMap)
Belegt die sprachspezifischen Elemente des Modells (Status-Ausgaben, GUI) neu mit Elementen aus der Map. Diese Standard-Implementierung macht nichts, ausser die resetCaptions-Methode des Content-Managers und der modell-spez. GUI aufzurufen, sofern diese CaptionsChangeable sind.

Parameters:
captionMap - Label-Beschreibungen

determineCaption

public static String determineCaption(Map<String,Object> captionMap,
                                      ResourceProvider rp,
                                      String captionKey,
                                      Object... captionParams)
Ermittelt einn String-Wert aus der captionMap. Wenn dort kein Wert hinterlegt ist, wird auf den ResourceProvider zurueckgegriffen.

Parameters:
captionMap - Map mit neuen Bezeichnungen
rp - ResourceProvider
captionKey - Key unter dem in der Map und im ResourceProvider gesucht wird
captionParams - Parameter, die durch den ResourceProvider in die Caption "eingebaut" werden
See Also:
ResourceProvider#getString(String, Object...)