de.bsvrz.sys.funclib.concurrent
Class DelayedTrigger

java.lang.Object
  extended by de.bsvrz.sys.funclib.concurrent.DelayedTrigger
All Implemented Interfaces:
Trigger

public class DelayedTrigger
extends Object
implements Trigger

Definiert einen Trigger mit verzögerter Auslösung.

Author:
Kappich Systemberatung

Nested Class Summary
private  class DelayedTrigger.AsyncTriggerThreadRunnable
          Runnable mit der run-Methode, die in einem eigenen Thread ausgeführt wird und die TriggerTargets asynchron benachrichtigt.
 
Field Summary
private  boolean _closed
          true, wenn die close-Methode aufgerufen wurde; sonst false.
private  long _delayDuration
          Verzögerungszeit in der nach einem Trigger-Aufrufe auf weitere Trigger-Aufrufe gewartet wird, bevor die sofortige Auslösung angestoßen wird.
private  int _delayedTriggerCount
          Aktuelle Anzahl der Trigger-Aufrufe.
private  long _maximumDelayDuration
          Maximale Verzögerungszeit in der nach dem jeweils ersten Trigger-Aufruf auf weitere Trigger-Aufrufe gewartet wird, bevor die sofortige Auslösung angestoßen wird.
private  int _maximumDelayedTriggerCount
          Anzahl der Trigger-Aufrufe, nach der die sofortige Auslösung angestoßen wird.
private  long _maximumTriggeringTime
          Zeitpunkt an dem die sofortige Auslösung angestoßen wird.
private  long _triggeringTime
          Zeitpunkt an dem die sofortige Auslösung angestoßen wird, wenn nicht vorher ein weiterer Trigger-Aufruf stattfindet.
private  List<TriggerTarget> _triggerTargets
          Listener, die beim Auslösen und Schließen des Triggers benachrichtigt werden sollen.
 
Constructor Summary
DelayedTrigger(String threadName, int maximumDelayedTriggerCount, long delayDuration, long maximumDelayDuration)
          Erzeugt ein neues Triggerobjekt mit den angegebenen Eigenschaften
 
Method Summary
 void addTriggerTarget(TriggerTarget triggerTarget)
          Fügt dem Trigger ein neues TriggerTarget, das beim Auslösen und Schließen des Triggers benachrichtigt werden soll, hinzu.
private  boolean awaitTrigger()
          Wartet bis der Trigger ausgelöst werden soll oder der Trigger geschlossen wurde.
 void close()
          Schließt den Trigger.
private  void closeTriggerTargets()
          Benachrichtigt alle TriggerTargets über das Auslösen des Triggers
 void removeTriggerTarget(TriggerTarget triggerTarget)
          Entfernt ein vorher hinzugefügtes TriggerTarget.
 void shoot()
          Führt zu einer sofortigen Auslösung des Triggers mit einer asynchronen Benachrichtigung aller angemeldeten TriggerTargets
private  void shootTriggerTargets()
          Benachrichtigt alle TriggerTargets über das Auslösen des Triggers
 void trigger()
          Führt zu einer verzögerten Auslösung des Triggers mit einer asynchronen Benachrichtigung aller angemeldeten TriggerTargets
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_triggerTargets

private final List<TriggerTarget> _triggerTargets
Listener, die beim Auslösen und Schließen des Triggers benachrichtigt werden sollen.


_maximumDelayedTriggerCount

private int _maximumDelayedTriggerCount
Anzahl der Trigger-Aufrufe, nach der die sofortige Auslösung angestoßen wird.


_delayedTriggerCount

private int _delayedTriggerCount
Aktuelle Anzahl der Trigger-Aufrufe.


_delayDuration

private long _delayDuration
Verzögerungszeit in der nach einem Trigger-Aufrufe auf weitere Trigger-Aufrufe gewartet wird, bevor die sofortige Auslösung angestoßen wird.


_triggeringTime

private long _triggeringTime
Zeitpunkt an dem die sofortige Auslösung angestoßen wird, wenn nicht vorher ein weiterer Trigger-Aufruf stattfindet. Mit jedem neuen Trigger-Aufruf wird dieses Feld auf die aktuelle Zeit plus _delayDuration gesetzt.


_maximumDelayDuration

private long _maximumDelayDuration
Maximale Verzögerungszeit in der nach dem jeweils ersten Trigger-Aufruf auf weitere Trigger-Aufrufe gewartet wird, bevor die sofortige Auslösung angestoßen wird.


_maximumTriggeringTime

private long _maximumTriggeringTime
Zeitpunkt an dem die sofortige Auslösung angestoßen wird. Mit dem jeweils ersten verzögerten Anstoß wird dieses Feld auf die aktuelle Zeit plus _maximumDelayDuration gesetzt.


_closed

private boolean _closed
true, wenn die close-Methode aufgerufen wurde; sonst false.

Constructor Detail

DelayedTrigger

public DelayedTrigger(String threadName,
                      int maximumDelayedTriggerCount,
                      long delayDuration,
                      long maximumDelayDuration)
Erzeugt ein neues Triggerobjekt mit den angegebenen Eigenschaften

Parameters:
threadName - Name des Threads für die asynchrone Auslösung des Triggers.
maximumDelayedTriggerCount - Anzahl der Trigger-Aufrufe, nach der die sofortige Auslösung angestoßen wird.
delayDuration - Verzögerungszeit in der nach einem Trigger-Aufrufe auf weitere Trigger-Aufrufe gewartet wird, bevor die sofortige Auslösung angestoßen wird.
maximumDelayDuration - Maximale Verzögerungszeit in der nach dem jeweils ersten Trigger-Aufruf auf weitere Trigger-Aufrufe gewartet wird, bevor die sofortige Auslösung angestoßen wird.
Method Detail

trigger

public void trigger()
Führt zu einer verzögerten Auslösung des Triggers mit einer asynchronen Benachrichtigung aller angemeldeten TriggerTargets


shoot

public void shoot()
Führt zu einer sofortigen Auslösung des Triggers mit einer asynchronen Benachrichtigung aller angemeldeten TriggerTargets


close

public void close()
Schließt den Trigger. Die sofortige Auslösung des Triggers wird angestoßen, falls vorherige verzögerte Trigger-Aufrufe noch nicht zu einer Auslösung des Triggers geführt haben. Alle angemeldeten TriggerTargets werden anschließend über das Schließen des Triggers benachrichtigt. Der Thread zur asynchronen Benachrichtigung der TriggerTargets wird beendet.


awaitTrigger

private boolean awaitTrigger()
                      throws InterruptedException
Wartet bis der Trigger ausgelöst werden soll oder der Trigger geschlossen wurde.

Returns:
false, wenn der Trigger ausgelöst werden kann; true, wenn der Trigger geschlossen wurde.
Throws:
InterruptedException - Wenn der Thread vor oder während des Wartens unterbrochen wurde.

addTriggerTarget

public void addTriggerTarget(TriggerTarget triggerTarget)
Description copied from interface: Trigger
Fügt dem Trigger ein neues TriggerTarget, das beim Auslösen und Schließen des Triggers benachrichtigt werden soll, hinzu.

Specified by:
addTriggerTarget in interface Trigger
Parameters:
triggerTarget - Listener-Objekt, das zukünftig beim Auslösen oder Schließen des Triggers benachrichtigt werden soll.

removeTriggerTarget

public void removeTriggerTarget(TriggerTarget triggerTarget)
Description copied from interface: Trigger
Entfernt ein vorher hinzugefügtes TriggerTarget.

Specified by:
removeTriggerTarget in interface Trigger
Parameters:
triggerTarget - Listener-Objekt, das entfernt werden soll.

shootTriggerTargets

private void shootTriggerTargets()
Benachrichtigt alle TriggerTargets über das Auslösen des Triggers


closeTriggerTargets

private void closeTriggerTargets()
Benachrichtigt alle TriggerTargets über das Auslösen des Triggers