BeanShell-Filter
Diese Seite enthält einige Beispiele für die Verwendung von BeanShell-Filtern. Der angegebene Code muss jeweils in das Textfeld einer BeanShell-Filterkomponente kopiert werden.
Inhaltsverzeichnis
Sendungen mit Bildern
import devplugin.beanshell.BeanShellProgramFilterIf;
import devplugin.Program;
import devplugin.ProgramFieldType;
accept(Program p) {
if(p.getBinaryField(ProgramFieldType.PICTURE_TYPE) != null)
return true;
return false;
}
return (BeanShellProgramFilterIf) this;
Temporär alle Premiere-Sendungen ausblenden
import devplugin.beanshell.BeanShellProgramFilterIf;
import devplugin.Program;
accept(Program p) {
String s=p.getChannel().toString();
return (-1==s.indexOf("Premiere"));
}
return (BeanShellProgramFilterIf) this;
Sendungen, bei denen der Regisseur auch Schauspieler ist
import devplugin.beanshell.BeanShellProgramFilterIf;
import devplugin.Program;
import devplugin.ProgramFieldType;
accept(Program p) {
String director = p.getTextField(ProgramFieldType.DIRECTOR_TYPE);
String actors = p.getTextField(ProgramFieldType.ACTOR_LIST_TYPE);
if (director != null && actors != null) {
if (actors.indexOf(director) >= 0) {
return true;
}
}
return false;
}
return (BeanShellProgramFilterIf) this;
Dynamischer BeanShell-Filter als CSV-File-Interface
Mit der Filterkomponente BeanShell-Filter kann man auch dynamische Filterkomponenten erstellen. Das hier vorgestellte Skript dient zum Auslesen einer CSV-Datei. In diesem konkreten Beispiel enthält die CSV-Datei "episodes.csv" Sendungsinformationen in der Form "Sendungstitel;Episodentitel". Diese werden mit dem aktuellen Daten im TV-Browser abgeglichen. Der resultierende Filter schließt alle Episoden aus der CSV-Datei ein, die im aktuellen Datenbestand des TV-Browsers enthalten sind.
Hinweis:
Dies ist natürlich nur ein Beispiel für einen dynamischen BeanShell-Filter. Die Daten können auch z. B. in Form eines Excel-Sheets vorliegen oder aus einer SQL-Datenbank ausgelesen werden. Dazu muss dann natürlich ein entsprechendes Skript erstellt werden. Ebenso können auf diesem Weg auch andere Parameter als "Sendungstitel" und "Episodentitel" abgeglichen werden. Auch hierfür ist natürlich eine Anpassung des Skriptes erforderlich.
// Beanshell-Filter: CSV file interface
import devplugin.beanshell.BeanShellProgramFilterIf;
import devplugin.Program;
import devplugin.ProgramFieldType;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
accept(Program prog) throws IOException {
// Reading program data
String title = prog.getTextField(ProgramFieldType.TITLE_TYPE);
String episode = prog.getTextField(ProgramFieldType.EPISODE_TYPE);
// Program data comparison preparation
title = prepareForComparison(title);
episode = prepareForComparison(episode);
// CSV file settings
String file = "C:\\episodes.csv";
String separator = ";";
String line = "";
// Program data check
if ((title != null) && (title.trim().length() > 0) && (episode != null) && (episode.trim().length() > 0)){
try{
// Read CSV file
BufferedReader br = new BufferedReader(new FileReader(file));
line = br.readLine();
while (line != null){
line = line.trim();
String[] lineParts = line.split(separator);
// CSV data comparison preparation
String favTitle = prepareForComparison(lineParts[0]);
String favEpisode = prepareForComparison(lineParts[1]);
// Data comparison
if (title.trim().equals(favTitle) && episode.trim().equals(favEpisode)){
// Close reader
try {
if (br != null){
br.close();
}
} catch (IOException e) {
throw e;
}
return true;
}
line = br.readLine();
}
// Close reader
try {
if(br != null){
br.close();
}
} catch (IOException e) {
throw e;
}
return false;
}catch (IOException ioe) {
// Close reader
try {
if (br != null){
br.close();
}
} catch (IOException e) {
throw e;
}
throw ioe;
}
}else{
// Program data check failed
return false;
}
}
private String prepareForComparison(String unpreparedString){
String preparedString = "";
preparedString = unpreparedString;
// Set to lower case
preparedString = preparedString.toLowerCase();
// Special alphabetic character handling
preparedString = preparedString.replaceAll("\00df", "ss");
preparedString = preparedString.replaceAll("\00e4", "ae");
preparedString = preparedString.replaceAll("\00f6", "oe");
preparedString = preparedString.replaceAll("\00fc", "ue");
// Non-numeric and non-alphabetic character handling
preparedString = preparedString.replaceAll("[^0-9a-z]", "");
// Trim the string
preparedString = preparedString.trim();
return preparedString;
}
return (BeanShellProgramFilterIf) this;