schmitzm.data.property
Class Property

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

public abstract class Property
extends AbstractObjectTraceable
implements Properties, Accessible

Diese Klasse stellt den Obertyp fuer eine Eigenschaft dar. Eine Eigenschaft besteht aus 3 Teilen/Feldern:

Properties werden an verschiedenen Stellen eingesetzt. z.B. bei der Beschreibung allgemeiner Xulu-Datenobjekte oder allgemeiner Modell-Ereignisse (Events).
An eine Property koennen beliebig ObjectListener gekoppelt werden. Sobald die Eigenschaft (?ber setValue(..)) ihren Wert aendert, werden alle angeschlossenen ObjectListener mit einem ObjectChangeEvent informiert.

Es gibt verschiedenste Arten, wie eine Eigenschaft aufgebaut ist und wie sie ihre Auspraegung(en) verwaltet (z.B. ein skalarer Wert oder eine ganze Liste/Matrix). Entsprechend variieren auch die Zugriffsmethoden. Aus diesem Grund spezifiziert diese Klasse noch keine Methoden, um auf die Auspraegung der Eigenschaft (lesend oder schreibend) zuzugreifen. Dies ist durch die speziellen Unterklassen zu implementieren.

Der Zugriff auf die Property kann durch Zugriffsrechte kontrolliert werden. Ein Zugriff (z.B. lesend oder schreibend) ist nur ueber ein entsprechendes Zugriffsrecht (Access) moeglich. Da an dieser Stelle (in dieser Oberklasse) die Art der Eigenschaft noch nicht spezifiziert ist, sind die entsprechenden Methoden fuer das Accessible-Interface von den Unterklassen zu implementieren.

Aus Vereinfachungsgruenden implementiert diese Klasse auch das Interface Properties. Auf den ersten Blick macht dies zwar keinen Sinn, da eine Property zunaechst ja immer genau eine Eigenschaft repraesentiert. An vielen Stellen ist es jedoch praktisch, eine einzelne Eigenschaft unmittelbar als (einelementige) Menge von Propertys behandeln zu koennen, ohne zunaechst ein PropertySet erzeugen und die Eigenschaft einfuegen zu muessen.

Version:
1.0
Author:
Martin Schmitz (University of Bonn/Germany)
See Also:
ObjectListener

Field Summary
protected  String name
          Speichert den Namen der Eigenschaft.
protected  PropertyType type
          Speichert den Daten-Typ der Eigenschaft.
 
Constructor Summary
Property(String name, PropertyType type)
          Erzeugt eine Eigenschaft.
 
Method Summary
abstract  Property cloneStructure()
          Erzeugt einen neue Property, die von der Struktur her identisch ist mit der Property.
 boolean containsProperty(String name)
          Liefert true, falls der Name der Eigenschaft selbst angegeben wird.
 void dispose()
          "Schliesst" die Eigenschaft.
 String getName()
          Liefert den Namen der Eigenschaft.
 Property[] getProperties()
          Liefert einen 1-elementigen Array, in dem nur die Eigenschaft selbst enthalten ist.
 Properties getProperties(Class type)
          Liefert this, falls, der angegebene Typ eine Oberklasse dieser Property ist, oder eine Oberklasse des Typs dieser Property.
 Property getProperty(String name)
          Liefert die Eigenschaft selbst (this), falls deren Name angegeben wird, ansonsten null.
 int getPropertyCount()
          Liefert immer 1.
 String[] getPropertyNames()
          Liefert einen 1-elementigen Array, in dem nur der Name der Eigenschaft selbst enthalten ist.
 PropertyType getPropertyType()
          Liefert den Daten-Typ, der in der Eigenschaft gespeichert werden kann.
 PropertyType[] getPropertyTypes()
          Liefert einen 1-elementigen Array, in dem nur der Typ der Eigenschaft selbst enthalten ist.
 Class getType()
          Liefert die Klasse des Daten-Typs, der in der Eigenschaft gespeichert werden kann.
 boolean hasAccess()
          Prueft, ob aktuell Zugriffsrechte auf das Objekt verteilt sind.
 boolean hasAccess(Class c)
          Prueft, ob aktuell Zugriffsrechte einer bestimmten Art auf das Objekt verteilt sind.
 boolean isValid(Class type)
          Checkt, ob die Property einen Wert vom Typ type aufnehmen kann.
 
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, equalsInStructure, getAttrCount, getAttrTypes, getStructureName, isStructureNamed
 
Methods inherited from interface schmitzm.data.property.Accessible
applyAccess, disposeAllAccess, getAccessCount, getAccessCount, releaseAccess
 

Field Detail

name

protected String name
Speichert den Namen der Eigenschaft.


type

protected PropertyType type
Speichert den Daten-Typ der Eigenschaft.

Constructor Detail

Property

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

Parameters:
name - Name der Eigenschaft
type - Daten-Typ der Eigenschaft
Method Detail

getName

public String getName()
Liefert den Namen der Eigenschaft.


getType

public Class getType()
Liefert die Klasse des Daten-Typs, der in der Eigenschaft gespeichert werden kann.


getPropertyType

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


isValid

public boolean isValid(Class type)
Checkt, ob die Property einen Wert vom Typ type aufnehmen kann.

See Also:
PropertyType.isValid(Class)

cloneStructure

public abstract Property cloneStructure()
Erzeugt einen neue Property, die von der Struktur her identisch ist mit der Property. Der Inhalt der Property muss nicht kopiert werden.


dispose

public void dispose()
"Schliesst" die Eigenschaft. Diese Eigenschaft entzieht zunaecht saemtliche noch aktiven Zugriffsrechte und informiert dann alle angeschlossenen ObjectListener. Anschliessend werden alle ObjectListener von dem Objekt entfernt.
Unterklassen sollten diese Methode ueberschreiben wenn weitere Aktionen beim "Schliessen" einer Eigenschaft notwendig sind.


hasAccess

public boolean hasAccess()
Prueft, ob aktuell Zugriffsrechte auf das Objekt verteilt sind.

Specified by:
hasAccess in interface Accessible

hasAccess

public boolean hasAccess(Class c)
Prueft, ob aktuell Zugriffsrechte einer bestimmten Art auf das Objekt verteilt sind.

Specified by:
hasAccess in interface Accessible

getPropertyCount

public int getPropertyCount()
Liefert immer 1.

Specified by:
getPropertyCount in interface Properties

getProperties

public Property[] getProperties()
Liefert einen 1-elementigen Array, in dem nur die Eigenschaft selbst enthalten ist.

Specified by:
getProperties in interface Properties

getProperties

public Properties getProperties(Class type)
Liefert this, falls, der angegebene Typ eine Oberklasse dieser Property ist, oder eine Oberklasse des Typs dieser Property. Andernfalls wird ein leeres PropertySet zurueckgegeben.

Specified by:
getProperties in interface Properties

getPropertyNames

public String[] getPropertyNames()
Liefert einen 1-elementigen Array, in dem nur der Name der Eigenschaft selbst enthalten ist.

Specified by:
getPropertyNames in interface Properties

getPropertyTypes

public PropertyType[] getPropertyTypes()
Liefert einen 1-elementigen Array, in dem nur der Typ der Eigenschaft selbst enthalten ist.

Specified by:
getPropertyTypes in interface Properties

getProperty

public Property getProperty(String name)
Liefert die Eigenschaft selbst (this), falls deren Name angegeben wird, ansonsten null.

Specified by:
getProperty in interface Properties
Parameters:
name - Name der Eigenschaft
Returns:
null falls das Objekt keine Eigenschaft mit dem Namen besitzt

containsProperty

public boolean containsProperty(String name)
Liefert true, falls der Name der Eigenschaft selbst angegeben wird.

Specified by:
containsProperty in interface Properties