de.bsvrz.ars.ars.persistence
Class ContainerBackupIndex

java.lang.Object
  extended by de.bsvrz.ars.ars.persistence.ContainerBackupIndex

public final class ContainerBackupIndex
extends Object

Ein ContainerBackupIndex ist eine Klasse, die innerhalb einer Datenindentifikationsverzeichnisses speichert, welche Container in diesem Verzeichnis noch zu sichern sind, damit nicht jeder einzelne ContainerHEader geprüft werden muss.
Es wird eine Datei namens _backupindex.idx gespeichert, welche die eigentlichen Einträge enthält. Diese besteht aus einem Header-Bereich un einem Datenbereich, wobei der Datenbereich unterteilt ist, in sortierte Daten und unsortierte Daten. Zur Optimierung des Zugriffs, wird, falls es notwendig wird, der komplette Datenbereich sortiert.
Als Daten enthält ein ContainerBackupIndex ContainerIDs mit einem zugehörigen Byte-Wert, der den Status dieses Container-Eintrags angibt (sichern oder ungültig). Sichern bedeutet, dass der Container gesichert wird. Ungültig bedeutet, dass ein Eintrag ungültig ist. Ein Eintrag wird typischerweise als ungültig markiert, wenn der entsprechende Container gesichert wurde, um diesen nicht erneut zu sichern. Einen Eintrag als ungültig zu markieren ist performancemäßig sinnvoller, als ständig den gesamten Datenbereich neu zu schreiben um eventuelle Lücken zu schließen.

Author:
Kappich Systemberatung

Field Summary
static String BACKUP_INDEX_FILE_NAME
          Dateiname unter dem der Index gespchert wird
static int MEDIUM_ID_UNKNOWN
          Maximale MedienID unbekannt
static int MEDIUM_ID_UNSAVED
          Datenidentifikation wurde noch nie gesichert
 
Method Summary
 void appendContainerID(long containerID)
          Fügt dem Index eine ContainerID hinzu
 void close()
          Schließt diesen ContainerBackupIndex.
static ContainerBackupIndex createNewContainerBackupIndex(File path)
          Erstellt einen neuen, leeren ContainerBackupIndex im angegebenen Verzeichnis.
static boolean deleteContainerBackupIndex(File path)
          Löscht den ContainerBackupIndex im angebenden Verzeichnis
static boolean existsIn(File path)
          Prüft ob im angebenden Verzeichnis ein ContainerBackupIndex existiert
static boolean existsIn(String path)
          Prüft ob im angebenden Verzeichnis ein ContainerBackupIndex existiert
protected  void finalize()
           
static ContainerBackupIndex getContainerBackupIndex(File path)
          Gibt einen ContainerBackupIndex aus einem angegebenen Verzeichnis zurück
static ContainerBackupIndex getContainerBackupIndex(String path)
          Gibt einen ContainerBackupIndex aus einem angegebenen Verzeichnis zurück
 List<Long> getContainerIDs()
          Gibt alle zu sichernden ContainerIDs im Index zurück
 int getMaxMedienID()
          Gibt die in der ContainerBackupIndex-Datei maximal gespeicherte MedienID zurück.
 boolean removeContainerID(long containerID)
          Entfernt eine ContainerID aus dem Index
 boolean removeContainerID(long containerID, int mediumID)
          Entfernt eine ContainerID aus dem Index
 void setMaxMedienID(int mediumID)
          Setzt die MedienID auf einen festgelegten Wert (erlaubt auch das Zurücksetzen oder das Setzen von MEDIUM_ID_UNSAVED bzw.
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

MEDIUM_ID_UNKNOWN

public static final int MEDIUM_ID_UNKNOWN
Maximale MedienID unbekannt

See Also:
Constant Field Values

MEDIUM_ID_UNSAVED

public static final int MEDIUM_ID_UNSAVED
Datenidentifikation wurde noch nie gesichert

See Also:
Constant Field Values

BACKUP_INDEX_FILE_NAME

public static final String BACKUP_INDEX_FILE_NAME
Dateiname unter dem der Index gespchert wird

See Also:
Constant Field Values
Method Detail

getContainerBackupIndex

public static ContainerBackupIndex getContainerBackupIndex(File path)
Gibt einen ContainerBackupIndex aus einem angegebenen Verzeichnis zurück

Parameters:
path - Verzeichnis
Returns:
ein ContainerBackupIndex oder null falls er noch nicht existiert

getContainerBackupIndex

public static ContainerBackupIndex getContainerBackupIndex(String path)
                                                    throws IOException
Gibt einen ContainerBackupIndex aus einem angegebenen Verzeichnis zurück

Parameters:
path - Verzeichnis
Returns:
ein ContainerBackupIndex oder null falls er noch nicht existiert
Throws:
IOException - IO-Fehler

createNewContainerBackupIndex

public static ContainerBackupIndex createNewContainerBackupIndex(File path)
                                                          throws IOException
Erstellt einen neuen, leeren ContainerBackupIndex im angegebenen Verzeichnis. Ein eventuell bereits vorhandener wird überschrieben.

Parameters:
path - Verzeichnis
Returns:
der neue ContainerBackupIndex
Throws:
IOException - IO-Fehler

deleteContainerBackupIndex

public static boolean deleteContainerBackupIndex(File path)
Löscht den ContainerBackupIndex im angebenden Verzeichnis

Parameters:
path - Verzeichnis
Returns:
true wenn das Löschen erfolgreich war und der Index vorher existierte

existsIn

public static boolean existsIn(File path)
Prüft ob im angebenden Verzeichnis ein ContainerBackupIndex existiert

Parameters:
path - Verzeichnis
Returns:
true wenn er existiert

existsIn

public static boolean existsIn(String path)
Prüft ob im angebenden Verzeichnis ein ContainerBackupIndex existiert

Parameters:
path - Verzeichnis
Returns:
true wenn er existiert

getContainerIDs

public List<Long> getContainerIDs()
                           throws IOException
Gibt alle zu sichernden ContainerIDs im Index zurück

Returns:
Liste mit ContainerIDs
Throws:
IOException - IO-Fehler
IllegalStateException - Falls Index bereits geschlossen wurde

removeContainerID

public boolean removeContainerID(long containerID)
                          throws IOException
Entfernt eine ContainerID aus dem Index

Parameters:
containerID - ContainerID die zu entfernen ist.
Returns:
True falls erfolgreich, false falls nicht gefunden
Throws:
IOException - IO-Fehler
IllegalStateException - Falls Index bereits geschlossen wurde

removeContainerID

public boolean removeContainerID(long containerID,
                                 int mediumID)
                          throws IOException
Entfernt eine ContainerID aus dem Index

Parameters:
containerID - ContainerID die zu entfernen ist.
mediumID - Beim sichern eines Containers kann eine MediumID mit angegeben werden, die dann im Index vermerkt wird. Wird nur berücksichtigt, wenn es sich um eine positive Zahl handelt und nicht bereits eine größere MedienID in der Datei vorhanden ist
Returns:
True falls erfolgreich, false falls nicht gefunden
Throws:
IOException - IO-Fehler
IllegalStateException - Falls Index bereits geschlossen wurde

appendContainerID

public void appendContainerID(long containerID)
                       throws IOException
Fügt dem Index eine ContainerID hinzu

Parameters:
containerID - ContainerID die einzufügen ist
Throws:
IOException - IO-Fehler
IllegalStateException - Falls Index bereits geschlossen wurde

getMaxMedienID

public int getMaxMedienID()
                   throws IOException
Gibt die in der ContainerBackupIndex-Datei maximal gespeicherte MedienID zurück.

Returns:
MedienID
Throws:
IOException - IO-Fehler

setMaxMedienID

public void setMaxMedienID(int mediumID)
                    throws IOException
Setzt die MedienID auf einen festgelegten Wert (erlaubt auch das Zurücksetzen oder das Setzen von MEDIUM_ID_UNSAVED bzw. MEDIUM_ID_UNKNOWN

Parameters:
mediumID - MedienID
Throws:
IOException - IO-Fehler

close

public void close()
Schließt diesen ContainerBackupIndex. Muss immer nach Benutzung aufgerufen werden um kein mögliches Speicherleck zu verursachen


finalize

protected void finalize()
                 throws Throwable
Overrides:
finalize in class Object
Throws:
Throwable

toString

public String toString()
Overrides:
toString in class Object