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 voidassertReadAccess()voidclose()Die Methode beendet den Zugriff auf den Container (der Container wird nicht abgeschlossen), wird benötigt für dasAutoCloseable-interface.voidensureHeaderRead()Stellt sicher dass der Header eingelesen wurde.protected ContainerFilegetContainerFile()Gibt containerFile von diesem BasicContainerFileHandle-Objekt zurück.de.bsvrz.dav.daf.main.archive.ArchiveDataKindgetContainerHeaderParamAsArchiveDataKind(KeyValParam param)Nachdem mitreadContainerHeader()der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.booleangetContainerHeaderParamAsBoolean(ContainerManagementInformation param)Nachdem mitreadContainerHeader()der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.booleangetContainerHeaderParamAsBoolean(KeyValParam param)Nachdem mitreadContainerHeader()der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.intgetContainerHeaderParamAsInt(ContainerManagementInformation param)Nachdem mitreadContainerHeader()der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.intgetContainerHeaderParamAsInt(KeyValParam param)Nachdem mitreadContainerHeader()der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.longgetContainerHeaderParamAsLong(ContainerManagementInformation param)Nachdem mitreadContainerHeader()der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.longgetContainerHeaderParamAsLong(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.StringgetContainerHeaderParamAsString(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.StringgetContainerHeaderParamAsString(KeyValParam param)Nachdem mitreadContainerHeader()der Header einer Container-Datei eingelesen worden ist, kann mit dieser Methode der Wert eines Header-Parameters ermittelt werden.longgetContainerId()Gibt die Container-ID zurückjava.io.FilegetFile()Gibt die Datei zurückIdContainerFileDirgetLocation()Gibt den Ort des Containers zurückbooleanisClosedInternal()Prüft, ob der Container geschlossen ist, ohne den Zugriff auf denDataIdentNodezu prüfen.booleanisContainerClosed()Prüft ob der Container bereits abgeschlossen ist.DataIteratoriterator(java.util.zip.Inflater inflater)Erzeugt einen Iterator über Containerdaten.voidleaveContainer()Beendet das Arbeiten mit dem zuvor über eine deraccessContainer()-Methoden definierten Container.voidreadContainerHeader()Liest den Header der Container-Datei ein und springt im Eingabestrom an die Stelle hinter dem Header.java.lang.StringtoString()Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods 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 TypArchiveDataKindumgeformt 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 Typbooleanumgeformt werden kann.- Parameters:
param- Container-Header-Parameter- Returns:
trueoderfalse- 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 Typlongzurück. Wirft einePersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typlongumgeformt 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 Typlongzurück. Wirft einePersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typlongumgeformt 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:
getContainerHeaderParamAsStringin 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 Typbooleanumgeformt werden kann.- Specified by:
getContainerHeaderParamAsBooleanin interfaceContainerManagementData- Parameters:
param- Container-Header-Parameter- Returns:
trueoderfalse- 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 Typlongzurück. Wirft einePersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typlongumgeformt werden kann.- Specified by:
getContainerHeaderParamAsLongin 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 Typintzurück. Wirft einePersistenceException, falls der Parameter nicht gefunden wurde oder nicht in den Typintumgeformt werden kann.- Specified by:
getContainerHeaderParamAsIntin 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:
getLocationin 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:
closein 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
DeletedContainerFileverwendet. In der Regel ist ein BasicContainerFileHandle nicht gelöscht.- Specified by:
iteratorin 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 denDataIdentNodezu 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:
toStringin classjava.lang.Object
-
ensureHeaderRead
Stellt sicher dass der Header eingelesen wurde. Liest ihn ein, falls noch nicht geschehen.- Throws:
PersistenceException- Lesefehler im Persistenzverzeichnis
-