schmitzm.data.property
Class ListProperty

java.lang.Object
  extended by schmitzm.data.event.AbstractObjectTraceable
      extended by schmitzm.data.property.Property
          extended by schmitzm.data.property.ValueProperty
              extended by schmitzm.data.property.ListProperty
All Implemented Interfaces:
ObjectTraceable, ObjectStructure, Accessible, Properties

public class ListProperty
extends ValueProperty

Diese Klasse stellt eine Listen-Eigenschaft dar, die Objekte eines bestimmten Typs aufnehmen kann. Die Groesse der Liste steht a priori noch nicht fest. Es koennen beliebig Objekte hingefügt oder entfernt werden.
Intern wird die Liste als java.util.Vector organisiert.
Der Zugriff auf die Liste kann durch Zugriffsrechte kontrolliert werden. Ein Zugriff (lesend oder schreibend) ist nur ueber ein entsprechendes Zugriffsrecht (Access) moeglich. Standardmaessig ist unbegrenzter Zugriff eingestellt. Durch Angabe von ValuePropertyAccessParameters kann jedoch benutzerdefiniert festgelegt werden, wie viele Objekte gleichzeitig Lese- und/oder Schreibzugriff erlangen duerfen.

Version:
1.0
Author:
Martin Schmitz (University of Bonn/Germany)
See Also:
getReadAccess(Object), getWriteAccess(Object)

Field Summary
protected  Vector elements
          Speichert die Listen-Elemente.
 
Fields inherited from class schmitzm.data.property.Property
name, type
 
Constructor Summary
ListProperty(String name)
          Erzeugt eine Listen-Eigenschaft.
ListProperty(String name, Class elementType)
          Erzeugt eine Listen-Eigenschaft.
ListProperty(String name, Class elementType, ValuePropertyAccessParameters params)
          Erzeugt eine Listen-Eigenschaft.
ListProperty(String name, Object sampleData)
          Erzeugt eine Listen-Eigenschaft.
ListProperty(String name, ObjectStructure sample)
          Erzeugt eine Listen-Eigenschaft.
ListProperty(String name, ObjectStructure sample, ValuePropertyAccessParameters params)
          Erzeugt eine Listen-Eigenschaft.
ListProperty(String name, Object sampleData, ValuePropertyAccessParameters params)
          Erzeugt eine Listen-Eigenschaft.
ListProperty(String name, ValuePropertyAccessParameters params)
          Erzeugt eine Listen-Eigenschaft.
ListProperty(String name, ValuePropertyType elementType)
          Erzeugt eine Listen-Eigenschaft.
ListProperty(String name, ValuePropertyType elementType, ValuePropertyAccessParameters params)
          Erzeugt eine Listen-Eigenschaft.
 
Method Summary
 ListProperty cloneStructure()
          Liefert eine neue, leerer ListProperty mit identischem Namen, Typ und gleichen Zugriffsparemetern.
 boolean containsMultipleValues()
          Liefert true, da eine Listen-Eigenschaft immer aus mehreren Werten besteht.
 void dispose()
          Zerstoert die Property und die Property-Werte.
 int getAccessCount(Class c)
          Liefert die Anzahl an Zugriffsrechten einer bestimmten Art, die aktuell fuer das Objekt verteilt sind.
protected  int getCount()
          Liefert die aktuelle Anzahl an Elementen, die in der Liste gespeichert sind.
 ListPropertyReadAccess getOneTimeReadAccess()
          Liefert ein Leserecht auf die Liste, welches nach einmaligem Zugriff automatisch ungueltig wird.
 ListPropertyWriteAccess getOneTimeWriteAccess()
          Liefert ein Schreibrecht auf die Property, welches nach einmaligem Zugriff automatisch ungueltig wird.
 ListPropertyReadAccess getReadAccess(Object owner)
          Liefert ein Leserecht auf die Liste.
protected  Object getValue(int... coords)
          Liefert ein Element der Liste.
 ListPropertyWriteAccess getWriteAccess(Object owner)
          Liefert ein Schreibrecht auf die Property.
protected  int indexOf(Object value)
          Liefert den Listen-Index des ersten Vorkommens eines Elements.
protected  void insertValue(Object value, int index)
          Belegt ein Element der Liste.
protected  void removeValue(int index)
          Entfernt ein Element aus der Liste.
protected  boolean removeValue(Object value)
          Entfernt alle Instanzen des angegebenen Objekts aus der Liste (sofern es vorhanden ist).
protected  void setValue(Object value, int... coords)
          Belegt ein Element der Liste.
 
Methods inherited from class schmitzm.data.property.ValueProperty
applyAccess, disposeAllAccess, equalsInStructure, getAccessCount, getAccessParameters, getAttrCount, getAttrTypes, getPropertyType, getStructureName, isStructureNamed, releaseAccess
 
Methods inherited from class schmitzm.data.property.Property
containsProperty, getName, getProperties, getProperties, getProperty, getPropertyCount, getPropertyNames, getPropertyTypes, getType, hasAccess, hasAccess, isValid
 
Methods inherited from class schmitzm.data.event.AbstractObjectTraceable
addObjectListener, containsObjectListener, createGeneralEvent, fireEvent, fireEvent, fireGeneralEvent, fireGeneralEvent, getObjectListener, isEventFiringEnabled, removeAllObjectListeners, removeObjectListener, setEventFiringEnabled
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

elements

protected Vector elements
Speichert die Listen-Elemente.

Constructor Detail

ListProperty

public ListProperty(String name,
                    ValuePropertyType elementType,
                    ValuePropertyAccessParameters params)
Erzeugt eine Listen-Eigenschaft.

Parameters:
name - Bezeichnung der Eigenschaft
elementType - Daten-Typ der Elemente, die die ListProperty aufnehmen kann
params - Parameter fuer die Verwaltung des Zugriffsrechts
See Also:
ValuePropertyAccessParameters

ListProperty

public ListProperty(String name,
                    ValuePropertyType elementType)
Erzeugt eine Listen-Eigenschaft. Der Zugriff auf die Eigenschaft ist uneingeschraengt (beliebig viele Lese- und beliebig viele Schreibrechte).

Parameters:
name - Bezeichnung der Eigenschaft
elementType - Daten-Typ der Elemente, die die ListProperty aufnehmen kann
See Also:
ValuePropertyAccessParameters.UNLIMITED_ACCESS

ListProperty

public ListProperty(String name,
                    Class elementType,
                    ValuePropertyAccessParameters params)
Erzeugt eine Listen-Eigenschaft. Als Typ kann auch ein Build-in-Type angegeben werden (z.B. int.class).

Parameters:
name - Bezeichnung der Eigenschaft
elementType - Daten-Typ der Elemente, die die ListProperty aufnehmen kann
params - Parameter fuer die Verwaltung des Zugriffsrechts
See Also:
ValuePropertyAccessParameters

ListProperty

public ListProperty(String name,
                    Class elementType)
Erzeugt eine Listen-Eigenschaft. Als Typ kann auch ein Build-in-Type angegeben werden (z.B. int.class). Der Zugriff auf die Eigenschaft ist uneingeschraengt (beliebig viele Lese- und beliebig viele Schreibrechte).

Parameters:
name - Bezeichnung der Eigenschaft
elementType - Daten-Typ der Elemente, die die ListProperty aufnehmen kann
See Also:
ValuePropertyAccessParameters.UNLIMITED_ACCESS

ListProperty

public ListProperty(String name,
                    ObjectStructure sample,
                    ValuePropertyAccessParameters params)
Erzeugt eine Listen-Eigenschaft.

Parameters:
name - Bezeichnung der Eigenschaft
sample - Bestimmt die Element-Struktur, die in der ListProperty gespeichert werden koennen
params - Parameter fuer die Verwaltung des Zugriffsrechts
See Also:
ValuePropertyAccessParameters

ListProperty

public ListProperty(String name,
                    ObjectStructure sample)
Erzeugt eine Listen-Eigenschaft. Der Zugriff auf die Eigenschaft ist uneingeschraengt (beliebig viele Lese- und beliebig viele Schreibrechte).

Parameters:
name - Bezeichnung der Eigenschaft
sample - Bestimmt die Element-Struktur, die in der ListProperty gespeichert werden koennen
See Also:
ValuePropertyAccessParameters.UNLIMITED_ACCESS

ListProperty

public ListProperty(String name,
                    Object sampleData,
                    ValuePropertyAccessParameters params)
Erzeugt eine Listen-Eigenschaft.

Parameters:
name - Bezeichnung der Eigenschaft
sampleData - Bestimmt die Element-Struktur, die in der ListProperty gespeichert werden koennen (das Objekt wird nicht in die Liste aufgenommen!!)
params - Parameter fuer die Verwaltung des Zugriffsrechts
See Also:
ValuePropertyAccessParameters

ListProperty

public ListProperty(String name,
                    Object sampleData)
Erzeugt eine Listen-Eigenschaft. Der Zugriff auf die Eigenschaft ist uneingeschraengt (beliebig viele Lese- und beliebig viele Schreibrechte).

Parameters:
name - Bezeichnung der Eigenschaft
sampleData - Bestimmt die Element-Struktur, die in der ListProperty gespeichert werden koennen (das Objekt wird nicht in die Liste aufgenommen!!)
See Also:
ValuePropertyAccessParameters.UNLIMITED_ACCESS

ListProperty

public ListProperty(String name,
                    ValuePropertyAccessParameters params)
Erzeugt eine Listen-Eigenschaft. Als Elemente kann diese saemtliche Objekte aufnehmen, die von java.lang.Object abgeleitet sind (also keine Build-in-Types!!).

Parameters:
name - Bezeichnung der Eigenschaft
params - Parameter fuer die Verwaltung des Zugriffsrechts
See Also:
ValuePropertyAccessParameters

ListProperty

public ListProperty(String name)
Erzeugt eine Listen-Eigenschaft. Als Elemente kann diese saemtliche Objekte aufnehmen, die von java.lang.Object abgeleitet sind (also keine Build-in-Types!!). Der Zugriff auf die Eigenschaft ist uneingeschraengt (beliebig viele Lese- und beliebig viele Schreibrechte).

Parameters:
name - Bezeichnung der Eigenschaft
See Also:
ValuePropertyAccessParameters.UNLIMITED_ACCESS
Method Detail

dispose

public void dispose()
Zerstoert die Property und die Property-Werte. Handelt es sich bei den Werten der Liste wiederum Propertys, werden auch deren dispose()-Methoden aufgerufen.

Overrides:
dispose in class Property

cloneStructure

public ListProperty cloneStructure()
Liefert eine neue, leerer ListProperty mit identischem Namen, Typ und gleichen Zugriffsparemetern.

Specified by:
cloneStructure in class Property

getReadAccess

public ListPropertyReadAccess getReadAccess(Object owner)
Liefert ein Leserecht auf die Liste. Wie viele Leserechte gleichzeitig erteilt werden koennen ist ueber die Access-Parametern festgelegt.
Neben den "normalen" Lesezugriffen (getter auf bestimmtes Objekt) muessen fuer Listen weitere Zugriffsmethoden bereitgestellt werden. Deshalb liefert diese Methode kein PropertyReadAccess, sondern ein ListPropertyReadAccess.

Overrides:
getReadAccess in class ValueProperty
Parameters:
owner - Objekt, welches das Recht beantragt
See Also:
ValueProperty.applyAccess(Access), ValueProperty.getAccessParameters()

getWriteAccess

public ListPropertyWriteAccess getWriteAccess(Object owner)
Liefert ein Schreibrecht auf die Property. Wie viele Schreibrechte gleichzeitig erteilt werden koennen ist ueber die Access-Parametern festgelegt.
Neben den "normalen" Schreibzugriffen (setter auf bestimmtes Objekt) muessen fuer Listen weitere Zugriffsmethoden bereitgestellt werden. Deshalb liefert diese Methode kein PropertyWriteAccess, sondern ein ListPropertyWriteAccess.

Overrides:
getWriteAccess in class ValueProperty
Parameters:
owner - Objekt, welches das Recht beantragt
See Also:
ValueProperty.applyAccess(Access), ValueProperty.getAccessParameters()

getOneTimeReadAccess

public ListPropertyReadAccess getOneTimeReadAccess()
Liefert ein Leserecht auf die Liste, welches nach einmaligem Zugriff automatisch ungueltig wird.
Wie viele Leserechte gleichzeitig erteilt werden koennen ist ueber die Access-Parametern festgelegt.
Neben den "normalen" Lesezugriffen (getter auf bestimmtes Objekt) muessen fuer Listen weitere Zugriffsmethoden bereitgestellt werden. Deshalb liefert diese Methode kein PropertyReadAccess, sondern ein ListPropertyReadAccess.

Overrides:
getOneTimeReadAccess in class ValueProperty
See Also:
ValueProperty.applyAccess(Access), ValueProperty.getAccessParameters()

getOneTimeWriteAccess

public ListPropertyWriteAccess getOneTimeWriteAccess()
Liefert ein Schreibrecht auf die Property, welches nach einmaligem Zugriff automatisch ungueltig wird.
Wie viele Schreibrechte gleichzeitig erteilt werden koennen ist ueber die Access-Parametern festgelegt.
Neben den "normalen" Schreibzugriffen (setter auf bestimmtes Objekt) muessen fuer Listen weitere Zugriffsmethoden bereitgestellt werden. Deshalb liefert diese Methode kein PropertyWriteAccess, sondern ein ListPropertyWriteAccess.

Overrides:
getOneTimeWriteAccess in class ValueProperty
See Also:
ValueProperty.applyAccess(Access), ValueProperty.getAccessParameters()

getAccessCount

public int getAccessCount(Class c)
Liefert die Anzahl an Zugriffsrechten einer bestimmten Art, die aktuell fuer das Objekt verteilt sind.
Muss ValueProperty.getAccessCount(Class) ueberschreiben, da dieser Klasse Instanzen von ListPropertyReadAccess und ListPropertyWriteAccess verteilt.

Specified by:
getAccessCount in interface Accessible
Overrides:
getAccessCount in class ValueProperty

getValue

protected Object getValue(int... coords)
Liefert ein Element der Liste. Kann (seit JDK1.5.0) auch genutzt werden, wenn es sich bei der Property um einen Build-in-Type handelt.
Da eine Listen-Eigenschaft 1-dim. ist, muss als coords-Parameter genau 1 Wert angegeben werden!!

Specified by:
getValue in class ValueProperty
Parameters:
coords - Listen-Index
Throws:
UnsupportedOperationException - falls nicht genau ein coords-Parameter angegeben wird

setValue

protected void setValue(Object value,
                        int... coords)
Belegt ein Element der Liste. Kann (seit JDK1.5.0) auch genutzt werden, wenn es sich bei der Property um einen Build-in-Type handelt.
Iniziiert ein ObjectChangeEvent fuer die Liste. Da eine Listen-Eigenschaft 1-dim. ist, muss als coords-Parameter genau 1 Wert angegeben werden!!

Specified by:
setValue in class ValueProperty
Parameters:
value - neuer Wert fuer das Listen-Element
coords - Listen-Index
Throws:
UnsupportedOperationException - falls nicht genau ein coords-Parameter angegeben wird
ClassCastException - falls das angegebene Objekt nicht zum Property-Typ passt

indexOf

protected int indexOf(Object value)
Liefert den Listen-Index des ersten Vorkommens eines Elements.

Parameters:
value - Listen-Element
Returns:
-1 falls das Element nicht in der Liste vorhanden ist.

getCount

protected int getCount()
Liefert die aktuelle Anzahl an Elementen, die in der Liste gespeichert sind.


insertValue

protected void insertValue(Object value,
                           int index)
Belegt ein Element der Liste. Kann (seit JDK1.5.0) auch genutzt werden, wenn es sich bei der Property um einen Build-in-Type handelt.
Iniziiert ein ObjectChangeEvent fuer die Liste.

Parameters:
value - neuer Wert fuer das Listen-Element
index - Listen-Index fuer das neue Element (alle bestehenden Elemente ab (einschliesslich) dieser Position werden nach hinten verschoben)
Throws:
ClassCastException - falls das angegebene Objekt nicht zum Property-Typ passt

removeValue

protected void removeValue(int index)
Entfernt ein Element aus der Liste.
Iniziiert ein ObjectChangeEvent fuer die Liste.

Parameters:
index - Listen-Index des zu loeschenden Elements

removeValue

protected boolean removeValue(Object value)
Entfernt alle Instanzen des angegebenen Objekts aus der Liste (sofern es vorhanden ist).
Iniziiert ein ObjectChangeEvent fuer die Liste.

Parameters:
value - das zu entfernende Objekt
Returns:
false falls dass Objekt nicht in der Liste vorhanden war

containsMultipleValues

public boolean containsMultipleValues()
Liefert true, da eine Listen-Eigenschaft immer aus mehreren Werten besteht.