de.jsystems.framework.common
Class Item

java.lang.Object
  extended byde.jsystems.framework.common.Item
All Implemented Interfaces:
Serializable
Direct Known Subclasses:
DynamicItem, TableItem, TreeItem

public abstract class Item
extends Object
implements Serializable

Ein Item ist ein Eintrag in einem Model. Das Item sollte nur Attribute besitzen sowie entsprechende get-/set-Methoden. Diese werden für die einzelnen Views ausgewertet, damit die Einträge automatisch in der View angezeigt werden koennen. Des weiteren sollten abgeleitete Klassen immer zwei Konstruktoren zu Verfuegung stellen, wobei einer Parameterlos ist und der andere einen String als Parameter erwartet. Diese Konstruktoren sollten dann auch einen entsprechenden super()-Aufruf enthalten, mit dem die Parameter weiter gegeben werden. Damit ist sichergestellt, das die Methoden createNewItem() und createNewItem(String) im BusinessModel korrekt funktionieren. Die Attribute sollten registriert werden, damit die View die Eingabefelder entsprechend schalten bzw. Mußfelder auf Eingabe prüfen kann. Mußfelder werden nur auf Existenz abgefragt. Ob die Eingabe selbst richtig ist, muß in der View entsprechend geprüft werden (z. B. ueber den ViewItemValidator). Damit alles richtig funktioniert, sollten also alle Mußfelder sowie nicht editierbare Felder und nicht sichtbare Felder registriert werden. Wenn ein Feld mehr als eine Eigenschaft hat(z.B. sichtbar aber nicht editierbar) müssen beim registrieren die entsprechenden Attribute verknüpft werden. Dazu sind in der Klasse schon entsprechende Konstanten definiert, womit man sich das selbstverknuepfen sparen kann. Bei den Eigenschaftsfeldern der Klasse handelt es sich um Objekte vom Typ BitSet. Das erlaubt sehr komfortable Abbildungen der Eigenschaften. Die Eigenschaften eines Attributes beziehen sich nur auf die Art der Anzeige in einer View. Die Funktionalität der get/set-Methoden wird dadurch nicht geändert. Ein in der Anzeige nicht Editierbares Feld kann durch den Aufruf der entsprechenden set-Methode also sehr wohl geändert werden. Nicht registrierte Attribute haben automatisch die folgenden Eigenschaften:

  • Sichtbar
  • Editierbar
  • Kein Mussfeld
    Somit ist eigentlich klar, das Attribute nur dann registriert werden müssen, wenn sie
  • nicht sichtbar,
  • nicht editierbar oder
  • Mussfelder
    sein sollen.

    Jedes Item hat auch eine eindeutige ID. Diese wird mit einer Hilfsklasse erzeugt. Diese ID kann von aussen nicht gesetzt, sondern nur gelesen werden. Diese ID wird von den Models benötigt, um ein Item eindeutig zu identifizieren, z.B. beim löschen oder ersetzen. Alternativ kann die ID auch beim erzeugen des Items übergeben werden. Dann muß aber dafür gesorgt werden, das diese ID eindeutig ist, da es sonst beim abspeichern in einem Model Probleme geben kann.

    Die Id eines Items ist das einzige Attribut, das in der Methode equals(Object) verglichen wird.

    Alle Attribute eines Item sollten immer das Interface Serializable implementieren, damit Items auch gespeichert werden koennen. Ausserdem setzt die Methode deepCopy() das voraus.

    Version:
    1.0
    Copyright by Jens Homm 2001 - 2003
    Author:
    Jens Homm JSYSTEMS
    See Also:
    Serialized Form

    Field Summary
    static BitSet DISABLE
              Attribute mit dieser Eigenschaft können in einer View nicht Editiert werden.
    static BitSet DISABLE_MUSSFELD
              Attribute mit dieser Eigenschaft sind Mußfelder die in einer View nicht Editiert werden können.
    static BitSet INVISIBLE
              Attribute mit dieser Eigenschaft sind in einer View nicht sichtbar.
    static BitSet INVISIBLE_MUSSFELD
              Attribute mit dieser Eigenschaft sind Mußfelder die in einer View nicht sichtbar sind.
    static BitSet MUSSFELD
              Attribute mit dieser Eigenschaft sind Mußfelder.
    static BitSet STANDARD
              Eigenschaften die jedes Attribut hat, auch wenn es nicht registriert wird.
     
    Constructor Summary
    Item()
              Erzeugt ein neues Item.
    Item(String itemID)
              Erzeugt ein neues Item.
    Item(String itemID, String name)
              Erzeugt ein neues Item.
     
    Method Summary
     Item deepCopy()
              Diese Methode erzeugt eine Kopie des Items.
     boolean equals(Object obj)
              Diese Methode vergleicht die ItemID von diesem Objekt mit der ItemID des übergebenen Objektes.
     String getItemID()
              Gibt die ID dieses Items zurück.
     String getName()
              Gibt den Namen des Items zurück.
     boolean isAttributeEditable(String attribName)
              Ermittelt zu einem Attribut ob es editierbar ist oder nicht.
     boolean isAttributeMussfeld(String attribName)
              Ermittelt zu einem Attribut ob es ein Mussfeld ist oder nicht.
     boolean isAttributeVisible(String attribName)
              Ermittelt zu einem Attribut ob es sichtbar ist oder nicht.
     void registerAttribute(String attribName, BitSet property)
              Registriert ein Attribut des Items.
     void setName(String name)
              Setzt den Namen für dieses Item.
     String toString()
              Gibt den Namen des Items zurück.
     
    Methods inherited from class java.lang.Object
    clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    STANDARD

    public static final BitSet STANDARD
    Eigenschaften die jedes Attribut hat, auch wenn es nicht registriert wird. Das Attribut ist sichtbar und editierbar, aber kein Mussfeld.


    DISABLE

    public static final BitSet DISABLE
    Attribute mit dieser Eigenschaft können in einer View nicht Editiert werden. Das Attribut ist sichtbar, aber nicht editierbar und kein Mussfeld.


    INVISIBLE

    public static final BitSet INVISIBLE
    Attribute mit dieser Eigenschaft sind in einer View nicht sichtbar. Das Attribut ist nicht sichtbar, nicht editierbar und kein Mussfeld.


    MUSSFELD

    public static final BitSet MUSSFELD
    Attribute mit dieser Eigenschaft sind Mußfelder. Das Attribut ist sichtbar, editierbar und ein Mussfeld.


    DISABLE_MUSSFELD

    public static final BitSet DISABLE_MUSSFELD
    Attribute mit dieser Eigenschaft sind Mußfelder die in einer View nicht Editiert werden können. Das Attribut ist sichtbar, nicht editierbar und ein Mussfeld.


    INVISIBLE_MUSSFELD

    public static final BitSet INVISIBLE_MUSSFELD
    Attribute mit dieser Eigenschaft sind Mußfelder die in einer View nicht sichtbar sind. Das Attribut ist nicht sichtbar, nicht editierbar und ein Mussfeld.

    Constructor Detail

    Item

    public Item()
    Erzeugt ein neues Item. Hier werden auch die Einstellungen zu den einzelnen Eigenschaften der Attribute vorgenommen. Fuer das Item wird eine eindeutige ID generiert. Der Name des Items ist leer.


    Item

    public Item(String itemID)
    Erzeugt ein neues Item. Die ID des Items wird durch den Parameter festgelegt. Der Aufrufer des Konstruktors muß dafür sorgen, das diese ID eindeutig ist. Wird hier NULL oder ein Leerstring uebergeben, so wird eine IllegalArgumentException ausgeloest.

    Parameters:
    itemID - Die eindeutige ID für das Item.

    Item

    public Item(String itemID,
                String name)
    Erzeugt ein neues Item. Dabei wird die ID und der Name des Items festgelegt. Der Aufrufer des Konstruktors muß dafür sorgen, das die ID eindeutig ist, da es sonst in den Models zu Problemen kommen kann. Wird fuer die ID NULL oder ein Leerstring uebergeben, so wird eine IllegalArgumentException ausgeloest.

    Parameters:
    itemID - Die eindeutige ID für das Item.
    name - Der name des Items.
    Method Detail

    setName

    public void setName(String name)
    Setzt den Namen für dieses Item.

    Parameters:
    name - Der Name des Items.

    getName

    public String getName()
    Gibt den Namen des Items zurück.

    Returns:
    Der Name des Items.

    getItemID

    public String getItemID()
    Gibt die ID dieses Items zurück. Diese ID sollte eindeutig sein. Wenn die ID vom Item selbst generiert wurde, dann ist sie eindeutig.

    Returns:
    Die ID des Items.

    registerAttribute

    public void registerAttribute(String attribName,
                                  BitSet property)
    Registriert ein Attribut des Items. Damit wird festgelegt, ob das Attribut in einer View editiert werden kann odr nicht und ob es überhaupt sichtbar ist und ob es ein Mußfeld ist. Falls ein Attribut mehrmals registriert wird, wird nur die letzte Registrierung übernommen. Beim registrieren wird zwischen Groß- und Kleinschreibung nicht unterschieden. Die Attributnamen müssen also Eindeutig sein. Es wird nicht ueberprueft, ob die Klasse wirklich ein Attribut mit diesem Namen hat! Wird also ein falscher Name uebergeben, so faellt das erstmal nicht auf. Erst wenn sich die Oberflaeche nicht wie erwartet verhaelt, sollte man nochmal alle Aufrufe dieser Methode ueberpruefen.

    Parameters:
    attribName - Der Name des Attributes. Dieser entspricht der zugehörigen get/set-Methode ohne das get/set vornedran. Gross/Kleinschreibung wird nicht unterschieden.
    property - Die Eigenschaft für das zu registrierende Attribut. Erlaubt sind hier nur die Werte:
  • STANDARD
  • DISABLE
  • INVISIBLE
  • MUSSFELD
  • DISABLE_MUSSFELD
  • INVISIBLE_MUSSFELD
    Es handelt sich hierbei um Konstanten aus der Klasse Item.

  • isAttributeEditable

    public boolean isAttributeEditable(String attribName)
    Ermittelt zu einem Attribut ob es editierbar ist oder nicht. Falls das übergebene Attribut nicht registriert wurde, ist es immer editierbar.

    Parameters:
    attribName - Der Name des Attributes.
    Returns:
    true, wenn das Attribut editierbar ist, ansonsten false.

    isAttributeMussfeld

    public boolean isAttributeMussfeld(String attribName)
    Ermittelt zu einem Attribut ob es ein Mussfeld ist oder nicht. Falls das übergebene Attribut nicht registriert wurde, ist es kein Mußfeld.

    Parameters:
    attribName - Der Name des Attributes.
    Returns:
    true, wenn das Attribut ein Mußfeld ist, ansonsten false.

    isAttributeVisible

    public boolean isAttributeVisible(String attribName)
    Ermittelt zu einem Attribut ob es sichtbar ist oder nicht. Falls das übergebene Attribut nicht registriert wurde, ist es immer sichtbar.

    Parameters:
    attribName - Der Name des Attributes.
    Returns:
    true, wenn das Attribut sichtbar ist, ansonsten false.

    equals

    public boolean equals(Object obj)
    Diese Methode vergleicht die ItemID von diesem Objekt mit der ItemID des übergebenen Objektes. Dafür muß natürlich der übergebene Parameter eine Instanz der Klasse Item sein. Wenn null übergeben wird, oder ein Objekt, das nicht vom Typ Item ist, wird immer false zurückgegeben.

    Parameters:
    obj - Das Objekt, das mit diesem Objekt verglichen werden soll.
    Returns:
    true, wenn der übergebene Parameter vom Typ Item ist und die gleiche ItemID enthält wie das Objekt, sonst false.

    toString

    public String toString()
    Gibt den Namen des Items zurück.

    Returns:
    Der Name des Items.

    deepCopy

    public Item deepCopy()
                  throws DeepCopyException
    Diese Methode erzeugt eine Kopie des Items. Im Gegensatz zur Methode clone() wird hier aber keine Referenzkopie angelegt, sondern eine echte Kopie. Das kopierte Item hat danach die gleichen Werte und Attribute wie das Original, aber eine Aenderung des Originalitems hat keine Auswirkung auf die Kopie und umgekehrt. Bei Benutzung der Methode clone() waere das nicht so, da hier nur eine flache Kopie erzeugt wird, also lediglich die Referenzzeiger dupliziert werden, nicht aber der Wert an sich.

    Deshalb implementiert die Klasse Item auch nicht die Methode clone(), da so keine echte Kopie angelegt werden koennte. Und im ViewItemValidator wird eine tiefe Kopie benoetigt, um bei der Eingabepruefung nicht die Werte im eigentlichen Item zu aenderen.

    Die Methode deepCopy() setzt voraus, das alle Attribute im Item selbst serialisierbar sind. Darauf ist besonders in abgeleiteten Klassen zu achten, da ansonsten der Aufruf dieser Methode fehlschlaegt.

    Returns:
    Eine tiefe Kopie dieses Items.
    Throws:
    DeepCopyException - wenn beim kopieren ein Fehler auftritt.
    See Also:
    Object.clone(), Cloneable