vips.model
Class Anweisung

java.lang.Object
  extended by vips.model.UIElement
      extended by vips.model.Anweisung
All Implemented Interfaces:
Beobachtbar
Direct Known Subclasses:
AufrufAnweisung, BreakAnweisung, ContinueAnweisung, IfAnweisung, SchleifenAnweisung, SwitchAnweisung, ZuweisungsAnweisung

public abstract class Anweisung
extends UIElement
implements Beobachtbar

Abstrakte Basisklasse für alle Anweisungen.
Eine Anweisung ist in einem AnweisungsContainer enthalten und kann ausgeführt werden.
Konkrete Subklassen müssen toXMLElement und getXMLTagName überschreiben und folgenden Konstruktor anbieten: Anweisung(Element xmlElement)

Events:
Keine


Field Summary
protected  ChangeListenerSammlung listeners
           
protected  EventWeiterleiter weiterleitung
           
 
Fields inherited from class vips.model.UIElement
RAND
 
Constructor Summary
Anweisung(AnweisungsContainer vater, int index)
          Erzeugt eine neue Anweisung in dem gegebenen Container, der allerdings auch null sein kann.
 
Method Summary
(package private)  void ausfuehren(java.lang.Object einzelschrittLock)
          Führt diese Anweisung aus.
 void changeListenerEntfernen(ChangeListener l)
          Entfernt den Listener l aus der Liste der Listener dieses Objektes.
 void changeListenerHinzufuegen(ChangeListener l)
          Fügt den Listener l der Sammlung der Listener dieses Objekts hinzu.
static Anweisung createFromXMLElement(org.jdom.Element xmlElement)
          Diese statische Methode konstruiert, in Abhängigkeit vom Namen des XML-Elements ein Anweisungs-Objekt und gibt es zurück.
(package private)  Anweisung getAnweisungAnPos(org.eclipse.swt.graphics.Point pos)
          Gibt die Anweisung zurück, die sich an der Position pos befindet (relativ zur oberen linken Ecke des Struktogamms).
 AnweisungsContainer getContainer()
          Gibt den Container zurück, in dem diese Anweisung enthalten ist oder null.
 Projekt getProjekt()
          Gibt das Projekt zurück, zu dem diese Anweisung gehört.
 Struktogramm getStruktogramm()
          Gibt das Struktogramm zurück, zu dem diese Anweisung gehört.
static java.lang.String getXMLTagName()
          Gibt den Namen des Tags zurück, den diese Anweisung verwendet, um sich in eine XML-Datei zu schreiben oder rauszulesen, sollte von Subklassen überschrieben werden.
(package private)  void pruefen(java.util.Collection fehler, BenamterWertSammlung variablen)
          Diese Methode prüft, ob in der Anweisung ein Fehler drin ist, der bereits zur Entwicklungszeit festegestellt werden kann, wie ein fehlerhafter Ausdruck oder ein unbekannter Bezeichner.
 void setContainer(AnweisungsContainer ac, int index)
          Setzt den container, in dem diese Anweisung drin ist.
abstract  org.jdom.Element toXMLElement()
          Wandelt diese Anweisung in ein entsprechendes XML-Tag um.
 
Methods inherited from class vips.model.UIElement
berechneBevorzugteGroesse, getBreite, getGroesse, getHintergrund, getHoehe, getPos, getX, getY, hintergrundZuruecksetzen, hoeheAnpassen, setBreite, setGroesse, setHintergrund, setHoehe, setPos, zeichne
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

listeners

protected ChangeListenerSammlung listeners

weiterleitung

protected EventWeiterleiter weiterleitung
Constructor Detail

Anweisung

public Anweisung(AnweisungsContainer vater,
                 int index)
Erzeugt eine neue Anweisung in dem gegebenen Container, der allerdings auch null sein kann.

Throws:
java.lang.IllegalArgumentException - Wenn index ungültig ist.
Method Detail

createFromXMLElement

public static Anweisung createFromXMLElement(org.jdom.Element xmlElement)
                                      throws FalschesDateiFormatException
Diese statische Methode konstruiert, in Abhängigkeit vom Namen des XML-Elements ein Anweisungs-Objekt und gibt es zurück.
Die Anweisung ist in keinem Container drin.
Wenn keine Anweisung bekannt ist, die mit diesem Element umgehen kann, wird null zurückgegeben.

Throws:
FalschesDateiFormatException

ausfuehren

void ausfuehren(java.lang.Object einzelschrittLock)
          throws BreakException,
                 ContinueException,
                 LaufzeitException,
                 TerminateException
Führt diese Anweisung aus.
Diese Methode wird von Subklassen überschrieben, um sinnvolles zu tuen. Es sollte trotzdem immer super.ausfuehren aufgerufen werden, da diese Methode hier prüft, ob die Hirarchie von dieser Anweisung hoch bis zum Projekt ununterbrochen ist. Mit anderen Worten: Ob es möglich ist, einen Verweis auf das Projekt zu bekommen, in dem diese Anweisung drin ist. Dies ist wichtig, damit eine Anweisung Zugriff auf lokale Variablen und die anderen Struktogramme dieses Projekts hat.
Außerdem wird hier geprüft, ob der Ausführungsthread mit Thread.interrupt unterbrochen wurde, dann wird eine TerminateException ausgelöst.

Parameters:
einzelschrittLock - Wenn ungleich null, ruft die Anweisung am Anfang auf dieses Objekt einzelschrittLock.wait auf.
Throws:
BreakException - Wird von einer BreakAnweisung geworfen, um die umgebende Schleife zu beenden.
ContinueException - Wird von einer ContinueAnweisung geworfen, um zum Anfang eines Schleifenrumpfs zu springen.
LaufzeitException - Bei einem Laufzeitfehler
TerminateException - Wenn der Ausführungsthread unterbrochen wurde.
java.lang.RuntimeException - Wenn die Anweisung keinem Projekt "zugehörig" ist

pruefen

void pruefen(java.util.Collection fehler,
             BenamterWertSammlung variablen)
Diese Methode prüft, ob in der Anweisung ein Fehler drin ist, der bereits zur Entwicklungszeit festegestellt werden kann, wie ein fehlerhafter Ausdruck oder ein unbekannter Bezeichner.
Die Methode fügt alle gefundenen Fehler der Collection fehler als Objekte vom Typ Fehler hinzu. Die Methode prüft auch alle eventuellen Unter-Anweisungen.
Um Variablen aufzulösen, dürfen NICHT die lokalen Variablen die des Struktogramms verwendet werden, da diese zur Entwicklungszeit ja noch nicht existieren. Die deklarierten Variablen sind aber ebenfalls falsch, da in diesen die Parameter und Rückgabevariablen noch nicht enthalten sind.

Throws:
java.lang.IllegalArgumentException - Wenn fehler oder variablen null ist
java.lang.RuntimeException - Wenn die Anweisung zu keinem Projekt gehört

getStruktogramm

public Struktogramm getStruktogramm()
Gibt das Struktogramm zurück, zu dem diese Anweisung gehört.
Dazu fragt die Anweisung ihren Container nach seinem Struktogramm usw. Wenn die Anweisung keinen Vater-Container hat, gibt sie null zurück

Returns:
Das Struktogramm dieser Anweisung oder null, wenn es nicht zu bekommen ist, d.h. nicht existiert

getProjekt

public Projekt getProjekt()
Gibt das Projekt zurück, zu dem diese Anweisung gehört.
Wenn die Anweisung in keinem Projekt drin ist, wird null zurückgegeben.


setContainer

public void setContainer(AnweisungsContainer ac,
                         int index)
Setzt den container, in dem diese Anweisung drin ist.
Falls sie vorher schon in einem Container enthalten war, meldet sie sich dort ab und bei dem neuen an.
Der neue Container kann auch null sein.

Parameters:
ac - Der neue Papa
index - Der index im Container
Throws:
java.lang.IllegalArgumentException - Wenn index ungültig ist.

getContainer

public AnweisungsContainer getContainer()
Gibt den Container zurück, in dem diese Anweisung enthalten ist oder null.


changeListenerHinzufuegen

public void changeListenerHinzufuegen(ChangeListener l)
Fügt den Listener l der Sammlung der Listener dieses Objekts hinzu.

Specified by:
changeListenerHinzufuegen in interface Beobachtbar
Throws:
java.lang.IllegalArgumentException - Wenn l null ist

changeListenerEntfernen

public void changeListenerEntfernen(ChangeListener l)
Entfernt den Listener l aus der Liste der Listener dieses Objektes.
Wenn l nicht in der Sammlung drin ist, passiert nix.

Specified by:
changeListenerEntfernen in interface Beobachtbar
Throws:
java.lang.IllegalArgumentException - Wenn l null ist

toXMLElement

public abstract org.jdom.Element toXMLElement()
Wandelt diese Anweisung in ein entsprechendes XML-Tag um.
Implementierende Klassen dürfen auch null zurückgeben, damit zeigen sie an, dass sie nicht geschrieben werden sollen/brauchen, z.B. die LeereAnweisung.


getXMLTagName

public static java.lang.String getXMLTagName()
Gibt den Namen des Tags zurück, den diese Anweisung verwendet, um sich in eine XML-Datei zu schreiben oder rauszulesen, sollte von Subklassen überschrieben werden.
Es darf auch null zurückgegeben werden, dann wird angenommen, dass diese Anweisung sich nicht schreibt, dh auch toXMLElement null zurückgeben würde


getAnweisungAnPos

Anweisung getAnweisungAnPos(org.eclipse.swt.graphics.Point pos)
Gibt die Anweisung zurück, die sich an der Position pos befindet (relativ zur oberen linken Ecke des Struktogamms).
Diese Implementation prüft nur, ob pos im Client-Bereich des Elements liegt. Wenn ja, gibt sich selber zurück, sonst null.

Specified by:
getAnweisungAnPos in class UIElement
Returns:
Die Anweisung an dieser Stelle oder null, wenn pos nicht im Client-Bereich des Elements liegt.