Class ContainerFile

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

public final class ContainerFile extends Object
Diese Klasse enthält die Funktionalitaet zum Erzeugen, Lesen, Schreiben und Loeschen von Container-Dateien. Jeder Task, der mit Container-Dateien arbeitet, enthält ein Objekt dieser Klasse. Die Sichtbarkeit von Konstruktor und Methoden ist beschraenkt, da diese Klasse nur durch den PersistenceManager im gleichen Package benutzt wird. Dieser hält für jede anfragende AbstractTask ein Objekt dieser Klasse und leitet Anfragen bzgl. Container-Dateien an dieses ContainerFile-Objekt weiter.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    Größe der Daten-Puffer in Byte.
    static final FilenameFilter
    Filter zur Erkennung von Containerdateien anhand des Dateinamens.
    static final Pattern
    Regulaerer Ausdruck zur Erkennung von Containerdateinamen.
    static final int
    Länge des Längenbytes vor jedem Datensatz (4 Bytes, Integer).
    static int
    Datensätze bis zu dieser Länge bleiben immer unkomprimiert.
    static final byte[]
    Datensatzbytes, falls "keine Daten" signalisiert wurde
    static final byte[]
    Datensatzbytes, falls "keine Rechte" signalisiert wurde
    static final byte[]
    Datensatzbytes, falls "keine Quelle" signalisiert wurde
    static final int
    Wert des Compress-Info-Feldes, wenn DS nicht komprimiert ist
    static final byte[]
    Datensatzbytes um eine potentielle Datenlücke zu kennzeichnen
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Schliesst die Container-Datei für den mit einer der accessContainer()-Methoden spezifizierten Container.
    void
    Stellt sicher dass der Header eingelesen wurde.
    static String
    getContainerFileName(long containerId)
    Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.
    long
     
     
    static long
    getContID(String fileName)
    Liefert die Container-ID zum angegebenen Container-Datei-Namen, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.
    static long
    Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.
    static int
    Ermittelt die Gesamtlänge des mit accessContainer() im Zugriff befindlichen Containers.
    static int
    Ermittelt den vollständigen Overhead für einen Datensatz.
    static boolean
    Gibt true zurück, wenn es sich bei der angegebenen Datei (laut Dateinamenschema) um eine Containerdatei handelt.
     
    static void
    writeContainerFileSafely(Path containerFile, boolean create, WriteAction writeAction)
    Führt die angegebene Schreib-Aktion auf die Containerdatei aus und behandelt dabei Fehler
    void
    Schreibt die aktuellen Header-Parameter an den Anfang der Container-Datei.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • DATALEN_LEN

      public static final int DATALEN_LEN
      Länge des Längenbytes vor jedem Datensatz (4 Bytes, Integer).
      See Also:
    • NOT_COMPRESSED

      public static final int NOT_COMPRESSED
      Wert des Compress-Info-Feldes, wenn DS nicht komprimiert ist
      See Also:
    • NO_SOURCE

      public static final byte[] NO_SOURCE
      Datensatzbytes, falls "keine Quelle" signalisiert wurde
    • NO_DATA

      public static final byte[] NO_DATA
      Datensatzbytes, falls "keine Daten" signalisiert wurde
    • NO_RIGHTS

      public static final byte[] NO_RIGHTS
      Datensatzbytes, falls "keine Rechte" signalisiert wurde
    • POT_GAP

      public static final byte[] POT_GAP
      Datensatzbytes um eine potentielle Datenlücke zu kennzeichnen
    • MAX_UNCOMPRESSED

      public static int MAX_UNCOMPRESSED
      Datensätze bis zu dieser Länge bleiben immer unkomprimiert. Muss mindestens so gross sein wie NO_SOURCE, NO_DATA, POT_GAP lang sind!

      Auf Integer.MAX_VALUE setzen, um die Komprimierung zu deaktivieren.

    • CONT_FILENAME_PAT

      public static final Pattern CONT_FILENAME_PAT
      Regulaerer Ausdruck zur Erkennung von Containerdateinamen.
    • CONT_FILENAME_FILTER

      public static final FilenameFilter CONT_FILENAME_FILTER
      Filter zur Erkennung von Containerdateien anhand des Dateinamens.
    • BUFFER_SIZE

      public static final int BUFFER_SIZE
      Größe der Daten-Puffer in Byte. Wenn eine Anfrage 10000 Unteranfragen enthält, werden auch 10000 ContainerFile-Objekte angelegt. Drum nicht zu gross wählen. Bei Bedarf werden Größere Puffer extra angelegt.
      See Also:
  • Constructor Details

    • ContainerFile

      public ContainerFile()
  • Method Details

    • isContainerFile

      public static boolean isContainerFile(Path it)
      Gibt true zurück, wenn es sich bei der angegebenen Datei (laut Dateinamenschema) um eine Containerdatei handelt.
      Parameters:
      it - Datei
      Returns:
      true, wenn es sich bei der angegebenen Datei (laut Dateinamenschema) um eine Containerdatei handelt, sonst false
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getContID

      public static long getContID(Path file)
      Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird. Alternativ kann die Container-ID aus den Container-Header-Parametern gelesen werden; siehe dazu getContHdrParamAsLong(KeyValParam).
      Parameters:
      file - Container-Datei
      Returns:
      Container-ID
    • getContID

      public static long getContID(String fileName)
      Liefert die Container-ID zum angegebenen Container-Datei-Namen, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird. Alternativ kann die Container-ID aus den Container-Header-Parametern gelesen werden; siehe dazu getContHdrParamAsLong(KeyValParam).
      Parameters:
      fileName - Container-Datei
      Returns:
      Container-ID
    • getContainerFileName

      public static String getContainerFileName(long containerId)
      Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.
      Parameters:
      containerId - Container-ID
      Returns:
      Dateiname
    • closeContainer

      public void closeContainer(StandardOpenContainerData openContainerData) throws PersistenceException
      Schliesst die Container-Datei für den mit einer der accessContainer()-Methoden spezifizierten Container. Der Container-Header wird entsprechend aktualisiert.
      Parameters:
      openContainerData - Daten des offenen Containers, die in den Header eingetragen werden sollen
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • 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
    • writeContainerHeader

      public void writeContainerHeader() throws PersistenceException
      Schreibt die aktuellen Header-Parameter an den Anfang der Container-Datei. Bei einer neuen leeren Datei werden die Parameter an den Anfang der Datei angehangen, bei einer zu ändernden Container-Datei werden die vorhandenen Parameter überschrieben. Bevor mit dieser Methode der Header geschrieben werden kann, muss entweder mit createDefaultContainerHeader(ContainerDirectory) neuer Header erzeugt oder mit readContainerHeader() ein Header eingelesen worden sein.
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • writeContainerFileSafely

      public static void writeContainerFileSafely(Path containerFile, boolean create, WriteAction writeAction) throws PersistenceException
      Führt die angegebene Schreib-Aktion auf die Containerdatei aus und behandelt dabei Fehler
      Parameters:
      containerFile - Pfad der Containerdatei
      create - Daten erstellen? Ansonsten wird an die Datei angehängt.
      writeAction - Schreibaktion (Definiert, was geschrieben werden soll)
      Throws:
      PersistenceException - Fehler beim Schreiben
    • getHeaderLen

      public static int getHeaderLen()
      Ermittelt die Gesamtlänge des mit accessContainer() im Zugriff befindlichen Containers.
      Returns:
      Länge der Container-Datei
    • getTotalDataOverhead

      public static int getTotalDataOverhead()
      Ermittelt den vollständigen Overhead für einen Datensatz. Inklusive Längenbyte, Datensatz-Header, Compress-Feld und abschliessendem Separator.
      Returns:
      Overhead in Bytes
    • getContainerId

      public long getContainerId()
    • getContFile

      @Nullable public Path getContFile()