schmitzm.data.event
Class AbstractObjectEvent

java.lang.Object
  extended by schmitzm.data.event.AbstractObjectEvent
All Implemented Interfaces:
ObjectEvent
Direct Known Subclasses:
ObjectChangeEvent, ObjectCloseEvent

public abstract class AbstractObjectEvent
extends Object
implements ObjectEvent

Diese Klasse stellt eine Basis-Implementierung fuer ein Ereignis dar, das von einem Objekt ausgeloest wird. Spezielle Ereignisse (z.B. "Objekt wurde geschlossen" oder "Objekt hat sich geaendert" oder "Eine Eigenschaft eines Objekts hat sich geaendert") werden durch Spezialisierungen dieser Klasse ausgedrueckt.

Haeufig ziehen einzelne Objekt-Aenderungen andere nach sich. z.B. Wertaenderung eines Listen-Elements einer ListProperty zieht die Aenderung der Liste mit sich und somit die Aenderung des Objekts, welches die ListProperty beinhaltet. Propagiert ein Objekt eine Aenderung also weiter nach unten erzeugt es (fuer seine Listener) ein neues Event:

 ...
 public void performObjectEvent(ObjectEvent e) {
     if ( e instanceof ObjectChangeEvent ) {
         ObjectChangeEvent oce = (ObjectChangeEvent)e;
         fireEvent( new ObjectChangeEvent(
             new Invoker( this,oce.getSource() ),
             oce.getOldValue(),
             oce.getNewValue()
         ) );
     }
 }
 ...
 
Aus diesem Grund ist ObjectEvent.getObject() nicht immer das Element, welches die Aenderung ausgeloest hat. Diese kann jedoch durch source.getRoot() ermittelt werden.

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

Field Summary
static int OBJECT_CLOSED
          Ereignis-Typ, der anzeigt, dass ein Objekt geschlossen wird.
protected  Invoker source
          Speichert die Objekt-Hierarchie, die von diesem Ereignis betroffen ist
static int STATE_CHANGED
          Ereignis-Typ, der anzeigt, dass sich der Zustand eines Objekts geaendert hat.
protected  int type
          Speichert die ID des Events.
 
Constructor Summary
AbstractObjectEvent(Invoker source, int type)
          Erzeugt ein neues Event.
AbstractObjectEvent(Object source, int type)
          Erzeugt ein neues Event.
 
Method Summary
 void expandSource(Object object)
          Erweitert die Objekt-Hierarchie, die von dem Ereignis betroffen ist.
 Invoker getSource()
          Liefert die Objekt-Hierarchie, die von dem Ereignis betroffen ist.
 int getType()
          Liefert die ID des Events.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

STATE_CHANGED

public static final int STATE_CHANGED
Ereignis-Typ, der anzeigt, dass sich der Zustand eines Objekts geaendert hat.

See Also:
Constant Field Values

OBJECT_CLOSED

public static final int OBJECT_CLOSED
Ereignis-Typ, der anzeigt, dass ein Objekt geschlossen wird.

See Also:
Constant Field Values

type

protected int type
Speichert die ID des Events.


source

protected Invoker source
Speichert die Objekt-Hierarchie, die von diesem Ereignis betroffen ist

Constructor Detail

AbstractObjectEvent

public AbstractObjectEvent(Invoker source,
                           int type)
Erzeugt ein neues Event.

Parameters:
source - Ausloeser fuer dieses Event.
type - Type-ID des Events

AbstractObjectEvent

public AbstractObjectEvent(Object source,
                           int type)
Erzeugt ein neues Event.

Parameters:
source - Ausloeser fuer dieses Event. Fuer dieses Objekt wird ein neuer Root-Invoker gebildet.
type - ID des Events
Method Detail

getType

public int getType()
Liefert die ID des Events.

Specified by:
getType in interface ObjectEvent

getSource

public Invoker getSource()
Liefert die Objekt-Hierarchie, die von dem Ereignis betroffen ist. Deren Wurzel ist das Objekt, welches das Ereignis ausgeloest hat.
Beispiel:

Specified by:
getSource in interface ObjectEvent
See Also:
Invoker

expandSource

public void expandSource(Object object)
Erweitert die Objekt-Hierarchie, die von dem Ereignis betroffen ist. Das Objekt wird dabei der Hierarchie vorangestellt. Im folgenden ist es ueber getInvoker().getObject() referenzierbar. Das bisher ueber diesen Aufruf referenzierte Objekt erhaelt man dann ueber getInvoker().getInvoker().getObject().

Specified by:
expandSource in interface ObjectEvent
Parameters:
object - neues betroffenes Objekt