Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## de.jsystems.framework.common
Class Item

    java.lang.Object
      de.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`

  Overview | Package | Class | Use | Tree | Deprecated | Index | Help
  PREV CLASS NEXT CLASS | FRAMES NO FRAMES
  SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD