Class BasicContainerFileHandle

java.lang.Object
de.bsvrz.ars.ars.persistence.BasicContainerFileHandle
All Implemented Interfaces:
ContainerManagementData, DataSequence, java.lang.AutoCloseable
Direct Known Subclasses:
ContainerFileHandle

public class BasicContainerFileHandle
extends java.lang.Object
implements java.lang.AutoCloseable, ContainerManagementData, DataSequence
Diese Klasse bietet den Dateizugriff auf eine Containerdatei. Mit Methoden wie getContainerHeaderParamAsString(ContainerManagementInformation) können einzelne Header-Einträge abgefragt werden. Die Methode DataSequence.iterator() iteriert über die Containerdaten.

Instanzen dieser Klasse müssen nach Verwendung geschlossen werden (AutoCloseable).

Diese Klasse erlaubt den unsynchronisierten nur-lesenden Zugriff auf beliebige Containerdateien und erlaubt damit das Lesen von Containerdateien außerhalb des Persistenzverzeichnisses und während der Initialisierung des Archivsystems und auch von externen Tools wie ArchiveFileViewer oder ContainerRescue.

Für den synchronisierten Zugriff im Persistenzverzeichnis existiert die Subklasse ContainerFileHandle.

  • Constructor Details

    • BasicContainerFileHandle

      public BasicContainerFileHandle​(java.io.File containerFile) throws PersistenceException
      Haupt-Konstruktor
      Parameters:
      containerFile - Zu öffnende Containerdatei
      Throws:
      PersistenceException - Fehler beim Lesen (Datei korrupt?)
  • Method Details

    • getContainerFile

      protected final ContainerFile getContainerFile()
      Gibt containerFile von diesem BasicContainerFileHandle-Objekt zurück.
      Returns:
      containerFile (Typ ContainerFile)
    • leaveContainer

      public void leaveContainer()
      Beendet das Arbeiten mit dem zuvor über eine der accessContainer()-Methoden definierten Container.
    • getContainerHeaderParamAsString

      public java.lang.String getContainerHeaderParamAsString​(KeyValParam param) throws PersistenceException
      Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Wirft eine PersistenceException, falls der Parameter nicht gefunden wurde. Liefert den Wert des Parameters unabhaengig von dessen Typ immer als String zurück.
      Parameters:
      param - Container-Header-Parameter
      Returns:
      Parameter-Wert als String
      Throws:
      PersistenceException
      See Also:
      KeyValParam
    • getContainerHeaderParamAsArchiveDataKind

      public de.bsvrz.dav.daf.main.archive.ArchiveDataKind getContainerHeaderParamAsArchiveDataKind​(KeyValParam param) throws PersistenceException
      Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als Datensatzart zurück. Wirft eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ ArchiveDataKind umgeformt werden kann.
      Parameters:
      param - Container-Header-Parameter
      Returns:
      Datensatzart
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • getContainerHeaderParamAsBoolean

      public boolean getContainerHeaderParamAsBoolean​(KeyValParam param) throws PersistenceException
      Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als boolschen Wert zurück. Wirft eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ boolean umgeformt werden kann.
      Parameters:
      param - Container-Header-Parameter
      Returns:
      true oder false
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • getContainerHeaderParamAsLong

      public long getContainerHeaderParamAsLong​(KeyValParam param) throws PersistenceException
      Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long zurück. Wirft eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ long umgeformt werden kann.
      Parameters:
      param - Container-Header-Parameter
      Returns:
      Ganzzahl als long
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • getContainerHeaderParamAsInt

      public int getContainerHeaderParamAsInt​(KeyValParam param) throws PersistenceException
      Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long zurück. Wirft eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ long umgeformt werden kann.
      Parameters:
      param - Container-Header-Parameter
      Returns:
      Ganzzahl als long
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • getContainerHeaderParamAsString

      public java.lang.String getContainerHeaderParamAsString​(ContainerManagementInformation param) throws PersistenceException
      Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Wirft eine PersistenceException, falls der Parameter nicht gefunden wurde. Liefert den Wert des Parameters unabhaengig von dessen Typ immer als String zurück.
      Specified by:
      getContainerHeaderParamAsString in interface ContainerManagementData
      Parameters:
      param - Container-Header-Parameter
      Returns:
      Parameter-Wert als String
      Throws:
      PersistenceException
      See Also:
      KeyValParam
    • getContainerHeaderParamAsBoolean

      public boolean getContainerHeaderParamAsBoolean​(ContainerManagementInformation param) throws PersistenceException
      Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als boolschen Wert zurück. Wirft eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ boolean umgeformt werden kann.
      Specified by:
      getContainerHeaderParamAsBoolean in interface ContainerManagementData
      Parameters:
      param - Container-Header-Parameter
      Returns:
      true oder false
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • getContainerHeaderParamAsLong

      public long getContainerHeaderParamAsLong​(ContainerManagementInformation param) throws PersistenceException
      Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ long zurück. Wirft eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ long umgeformt werden kann.
      Specified by:
      getContainerHeaderParamAsLong in interface ContainerManagementData
      Parameters:
      param - Container-Header-Parameter
      Returns:
      Ganzzahl als long
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • getContainerHeaderParamAsInt

      public int getContainerHeaderParamAsInt​(ContainerManagementInformation param) throws PersistenceException
      Nachdem mit readContainerHeader() der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Liefert den Wert des Parameters als numerischen Wert vom Typ int zurück. Wirft eine PersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typ int umgeformt werden kann.
      Specified by:
      getContainerHeaderParamAsInt in interface ContainerManagementData
      Parameters:
      param - Container-Header-Parameter
      Returns:
      Ganzzahl als int
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • getLocation

      public IdContainerFileDir getLocation() throws PersistenceException
      Gibt den Ort des Containers zurück
      Specified by:
      getLocation in interface ContainerManagementData
      Returns:
      den Ort des Containers
      Throws:
      PersistenceException
    • close

      public void close()
      Die Methode beendet den Zugriff auf den Container (der Container wird nicht abgeschlossen), wird benötigt für das AutoCloseable-interface.

      Die Methode ruft nur leaveContainer() auf.

      Specified by:
      close in interface java.lang.AutoCloseable
    • readContainerHeader

      public void readContainerHeader() throws PersistenceException
      Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header. Die Container-Header Parameter stehen dann als Key/Value-Paare zur Verfuegung und können mit getContainerHeaderParamAsString(KeyValParam) abgefragt werden.
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • iterator

      public DataIterator iterator​(@Nullable java.util.zip.Inflater inflater) throws PersistenceException
      Erzeugt einen Iterator über Containerdaten. Falls der Container nach der alten Methode gelöscht ist (und nur aus Header und Datensatzbereich besteht) werden nur die Datenindexe zurückgegeben.

      Dieses Verhalten wird nur für die Migration zu einem DeletedContainerFile verwendet. In der Regel ist ein BasicContainerFileHandle nicht gelöscht.

      Specified by:
      iterator in interface DataSequence
      Parameters:
      inflater - Klasse zum Dekomprimieren der Daten. Darf null sein, dann sind die einzelnen Rohdaten nicht verfügbar.
      Returns:
      Iterator
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • getContainerId

      public long getContainerId()
      Gibt die Container-ID zurück
      Returns:
      Container-ID
    • isContainerClosed

      public boolean isContainerClosed() throws PersistenceException
      Prüft ob der Container bereits abgeschlossen ist.
      Returns:
      Kennzeichen, ob Container abgeschlossen ist
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • isClosedInternal

      public boolean isClosedInternal() throws PersistenceException
      Prüft, ob der Container geschlossen ist, ohne den Zugriff auf den DataIdentNode zu prüfen.
      Returns:
      Kennzeichen, ob Container abgeschlossen ist
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • assertReadAccess

      protected void assertReadAccess()
    • getFile

      public java.io.File getFile()
      Gibt die Datei zurück
      Returns:
      die Datei
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class java.lang.Object
    • ensureHeaderRead

      public void ensureHeaderRead() throws PersistenceException
      Stellt sicher dass der Header eingelesen wurde. Liest ihn ein, falls noch nicht geschehen.
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis