schmitzm.data.property
Class PropertySet

java.lang.Object
  extended by schmitzm.data.event.AbstractObjectTraceable
      extended by schmitzm.data.property.PropertySet
All Implemented Interfaces:
Cloneable, ObjectTraceable, ObjectStructure, DynamicProperties, Properties

public class PropertySet
extends AbstractObjectTraceable
implements DynamicProperties, Cloneable

Diese Klasse stellt eine Menge an Eigenschaften dar. Die einzelnen Properties werden parallel in einer Hashtable und einem Vector verwaltet. Die Hashtable dient dazu, die Properties effizient ueber ihren Namen ansprechen zu koennen. Der Vector repraesentiert eine Ordnung und wird deshalb verwendet, wenn alle Eigenschaften angesprochen werden (z.B. getProperties() oder getPropertyNames()).
Zu beachten ist, dass beim Entfernen einer Eigenschaft aus der Menge nicht die komplette Eigenschaft (mittels Property.dispose()) geschlossen wird! Dies bietet den Vorteil dass eine Eigenschaft einfach von einer Menge in eine andere verschoben werden kann. Soll eine Eigenschaft (und vor allem ihre Ressourcen) komplett freigegeben werden, muss dies manuell geschehen. Hierfuer liefern die remove-Methoden eine Referenz auf die entfernte Eigenschaft zurueck.
PropertySet implementiert das Interface ObjectTraceable, so dass Aenderungen an der Menge durch Listener verfolgt werden koennen. Es werden jedoch keine Aenderungen an den in der Menge enthaltenen Eigenschaften propagiert, sondern nur Aenderungen an der Eigenschaftsmenge selbst, also Hinzufuegen oder Entfernen einer Property. In beiden Faellen wird ein ObjectChangeEvent geworfen, wobei entweder ObjectChangeEvent.getNewValue() (beim Entfernen) oder ObjectChangeEvent.getOldValue() (beim Hinzufuegen) null liefert.

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

Constructor Summary
PropertySet()
          Erzeugt eine leere Menge von Eigenschaften.
PropertySet(PropertySet propSet)
          Erzeugt eine leere Menge von Eigenschaften aus einer Vorlage.
 
Method Summary
 void addProperty(Property prop)
          Fuegt der Menge eine Eigenschaft hinzu.
 Object clone()
          Erzeugt eine Kopie der Menge.
 boolean containsMultipleValues()
          Liefert false, da eine Eigenschaftsmenge von jeder Eigenschaft immer nur eine Instanz enthaelt.
 boolean containsProperty(String name)
          Prueft, ob die Menge eine bestimmte Eigenschaft enthaelt.
 boolean equalsInStructure(Object object)
          Vergleicht die Struktur der Property mit einer anderen auf Gleichheit.
 int getAttrCount()
          Liefert die Anzah1 an Properties in der Menge.
 Enumeration<ObjectStructure> getAttrTypes()
          Liefert eine Liste, die genau so viele Elemente enthaelt, wie die Eigenschaftsmenge Propertys hat.
 Property[] getProperties()
          Liefert die Eigenschaften der Menge als Array.
 Properties getProperties(Class type)
          Liefert alle Eigenschaften, die einem bestimmten Typ angehoeren.
 Property getProperty(String name)
          Liefert eine bestimmte Eigenschaft der Menge.
 int getPropertyCount()
          Liefert die Anzahl an Eigenschaften.
 String[] getPropertyNames()
          Liefert die Namen aller Eigenschaften.
 PropertyType[] getPropertyTypes()
          Liefert die Typen aller Eigenschaften.
 String getStructureName()
          Liefert null.
 boolean isStructureNamed()
          Liefert false.
 Properties removeProperties(Properties prop)
          Entfernt Eigenschaften aus der Menge.
 Property removeProperty(Property prop)
          Entfernt eine Eigenschaft aus der Menge.
 Property removeProperty(String name)
          Entfernt eine Eigenschaft aus der Menge.
 
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
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface schmitzm.data.event.ObjectTraceable
addObjectListener, containsObjectListener, fireEvent, fireEvent, getObjectListener, removeObjectListener
 

Constructor Detail

PropertySet

public PropertySet(PropertySet propSet)
Erzeugt eine leere Menge von Eigenschaften aus einer Vorlage. Es wird jedoch nur die Struktur der Vorlage kopiert, nicht die darin enthaltenen Eigenschaften!!

Parameters:
propSet - Vorlage fuer die Property-Menge

PropertySet

public PropertySet()
Erzeugt eine leere Menge von Eigenschaften.

Method Detail

clone

public Object clone()
Erzeugt eine Kopie der Menge. Dabei wird jedoch nicht der Inhalt - also die Properties selbst - kopiert, sondern nur das Hashtable-Objekt!!

Overrides:
clone in class Object

getPropertyCount

public int getPropertyCount()
Liefert die Anzahl an Eigenschaften.

Specified by:
getPropertyCount in interface Properties

getProperties

public Property[] getProperties()
Liefert die Eigenschaften der Menge als Array.

Specified by:
getProperties in interface Properties

getProperties

public Properties getProperties(Class type)
Liefert alle Eigenschaften, die einem bestimmten Typ angehoeren. Als Typ kann sowohl ein bestimmter Property-Untertyp angegeben werden (z.B. ListProperty), als auch ein Objekt-Typ (Typ den eine Property aufnehmen kann; z.B. int.class).
Da die Methode wiederum eine Properties-Instanz liefert, lassen sich recht einfach verschiedene Filter hintereinander anwenden:

Properties.getProperties(ListProperty.class).getProperties(int.class).getPropertyNames()

liefert z.B. die Namen aller Listen-Eigenschaften, die int-Werte aufnehmen koennen.

Specified by:
getProperties in interface Properties

getPropertyNames

public String[] getPropertyNames()
Liefert die Namen aller Eigenschaften.

Specified by:
getPropertyNames in interface Properties

getPropertyTypes

public PropertyType[] getPropertyTypes()
Liefert die Typen aller Eigenschaften.

Specified by:
getPropertyTypes in interface Properties

getProperty

public Property getProperty(String name)
Liefert eine bestimmte Eigenschaft der Menge.

Specified by:
getProperty in interface Properties
Parameters:
name - Name der Eigenschaft
Returns:
null falls die Menge keine Eigenschaft dieses Namens enthaelt

containsProperty

public boolean containsProperty(String name)
Prueft, ob die Menge eine bestimmte Eigenschaft enthaelt.

Specified by:
containsProperty in interface Properties
Parameters:
name - Name der Eigenschaft

addProperty

public void addProperty(Property prop)
Fuegt der Menge eine Eigenschaft hinzu. Dabei wird auf Eindeutigkeit des Namens geachtet!

Specified by:
addProperty in interface DynamicProperties
Parameters:
prop - Eigenschaft
Throws:
PropertyException - falls bereits eine Eigenschaft dieses Namens in der Menge vorhanden ist

removeProperty

public Property removeProperty(String name)
Entfernt eine Eigenschaft aus der Menge.

Specified by:
removeProperty in interface DynamicProperties
Parameters:
name - Name der Eigenschaft
Returns:
Die entferne Eigenschaft oder null, falls das die Menge keine Eigenschaft mit dem Namen enthaelt

removeProperty

public Property removeProperty(Property prop)
Entfernt eine Eigenschaft aus der Menge. Falls die Menge eine solche Eigenschaft nicht besitzt, passiert nichts.

Specified by:
removeProperty in interface DynamicProperties
Parameters:
prop - zu entfernende Eigenschaft
Returns:
Die entferne Eigenschaft oder null falls das Objekt die Eigenschaft nicht besitzt

removeProperties

public Properties removeProperties(Properties prop)
Entfernt Eigenschaften aus der Menge. Falls die Menge eine dieser Eigenschaften nicht enthaelt, passiert fuer die entsprechende Eigenschaft nichts.

Specified by:
removeProperties in interface DynamicProperties
Parameters:
prop - zu entfernende Eigenschaft
Returns:
Die entfernten Eigenschaften (kann eine leere Eigenschaftsmenge sein, wenn die Menge keine der uebergebenen Eigenschaften besitzt.

isStructureNamed

public boolean isStructureNamed()
Liefert false.

Specified by:
isStructureNamed in interface ObjectStructure

getStructureName

public String getStructureName()
Liefert null.

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

getAttrCount

public int getAttrCount()
Liefert die Anzah1 an Properties in der Menge.

Specified by:
getAttrCount in interface ObjectStructure
See Also:
getPropertyCount()

getAttrTypes

public Enumeration<ObjectStructure> getAttrTypes()
Liefert eine Liste, die genau so viele Elemente enthaelt, wie die Eigenschaftsmenge Propertys hat. Alle Listen-Elemente sind vom Typ ObjectStructure.

Specified by:
getAttrTypes in interface ObjectStructure
Returns:
Aufzaehlung, in der jedes Element vom Typ Class oder ObjectStructure ist

equalsInStructure

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

Specified by:
equalsInStructure in interface ObjectStructure
Parameters:
object - eine anderes ObjectStructure-Objekt
Returns:
false falls das uebergebene Objekt keine ObjectStructure ist
See Also:
ValuePropertyType.equalsInStructure(Object)

containsMultipleValues

public boolean containsMultipleValues()
Liefert false, da eine Eigenschaftsmenge von jeder Eigenschaft immer nur eine Instanz enthaelt.

Specified by:
containsMultipleValues in interface ObjectStructure