de.bsvrz.ars.ars.backup.plugins
Class DVDBackup

java.lang.Object
  extended by de.bsvrz.ars.ars.backup.plugins.FileSystemBackup
      extended by de.bsvrz.ars.ars.backup.plugins.DVDBackup
All Implemented Interfaces:
BackupModul

public class DVDBackup
extends FileSystemBackup
implements BackupModul

Diese Klasse ist fuer die Sicherung von Containern auf einer DVD verantwortlich. Die Sicherung funktioniert derzeit nur auf Linux-Systemen. Fuer die vorbereitende Erstellung der zu brennenden Verzeichnisstruktur wird das FileSystemBackup verwendet.

Author:
beck et al. projects GmbH, Christian Wied

Field Summary
private  String[] currentScsiBus
           
private  String[] currentSerialID
           
private  int EXITCODE_LAST_EXEC
           
private static int MAX_MEDIUM_SIZE_KB
           
private static String MEDIAPATH_POSTFIX
           
protected static String MEDIAPATH_PREFIX
           
private static String PROP_BACKUP_DIR
           
private static String PROP_BACKUP_SERIALS
           
private static String SCSIUSBDirPath
           
private  String[] serialNumbers
           
 
Fields inherited from class de.bsvrz.ars.ars.backup.plugins.FileSystemBackup
backupBasePath, currentBackupPath, currentSpaceOccupiedByContainerFiles, currentSpaceOccupiedByZipfiles, logger, MAX_CONTAINERS_PER_DIR
 
Fields inherited from interface de.bsvrz.ars.ars.backup.BackupModul
PROP_BACKUP_CONTAINER_PER_ZIP, PROP_BACKUP_MEDIUMSIZE
 
Constructor Summary
DVDBackup()
           
 
Method Summary
private  boolean amIRunningOnLinux()
           
 void backupContainer(int mediumID, long contID, File contFile)
          Mit dieser Methode wird festgelegt, dass ein Container auf dem angegebenen und vorher geöffneten Medium zu speichern ist.
 void closeMediumAfterBackup(int mediumID, File indexFile)
          Sobald auf einem Medium keine Kapazität für weitere Container mehr vorhanden ist, wird der aktuelle Backup-Lauf auf diesem Medium mit dieser Methode abgeschlossen.
 boolean containsData(String serialID)
          Ermittelt, ob es in dem angegebenen Verzeichnis Daten gibt.
private  boolean containsErrorMessage(String input)
          Prüft, ob in input das Wort 'Fehler' oder 'Error' vorkommt, unabhängig von Groß/Kleinschreibung.
private  String exec(String command)
          Fuehrt ein Kommando aus und liefert den Output als String zurueck.
Der Output ist auf 100000 Zeichen limitiert.
private  void findEmptyDVD(int mediumID)
          Sucht nach leeren Laufwerk (leer = keine DVD oder leere DVD!)
private  void findReadableDVD(int mediumID)
           
private  String getDirContent(String serialId)
           
(package private)  String getDVDMediaPath(String serialId)
           
(package private)  String getScsiBus(String serialID)
          Da der SCSI-Bus eines USB-Devices vom Betriebssystem dynamisch vergeben wird (d.h.
 boolean hasMediumCapacity(int mediumID, long containerSize, int mediumIndexSize)
          Liefert true, falls die noch zur Verfügung stehende Kapazität des angegebenen Mediums ausreicht, um einen Container der Größe fileSize und den Medienindex mit der momentanen Größe indexSize zu speichern.
 void initialize(Properties props)
          Diese Methode dient dem Initialisieren des BackupModuls.
private  boolean isReadable(String serialId)
           
 void openMediumBeforeBackup(int mediumID, String backupRunID)
          Diese Methode wird aufgerufen, bevor der erste Container auf dem Medium gesichert wird.
 InputStream restoreContainer(int mediumID, String contFileName)
          Mit dieser Methode wird ein InputStream der Containerdaten des Containers mit Namen contFile auf dem Medium mediumID erzeugt.
 String toString()
           
 
Methods inherited from class de.bsvrz.ars.ars.backup.plugins.FileSystemBackup
getAllContFileNames
 
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.backup.BackupModul
getAllContFileNames
 

Field Detail

PROP_BACKUP_DIR

private static final String PROP_BACKUP_DIR
See Also:
Constant Field Values

PROP_BACKUP_SERIALS

private static final String PROP_BACKUP_SERIALS
See Also:
Constant Field Values

MAX_MEDIUM_SIZE_KB

private static int MAX_MEDIUM_SIZE_KB

SCSIUSBDirPath

private static final String SCSIUSBDirPath
See Also:
Constant Field Values

MEDIAPATH_PREFIX

protected static final String MEDIAPATH_PREFIX
See Also:
Constant Field Values

MEDIAPATH_POSTFIX

private static final String MEDIAPATH_POSTFIX
See Also:
Constant Field Values

serialNumbers

private String[] serialNumbers

currentScsiBus

private String[] currentScsiBus

currentSerialID

private String[] currentSerialID

EXITCODE_LAST_EXEC

private int EXITCODE_LAST_EXEC
Constructor Detail

DVDBackup

public DVDBackup()
Method Detail

initialize

public void initialize(Properties props)
                throws Exception
Description copied from interface: BackupModul
Diese Methode dient dem Initialisieren des BackupModuls. Da die Plugins immer mit leerem Konstruktor initialisiert werden, werden mit dieser Methode die Plugin-spezifischen Einstellungen vorgenommen. Fehlt ein obligatorischer Property-Key, wird eine Exception geworfen.

Specified by:
initialize in interface BackupModul
Overrides:
initialize in class FileSystemBackup
Throws:
Exception
See Also:
BackupModul.initialize(java.util.Properties)

backupContainer

public void backupContainer(int mediumID,
                            long contID,
                            File contFile)
                     throws BackupException
Description copied from interface: BackupModul
Mit dieser Methode wird festgelegt, dass ein Container auf dem angegebenen und vorher geöffneten Medium zu speichern ist. Ob dies sofort geschieht oder später ist Sache der Implementierung. Das BackupModul kann den Parameter containerID verwenden, um z.B. die Container-Dateien zu sortieren oder um Hilfsdatenstrukturen für einen schnellen Zugriff anzulegen.

Specified by:
backupContainer in interface BackupModul
Overrides:
backupContainer in class FileSystemBackup
Throws:
BackupException
See Also:
BackupModul.backupContainer(int,long,java.io.File)

closeMediumAfterBackup

public void closeMediumAfterBackup(int mediumID,
                                   File indexFile)
                            throws BackupException
Description copied from interface: BackupModul
Sobald auf einem Medium keine Kapazität für weitere Container mehr vorhanden ist, wird der aktuelle Backup-Lauf auf diesem Medium mit dieser Methode abgeschlossen. Der Parameter übergibt eine Indexdatei, die alle ContainerIDs enthält, die im aktuellen Backup-Lauf auf diesem Medium gesichert wurden. Diese Datei wird auf dem Medium gespeichert. Die weiteren Aufgaben, die einzelne Implementierungen der BackupModule-Schnittstelle hier zu erfüllen haben, sind unterschiedlich. Module, die sofort auf ein Medium schreiben können (Wechselplatten) erfordern keine weiteren Schritte. Für Medien wie DVDs wird in dieser Methode aus den gesammelten Containern ein Image erstellt und auf die DVD gebrannt; bei Keydox wird ein Logout ausgeführt.

Specified by:
closeMediumAfterBackup in interface BackupModul
Overrides:
closeMediumAfterBackup in class FileSystemBackup
Throws:
BackupException
See Also:
BackupModul.closeMediumAfterBackup(int,java.io.File)

hasMediumCapacity

public boolean hasMediumCapacity(int mediumID,
                                 long containerSize,
                                 int mediumIndexSize)
                          throws BackupException
Description copied from interface: BackupModul
Liefert true, falls die noch zur Verfügung stehende Kapazität des angegebenen Mediums ausreicht, um einen Container der Größe fileSize und den Medienindex mit der momentanen Größe indexSize zu speichern. Falls die Gesamtkapazität nicht durch den Medientyp eindeutig festgelegt ist, liefert das Backup-Modul einen sinnvollen Wert. Beispiel: 1 GB pro Aktenschrank in Keydox, jedoch keinesfalls die Größe der gesamten Festplatte. Ist das gewünschte Medium nicht im Zugriff, wird eine entsprechende Ausnahme ausgelöst.

Specified by:
hasMediumCapacity in interface BackupModul
Overrides:
hasMediumCapacity in class FileSystemBackup
Returns:
boolean
Throws:
BackupException
See Also:
BackupModul.hasMediumCapacity(int,long,int)

openMediumBeforeBackup

public void openMediumBeforeBackup(int mediumID,
                                   String backupRunID)
                            throws BackupException
Description copied from interface: BackupModul
Diese Methode wird aufgerufen, bevor der erste Container auf dem Medium gesichert wird. Mit dem Parameter backupRunID können mehrere Backup-Läufe, die dasselbe Medium verwenden, unterschieden werden. Laut Spezifikation in [TanfArS] kann es im Regelfall nicht auftreten, dass ein Container mehrmals auf demselben Medium abgelegt ist, weil bereits gesicherte Container kein zweitesmal gesichert werden. Es ist dennoch notwendig ein Verhalten für diesen Fall vorzugeben. Beim Wiederherstellen eines Containers wird daher der Container des Mediums verwendet, der unter der alphabetisch größten backupRunID abgelegt wurde.

Specified by:
openMediumBeforeBackup in interface BackupModul
Overrides:
openMediumBeforeBackup in class FileSystemBackup
Parameters:
mediumID - ID des Mediums
backupRunID - Zur Identifizierung des Sicherungslaufs falls mehrere Sicherungslaeufe auf einem Medium sind. Bei der Wiederherstellung eines Containers werden die Sicherungslaeufe von der alphabetisch letzten backupRunID beginnend bis zur alphabetisch ersten backupRunID nach dem angeforderten Container durchsucht.
Throws:
BackupException
See Also:
BackupModul.openMediumBeforeBackup(int,java.lang.String)

restoreContainer

public InputStream restoreContainer(int mediumID,
                                    String contFileName)
                             throws BackupException
Description copied from interface: BackupModul
Mit dieser Methode wird ein InputStream der Containerdaten des Containers mit Namen contFile auf dem Medium mediumID erzeugt. Der BackupManager kopiert die Daten je nach Vorgang ganz oder teilweise in das Archivsystem oder in ein temporäres Verzeichnis. Diese Methode wird zum Wiederherstellen eines Containers, zum Abgleich/Wiederherstellung der Verwaltungsinformation und zur Verifikation verwendet.

Specified by:
restoreContainer in interface BackupModul
Overrides:
restoreContainer in class FileSystemBackup
Returns:
InputStream
Throws:
BackupException
See Also:
BackupModul.restoreContainer(int,java.lang.String)

findEmptyDVD

private void findEmptyDVD(int mediumID)
                   throws Exception
Sucht nach leeren Laufwerk (leer = keine DVD oder leere DVD!)

Parameters:
mediumID -
Throws:
Exception

findReadableDVD

private void findReadableDVD(int mediumID)
                      throws Exception
Throws:
Exception

isReadable

private boolean isReadable(String serialId)
                    throws Exception
Throws:
Exception

amIRunningOnLinux

private boolean amIRunningOnLinux()

getDirContent

private String getDirContent(String serialId)
                      throws Exception
Throws:
Exception

containsData

public boolean containsData(String serialID)
                     throws Exception
Ermittelt, ob es in dem angegebenen Verzeichnis Daten gibt.

Parameters:
serialID -
Returns:
true, wenn es in dem angegebenen Verzeichnis Daten gibt.
Throws:
Exception

getScsiBus

String getScsiBus(String serialID)
            throws IOException
Da der SCSI-Bus eines USB-Devices vom Betriebssystem dynamisch vergeben wird (d.h. sich beim Ein-/Ausschalten des Geräts aendern kann), muss die Beziehung Hardware <---> SCSI-Bus regelmaessig nachgeschlagen werden. Diese Methode bietet die hierfuer benoetigte Funktionalitaet.

Parameters:
serialID -
Returns:
den SCSI-BUS als String mit Format: x,0,0
Throws:
IOException

getDVDMediaPath

String getDVDMediaPath(String serialId)

exec

private String exec(String command)
             throws IOException
Fuehrt ein Kommando aus und liefert den Output als String zurueck.
Der Output ist auf 100000 Zeichen limitiert.

Parameters:
command -
Returns:
Kommando-Ausgabe
Throws:
IOException

containsErrorMessage

private boolean containsErrorMessage(String input)
Prüft, ob in input das Wort 'Fehler' oder 'Error' vorkommt, unabhängig von Groß/Kleinschreibung.

Parameters:
input - Input String
Returns:
Ob eine Fehlermeldung enthalten ist.

toString

public String toString()
Overrides:
toString in class FileSystemBackup