Erstellen eines eigenen Verarbeitungsprozesses Der Job-Verarbeiter ist ja dafür vorgesehen, Aufnahmen anhand eines ausgewählten Verarbeitungsprozesses zu verarbeiten. Standardmäßig wird eine Aufnahme zu einem DVD-Abbild umgewandelt, welches dann auf DVD gebrannt werden kann. Dafür ist die Bibliothek SRDVDConversion.jar zuständig. Für den Einstieg empfiehlt es sich, eine Kopie des Verzeichnisses SRDVDConversion anzulegen. Anschließend sollte srbuild.xml editiert werden, um den Projektnamen zu ändern. Die Datei srbuild.xml von VDRAssistant (also im übergeordneten Verzeichnis) muss erweitert werden. Die "filelist" mit der id="prj.process" sollte das neu erstellte Verzeichnis als neuen Eintrag erhalten. Dazu wird z.B. die Zeile 31 dupliziert und SRDVDConversion gegen den Namen des neuen Verzeichnisses ausgetauscht. Per ant -f srbuild.xml im Verzeichnis von VDRAssistant kann ausprobiert werden, ob die Erstellung klappt. Es sollte eine Jar-Datei mit dem Namen des neuen Verzeichnisses (unter xdist/ext) entstehen. Ein Blick in die Jar-Datei zeigt, dass die neue Bibliothek als "Implementation-Type" "ConversionProcess" hat. Das ist wichtig, denn danach wird entschieden, ob die Bibliothek vom Job-Verarbeiter verwendet werden kann. Wer sich für den Prozess der Identifizierung der Bibliothek und des Ladens interessiert, sollte einen Blick auf DefaultProcessFactory werfen. Die Internas sind schnell erklärt. Beispiel soll ein Prozess sein, der jeden einzelnen Schritt protokolliert - ein EchoProcess. Einstieg ist eine Klasse, die die Basisklasse AbstractProcess erweitert. public class EchoProcess extends AbstractProcess {
public EchoProcess(Job job, String workDir, WorkerConfig config, boolean burnOnTheFlow) {
super("myid", job, workDir, config, burnOnTheFlow);
}
}
Der Konstruktor kann 4 Parameter enthalten: - Job - der in der Datenbank abgelegte Job, der gerade umgewandelt werden soll
- String - das Verzeichnis in dem das Ergebnis abgelegt werden soll
- WorkerConfig - das Object mit den Einstellungen des Job-Verarbeiters
- boolean - ob gleich im Anschluss an die Verarbeitung eine Scheibe gebrannt werden soll.
Der erste Parameter im Aufruf des Konstruktors der Elternklasse dient der Identifizierung des Prozesses anhand eines Kürzels. Kernstück dieser Klasse ist die Methode protected List buildProcess(boolean burnOnTheFlow); , die die Prozessdefinition zurückgibt, bzw. erzeugt. Eine Prozessdefinition ist also eine Liste von mindestens einem Verarbeitungsschritt, den ProcessStep s. Die Standardverarbeitung von VDRAssistant, der Umwandlung einer VDR-Aufnahme zu einem DVD-Abbild besteht aus den Schritten: - DemuxStep - dem Auftrennen der Aufnahme in einzelne Spuren
- RequantStep - dem optionalen Komprimieren von Spuren
- MuxStep - dem Neuzusammenstellen der Spuren
- AuthorStep - der Generierung des DVD-Menüs
- ISOStep - dem Erstellen eines Abbildes aus den einzelnen Dateien
- BurnStep - dem optionalen Brennen der Scheibe
Ein Prozessschritt ist eine Klasse, die AbstractProcessStep überschreibt: public class EchoStep extends AbstractProcessStep {
public EchoStep(Job job, String workRoot, WorkerConfig config, PrintWriter logFile) {
super(job, workRoot, config, logFile);
}
}
Der Konstruktor kann wieder 4 Parameter enthalten: - Job - der in der Datenbank abgelegte Job, der gerade umgewandelt werden soll
- String - das Verzeichnis in dem das Ergebnis abgelegt werden soll
- WorkerConfig - das Object mit den Einstellungen des Job-Verarbeiters
- PrintWriter - ein Drucker, über den Meldungen weiter gegeben werden können.
- Über einen Aufruf von
public boolean checkOutput() für jeden Verarbeitungsschritt wird ermittelt, welcher Verarbeitungsschritt schon erfolgreich war, sodass er übersprungen werden kann. - Für den ersten Verarbeitungsschritt, der noch kein Ergebnis vorweisen kann, wird
public boolean checkInput() aufgerufen. Diese Funktion prüft, ob alle Eingangsvoraussetzungen für die Ausführung des Arbeitsschrittes erfüllt sind. Falls das nicht der Fall ist, wird die Verarbeitung als fehlerhaft markiert und abgebrochen. - Wenn die Eingangsvoraussetzungen erfüllt sind, wird mit dem Aufruf von
public final void process() die eigentliche Verarbeitung gestartet. Die Verarbeitung ist im AbstractProcessStep bereits in 3 Schritte untergliedert: - Schritt:
prepare() - steht für die Arbeitsvorbereitung - Schritt:
workOut() - steht für die eigentliche Verarbeitung - Schritt:
cleanup() - steht für das Aufräumen nach der Arbeit Das final in der Deklaration von process() zeigt an, dass diese Methode nicht überladen werden kann. Somit muss jeder Verarbeitungsschritt die 3-Teilung der Verarbeitung mit machen. - Zu guter Letzt wird noch einmal
public boolean checkOutput() aufgerufen um zu überprüfen, ob die Verarbeitung die gewünschten Ergebnisse produziert hat. Nur wenn von diesem Aufruf eine positive Rückmeldung kommt, gilt der ganze Verarbeitungsschritt als erfolgreich ausgeführt und es wird mit dem nächsten Verarbeitungsschritt weiter gemacht.
|