Class BucketContainerIterator

java.lang.Object
de.bsvrz.ars.ars.persistence.iter.BucketContainerIterator
All Implemented Interfaces:
DataIterator, AutoCloseable

public class BucketContainerIterator extends Object implements DataIterator
Iteriert wie der SequentialContainerIterator über eine Menge von Containern. Diese Klasse muss benutzt werden, wenn sich die Containerdateien zeitlich bzw. datenindexmäßig überschneiden.

In diesem Fall, werden die Container-Dateien in Buckets sortiert, wobei ein Bucket immer eine Menge an sich überschneidenden Containerdateien enthält. Die Buckets selbst werden aufsteigend nach Datenindex sortiert.

Diese Klasse erzeugt die Buckets nicht selbst, sondern sie werden im Konstruktor übergeben. Diese Klasse übernimmt das Iterieren und Sortieren von den einzelnen Datensätzen.

  • Constructor Details

    • BucketContainerIterator

      public BucketContainerIterator(List<List<QueryDataSequence.IndexedContainer>> containerFiles, de.bsvrz.dav.daf.main.archive.ArchiveDataKind adk, de.bsvrz.dav.daf.main.archive.ArchiveOrder order, IdDataIdentification idDataIdentification, DataGapManager gapManager) throws PersistenceException
      Erstellt einen neuen BucketContainerIterator
      Parameters:
      containerFiles - Vorsortierte Container-Dateien. Eine Liste von Container-Dateien-Gruppen, die sich jeweils zeitlich überschneiden. Die äußere Liste ist nach Datenindex sortiert. Die Liste darf nicht leer sein.
      adk - Archivdatenart
      order - Sortierung
      idDataIdentification - Datenidentifikation
      gapManager - Verwaltung von Datenlücken
      Throws:
      PersistenceException - Lesefehler beim Lesen von Daten
  • Method Details

    • peek

      public void peek(ContainerDataResult result) throws PersistenceException
      Description copied from interface: DataIterator
      Kopiert die Daten des aktuellen Elements in das angegebene Result-Objekt. Dies ist eine Optimierung, damit nicht ständig neue Result-Objekt angelegt werden müssen.
      Specified by:
      peek in interface DataIterator
      Parameters:
      result - Ziel-Element
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • peekNext

      public ContainerDataResult peekNext()
      Description copied from interface: DataIterator
      Gibt Daten des auf die gültige Sequenz folgenden Datensatzes zurück, damit kann dann unter anderem bestimmt werden, wie lange der Datensatz gültig ist. Diese Methode darf nur aufgerufen werden, wenn DataIterator.isEmpty() true zurückliefert.
      Specified by:
      peekNext in interface DataIterator
      Returns:
      Ziel-Element oder null, falls es keinen nächsten Datensatz gibt
    • peekDataIndex

      public long peekDataIndex()
      Description copied from interface: DataIterator
      Ruft den aktuellen Datenindex ab. Entspricht
      
      	 ContainerDataResult result = new ContainerDataResult()
      	 this.peek(result)
      	 return result.getDataIndex()
       
      ist aber wahrscheinlich performanter.
      Specified by:
      peekDataIndex in interface DataIterator
      Returns:
      Datenindex des aktuellen Elements
    • peekDataTime

      public long peekDataTime()
      Description copied from interface: DataIterator
      Ruft die aktuelle Datenzeit ab. Entspricht
      
      	 ContainerDataResult result = new ContainerDataResult()
      	 this.peek(result)
      	 return result.getDataTime()
       
      ist aber wahrscheinlich performanter.
      Specified by:
      peekDataTime in interface DataIterator
      Returns:
      Datenzeit des aktuellen Elements
    • peekArchiveTime

      public long peekArchiveTime()
      Description copied from interface: DataIterator
      Ruft die aktuelle Archivzeit ab. Entspricht
      
       ContainerDataResult result = new ContainerDataResult()
       this.peek(result)
       return result.getArchiveTime()
       
      ist aber wahrscheinlich performanter.
      Specified by:
      peekArchiveTime in interface DataIterator
      Returns:
      Archivzeit des aktuellen Elements
    • remove

      Description copied from interface: DataIterator
      Entfernt/Überspringt das aktuelle Element. Der Container wird nicht modifiziert, nur der Iterator.
      Specified by:
      remove in interface DataIterator
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
      SynchronizationFailedException - Synchronisierung fehlgeschlagen
    • isEmpty

      public boolean isEmpty()
      Description copied from interface: DataIterator
      Gibt true zurück, wenn der Iterator erschöpft ist. Ist das der Fall liefern alle anderen Funktionen außer close() NoSuchElementExceptions.
      Specified by:
      isEmpty in interface DataIterator
      Returns:
      true, wenn der Iterator erschöpft ist, sonst false
    • close

      public void close()
      Description copied from interface: DataIterator
      Terminiert das iterieren. Hierdurch werden alle ggf. noch offenen Containerdateien geschlossen.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface DataIterator
    • getContainerManagementData

      @NotNull public ContainerManagementData getContainerManagementData() throws PersistenceException
      Description copied from interface: DataIterator
      Gibt die Containerheaderdaten des Containers des aktuell betrachteten Datensatzes zurück
      Specified by:
      getContainerManagementData in interface DataIterator
      Returns:
      ContainerManagementData
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis