de.bsvrz.ars.ars.persistence
Class MultiContainerDataIterator

java.lang.Object
  extended by de.bsvrz.ars.ars.persistence.MultiContainerDataIterator

public class MultiContainerDataIterator
extends Object

Klasse zum Iterieren ueber Containergrenzen einer Datenidentifikation hinweg. Es wird stets ueber aufsteigende Datenindexe iteriert.

Author:
beck et al. projects GmbH, Alexander Schmidt

Nested Class Summary
private  class MultiContainerDataIterator.ContainerWalk
           
private  class MultiContainerDataIterator.ContInfo
          Kapselt folgende Daten zu einem Container: Datei, Container-ID, Datensatzart und min/max Datenindex.
 
Field Summary
private  ArchiveManager arcMgr
          Archive-Manager fuer DataIdentTree-Zugriff.
private  MultiContainerDataIterator.ContainerWalk[] contWalks
          Liste mit Container-Walks fuer die einzelnen Datensatzarten.
static int DEL_FULLCOUNT
          Beim Iterieren geloeschter Container werden alle Datensaetze gezaehlt
static int DEL_IGNORE
          Geloeschte Container werden beim Iterieren ignoriert
static int DEL_MINMAX
          Beim Itererieren geloeschter Container werden nur 2 Datensaetze (Min/Max) gezaehlt
private  int deletedTreatment
          Gibt an, wie über geloeschte Container iteriert wird,
0 : Container wird ignoriert
1 : Container wird als 2 Datensaetze (Min/Max) gezaehlt
2 : Container wird voll gezaehlt
private  File didDir
          Persistent-Verzeichnis der aktuellen Datenidentifikation.
private static boolean DONT_INCLUDE_DELETED
           
private  MultiContainerDataIterator.ContainerWalk lastContWalk
          Der Container-Walk, aus dem der letzte Datensatz geliefert worden ist.
private  Debug logger
           
private static int NN
          Datensatzart-Index.
private static int OA
          Datensatzart-Index.
private  Task ownerTask
          Aufrufender Task.
private  PersistenceManager persMgr
          Persistenz-Manager fuer Container-Datei-Zugriff.
 
Constructor Summary
MultiContainerDataIterator(ArchiveManager arcMgr, DataIdentTreeIterator it, IndexResult oaRes, IndexResult onRes, IndexResult naRes, IndexResult nnRes, int deletedTreatment, Task ownerTask)
          Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.
MultiContainerDataIterator(ArchiveManager arcMgr, DataIdentTreeIterator it, IndexResult oaRes, IndexResult onRes, IndexResult naRes, IndexResult nnRes, Task ownerTask)
           
MultiContainerDataIterator(ArchiveManager arcMgr, long objID, long atgID, long aspID, int sv, ArchiveDataKindCombination adkc, int deletedTreatment, Task ownerTask)
          Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.
MultiContainerDataIterator(ArchiveManager arcMgr, long objID, long atgID, long aspID, int sv, ArchiveDataKindCombination adkc, Task ownerTask)
           
MultiContainerDataIterator(ArchiveManager arcMgr, long objID, long atgID, long aspID, int sv, boolean oa, boolean on, boolean na, boolean nn, int deletedTreatment, Task ownerTask)
          Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.
MultiContainerDataIterator(ArchiveManager arcMgr, long objID, long atgID, long aspID, int sv, boolean oa, boolean on, boolean na, boolean nn, Task ownerTask)
          Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.
MultiContainerDataIterator(ArchiveManager arcMgr, long objID, long atgID, long aspID, int sv, IndexResult oaRes, IndexResult onRes, IndexResult naRes, IndexResult nnRes, int deletedTreatment, Task ownerTask)
          Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.
MultiContainerDataIterator(ArchiveManager arcMgr, long objID, long atgID, long aspID, int sv, IndexResult oaRes, IndexResult onRes, IndexResult naRes, IndexResult nnRes, Task ownerTask)
          Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.
MultiContainerDataIterator(ArchiveManager arcMgr, long objID, long atgID, long aspID, int sv, int deletedTreatment, Task ownerTask)
          Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.
MultiContainerDataIterator(ArchiveManager arcMgr, long objID, long atgID, long aspID, int sv, Task ownerTask)
           
 
Method Summary
private  boolean accessContainer(MultiContainerDataIterator.ContainerWalk contWalk)
          Oeffnet im angegebenen Container-Walk alle Container innerhalb des aktuellen Container-Walk-Indexes zum Lesen.
 void close()
          Schliesst den Multi-Iterator und damit auch alle noch offenen Container-Dateien.
 String descPosition()
          Liefert eine textuelle Beschreibung der aktuellen Position aus Verzeichnis, Container und Datensatz.
private  int getContainerFileIdx(ArchiveDataKind dataKind, int contInfoIdx)
          Eindeutiger ContainerFile-Index fuer Persistenz-Zugriff.
private  MultiContainerDataIterator.ContInfo[] getContInfos(File[] contFiles, ArchiveDataKind dataKind)
          Liefert die Container-Infos zu den uebergebenen Container-Dateien der angegebenen Datensatzart.
 int getCurContFileIdx()
          Liefert den ContainerFile-Index fuer PersistenceManager.getContainerHeaderParamAsLong(Task,int,KeyValParam) des Containers, der den letzten Datensatz geliefert hat.
 long getCurContID()
          Liefert die Container-ID des Containers, der den letzten Datensatz geliefert hat.
private  long[] getDataIdx(File contFile, long contId, ArchiveDataKind dataKind)
          Bei nicht abgeschlossenen Containern (min/max DataIdx steht noch nicht im Header) liefert diese Methode min/max DataIdx entweder aus den Container-Indexen oder aus den Datensaetzen des Containers, falls die Container-Indexe diese Information nicht vorhalten.
private  void getNextData(MultiContainerDataIterator.ContainerWalk contWalk)
          Sucht im angegebenen Container-Walk den Container mit den naechsten zu liefernden Datensatz und vermerkt diesen Container im Container-Walk.
private  void leaveContainer(MultiContainerDataIterator.ContainerWalk contWalk, int contWalkIdx)
          Verlaesst im angegebenen Container-Walk alle Container innerhalb des angegebenen Container-Walk-Indexes.
private  void leaveContainer(MultiContainerDataIterator.ContInfo contInfo)
          Verlaesst den durch die Container-Info spezifizierten Container und markiert ihn als erledigt.
 ContainerDataIterator readNextDIdx()
          Liefert Datensatz-Iterator zurueck, der auf dem naechsten Datensatz steht.
 ContainerDataIterator readSkipNextDIdx()
          Liefert Datensatz-Iterator zurueck, der auf dem naechsten Datensatz steht, und ueberspringt diesen Datensatz.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DONT_INCLUDE_DELETED

private static final boolean DONT_INCLUDE_DELETED
See Also:
Constant Field Values

logger

private Debug logger

OA

private static int OA
Datensatzart-Index.


NN

private static int NN
Datensatzart-Index.


ownerTask

private Task ownerTask
Aufrufender Task. Wird bei Zugriffen auf die Persistenz benoetigt.


arcMgr

private ArchiveManager arcMgr
Archive-Manager fuer DataIdentTree-Zugriff.


persMgr

private PersistenceManager persMgr
Persistenz-Manager fuer Container-Datei-Zugriff.


didDir

private File didDir
Persistent-Verzeichnis der aktuellen Datenidentifikation.


contWalks

private MultiContainerDataIterator.ContainerWalk[] contWalks
Liste mit Container-Walks fuer die einzelnen Datensatzarten.


lastContWalk

private MultiContainerDataIterator.ContainerWalk lastContWalk
Der Container-Walk, aus dem der letzte Datensatz geliefert worden ist.


DEL_IGNORE

public static final int DEL_IGNORE
Geloeschte Container werden beim Iterieren ignoriert

See Also:
Constant Field Values

DEL_MINMAX

public static final int DEL_MINMAX
Beim Itererieren geloeschter Container werden nur 2 Datensaetze (Min/Max) gezaehlt

See Also:
Constant Field Values

DEL_FULLCOUNT

public static final int DEL_FULLCOUNT
Beim Iterieren geloeschter Container werden alle Datensaetze gezaehlt

See Also:
Constant Field Values

deletedTreatment

private int deletedTreatment
Gibt an, wie über geloeschte Container iteriert wird,
0 : Container wird ignoriert
1 : Container wird als 2 Datensaetze (Min/Max) gezaehlt
2 : Container wird voll gezaehlt

Constructor Detail

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  long objID,
                                  long atgID,
                                  long aspID,
                                  int sv,
                                  boolean oa,
                                  boolean on,
                                  boolean na,
                                  boolean nn,
                                  int deletedTreatment,
                                  Task ownerTask)
                           throws PersistenceException
Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.

Parameters:
arcMgr - Der Archiv-Manager.
objID - Die Objekt-ID.
atgID - Die Attributgruppen-ID.
aspID - Die Aspekt-ID.
sv - Die Simulationsvariante.
oa - Kennzeichen, ob Container mit Online-Aktuell erhaltenen Datensaetzen genommen werden.
on - Kennzeichen, ob Container mit Online-Nachgeliefert erhaltenen Datensaetzen genommen werden.
na - Kennzeichen, ob Container mit Nachgefordert-Aktuell erhaltenen Datensaetzen genommen werden.
nn - Kennzeichen, ob Container mit Nachgefordert-Nachgeliefert erhaltenen Datensaetzen genommen werden.
deletedTreatment - gibt an, wie geloeschte Container behandelt werden sollen.
ownerTask - Aufrufender Task. Wird bei Zugriffen auf die Persistenz benoetigt.
Throws:
PersistenceException

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  long objID,
                                  long atgID,
                                  long aspID,
                                  int sv,
                                  boolean oa,
                                  boolean on,
                                  boolean na,
                                  boolean nn,
                                  Task ownerTask)
                           throws PersistenceException
Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.

Parameters:
arcMgr - Der Archiv-Manager.
objID - Die Objekt-ID.
atgID - Die Attributgruppen-ID.
aspID - Die Aspekt-ID.
sv - Die Simulationsvariante.
oa - Kennzeichen, ob Container mit Online-Aktuell erhaltenen Datensaetzen genommen werden.
on - Kennzeichen, ob Container mit Online-Nachgeliefert erhaltenen Datensaetzen genommen werden.
na - Kennzeichen, ob Container mit Nachgefordert-Aktuell erhaltenen Datensaetzen genommen werden.
nn - Kennzeichen, ob Container mit Nachgefordert-Nachgeliefert erhaltenen Datensaetzen genommen werden.
ownerTask - Aufrufender Task. Wird bei Zugriffen auf die Persistenz benoetigt.
Throws:
PersistenceException

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  long objID,
                                  long atgID,
                                  long aspID,
                                  int sv,
                                  ArchiveDataKindCombination adkc,
                                  int deletedTreatment,
                                  Task ownerTask)
                           throws PersistenceException
Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.

Parameters:
arcMgr - Der Archiv-Manager.
objID - Die Objekt-ID.
atgID - Die Attributgruppen-ID.
aspID - Die Aspekt-ID.
sv - Die Simulationsvariante.
adkc - Liefert Kennzeichen, von welchen Datensatzarten die Container genommen werden
deletedTreatment - Gibt an, ob geloeschte Container ignoriert werden [0], als 2 Datensaetze (Min/Max) zaehlen [1], oder voll gezaehlt werden [2]
ownerTask - Aufrufender Task. Wird bei Zugriffen auf die Persistenz benoetigt.
Throws:
PersistenceException

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  long objID,
                                  long atgID,
                                  long aspID,
                                  int sv,
                                  ArchiveDataKindCombination adkc,
                                  Task ownerTask)
                           throws PersistenceException
Throws:
PersistenceException
See Also:
mit deletedTreatment==0

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  long objID,
                                  long atgID,
                                  long aspID,
                                  int sv,
                                  int deletedTreatment,
                                  Task ownerTask)
                           throws PersistenceException
Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert. Nimmt die Container aller Datensatzarten.

Parameters:
arcMgr - Der Archiv-Manager.
objID - Die Objekt-ID.
atgID - Die Attributgruppen-ID.
aspID - Die Aspekt-ID.
sv - Die Simulationsvariante.
deletedTreatment - Gibt an, ob geloeschte Container ignoriert werden [0], als 2 Datensaetze (Min/Max) zaehlen [1], oder voll gezaehlt werden [2]
ownerTask - Aufrufender Task. Wird bei Zugriffen auf die Persistenz benoetigt.
Throws:
PersistenceException

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  long objID,
                                  long atgID,
                                  long aspID,
                                  int sv,
                                  Task ownerTask)
                           throws PersistenceException
Throws:
PersistenceException
See Also:
mit deletedTreatment==0

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  long objID,
                                  long atgID,
                                  long aspID,
                                  int sv,
                                  IndexResult oaRes,
                                  IndexResult onRes,
                                  IndexResult naRes,
                                  IndexResult nnRes,
                                  Task ownerTask)
                           throws PersistenceException
Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.

Bei den Container-ID-Listen gilt:

Parameters:
arcMgr - Der Archiv-Manager.
objID - Die Objekt-ID.
atgID - Die Attributgruppen-ID.
aspID - Die Aspekt-ID.
sv - Die Simulationsvariante.
oaRes - Liste mit Container-IDs fuer Online-Aktuell erhaltene Datensaetze.
onRes - Liste mit Container-IDs fuer Online-Nachgeliefert erhaltene Datensaetze.
naRes - Liste mit Container-IDs fuer Nachgefordert-Aktuell erhaltene Datensaetze.
nnRes - Liste mit Container-IDs fuer Nachgefordert-Nachgeliefert erhaltene Datensaetze.
ownerTask - Aufrufender Task. Wird bei Zugriffen auf die Persistenz benoetigt.
Throws:
PersistenceException

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  long objID,
                                  long atgID,
                                  long aspID,
                                  int sv,
                                  IndexResult oaRes,
                                  IndexResult onRes,
                                  IndexResult naRes,
                                  IndexResult nnRes,
                                  int deletedTreatment,
                                  Task ownerTask)
                           throws PersistenceException
Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.

Bei den Container-ID-Listen gilt:

Parameters:
arcMgr - Der Archiv-Manager.
objID - Die Objekt-ID.
atgID - Die Attributgruppen-ID.
aspID - Die Aspekt-ID.
sv - Die Simulationsvariante.
oaRes - Liste mit Container-IDs fuer Online-Aktuell erhaltene Datensaetze.
onRes - Liste mit Container-IDs fuer Online-Nachgeliefert erhaltene Datensaetze.
naRes - Liste mit Container-IDs fuer Nachgefordert-Aktuell erhaltene Datensaetze.
nnRes - Liste mit Container-IDs fuer Nachgefordert-Nachgeliefert erhaltene Datensaetze.
deletedTreatment - Gibt an, ob geloeschte Container ignoriert werden [0], als 2 Datensaetze (Min/Max) zaehlen [1], oder voll gezaehlt werden [2]
ownerTask - Aufrufender Task. Wird bei Zugriffen auf die Persistenz benoetigt.
Throws:
PersistenceException

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  DataIdentTreeIterator it,
                                  IndexResult oaRes,
                                  IndexResult onRes,
                                  IndexResult naRes,
                                  IndexResult nnRes,
                                  int deletedTreatment,
                                  Task ownerTask)
                           throws PersistenceException
Erzeugt einen Multi-Iterator, der ueber mehrere Container und Datensatzarten laeuft und dabei als naechsten DS stets den mit dem kleinsten Index liefert.

Bei den Container-ID-Listen gilt:

Parameters:
arcMgr - Der Archive-Manager.
it - Die aktuelle Position dieses DataIdentTree-Iterators liefert die Datenidentifikation.
oaRes - Liste mit Container-IDs fuer Online-Aktuell erhaltene Datensaetze.
onRes - Liste mit Container-IDs fuer Online-Nachgeliefert erhaltene Datensaetze.
naRes - Liste mit Container-IDs fuer Nachgefordert-Aktuell erhaltene Datensaetze.
nnRes - Liste mit Container-IDs fuer Nachgefordert-Nachgeliefert erhaltene Datensaetze.
deletedTreatment - Gibt an, ob geloeschte Container ignoriert werden [0], als 2 Datensaetze (Min/Max) zaehlen [1], oder voll gezaehlt werden [2]
ownerTask - Aufrufender Task. Wird bei Zugriffen auf die Persistenz benoetigt.
Throws:
PersistenceException

MultiContainerDataIterator

public MultiContainerDataIterator(ArchiveManager arcMgr,
                                  DataIdentTreeIterator it,
                                  IndexResult oaRes,
                                  IndexResult onRes,
                                  IndexResult naRes,
                                  IndexResult nnRes,
                                  Task ownerTask)
                           throws PersistenceException
Throws:
PersistenceException
See Also:
mit deletedTreatment == 0 (IGNORE)
Method Detail

readNextDIdx

public ContainerDataIterator readNextDIdx()
                                   throws PersistenceException
Liefert Datensatz-Iterator zurueck, der auf dem naechsten Datensatz steht.

Returns:
Datensatz-Iterator mit naechstem Datensatz, null wenn alle Iteratoren am Ende sind
Throws:
PersistenceException

readSkipNextDIdx

public ContainerDataIterator readSkipNextDIdx()
                                       throws PersistenceException
Liefert Datensatz-Iterator zurueck, der auf dem naechsten Datensatz steht, und ueberspringt diesen Datensatz.

Returns:
Datensatz-Iterator mit naechstem Datensatz
Throws:
PersistenceException

close

public void close()
Schliesst den Multi-Iterator und damit auch alle noch offenen Container-Dateien.


getCurContID

public long getCurContID()
Liefert die Container-ID des Containers, der den letzten Datensatz geliefert hat.

Returns:
Container-ID des Containers, der den letzten Datensatz geliefert hat

getCurContFileIdx

public int getCurContFileIdx()
Liefert den ContainerFile-Index fuer PersistenceManager.getContainerHeaderParamAsLong(Task,int,KeyValParam) des Containers, der den letzten Datensatz geliefert hat.

Returns:
ContainerFile-Index des Containers, der den letzten Datensatz geliefert hat

descPosition

public String descPosition()
Liefert eine textuelle Beschreibung der aktuellen Position aus Verzeichnis, Container und Datensatz.

Returns:
Textuelle Beschreibung der aktuellen Position

getNextData

private void getNextData(MultiContainerDataIterator.ContainerWalk contWalk)
Sucht im angegebenen Container-Walk den Container mit den naechsten zu liefernden Datensatz und vermerkt diesen Container im Container-Walk.

Parameters:
contWalk - Zu iterierender Container-Walk

accessContainer

private boolean accessContainer(MultiContainerDataIterator.ContainerWalk contWalk)
Oeffnet im angegebenen Container-Walk alle Container innerhalb des aktuellen Container-Walk-Indexes zum Lesen. Der ContainerDataIterator wird in jedem Container bereits auf den ersten Datensatz positioniert.

Parameters:
contWalk - Container-Walk
Returns:
true falls Container zum Lesen geoeffnet werden koennen, false sonst

leaveContainer

private void leaveContainer(MultiContainerDataIterator.ContainerWalk contWalk,
                            int contWalkIdx)
Verlaesst im angegebenen Container-Walk alle Container innerhalb des angegebenen Container-Walk-Indexes.

Parameters:
contWalk - Container-Walk
contWalkIdx - Container-Walk-Index

leaveContainer

private void leaveContainer(MultiContainerDataIterator.ContInfo contInfo)
Verlaesst den durch die Container-Info spezifizierten Container und markiert ihn als erledigt.

Parameters:
contInfo - Zu verlassender Container

getContInfos

private MultiContainerDataIterator.ContInfo[] getContInfos(File[] contFiles,
                                                           ArchiveDataKind dataKind)
                                                    throws PersistenceException
Liefert die Container-Infos zu den uebergebenen Container-Dateien der angegebenen Datensatzart.

Parameters:
contFiles - Liste mit Container-Dateien
dataKind - Datensatzart der Container
Returns:
Liste mit Container-Infos
Throws:
PersistenceException

getContainerFileIdx

private int getContainerFileIdx(ArchiveDataKind dataKind,
                                int contInfoIdx)
Eindeutiger ContainerFile-Index fuer Persistenz-Zugriff.


getDataIdx

private long[] getDataIdx(File contFile,
                          long contId,
                          ArchiveDataKind dataKind)
                   throws PersistenceException
Bei nicht abgeschlossenen Containern (min/max DataIdx steht noch nicht im Header) liefert diese Methode min/max DataIdx entweder aus den Container-Indexen oder aus den Datensaetzen des Containers, falls die Container-Indexe diese Information nicht vorhalten. persMgr.accessContainerReadOnly(ownerTask, contFile) muss bereits vom Aufrufer dieser Methode ausgefuehrt worden sein. persMgr.leaveContainer(ownerTask) muss vom Aufrufer dieser Methode aufgerufen werden, nachdem diese Methode returniert ist.

Parameters:
contFile - Container-Datei
contId - Container-ID
dataKind - Datensatzart des Containers
Returns:
Array mit min und max DataIdx
Throws:
PersistenceException