Class ContainerFile

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

public class ContainerFile
extends java.lang.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 Task ein Objekt dieser Klasse und leitet Anfragen bzgl. Container-Dateien an dieses ContainerFile-Objekt weiter.
  • Field Summary

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

    Constructors
    Constructor Description
    ContainerFile()  
  • Method Summary

    Modifier and Type Method Description
    void ensureHeaderRead()
    Stellt sicher dass der Header eingelesen wurde.
    static java.lang.String getContainerFileName​(long containerId)
    Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.
    long getContainerId()  
    java.io.File getContFile()  
    static long getContID​(java.io.File file)
    Liefert die Container-ID zur angegebenen Container-Datei, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.
    static long getContID​(java.lang.String fileName)
    Liefert die Container-ID zum angegebenen Container-Datei-Namen, indem die im Container-Dateinamen enthaltene Container-ID ausgelesen wird.
    static int getHeaderLen()
    Ermittelt die Gesamtlänge des mit accessContainer() im Zugriff befindlichen Containers.
    IdContainerFileDir getLocation()  
    static int getTotalDataOverhead()
    Ermittelt den vollständigen Overhead für einen Datensatz.
    static boolean isContainerFile​(java.io.File f)
    Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist.
    static boolean isContainerFileName​(java.lang.String name)
    Liefert Kennzeichen, ob der angegebene Dateiname eine mögliche Container-Datei ist.
    java.lang.String toString()  
    static void writeContainerFileSafely​(java.nio.file.Path containerFile, boolean create, WriteAction writeAction)  
    void writeContainerHeader()
    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:
      Constant Field Values
    • NOT_COMPRESSED

      public static final int NOT_COMPRESSED
      Wert des Compress-Info-Feldes, wenn DS nicht komprimiert ist
      See Also:
      Constant Field Values
    • 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_FILTER

      public static final java.io.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:
      Constant Field Values
  • Constructor Details

    • ContainerFile

      public ContainerFile()
  • Method Details

    • toString

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

      public static boolean isContainerFile​(java.io.File f)
      Liefert Kennzeichen, ob die angegebene Datei eine Container-Datei ist.
      Parameters:
      f - Datei
      Returns:
      Kennzeichen
    • isContainerFileName

      public static boolean isContainerFileName​(java.lang.String name)
      Liefert Kennzeichen, ob der angegebene Dateiname eine mögliche Container-Datei ist.
      Parameters:
      name - Dateiname
      Returns:
      Kennzeichen
    • getContID

      public static long getContID​(java.io.File 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​(java.lang.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 java.lang.String getContainerFileName​(long containerId)
      Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.
      Parameters:
      containerId - Container-ID
      Returns:
      Dateiname
    • 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(boolean) neuer Header erzeugt oder mit readContainerHeader() ein Header eingelesen worden sein.
      Throws:
      PersistenceException - Lesefehler im Persistenzverzeichnis
    • writeContainerFileSafely

      public static void writeContainerFileSafely​(java.nio.file.Path containerFile, boolean create, WriteAction writeAction) throws PersistenceException
      Throws:
      PersistenceException
    • 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:
    • getContainerId

      public long getContainerId()
    • getContFile

      public java.io.File getContFile()
    • getLocation

      public IdContainerFileDir getLocation()