Class DeletedContainerFile

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

public final class DeletedContainerFile
extends java.lang.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 java.lang.String DELETED_CONTAINER_FILENAME
      Dateiname für Reguläte dateien für gelöschte Container
      See Also:
      Constant Field Values
    • DELETED_CONTAINER_FILENAME_TMP

      public static final java.lang.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:
      Constant Field Values
    • DELETED_CONTAINER_FILENAME_BACKUP

      public static final java.lang.String DELETED_CONTAINER_FILENAME_BACKUP
      Dateiname für Temporäres Backup für die vorige Version der Datei
      See Also:
      Constant Field Values
  • Constructor Details

    • DeletedContainerFile

      public DeletedContainerFile​(java.nio.file.Path adkPath, IdContainerFileDir 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​(IdContainerFileDir containerFileDir, PersistenceManager persistenceManager)
  • 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
    • 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
    • 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, SynchronizationFailedException
      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.
      SynchronizationFailedException
    • 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 java.util.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 java.util.Set<java.lang.Long> containers()
      Gibt eine Collction über alle Container in der Datei zurück
      Returns:
      Container-IDs
    • getContainerFileDir

      public IdContainerFileDir getContainerFileDir()
      Gibt die Datenidentifikation zurück
      Returns:
      die Datenidentifikation
    • getFile

      public java.nio.file.Path getFile()
      Gibt die Datei zurück
      Returns:
      die Datei