de.jsystems.framework.tree
Class TreeItem

java.lang.Object
  extended byde.jsystems.framework.common.Item
      extended byde.jsystems.framework.tree.TreeItem
All Implemented Interfaces:
MutableTreeNode, Serializable, TreeNode

public class TreeItem
extends Item
implements MutableTreeNode

Basisklasse fuer Items die in einem Baum dargestellt werden sollen. Im Baum wird bei diesen Items nicht der Name eines gesetzten UserObject angezeigt, sondern der Wert des Attributes Item.getName() aus dem Item. Deshalb kann ohne den Namen auch kein TreeItem-Objekt erzeugt werden. Ein UserObject kann hier trotzdem gesetzt werden ueber die Methode setUserObject(Object). Ansonsten enthaelt dieses Item keine weiteren Attribute, sndern nur noch verschiedene Methoden um einen Baum aufzubauen. Dazu gehoeren die Methoden zum hinzufuegen oder loeschen eines Items(Knoten) in einem anderen Item(Knoten). Objekte dieser Klasse koennen auch in einem normalen JTree angezeigt werden, da sie das Interface MutableTreeNode implementieren. Hierbei aber natuerlich unter der Voraussetzung, das Items, die dieser Klasse hinzugefuegt werden sebst wieder vom Typ TreeItem sind. Das wird in den entsprechenden Methoden auch abgefragt.

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

Field Summary
protected  boolean allowsChildren
          Sind Kindobjekte für dieses Item erlaubt?
protected  LinkedList children
          Liste aller Kindobjekte zu diesem Item oder null, wenn keine Kindobjekte erlaubt sind.
protected  TreeItem parent
          Elternobjekt für dieses Item oder null, wenn es kein Elternobjekt gibt.
protected  Object userObject
          UserObject für dieses Item
 
Fields inherited from class de.jsystems.framework.common.Item
DISABLE, DISABLE_MUSSFELD, INVISIBLE, INVISIBLE_MUSSFELD, MUSSFELD, STANDARD
 
Constructor Summary
TreeItem(String name)
          Erzeugt ein neues TreeItem-Objekt.
TreeItem(String name, boolean allowsChildren)
          Erzeugt ein neues TreeItem-Objekt.
TreeItem(String name, Object userObject)
          Erzeugt ein neues TreeItem-Objekt.
TreeItem(String name, Object userObject, boolean allowsChildren)
          Erzeugt ein neues TreeItem-Objekt.
TreeItem(String name, Object userObject, boolean allowsChildren, TreeItem parent)
          Erzeugt ein neues TreeItem-Objekt.
TreeItem(String name, String itemId)
          Erzeugt ein neues TreeItem.
 
Method Summary
 Enumeration children()
          Gibt eine Enumeration mit allen Einträgen diesen Items zurück.
 boolean containsRekurChild(TreeNode node)
          Durchläuft alle Elemente dieses Items und prüft, ob irgendein Element den übergebenen Knoten enthält.
 boolean getAllowsChildren()
          Gibt true zurück, wenn dieses Item weitere Einträge erlaubt.
 TreeNode getChildAt(int index)
          Gibt das Element am uebergebenen Index zurück.
 int getChildCount()
          Gibt die Anzahl enthaltener Elemente in diesem Item zurück.
 int getIndex(TreeNode node)
          Gibt den Index des übergebenen Elements zurück.
 TreeNode getParent()
          Gibt das ELternobjekt für dieses Item zurück.
 TreeNode getRoot()
          Gibt den Rootknoten zu diesem Item zurück.
 Object getUserObject()
          Gibt das UserObjekt fuer dieses Item zurück.
 void insert(MutableTreeNode child, int index)
          Setzt einen neuen Eintrag für dieses Item.
 boolean isLeaf()
          Gibt true zurück, wenn dieses Item keine weiteren Einträge enthält.
 boolean isNodeAncestor(TreeNode node)
          Gibt true zurück, wenn der übergebene Knoten ein Elternobjekt von diesem (oder ein Elternobjekt vom Elternobjekt von diesem TreeItem...)
 boolean isNodeChild(TreeNode node)
          Gibt true zurück, wenn der übergebene Knoten ein Element von diesem Item ist.
 boolean isNodeDescendant(TreeNode node)
          Gibt true zurück, wenn der übergebene Knoten ein Kindelement von diesem Item ist.
 boolean isNodeRelated(TreeNode node)
          Gibt true zurück, wenn der übergebene Knoten sich im selben Baum befindet wie dieses Item.
 boolean isRoot()
          Gibt true zurück, wenn es sich bei diesem Item um den Root-Knoten handelt.
 void remove(int index)
          Löscht den Eintrag aus dem Baum am uebergebenen Index.
 void remove(MutableTreeNode node)
          Loescht das uebergebene Item aus diesem Knoten.
 void removeFromParent()
          Löscht dieses Item aus seinem Elternknoten.
 void setParent(MutableTreeNode parent)
          Setzt den Elternknoten für dieses Item.
 void setUserObject(Object userObject)
          Setzt das UserObjekt fuer dieses Item.
 String toString()
          Gibt den Namen des Items zurück.
 
Methods inherited from class de.jsystems.framework.common.Item
deepCopy, equals, getItemID, getName, isAttributeEditable, isAttributeMussfeld, isAttributeVisible, registerAttribute, setName
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

userObject

protected Object userObject
UserObject für dieses Item


allowsChildren

protected boolean allowsChildren
Sind Kindobjekte für dieses Item erlaubt?


parent

protected TreeItem parent
Elternobjekt für dieses Item oder null, wenn es kein Elternobjekt gibt.


children

protected LinkedList children
Liste aller Kindobjekte zu diesem Item oder null, wenn keine Kindobjekte erlaubt sind.

Constructor Detail

TreeItem

public TreeItem(String name)
Erzeugt ein neues TreeItem-Objekt. Dieses hat den uebergebenen Namen. Kindknoten sind fuer diesen Knoten erlaubt. Der Knoten hat noch keinen Elternknoten. Dieser kann durch die Methode setParent(MutableTreeNode) gesetzt werden.

Der Name darf nicht NULL oder leer sein.

Parameters:
name - Der Name fuer den Knoten.

TreeItem

public TreeItem(String name,
                boolean allowsChildren)
Erzeugt ein neues TreeItem-Objekt. Dieses hat den uebergebenen Namen. Ob Kindknoten fuer diesen Knoten erlaubt sind wird durch den Wert des Parameters allowsChildren festgelegt. Wenn er den Wert true hat, sind Kindknoten erlaubt, ansonsten nicht. Der Knoten hat noch keinen Elternknoten. Dieser kann durch die Methode setParent(MutableTreeNode) gesetzt werden.

Der Name darf nicht NULL oder leer sein.

Parameters:
name - Der Name fuer den Knoten.
allowsChildren - Legt fest, ob Kindknoten fuer diesen Knoten erlaubt sind oder nicht.

TreeItem

public TreeItem(String name,
                Object userObject)
Erzeugt ein neues TreeItem-Objekt. Dieses hat den uebergebenen Namen. Kindknoten sind fuer diesen Knoten erlaubt. Hier wird auch schon gleich das UserObject fuer den Knoten uebergeben. Dieses kann von einem beliebigen Typ sein. Der Knoten hat noch keinen Elternknoten. Dieser kann durch die Methode setParent(MutableTreeNode) gesetzt werden.

Der Name darf nicht NULL oder leer sein.

Parameters:
name - Der Name fuer den Knoten.
userObject - Das von diesem Knoten verwaltete UserObject.

TreeItem

public TreeItem(String name,
                Object userObject,
                boolean allowsChildren)
Erzeugt ein neues TreeItem-Objekt. Dieses hat den uebergebenen Namen. Ob Kindknoten fuer diesen Knoten erlaubt sind wird durch den Wert des Parameters allowsChildren festgelegt. Wenn er den Wert true hat, sind Kindknoten erlaubt, ansonsten nicht. Zusaetzlich wird auch schon gleich das UserObject fuer den Knoten uebergeben. Dieses kann von einem beliebigen Typ sein. Der Knoten hat noch keinen Elternknoten. Dieser kann durch die Methode setParent(MutableTreeNode) gesetzt werden.

Der Name darf nicht NULL oder leer sein.

Parameters:
name - Der Name fuer den Knoten.
userObject - Das von diesem Knoten verwaltete UserObject.
allowsChildren - Legt fest, ob Kindknoten fuer diesen Knoten erlaubt sind oder nicht.

TreeItem

public TreeItem(String name,
                Object userObject,
                boolean allowsChildren,
                TreeItem parent)
Erzeugt ein neues TreeItem-Objekt. Dieses hat den uebergebenen Namen. Ob Kindknoten fuer diesen Knoten erlaubt sind wird durch den Wert des Parameters allowsChildren festgelegt. Wenn er den Wert true hat, sind Kindknoten erlaubt, ansonsten nicht. Zusaetzlich wird auch schon gleich das UserObject fuer den Knoten uebergeben. Dieses kann von einem beliebigen Typ sein. Der Knoten bekommt hier gleich seinen Elternknoten uebergeben. Damit befindet sich dieser Knoten in der Hirarchie des Baumes unterhalb des uebergebenen Elternknotens. Fuer den Knoten darf aber auch NULL uebergeben werden. Dann gibt es keinen Elternknoten. Dieser kann dann durch die Methode setParent(MutableTreeNode) gesetzt werden.

Der Name darf nicht NULL oder leer sein.

Parameters:
name - Der Name fuer den Knoten.
userObject - Das von diesem Knoten verwaltete UserObject.
allowsChildren - Legt fest, ob Kindknoten fuer diesen Knoten erlaubt sind oder nicht.
parent - Der Elternknoten fuer diesen Knoten.

TreeItem

public TreeItem(String name,
                String itemId)
Erzeugt ein neues TreeItem. Dieses hat den uebergebenen Namen. Der Aufrufer muss dafuer sorgen, das die uebergebene ID eindeutig ist. Ansonsten kann es zu Problemen bei der Verwaltung der Items im Model kommen. Fuer dieses Item sind Kindknoten erlaubt. Der Knoten hat noch keinen Elternknoten. Dieser kann durch die Methode setParent(MutableTreeNode) gesetzt werden.

Werder der uebergebene Name noch die ID duerfen NULL oder leer sein.

Parameters:
itemId - Eine eindeutige ID fuer das Item.
name - Der Name fuer den Knoten.
Method Detail

isLeaf

public boolean isLeaf()
Gibt true zurück, wenn dieses Item keine weiteren Einträge enthält.

Specified by:
isLeaf in interface TreeNode
Returns:
true, wenn keine weiteren Einträge in diesem Item vorhanden sind, ansonsten false.

getChildAt

public TreeNode getChildAt(int index)
Gibt das Element am uebergebenen Index zurück. Wenn das Item keine Einträge hat, wird NULL zurückgegeben. Wenn der übergebene Index kleiner als 0 oder größer als die Anzahl vorhandener Einträge ist, wird eine ArrayIndexOutOfBoundsException ausgelöst. Diese Methode geht nicht rekursiv durch alle Objekte. Es werden nur die Objekte der ersten Ebene beruecksichtigt. Wenn also Kindknoten dieses Knotens selbst wiederum Kindknoten haben, so werden diese nicht beruecksichtigt.

Specified by:
getChildAt in interface TreeNode
Parameters:
index - Der Index des gesuchten Elements.
Returns:
Das mit dem Index spezifizierte Element oder null.
Throws:
ArrayIndexOutOfBoundsException, - wenn der uebergebene Index kleiner als 0 oder größer als die Anzahl enthaltener Kindelemente ist.

getChildCount

public int getChildCount()
Gibt die Anzahl enthaltener Elemente in diesem Item zurück. Diese Methode geht nicht rekursiv durch alle Objekte. Es werden nur die Objekte der ersten Ebene beruecksichtigt. Wenn also Kindknoten dieses Knotens selbst wiederum Kindknoten haben, so werden diese nicht beruecksichtigt.

Specified by:
getChildCount in interface TreeNode
Returns:
Die Anzahl Kindknoten in diesem Knoten.

children

public Enumeration children()
Gibt eine Enumeration mit allen Einträgen diesen Items zurück. Falls dieser Knoten keine Kinder hat wird eine leere Enumeration zurückgegeben. Die Methode geht nicht rekursiv durch alle Objekte. Es werden nur die Kindknoten der ersten Ebene in der Enumeration zurueckgegeben.

Specified by:
children in interface TreeNode
Returns:
Eine Enumeration ueber alle Kinder dieses Knotens.

getParent

public TreeNode getParent()
Gibt das ELternobjekt für dieses Item zurück. Wenn es kein Elternobjekt gibt, wird NULL zurückgegeben.

Specified by:
getParent in interface TreeNode
Returns:
Das Elternobjekt zu diesem Knoten.

getIndex

public int getIndex(TreeNode node)
Gibt den Index des übergebenen Elements zurück. Wenn es das Element in diesem Item nicht gibt, wird -1 zurückgegeben. Dabei geht diese Methode nicht rekursiv durch alle Objekte. Es werden nur die Kindknoten der ersten Ebene beruecksichtigt.

Specified by:
getIndex in interface TreeNode
Parameters:
node - Der Knoten dessen Index in diesem Knoten ermittelt werden soll.
Returns:
Der Index des uebergebenen Knotens oder -1, wenn es diesen Knoten nicht als Kindknoten in diesem Knoten gibt.

getAllowsChildren

public boolean getAllowsChildren()
Gibt true zurück, wenn dieses Item weitere Einträge erlaubt.

Specified by:
getAllowsChildren in interface TreeNode
Returns:
true, wenn der Knoten selbst weitere Eintraege haben kann, ansonsten false.

setUserObject

public void setUserObject(Object userObject)
Setzt das UserObjekt fuer dieses Item. Dabei kann es sich um ein beliebiges Objekt handeln.

Specified by:
setUserObject in interface MutableTreeNode
Parameters:
userObject - Das UserObject fuer dieses Item.

getUserObject

public Object getUserObject()
Gibt das UserObjekt fuer dieses Item zurück.

Returns:
Das UserObject, das in diesem Item hinterlegt wurde.

insert

public void insert(MutableTreeNode child,
                   int index)
Setzt einen neuen Eintrag für dieses Item. Dabei wird dieser Eintrag aus dem alten Parent-Objekt gelöscht, falls es eines gegeben hat. Im übergebenen Eintrag wird der Parent auf this gesetzt. Wenn der übergebene Index größer ist als die bisherige Größe der Liste für die Childrenobjekte, wird der neue Eintrag am Ende eingefügt. Wenn der Index kleiner als 0 ist, wird er am Anfang eingefügt. Der übergebene Knoten muß vom Typ TreeItem sein. Der uebergebene Knoten darf kein Elternknoten dieses Knotens sein.

Specified by:
insert in interface MutableTreeNode
Parameters:
child - Der Knoten, der diesem Knoten als Kindknoten hinzugefuegt werden soll.
index - Der Index, an dem der neue Eintrag erscheinen soll. Wenn der Index kleiner als 0 oder größer als die bisherige Anzahl an Einträgen ist, wird er entweder ganz am Anfang oder ganz am Ende eingefügt.
Throws:
IllegalArgumentException - wenn der übergebene Eintrag
  • NULL
  • ein übergeordnetes TreeItem(parent,...) oder
  • keine Instanz von TreeItem ist.
    IllegalStateException - wenn dieses Item keine Einträge erlaubt.
    See Also:
    isNodeDescendant(TreeNode)

  • setParent

    public void setParent(MutableTreeNode parent)
    Setzt den Elternknoten für dieses Item. Der Elternknoten muß vom Typ TreeItem sein und darf nicht das Objekt selbst(this) oder eines seiner Kindobjekte sein, da es sonst zu Kreisreferenzen kommt. Das wird hier vor dem setzen abgeprüft. Dabei werden die Kindelemente rekursiv durchsucht. Wenn NULL übergeben wird (der Parent also gelöscht wird), findet keine Prüfungen statt, da das immer erlaubt ist.

    Specified by:
    setParent in interface MutableTreeNode
    Parameters:
    parent - Das neue Parentobjekt für dieses Item.

    remove

    public void remove(int index)
    Löscht den Eintrag aus dem Baum am uebergebenen Index. Wenn der Index kleiner 0 oder groeßer als die Anzahl vorhandener Kindknoten ist, wird eine ArrayIndexOutOfBoundsException ausgeloest. Die Methode geht nicht rekursiv durch die Objekte. Der uebergebene Index bezieht sich nur auf Kindknoten der ersten Ebene. Wenn der Knoten ueberhaupt keine Kindknoten enthaelt passiert nichts.

    Specified by:
    remove in interface MutableTreeNode
    Parameters:
    index - Der Index des zu loeschenden Knotens.

    remove

    public void remove(MutableTreeNode node)
    Loescht das uebergebene Item aus diesem Knoten. Der uebergebene Knoten muss vom Typ TreeItem sein und darf nciht NULL sein. Und er muss als Kindknoten in diesem Knoten existieren. Andernfalls wird eine IllegalArgumentException ausgeloest.

    Specified by:
    remove in interface MutableTreeNode
    Parameters:
    node - Der aus diesem Knoten zu loeschende Kindknoten.

    removeFromParent

    public void removeFromParent()
    Löscht dieses Item aus seinem Elternknoten. Falls dieser Knoten aber der Root-Knoten ist(=kein Parentobjekt vorhanden), passiert nichts.

    Specified by:
    removeFromParent in interface MutableTreeNode

    isNodeAncestor

    public boolean isNodeAncestor(TreeNode node)
    Gibt true zurück, wenn der übergebene Knoten ein Elternobjekt von diesem (oder ein Elternobjekt vom Elternobjekt von diesem TreeItem...) TreeItem ist. Der uebergebene Knoten muss vom Typ TreeItem sein.

    Parameters:
    node - Knoten, der geprüft werden soll.
    Returns:
    true, wenn dieser Knoten ein Kindobjekt des übergebenen Knoten ist.

    isNodeDescendant

    public boolean isNodeDescendant(TreeNode node)
    Gibt true zurück, wenn der übergebene Knoten ein Kindelement von diesem Item ist. Der uebergebene Knoten muss vom Typ TreeItem sein.

    Parameters:
    node - Knoten, der getestet werden soll.
    Returns:
    true wenn der übergebene Knoten ein Kindelement von diesem Knoten ist.

    isNodeRelated

    public boolean isNodeRelated(TreeNode node)
    Gibt true zurück, wenn der übergebene Knoten sich im selben Baum befindet wie dieses Item. Dafür werden die Root-Knoten von this und vom übergebenen Knoten verglichen. Der uebergebene Knoten muss vom Typ TreeItem sein.

    Returns:
    true, wenn node im gleichen Baum wie dieses Item ist. Ansonsten, oder wenn NULL übergeben wurde, wird false zurückgegeben.

    isNodeChild

    public boolean isNodeChild(TreeNode node)
    Gibt true zurück, wenn der übergebene Knoten ein Element von diesem Item ist. Es wird nicht rekursiv geprüft. Der uebergebene Knoten muss vom Typ TreeItem sein.

    Returns:
    true, wenn node ein Element von diesem Item ist. Ansonsten, oder wenn NULL übergeben wurde, wird false zurückgegeben.

    getRoot

    public TreeNode getRoot()
    Gibt den Rootknoten zu diesem Item zurück. Dafür wird solange das Parentobjekt ausgelesen, bis ein Knoten ohne Parentobjekt gefunden wurde. Dieses ist das Root-Objekt.

    Returns:
    Der Root-Knoten von diesem Knoten.

    isRoot

    public boolean isRoot()
    Gibt true zurück, wenn es sich bei diesem Item um den Root-Knoten handelt. Das wird daran festgemacht, ob dieses Item ein Parentobjekt hat oder nicht.

    Returns:
    true wenn dieses Item der Root-Knoten ist.

    containsRekurChild

    public boolean containsRekurChild(TreeNode node)
    Durchläuft alle Elemente dieses Items und prüft, ob irgendein Element den übergebenen Knoten enthält. Das geschieht rekursiv, bis alle Baumelemente geprüft wurden. Der uebergebene Knoten muss vom Typ TreeItem sein.

    Parameters:
    node - Der zu pruefende Knoten.
    Returns:
    true, wenn der uebergebene Knoten ein an diesem Knoten haengender Knoten ist, ansonsten false.

    toString

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

    Overrides:
    toString in class Item
    Returns:
    Der Name des Items.