de.bsvrz.ars.ars.mgmt.tasks
Class ArchiveQueryTask.ContWalk

java.lang.Object
  extended by de.bsvrz.ars.ars.mgmt.tasks.ArchiveQueryTask.ContWalk
Enclosing class:
ArchiveQueryTask

private class ArchiveQueryTask.ContWalk
extends Object

Im Container-Walk werden alle Container einer Datensatzart gesammelt, die zur Beantwortung einer Unterabfrage (@link Query} benoetigt werden, da sie Ergebnisdatensaetze enthalten. Entsprechend der Sortierreihenfolge der Container (Datenindex im Regelfall, bei nachgelieferten auch nach Datenzeit) werden die Container mittels #fill(Container[]) im Container-Walk auf die sog. Container-Walk-Indexe verteilt, beginnend beim Container-Walk-Index 0. Um die Archivantwort zu bestimmen, muessen die Container dann nur noch in der Reihenfolge durchlaufen werden, in der sie im Container-Walk abgelegt sind.

Sollten sich die Bereiche (typ. Datenzeitbereich bei Sortierung nach Datenzeit), zu denen die Container Datensaetze enthalten, ueberschneiden, so werden die sich ueberlappenden Container jeweils zusammen unter einem Datenindex abgelegt. Alle Container eines solchen Container-Walk-Index werden gleichzeitig geoeffnet, damit aus ihnen der jeweils naechste zu uebertragende Datensatz fuer die Archivantwort ermittelt werden kann.

Beispiel: siehe TAnf Archivsystem, Abb. 5-14:
Die Container-Infos von C1 bis C3 wuerden wegen ihrer Ueberlappung zusammen dem Container-Walk-Index 0 und C4 dann allein dem Container-Walk-Index 1 zugeordnet werden.


Field Summary
private  ArchiveOrder archiveOrder
          Sortierkriterium fuer nachgelieferte Datensaetze.
private  int currIdx
          Aktueller Index innerhalb des Container-Walks, -1 fuer ungueltigen Index.
private  List<List<ArchiveQueryTask.Container>> cw
          Sortierte Liste, die pro Index eine Liste von ContInfos haelt.
private  ArchiveDataKind dataKind
          Datensatzart der Container in diesem Container-Walk.
private  boolean done
          Flag, ob der Container-Walk fertig durchlaufen worden ist.
private  boolean firstDataSent
          Flag, ob der erste Datensatz am Anfang der Antwort bereits versandt worden ist.
 
Constructor Summary
private ArchiveQueryTask.ContWalk(ArchiveDataKind dataKind, ArchiveOrder archiveOrder, ArchiveQueryTask.Container[] contInfos)
          Erstellt einen neuen Container-Walk und fuellt ihn mit den angegebenen Container-Infos.
 
Method Summary
private  boolean allInContWalk(ArchiveQueryTask.Container[] contInfos)
          Prueft, ob alle angegebenen Container-Infos bereits im Container-Walk einsortiert sind.
private  void cleanUp()
          Nachdem der ContWalk als erledigt markiert worden ist, kann der ContWalk mit diese Methode geleert werden, um Arbeitsspeicher zu sparen.
private  void fill(ArchiveQueryTask.Container[] allCont)
          Fuellt den Container-Walk mit den uebergebenen Container-Infos wobei Ueberschneidungen der durch die Container abgedeckten Bereiche beruecksichtigt werden, und die betroffenen Container-Infos jeweils geclustert dem gleichen Container-Walk-Index zugeordnet werden.
private  List<ArchiveQueryTask.Container> getContainer(int cwIdx)
          Liefert Liste aller Container-Infos, die beim angegebenen Container-Walk-Index abgelegt sind.
private  ArchiveQueryTask.Container getLastContainer()
          Wenn nur noch ein Container im Container-Walk unerledigt ist, wird dieser geliefert, ansonsten null.
private  TimingType getSortTimingType()
          Liefert den TimingType, nach dem Datensaetze aus Containern dieses Container-Walks (ein)sortiert werden muessen.
private  int maxIdx()
          Liefert den groessten Index des Container-Walks zurueck, -1 bei leerem Container-Walk.
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

dataKind

private ArchiveDataKind dataKind
Datensatzart der Container in diesem Container-Walk.


archiveOrder

private ArchiveOrder archiveOrder
Sortierkriterium fuer nachgelieferte Datensaetze.


cw

private List<List<ArchiveQueryTask.Container>> cw
Sortierte Liste, die pro Index eine Liste von ContInfos haelt.


firstDataSent

private boolean firstDataSent
Flag, ob der erste Datensatz am Anfang der Antwort bereits versandt worden ist.


done

private boolean done
Flag, ob der Container-Walk fertig durchlaufen worden ist.


currIdx

private int currIdx
Aktueller Index innerhalb des Container-Walks, -1 fuer ungueltigen Index.

Constructor Detail

ArchiveQueryTask.ContWalk

private ArchiveQueryTask.ContWalk(ArchiveDataKind dataKind,
                                  ArchiveOrder archiveOrder,
                                  ArchiveQueryTask.Container[] contInfos)
Erstellt einen neuen Container-Walk und fuellt ihn mit den angegebenen Container-Infos.

Parameters:
dataKind - Datensatzart der Container im Container-Walk
archiveOrder - Sortierkriterium fuer nachgelieferte Datensaetze
contInfos - Container-Infos der Ergebnis-Container
Method Detail

getContainer

private List<ArchiveQueryTask.Container> getContainer(int cwIdx)
Liefert Liste aller Container-Infos, die beim angegebenen Container-Walk-Index abgelegt sind. Sollte eine Liste am Ende des ContainerWalks abgefragt werden, die noch nicht existiert, wird sie erzeugt und angehangen.

Parameters:
cwIdx - Container-Walk-Index
Returns:
Liste von Container-Infos

getLastContainer

private ArchiveQueryTask.Container getLastContainer()
Wenn nur noch ein Container im Container-Walk unerledigt ist, wird dieser geliefert, ansonsten null.

Returns:
Letzter unerledigter Container, wenn zutreffend, sonst null.

fill

private void fill(ArchiveQueryTask.Container[] allCont)
Fuellt den Container-Walk mit den uebergebenen Container-Infos wobei Ueberschneidungen der durch die Container abgedeckten Bereiche beruecksichtigt werden, und die betroffenen Container-Infos jeweils geclustert dem gleichen Container-Walk-Index zugeordnet werden. D.h. innerhalb eines Container-Walk-Indexes liegen Container-Infos mit Ueberschneidungen; zwischen zwei Container-Infos in unterschiedlichen Container-Walk-Indexen bestehen keine Ueberschneidungen.

Parameters:
allCont - Container-Infos der Ergebnis-Container

allInContWalk

private boolean allInContWalk(ArchiveQueryTask.Container[] contInfos)
Prueft, ob alle angegebenen Container-Infos bereits im Container-Walk einsortiert sind.

Parameters:
contInfos - Zu pruefende Container-Infos
Returns:
true falls alle Container-Infos im Container-Walk einsortiert sind, false sonst

maxIdx

private int maxIdx()
Liefert den groessten Index des Container-Walks zurueck, -1 bei leerem Container-Walk.

Returns:
Groesster Container-Walk-Index

cleanUp

private void cleanUp()
Nachdem der ContWalk als erledigt markiert worden ist, kann der ContWalk mit diese Methode geleert werden, um Arbeitsspeicher zu sparen.


getSortTimingType

private TimingType getSortTimingType()
Liefert den TimingType, nach dem Datensaetze aus Containern dieses Container-Walks (ein)sortiert werden muessen. Dies ist normalerweise der Datenindex, bei nachgelieferten Datensaetzen kann es alternativ auch die Datenzeit sein.

Returns:
TimingType nach dem Datensaetze aus Containern dieses Container-Walks (ein)sortiert werden

toString

public String toString()
Overrides:
toString in class Object