de.bsvrz.pua.prot.processing
Class ProcessingBuffer

java.lang.Object
  extended by java.lang.Thread
      extended by de.bsvrz.pua.prot.processing.ProcessingBuffer
All Implemented Interfaces:
java.lang.Runnable
Direct Known Subclasses:
ArchiveBuffer, OnlineBuffer

public abstract class ProcessingBuffer
extends java.lang.Thread

Klasse zum Markieren und Erstellen von Ausgangsdatensätzen. Zum Starten der Datenaufbereitung den Thread mit Thread.start() starten. Wenn Datensätze eingehen, wird die Datenaufbereitung benachrichtigt. Ist die Datensammlung abgeschlossen, wird die Datenaufbereitung ein letzes Mal benachrichtigt.

Version:
$Revision: 1.2 $ / $Date: 2008/01/22 16:55:49 $ / ($Author: yvonnes $)
Author:
beck et al. projects GmbH, Martin Hilgers

Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
 
Field Summary
protected  RingBuffer<IntermediateDataSet> buffer
          Ringpuffer in dem die Ausgangsdatensätze abgelegt werden.
protected  ProtocolRequestResult bufferResult
          Informationen über das Ergebnis der Datensammlung
protected  ClientDavInterface dav
          Verbindung zum Dateverteiler
protected  Debug debug
          Debug Ausgaben.
protected  boolean done
          Zeigt an ob alle Daten gesammelt und abgerufen wurden.
protected  IMDSBuilder imdsBuilder
          Objekt dass die Ausgangsdatensätze erzeugt.
protected static int INITIAL_RINGBUFFER_SIZE
          Initialisierung Ringpuffer
protected  java.util.List<Tuple<java.lang.Long,java.lang.Long>> periods
          Abzufragende Zeitbereiche.
protected  ProcessingInformation pi
          Informationen zur Datenaufbereitung
protected  java.util.Hashtable<RealElement,ValueProvider> realElements
          Zuordnung: Reale Elemente -> Wertebeschaffer
protected  java.util.Hashtable<TempAttributeDescription,TempAttribut> tempElements
          Zuordnung: Temporäre Attribute -> Wertebeschaffer für temporäre Attribute
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
ProcessingBuffer(ClientDavInterface dav, ProcessingInterface processor, ProcessingInformation pi, java.util.List<Tuple<java.lang.Long,java.lang.Long>> periods)
          Startet den Buffer.
 
Method Summary
 void abort()
          Beendet die Datensammlung.
abstract  boolean applyAggregations(BaseDataSet[] baseData)
          Führt die Aggregierungen durch.
 IntermediateDataSet applyPostFilter(BaseDataSet[] baseData, byte status, long winnerTimeStamp)
          Ruft den Nachfilter für nicht-aggregierte Daten auf.
protected  boolean getInsertEmpty()
          Zeigt an ob ein leerer Datensatz eingefügt werden soll.
 ProtocolRequestResult getResult()
          Zeigt ob die Datensammlung erfolgreich war.
 RealAttributeDescription getTimeStampOrigin(TempAttributeDescription tad)
          Liefert das Attribut zurück, das den Zeitstempel des temporären Attributsfestlegt.
protected  int getWinners(ValueProvider[] elements, java.util.List<ValueProvider> winners)
          Legt die Elemente mit dem kleinsten Datenzeitstempel in einer Liste ab.
abstract  boolean hasData()
          Zeigt an ob Daten abgeholt werden können.
abstract  void init()
          Erzeugt die Abbildungen: Elemente -> Wertebeschaffer.
 boolean isAbort()
           
protected  boolean isAggregate()
           
 boolean isDeltaProtocol()
          Zeigt an, ob ein Änderungsprotokoll erstellt wird.
abstract  boolean isDone()
          Zeigt ob der Buffer noch weitere Daten liefern wird.
protected abstract  boolean isDoneCollecting()
          Zeigt an ob mit das Abfragen aller Daten abgeschlossen wurde.
protected abstract  boolean isListAggregation()
          Werden nicht aggregierte Daten versendet?
protected  void nextInterval(long endOfInterval)
          Ist direkt nachdem alle Daten einer Datenart eines Intevalls gesammelt wurden aufzurufen.
protected  void notifyProcessor()
          Benachrichtigt das Objekt das die Datenaufbereitung durchführt.
protected abstract  void processNewData(java.util.ArrayList<ValueProvider> winners, ValueProvider[] elements)
          Bereitet aus den Ergebnisdatensätzen die Ergebnisdaten auf.
 void run()
          Erstellt die Ausgangsdatensätze.
protected  void setAggregate(boolean aggregate)
           
protected  void setDone()
          Wird aufgerufen wenn die Datensammlung beendet werden soll ist oder abgebrochen wird.
protected  void setTempAttributes()
          Legt einen Eintrag für jedes temporären Attribut in tempElements an.
 int size()
           
abstract  void storeAggregatedData(byte status)
          Falls Aggregationsdatensätze vorhanden sind, werden sie in den Ausgangspuffer gelegt.
 void storeDataSet(IntermediateDataSet intermediateData)
          Speichert den Ausgangsdatensatz im Ausgangspuffer buffer.
 IntermediateDataSet take()
          Liefert einen Ausgangsdatensatz zurück.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

INITIAL_RINGBUFFER_SIZE

protected static final int INITIAL_RINGBUFFER_SIZE
Initialisierung Ringpuffer

See Also:
Constant Field Values

pi

protected ProcessingInformation pi
Informationen zur Datenaufbereitung


bufferResult

protected ProtocolRequestResult bufferResult
Informationen über das Ergebnis der Datensammlung


dav

protected ClientDavInterface dav
Verbindung zum Dateverteiler


debug

protected final Debug debug
Debug Ausgaben. Nicht static, da der Logger für jeden neuen Thread neu angelegt werden soll!


buffer

protected RingBuffer<IntermediateDataSet> buffer
Ringpuffer in dem die Ausgangsdatensätze abgelegt werden. Ausgangsdatensätze sind für den Versand vorbereitete Daten.


realElements

protected java.util.Hashtable<RealElement,ValueProvider> realElements
Zuordnung: Reale Elemente -> Wertebeschaffer


tempElements

protected java.util.Hashtable<TempAttributeDescription,TempAttribut> tempElements
Zuordnung: Temporäre Attribute -> Wertebeschaffer für temporäre Attribute


periods

protected java.util.List<Tuple<java.lang.Long,java.lang.Long>> periods
Abzufragende Zeitbereiche. Einträge durfen nach der Initialisierung nicht mehr gelöscht werden (und sollten nicht verändert werden, daher wird die Liste im Konstruktor unveränderbar gemacht.


done

protected boolean done
Zeigt an ob alle Daten gesammelt und abgerufen wurden.


imdsBuilder

protected IMDSBuilder imdsBuilder
Objekt dass die Ausgangsdatensätze erzeugt. Wird in run() initialisiert.

Constructor Detail

ProcessingBuffer

public ProcessingBuffer(ClientDavInterface dav,
                        ProcessingInterface processor,
                        ProcessingInformation pi,
                        java.util.List<Tuple<java.lang.Long,java.lang.Long>> periods)
                 throws FailureException
Startet den Buffer. init() sollte unverzüglich nach Erzeugen des Objekts aufgerufen werden.

Parameters:
dav - Verbindung zum Datenverteiler
processor - Objekt das die Datenaufbereitung durchführt. Wird jedes Mal benachrichtigt, wenn ein Ausgangsdatensatz vorliegt.
pi - Informationen zur Datenaufbereitung.
periods - Zeitbereiche, in denen der Buffer Daten sammeln soll. Die Zeitbereiche müssen bereits sortiert und zusammengefasst sein! Die Liste wird nicht geändert.
Throws:
FailureException - Fehler bei der Kommunikation mit der Konfiguration
Method Detail

init

public abstract void init()
                   throws FailureException,
                          java.lang.InterruptedException
Erzeugt die Abbildungen: Elemente -> Wertebeschaffer. Meldet sich für jede benötigten Datenidentifikation beim Datenverteiler an. Füllt die Hashtables realElements und tempElements. Die Objekte, die in diesen Hashtables als 'Values' abgelegt werden, erledigen das Abfragen der Werte selbständig. Sollte sofort nach Erzeugen des Objektes Aufgerufen werden.

Throws:
FailureException - Fehler.
java.lang.InterruptedException - Thread wird abgebrochen.

setTempAttributes

protected void setTempAttributes()
Legt einen Eintrag für jedes temporären Attribut in tempElements an.


getResult

public ProtocolRequestResult getResult()
Zeigt ob die Datensammlung erfolgreich war.

Returns:
Objekt mit Informationen über den Ablauf der Datensammlung

notifyProcessor

protected void notifyProcessor()
Benachrichtigt das Objekt das die Datenaufbereitung durchführt.


take

public IntermediateDataSet take()
                         throws java.lang.InterruptedException
Liefert einen Ausgangsdatensatz zurück. Setzt dabei das 'zeitdauer' Attribut. Liegt keiner vor, kehrt die Methode sofort mit dem Rückgabewert null zurück.

Returns:
Ausgangsdatensatz und Status oder null, falls keiner vorliegt.
Throws:
java.lang.InterruptedException - Warten auf Ausgangsdatensatz wurde unterbrochen.

run

public void run()
Erstellt die Ausgangsdatensätze. Fängt sämtliche(!) Exceptions ab. Informationen zum Ablauf der Datensammlung können mittels getResult() abgefragt werden.

Specified by:
run in interface java.lang.Runnable
Overrides:
run in class java.lang.Thread

processNewData

protected abstract void processNewData(java.util.ArrayList<ValueProvider> winners,
                                       ValueProvider[] elements)
                                throws FailureException,
                                       java.lang.InterruptedException
Bereitet aus den Ergebnisdatensätzen die Ergebnisdaten auf.

Parameters:
winners - Liste der Datensätze mit minimalem, nicht aufgefüllten Datenzeitstempel.
elements - Liste aller Ergebnislieferanten.
Throws:
FailureException - Fehler bei der Aufbereitung.
java.lang.InterruptedException - Aufbereitung wurde unterbrochen.

isListAggregation

protected abstract boolean isListAggregation()
Werden nicht aggregierte Daten versendet?

Returns:
true falls Liste eine der ausgewählten die Aggregationsanwendungen ist.

storeDataSet

public void storeDataSet(IntermediateDataSet intermediateData)
Speichert den Ausgangsdatensatz im Ausgangspuffer buffer. Benachrichtigt den Datenaufbereiter processor falls notwendig.

Parameters:
intermediateData - Ausgangsdatensatz.

applyAggregations

public abstract boolean applyAggregations(BaseDataSet[] baseData)
Führt die Aggregierungen durch. Die Aggregierungen werden jedoch nur durchgeführt, falls isAggregate() true liefert.

Parameters:
baseData - Werte des Ausgangsdatensatz. Einträge können von der Methode geändert werden.
Returns:
true: Der Ausgangsdatensatz soll nachgefiltert und ausgegeben werden.

storeAggregatedData

public abstract void storeAggregatedData(byte status)
Falls Aggregationsdatensätze vorhanden sind, werden sie in den Ausgangspuffer gelegt.

Parameters:
status - Status, den der Aggregationsdatensatz erhalten soll.
See Also:
storeDataSet(IntermediateDataSet)

applyPostFilter

public IntermediateDataSet applyPostFilter(BaseDataSet[] baseData,
                                           byte status,
                                           long winnerTimeStamp)
Ruft den Nachfilter für nicht-aggregierte Daten auf.

Parameters:
baseData - Elemente des Ausgangsdatensatz.
status - Status, der dem Ausgangsdatensatz zugeordnet werden soll.
winnerTimeStamp - Minimaler, nicht aufgefüllter Zeitstempel.
Returns:
Durch den Nachfilter bearbeiteter Datensatz.

getWinners

protected int getWinners(ValueProvider[] elements,
                         java.util.List<ValueProvider> winners)
Legt die Elemente mit dem kleinsten Datenzeitstempel in einer Liste ab. Setzt teilt den Elementen mit, ob sie zu den "Gewinnern" oder "Verlierern" gehören.

Parameters:
elements - Feld mit realen Elementen, deren Datenzeitstempel überprüft wird.
winners - Liste in der die Elemente mit minimalem Datenzeitstempel abgelegt werden. Die Liste wird vorher geleert.
Returns:
Wert größer 0, falls es ein Element aus dem Spaltenbereich den kleinsten Datenzeitstempel hat. Wert kleiner 0, falls ein Element, das nicht im Spalten-Bereich vorkommt, den kleinsten Datenzeitstempel hat. 0 wird zurückgegeben, wenn kein Element den minimalen Zeitstempel hat.

size

public int size()
Returns:
Anzahl Ausgangsdatensätze.

isDoneCollecting

protected abstract boolean isDoneCollecting()
                                     throws FailureException,
                                            java.lang.InterruptedException
Zeigt an ob mit das Abfragen aller Daten abgeschlossen wurde. D.h. es wird true zurückgegeben, sobald alle Daten abgefragt wurden. isDone() muss jedoch noch nicht false zurückliefern! Wird von run() jedesmal aufgerufen, bevor ein neuer Ausgangsdatensatz erstellt wird.

Returns:
true falls alle Daten abgefragt wurden.
Throws:
FailureException - Fehler bei der Überprüfung
java.lang.InterruptedException - Warten auf Antwortdatensatz wurde unterbrochen.

hasData

public abstract boolean hasData()
Zeigt an ob Daten abgeholt werden können.

Returns:
true falls Daten mittels take() abgeholt werden können.

setDone

protected void setDone()
Wird aufgerufen wenn die Datensammlung beendet werden soll ist oder abgebrochen wird. Nach dem Aufruf dieser Methode muss done true zurückliefern.


isDone

public abstract boolean isDone()
Zeigt ob der Buffer noch weitere Daten liefern wird.

Returns:
true falls noch weitere Daten zu erwarten sind.

abort

public void abort()
Beendet die Datensammlung. Ruft dazu ValueProvider.abort() für jedes reale Element auf.


isAggregate

protected boolean isAggregate()
Returns:
Returns the aggregate.

setAggregate

protected void setAggregate(boolean aggregate)
Parameters:
aggregate - The aggregate to set.

nextInterval

protected void nextInterval(long endOfInterval)
Ist direkt nachdem alle Daten einer Datenart eines Intevalls gesammelt wurden aufzurufen. Benachricht die Statusberechung und markiert den letzten Ausgangsdatensatz als den letzten des Intervalls.

Parameters:
endOfInterval - Endzeitpunkt des Intervalls, das gerade beendet wurde.
See Also:
IMDSBuilder.nextInterval(long)

isAbort

public boolean isAbort()
Returns:
true falls die Datenaufbereitung abgebrochen wurde.

getTimeStampOrigin

public RealAttributeDescription getTimeStampOrigin(TempAttributeDescription tad)
Liefert das Attribut zurück, das den Zeitstempel des temporären Attributsfestlegt. Diese Methode liefert erst nach AUfruf der init() Methode gültige Werte!

Parameters:
tad - Temporäres Attribut
Returns:
Reales Attribut, dessen Zeitstempel auch für das temporäre Attribut gilt. null wenn noch kein reales Attribut für das übergebene temporäre Attribut eingetragen wurde.

isDeltaProtocol

public boolean isDeltaProtocol()
Zeigt an, ob ein Änderungsprotokoll erstellt wird.

Returns:
truefalls ein Änderungsprotokoll erstellt wird. false, falls ein Zustandsprotokoll erstellt wird.

getInsertEmpty

protected boolean getInsertEmpty()
Zeigt an ob ein leerer Datensatz eingefügt werden soll.

Returns:
true falls ein leerer Datensatz eingefügt werden soll.


Copyright © 2005-2008 beck et al. projects GmbH All Rights Reserved.