private class ArchiveQueryTask.ContWalk
extends java.lang.Object
Im Container-Walk werden alle Container einer Datensatzart gesammelt, die zur Beantwortung einer Unterabfrage (@link Query} benoetigt werden, da sie ErgebnisDatensätze 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 Datensätze 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 für 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.
Modifier and Type | Field and Description |
---|---|
private ArchiveOrder |
archiveOrder
Sortierkriterium für nachgelieferte Datensätze.
|
private int |
currIdx
Aktueller Index innerhalb des Container-Walks, -1 für ungueltigen Index.
|
private java.util.List<java.util.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.
|
Modifier | Constructor and Description |
---|---|
private |
ContWalk(ArchiveDataKind dataKind,
ArchiveOrder archiveOrder,
ArchiveQueryTask.Container[] contInfos)
Erstellt einen neuen Container-Walk und fuellt ihn mit den angegebenen Container-Infos.
|
Modifier and Type | Method and Description |
---|---|
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 java.util.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 Datensätze 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.
|
java.lang.String |
toString() |
private ArchiveDataKind dataKind
Datensatzart der Container in diesem Container-Walk.
private ArchiveOrder archiveOrder
Sortierkriterium für nachgelieferte Datensätze.
private java.util.List<java.util.List<ArchiveQueryTask.Container>> cw
Sortierte Liste, die pro Index eine Liste von ContInfos haelt.
private boolean firstDataSent
Flag, ob der erste Datensatz am Anfang der Antwort bereits versandt worden ist.
private boolean done
Flag, ob der Container-Walk fertig durchlaufen worden ist.
private int currIdx
Aktueller Index innerhalb des Container-Walks, -1 für ungueltigen Index.
private ContWalk(ArchiveDataKind dataKind, ArchiveOrder archiveOrder, ArchiveQueryTask.Container[] contInfos)
Erstellt einen neuen Container-Walk und fuellt ihn mit den angegebenen Container-Infos.
dataKind
- Datensatzart der Container im Container-WalkarchiveOrder
- Sortierkriterium für nachgelieferte DatensätzecontInfos
- Container-Infos der Ergebnis-Containerprivate java.util.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.
cwIdx
- Container-Walk-Indexprivate ArchiveQueryTask.Container getLastContainer()
Wenn nur noch ein Container im Container-Walk unerledigt ist, wird dieser geliefert, ansonsten null
.
null
.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.
allCont
- Container-Infos der Ergebnis-Containerprivate boolean allInContWalk(ArchiveQueryTask.Container[] contInfos)
Prueft, ob alle angegebenen Container-Infos bereits im Container-Walk einsortiert sind.
contInfos
- Zu pruefende Container-Infostrue
falls alle Container-Infos im Container-Walk einsortiert sind, false
sonstprivate int maxIdx()
Liefert den groessten Index des Container-Walks zurueck, -1 bei leerem Container-Walk.
private void cleanUp()
Nachdem der ContWalk als erledigt markiert worden ist, kann der ContWalk mit diese Methode geleert werden, um Arbeitsspeicher zu sparen.
private TimingType getSortTimingType()
Liefert den TimingType
, nach dem Datensätze aus Containern dieses Container-Walks (ein)sortiert werden muessen. Dies ist normalerweise der Datenindex, bei nachgelieferten Datensätzen kann es alternativ auch die Datenzeit sein.
public java.lang.String toString()
toString
in class java.lang.Object