Package de.bsvrz.ars.ars.persistence
Class ContainerFile
java.lang.Object
de.bsvrz.ars.ars.persistence.ContainerFile
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
FieldsModifier and TypeFieldDescriptionstatic 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 wurdestatic final byte[]
Datensatzbytes, falls "keine Rechte" signalisiert wurdestatic final byte[]
Datensatzbytes, falls "keine Quelle" signalisiert wurdestatic final int
Wert des Compress-Info-Feldes, wenn DS nicht komprimiert iststatic final byte[]
Datensatzbytes um eine potentielle Datenlücke zu kennzeichnen -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
closeContainer
(StandardOpenContainerData openContainerData) Schliesst die Container-Datei für den mit einer deraccessContainer()
-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
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 mitaccessContainer()
im Zugriff befindlichen Containers.static int
Ermittelt den vollständigen Overhead für einen Datensatz.static boolean
isContainerFile
(Path it) Gibttrue
zurück, wenn es sich bei der angegebenen Datei (laut Dateinamenschema) um eine Containerdatei handelt.toString()
static void
writeContainerFileSafely
(Path containerFile, boolean create, WriteAction writeAction) Führt die angegebene Schreib-Aktion auf die Containerdatei aus und behandelt dabei Fehlervoid
Schreibt die aktuellen Header-Parameter an den Anfang der Container-Datei.
-
Field Details
-
DATALEN_LEN
public static final int DATALEN_LENLänge des Längenbytes vor jedem Datensatz (4 Bytes, Integer).- See Also:
-
NOT_COMPRESSED
public static final int NOT_COMPRESSEDWert des Compress-Info-Feldes, wenn DS nicht komprimiert ist- See Also:
-
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_PAT
Regulaerer Ausdruck zur Erkennung von Containerdateinamen. -
CONT_FILENAME_FILTER
Filter 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:
-
-
Constructor Details
-
ContainerFile
public ContainerFile()
-
-
Method Details
-
isContainerFile
Gibttrue
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, sonstfalse
-
toString
-
getContID
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
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
Liefert den Dateinamen des Daten-Containers mit der angegebenen Container-ID.- Parameters:
containerId
- Container-ID- Returns:
- Dateiname
-
closeContainer
Schliesst die Container-Datei für den mit einer deraccessContainer()
-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
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(ContainerDirectory)
neuer Header erzeugt oder mitreadContainerHeader()
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 Containerdateicreate
- 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 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:
- Overhead in Bytes
-
getContainerId
public long getContainerId() -
getContFile
-