schmitzm.data.property
Class ValueProperty

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

public abstract class ValueProperty
extends Property
implements ObjectStructure

Diese Klasse stellt eine Oberklasse fuer alle Eigenschaften dar, die einen oder mehrere Wert speichern koennen. Die Implementierung basiert auf Sun JDK 1.5.0 und nutzt optionale Methoden-Parameter. Hierdurch kann (wahlweise) fuer skalare Properties auf Parameter verzichtet werden (z.B. getValue() oder setValue(someObject)). Fuer 2-dim. Matrizen koennen derselben Methode 2 zusaetzliche Parameter (oder ein 2-dim. Array) uebergeben werden, um die Position innerhalb der Matrix zu spezifizieren (z.B. getValue(10,13) oder setValue(someObject,10,13)).

Die jeweilige Sub-Klasse muss nur noch die Art der Speicherung (z.B. skalar, Liste oder Matrix), sowie je eine setter- und getter-Methode implementieren.
Der Zugriff auf die Property 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
 
Fields inherited from class schmitzm.data.property.Property
name, type
 
Constructor Summary
ValueProperty(String name, Class type)
          Erzeugt eine Eigenschaft.
ValueProperty(String name, Class type, ValuePropertyAccessParameters params)
          Erzeugt eine Eigenschaft.
ValueProperty(String name, ObjectStructure sample)
          Erzeugt eine Eigenschaft.
ValueProperty(String name, ObjectStructure sample, ValuePropertyAccessParameters params)
          Erzeugt eine Eigenschaft.
ValueProperty(String name, PropertyType type)
          Erzeugt eine Eigenschaft.
ValueProperty(String name, PropertyType type, ValuePropertyAccessParameters params)
          Erzeugt eine Eigenschaft.
 
Method Summary
 void applyAccess(Access access)
          Wird aufgerufen, wenn ein Zugriffsrecht (Lesend oder Schreibend) angefordert wird.
 void disposeAllAccess()
          Entzieht saemtlichen Zugriffsrechten, die aktuell fuer das Objekt verteilt sind, die Gueltigkeit.
 boolean equalsInStructure(Object object)
          Vergleicht die Struktur der Property mit einer anderen auf Gleichheit.
 int getAccessCount()
          Liefert die Gesamz-Anzahl an Zugriffsrechten, die aktuell fuer das Objekt verteilt sind.
 int getAccessCount(Class c)
          Liefert die Anzahl an Zugriffsrechten einer bestimmten Art, die aktuell fuer das Objekt verteilt sind.
 ValuePropertyAccessParameters getAccessParameters()
          Liefert die Parameter (max.
 int getAttrCount()
          Liefert 1, da eine Property immer genau eine Eigenschaft darstellt.
 Enumeration getAttrTypes()
          Liefert eine Liste, in der genau 1 Element enthalten ist.
 PropertyReadAccess getOneTimeReadAccess()
          Liefert ein Leserecht auf die Property, welches nach einmaligem Zugriff automatisch ungueltig wird.
 PropertyWriteAccess getOneTimeWriteAccess()
          Liefert ein Schreibrecht auf die Property, welches nach einmaligem Zugriff automatisch ungueltig wird.
 ValuePropertyType getPropertyType()
          Liefert den Daten-Typ, der in der Eigenschaft gespeichert werden kann.
 PropertyReadAccess getReadAccess(Object owner)
          Liefert ein Leserecht auf die Property.
 String getStructureName()
          Liefert den Namen der Eigenschaft.
protected abstract  Object getValue(int... coords)
          Liefert den/einen Wert der Eigenschaft.
 PropertyWriteAccess getWriteAccess(Object owner)
          Liefert ein Schreibrecht auf die Property.
 boolean isStructureNamed()
          Liefert true, da jede Property einen Namen besitzt.
 void releaseAccess(Access access)
          Wird aufgerufen, wenn ein Zugriffsrecht (Lesend oder Schreibend) wieder zurueckgegeben wird.
protected abstract  void setValue(Object value, int... coords)
          Setzt den/einen Wert der Eigenschaft.
 
Methods inherited from class schmitzm.data.property.Property
cloneStructure, containsProperty, dispose, 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
 
Methods inherited from interface schmitzm.data.ObjectStructure
containsMultipleValues
 

Constructor Detail

ValueProperty

public ValueProperty(String name,
                     PropertyType type,
                     ValuePropertyAccessParameters params)
Erzeugt eine Eigenschaft.

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

ValueProperty

public ValueProperty(String name,
                     PropertyType type)
Erzeugt eine Eigenschaft. Der Zugriff auf die Eigenschaft ist uneingeschraengt (beliebig viele Lese- und beliebig viele Schreibrechte).

Parameters:
name - Bezeichnung der Eigenschaft
type - Typ der Eigenschaft
See Also:
ValuePropertyAccessParameters.UNLIMITED_ACCESS

ValueProperty

public ValueProperty(String name,
                     ObjectStructure sample,
                     ValuePropertyAccessParameters params)
Erzeugt eine Eigenschaft.

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

ValueProperty

public ValueProperty(String name,
                     ObjectStructure sample)
Erzeugt eine 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 Eigenschaft gespeichert werden kann
See Also:
ValuePropertyAccessParameters.UNLIMITED_ACCESS

ValueProperty

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

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

ValueProperty

public ValueProperty(String name,
                     Class type)
Erzeugt eine 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
type - Daten-Typ der Eigenschaft
See Also:
ValuePropertyAccessParameters.UNLIMITED_ACCESS
Method Detail

getPropertyType

public ValuePropertyType getPropertyType()
Liefert den Daten-Typ, der in der Eigenschaft gespeichert werden kann.

Overrides:
getPropertyType in class Property

getAccessParameters

public ValuePropertyAccessParameters getAccessParameters()
Liefert die Parameter (max. Lese/Schreibzugriff) der Property.

Returns:
ValuePropertyAccessParameters

applyAccess

public void applyAccess(Access access)
Wird aufgerufen, wenn ein Zugriffsrecht (Lesend oder Schreibend) angefordert wird. Diese Methode prueft, ob das Recht erteilt werden kann. Wie viele Lese- und Schreibrechte erteilt werden koennen ist ueber die Access-Parametern festgelegt.

Specified by:
applyAccess in interface Accessible
Parameters:
access - Zugriffsrecht welches erteilt werden soll
Throws:
AccessViolationException - falls das angegebene Recht nicht zur Property passt
See Also:
getAccessParameters()

releaseAccess

public void releaseAccess(Access access)
Wird aufgerufen, wenn ein Zugriffsrecht (Lesend oder Schreibend) wieder zurueckgegeben wird.

Specified by:
releaseAccess in interface Accessible
Parameters:
access - Zugriffsrecht welches zurueckgegeben werden soll
Throws:
AccessViolationException - falls das angegebene Recht nicht zur Property passt

disposeAllAccess

public void disposeAllAccess()
Entzieht saemtlichen Zugriffsrechten, die aktuell fuer das Objekt verteilt sind, die Gueltigkeit.

Specified by:
disposeAllAccess in interface Accessible

getAccessCount

public int getAccessCount(Class c)
Liefert die Anzahl an Zugriffsrechten einer bestimmten Art, die aktuell fuer das Objekt verteilt sind.

Specified by:
getAccessCount in interface Accessible

getAccessCount

public int getAccessCount()
Liefert die Gesamz-Anzahl an Zugriffsrechten, die aktuell fuer das Objekt verteilt sind.

Specified by:
getAccessCount in interface Accessible

getReadAccess

public PropertyReadAccess getReadAccess(Object owner)
Liefert ein Leserecht auf die Property. Wie viele Leserechte gleichzeitig erteilt werden koennen ist ueber die Access-Parametern festgelegt.

Parameters:
owner - Objekt, welches das Recht beantragt
See Also:
applyAccess(Access), getAccessParameters()

getWriteAccess

public PropertyWriteAccess getWriteAccess(Object owner)
Liefert ein Schreibrecht auf die Property. Wie viele Schreibrechte gleichzeitig erteilt werden koennen ist ueber die Access-Parametern festgelegt.

Parameters:
owner - Objekt, welches das Recht beantragt
See Also:
applyAccess(Access), getAccessParameters()

getOneTimeReadAccess

public PropertyReadAccess getOneTimeReadAccess()
Liefert ein Leserecht auf die Property, welches nach einmaligem Zugriff automatisch ungueltig wird.
Wie viele Leserechte gleichzeitig erteilt werden koennen ist ueber die Access-Parametern festgelegt.

See Also:
applyAccess(Access), getAccessParameters()

getOneTimeWriteAccess

public PropertyWriteAccess 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.

See Also:
applyAccess(Access), getAccessParameters()

getValue

protected abstract Object getValue(int... coords)
Liefert den/einen Wert der Eigenschaft.
coords spezifizieren (optional) die "Koordinaten", an denen der Wert in der Eigenschaft zu finden ist. Fuer skalare Eigenschaften darf/braucht diese Angabe nicht gemacht zu werden. Fuer Listen und 1-dim. Matrizen (Arrays) darf nur ein Wert angegeben werden. Fuer mehr-dimensionale Matrizen muessen entsprechend der Dimension mehr Koordinaten angegeben werden (als einzelne Parameter oder als ein Array). z.B. fuer 2-dim. Matrix:
getValue(10,13) oder getValue( new int[] {10,13} )

Kann (seit JDK1.5.0) auch genutzt werden, wenn es sich bei der Property um einen Build-in-Type handelt.

Parameters:
coords - optionale Koordinaten

setValue

protected abstract void setValue(Object value,
                                 int... coords)
Setzt den/einen Wert der Eigenschaft.
coords spezifizieren (optional) die "Koordinaten", an denen der Wert in der Eigenschaft zu finden ist. Fuer skalare Eigenschaften darf/braucht diese Angabe nicht gemacht zu werden. Fuer Listen und 1-dim. Matrizen (Arrays) darf nur ein Wert angegeben werden. Fuer mehr-dimensionale Matrizen muessen entsprechend der Dimension mehr Koordinaten angegeben werden (als einzelne Parameter oder als ein Array). z.B. fuer 2-dim. Matrix:
getValue(10,13) oder getValue( new int[] {10,13} )

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 Property.

Parameters:
value - neuer Wert fuer die Eigenschaft
coords - optionale Koordinaten
Throws:
ClassCastException - falls das angegebene Objekt nicht zum Property-Typ passt

isStructureNamed

public boolean isStructureNamed()
Liefert true, da jede Property einen Namen besitzt.

Specified by:
isStructureNamed in interface ObjectStructure

getStructureName

public String getStructureName()
Liefert den Namen der Eigenschaft.

Specified by:
getStructureName in interface ObjectStructure
Returns:
null falls die Struktur unbenannt ist
See Also:
Property.getName()

getAttrCount

public int getAttrCount()
Liefert 1, da eine Property immer genau eine Eigenschaft darstellt.

Specified by:
getAttrCount in interface ObjectStructure

getAttrTypes

public Enumeration getAttrTypes()
Liefert eine Liste, in der genau 1 Element enthalten ist. Dabei handelt es sich um eine ObjectStructure, falls die Property einen strukturierten Inhalt hat, oder andernfalls eine Class, die den "allgemeinen" Eigenschaftstyp darstellt.

Specified by:
getAttrTypes in interface ObjectStructure
Returns:
Aufzaehlung, in der jedes Element vom Typ Class oder ObjectStructure ist
See Also:
ValuePropertyType.getTypeStructure(), PropertyType.getType()

equalsInStructure

public boolean equalsInStructure(Object object)
Vergleicht die Struktur der Property mit einer anderen auf Gleichheit.

Specified by:
equalsInStructure in interface ObjectStructure
Parameters:
object - kann eine andere ValueProperty sein oder ein ValuePropertyType
See Also:
ValuePropertyType.equalsInStructure(Object)