Package de.bsvrz.ars.ars.persistence
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 wurdestatic byte[]
NO_RIGHTS
Datensatzbytes, falls "keine Rechte" signalisiert wurdestatic byte[]
NO_SOURCE
Datensatzbytes, falls "keine Quelle" signalisiert wurdestatic int
NOT_COMPRESSED
Wert des Compress-Info-Feldes, wenn DS nicht komprimiert iststatic 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 mitaccessContainer()
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_LENLänge des Längenbytes vor jedem Datensatz (4 Bytes, Integer).- See Also:
- Constant Field Values
-
NOT_COMPRESSED
public static final int NOT_COMPRESSEDWert des Compress-Info-Feldes, wenn DS nicht komprimiert ist- See Also:
- Constant Field Values
-
NO_SOURCE
public static final byte[] NO_SOURCEDatensatzbytes, falls "keine Quelle" signalisiert wurde -
NO_DATA
public static final byte[] NO_DATADatensatzbytes, falls "keine Daten" signalisiert wurde -
NO_RIGHTS
public static final byte[] NO_RIGHTSDatensatzbytes, falls "keine Rechte" signalisiert wurde -
POT_GAP
public static final byte[] POT_GAPDatensatzbytes um eine potentielle Datenlücke zu kennzeichnen -
MAX_UNCOMPRESSED
public static int MAX_UNCOMPRESSED -
CONT_FILENAME_FILTER
public static final java.io.FilenameFilter CONT_FILENAME_FILTERFilter zur Erkennung von Containerdateien anhand des Dateinamens. -
BUFFER_SIZE
public static final int BUFFER_SIZEGröß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 classjava.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 dazugetContHdrParamAsLong(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 dazugetContHdrParamAsLong(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
Stellt sicher dass der Header eingelesen wurde. Liest ihn ein, falls noch nicht geschehen.- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
writeContainerHeader
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 mitcreateDefaultContainerHeader(boolean)
neuer Header erzeugt oder mitreadContainerHeader()
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 mitaccessContainer()
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
-