Class DeletedContainerFile

java.lang.Object
de.bsvrz.ars.ars.persistence.DeletedContainerFile

public final class DeletedContainerFile extends Object
Klasse, die den Zugriff auf die Datei bietet, die die Header und Datensatzindizes von gelöschten Containern enthält.

Soll eine vorhandene Datei eingelesen werden, muss nach dem Konstruktor read() aufgerufen werden. Die Datei wird dabei so weit gelesen wie möglich. Treten durch fehlerhafte Daten dabei Exceptions auf, enthält das DeletedContainerFile trotzdem alle Daten, die noch gelesen werden konnten, d.h. es hat einen konsistenten Zustand.

  • Field Details

    • DELETED_CONTAINER_FILENAME

      public static final String DELETED_CONTAINER_FILENAME
      Dateiname für Reguläte dateien für gelöschte Container
      See Also:
    • DELETED_CONTAINER_FILENAME_TMP

      public static final String DELETED_CONTAINER_FILENAME_TMP
      Dateiname unter der die neue Datei geschrieben wird. Sie wird erst nach "_deleted.dat" umbenannt, wenn sie erfolgreich komplett geschrieben wurde.
      See Also:
    • DELETED_CONTAINER_FILENAME_BACKUP

      public static final String DELETED_CONTAINER_FILENAME_BACKUP
      Dateiname für temporäres Backup für die vorige Version der Datei
      See Also:
  • Constructor Details

    • DeletedContainerFile

      public DeletedContainerFile(Path adkPath, ContainerDirectory containerFileDir)
      Erstellt ein neues DeletedContainerFile ohne Inhalt. Soll die existierende Datei (falls vorhanden) gelesen werden muss read() aufgerufen werden.
      Parameters:
      adkPath - Pfad der Archivdatenart (Verzeichnis, in dem Containerdateien angelegt werden)
      containerFileDir - Datenidentifikation (Wird später beim Iterator benutzt, um die Datenidentifikation an den Daten zurückzugeben)
    • DeletedContainerFile

      public DeletedContainerFile(ContainerDirectory containerFileDir, PersistenceDirectory persistenceDirectory)
      Erstellt ein neues DeletedContainerFile ohne Inhalt. Soll die existierende Datei (falls vorhanden) gelesen werden muss read() aufgerufen werden.
      Parameters:
      containerFileDir - Datenidentifikation (Wird später beim Iterator benutzt, um die Datenidentifikation an den Daten zurückzugeben)
      persistenceDirectory - Persistenzverzeichnis
  • Method Details

    • exists

      public boolean exists()
      Gibt true zurück, wenn eien bestehende Datei existiert
      Returns:
      true, wenn eien bestehende Datei existiert, sonst false
    • read

      public void read() throws PersistenceException
      Liest die bestehende Datei ein.
      Throws:
      PersistenceException - Fehler in der Datei oder IO-Fehler
    • write

      public void write() throws PersistenceException
      Schreibt die aktuelle Datei. Dabei wird der Inhalt in eine temporäre Datei geschreiben, die existierende Datei falls vorhanden weggeschoben, die temporäre Datei in den richtige Dateinamen umbenannt und ggf. dann bei Erfolg die vorher weg geschobene Datei gelöscht.

      Auf diese Weise ist die Datei, falls sie existiert, immer in einem konsistenten Zustand.

      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • addDeletedContainer

      public void addDeletedContainer(BasicContainerFileHandle existingContainer) throws PersistenceException, SynchronizationFailedException
      Fügt einen (gelöschten) Container hinzu
      Parameters:
      existingContainer - Container, der in die Datei eingetragen werden soll
      Throws:
      PersistenceException - Falls der Container nicht gelesen werden konnte
      SynchronizationFailedException - Fehler bei Synchronisierung
    • addDeletedContainer

      public void addDeletedContainer(ContainerManagementData header, DataSequence data) throws PersistenceException, SynchronizationFailedException
      Fügt einen (gelöschten) Container hinzu
      Parameters:
      header - Container-Header
      data - Container-Daten
      Throws:
      PersistenceException - Falls der Container nicht gelesen werden konnte
      SynchronizationFailedException - Fehler bei Synchronisierung
    • removeDeletedContainer

      public void removeDeletedContainer(long containerID)
      Entfernt einen gelöschten Container aus der Datei (z. B. sinnvoll beim Wiederherstellen)
      Parameters:
      containerID - Container-ID
    • dataIterator

      public DataIterator dataIterator(long containerId) throws PersistenceException
      Iteriert über die Daten eines gelöschten Containers. Der Iterator enthält nur Werte für die folgenden Attribute: containerID, dataIndex, dataKind.
      Parameters:
      containerId - Container-ID
      Returns:
      DataIterator
      Throws:
      PersistenceException - Fehler beim elsen aus Datei oder angegebener Container ist nicht enthalten.
    • headers

      public ContainerManagementData headers(long containerId)
      Gibt die Container-Header eines gelöschten Containers zurück
      Parameters:
      containerId - ID
      Returns:
      Headers oder null (falls Container mit der ID nicht enthalten)
    • deletedBlocks

      @Nullable public List<DeletedContainerFile.IndexRange> deletedBlocks(long containerId)
      Gibt die Liste mit monotonen Datenindexblöcken für den angegebenen gelöschten Container zurück.
      Parameters:
      containerId - Container-ID
      Returns:
      Liste oder null (falls Container mit der ID nicht enthalten)
    • containers

      public Set<Long> containers()
      Gibt eine Collection über alle Container in der Datei zurück
      Returns:
      Container-IDs
    • getFile

      public Path getFile()
      Gibt die Datei zurück
      Returns:
      die Datei