Package de.bsvrz.ars.ars.persistence
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 Summary
Constructors Constructor Description BasicContainerFileHandle(java.io.File containerFile)
Haupt-Konstruktor -
Method Summary
Modifier and Type Method Description protected void
assertReadAccess()
void
close()
Die Methode beendet den Zugriff auf den Container (der Container wird nicht abgeschlossen), wird benötigt für dasAutoCloseable
-interface.void
ensureHeaderRead()
Stellt sicher dass der Header eingelesen wurde.protected ContainerFile
getContainerFile()
Gibt containerFile von diesem BasicContainerFileHandle-Objekt zurück.de.bsvrz.dav.daf.main.archive.ArchiveDataKind
getContainerHeaderParamAsArchiveDataKind(KeyValParam param)
Nachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.boolean
getContainerHeaderParamAsBoolean(ContainerManagementInformation param)
Nachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.boolean
getContainerHeaderParamAsBoolean(KeyValParam param)
Nachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.int
getContainerHeaderParamAsInt(ContainerManagementInformation param)
Nachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.int
getContainerHeaderParamAsInt(KeyValParam param)
Nachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.long
getContainerHeaderParamAsLong(ContainerManagementInformation param)
Nachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.long
getContainerHeaderParamAsLong(KeyValParam param)
Nachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.java.lang.String
getContainerHeaderParamAsString(ContainerManagementInformation param)
Nachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.java.lang.String
getContainerHeaderParamAsString(KeyValParam param)
Nachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.long
getContainerId()
Gibt die Container-ID zurückjava.io.File
getFile()
Gibt die Datei zurückIdContainerFileDir
getLocation()
Gibt den Ort des Containers zurückboolean
isClosedInternal()
Prüft, ob der Container geschlossen ist, ohne den Zugriff auf denDataIdentNode
zu prüfen.boolean
isContainerClosed()
Prüft ob der Container bereits abgeschlossen ist.DataIterator
iterator(java.util.zip.Inflater inflater)
Erzeugt einen Iterator über Containerdaten.void
leaveContainer()
Beendet das Arbeiten mit dem zuvor über eine deraccessContainer()
-Methoden definierten Container.void
readContainerHeader()
Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header.java.lang.String
toString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface de.bsvrz.ars.ars.persistence.iter.DataSequence
iterator
-
Constructor Details
-
BasicContainerFileHandle
Haupt-Konstruktor- Parameters:
containerFile
- Zu öffnende Containerdatei- Throws:
PersistenceException
- Fehler beim Lesen (Datei korrupt?)
-
-
Method Details
-
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 deraccessContainer()
-Methoden definierten Container. -
getContainerHeaderParamAsString
public java.lang.String getContainerHeaderParamAsString(KeyValParam param) throws PersistenceExceptionNachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Wirft einePersistenceException
, 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 PersistenceExceptionNachdem mitreadContainerHeader()
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 einePersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den TypArchiveDataKind
umgeformt werden kann.- Parameters:
param
- Container-Header-Parameter- Returns:
- Datensatzart
- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
getContainerHeaderParamAsBoolean
Nachdem mitreadContainerHeader()
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 einePersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den Typboolean
umgeformt werden kann.- Parameters:
param
- Container-Header-Parameter- Returns:
true
oderfalse
- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
getContainerHeaderParamAsLong
Nachdem mitreadContainerHeader()
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 Typlong
zurück. Wirft einePersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den Typlong
umgeformt werden kann.- Parameters:
param
- Container-Header-Parameter- Returns:
- Ganzzahl als
long
- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
getContainerHeaderParamAsInt
Nachdem mitreadContainerHeader()
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 Typlong
zurück. Wirft einePersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den Typlong
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 PersistenceExceptionNachdem mitreadContainerHeader()
der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden. Wirft einePersistenceException
, falls der Parameter nicht gefunden wurde. Liefert den Wert des Parameters unabhaengig von dessen Typ immer als String zurück.- Specified by:
getContainerHeaderParamAsString
in interfaceContainerManagementData
- Parameters:
param
- Container-Header-Parameter- Returns:
- Parameter-Wert als String
- Throws:
PersistenceException
- See Also:
KeyValParam
-
getContainerHeaderParamAsBoolean
public boolean getContainerHeaderParamAsBoolean(ContainerManagementInformation param) throws PersistenceExceptionNachdem mitreadContainerHeader()
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 einePersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den Typboolean
umgeformt werden kann.- Specified by:
getContainerHeaderParamAsBoolean
in interfaceContainerManagementData
- Parameters:
param
- Container-Header-Parameter- Returns:
true
oderfalse
- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
getContainerHeaderParamAsLong
public long getContainerHeaderParamAsLong(ContainerManagementInformation param) throws PersistenceExceptionNachdem mitreadContainerHeader()
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 Typlong
zurück. Wirft einePersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den Typlong
umgeformt werden kann.- Specified by:
getContainerHeaderParamAsLong
in interfaceContainerManagementData
- Parameters:
param
- Container-Header-Parameter- Returns:
- Ganzzahl als
long
- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
getContainerHeaderParamAsInt
public int getContainerHeaderParamAsInt(ContainerManagementInformation param) throws PersistenceExceptionNachdem mitreadContainerHeader()
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 Typint
zurück. Wirft einePersistenceException
, falls der Parameter nicht gefunden wurde oder nicht in den Typint
umgeformt werden kann.- Specified by:
getContainerHeaderParamAsInt
in interfaceContainerManagementData
- Parameters:
param
- Container-Header-Parameter- Returns:
- Ganzzahl als
int
- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
getLocation
Gibt den Ort des Containers zurück- Specified by:
getLocation
in interfaceContainerManagementData
- 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 dasAutoCloseable
-interface.Die Methode ruft nur
leaveContainer()
auf.- Specified by:
close
in interfacejava.lang.AutoCloseable
-
readContainerHeader
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 mitgetContainerHeaderParamAsString(KeyValParam)
abgefragt werden.- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
iterator
public DataIterator iterator(@Nullable java.util.zip.Inflater inflater) throws PersistenceExceptionErzeugt 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 interfaceDataSequence
- 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
Prüft ob der Container bereits abgeschlossen ist.- Returns:
- Kennzeichen, ob Container abgeschlossen ist
- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-
isClosedInternal
Prüft, ob der Container geschlossen ist, ohne den Zugriff auf denDataIdentNode
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 classjava.lang.Object
-
ensureHeaderRead
Stellt sicher dass der Header eingelesen wurde. Liest ihn ein, falls noch nicht geschehen.- Throws:
PersistenceException
- Lesefehler im Persistenzverzeichnis
-