Speichern von Einstellungen
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Speichern von Einstellungen
Generell kann ich für die CSV-Datei-Filterkomponente zwei Arten von Optionen und weiteren Einstellungen haben.
- Globale, die für das Plugin allgemein gelten
- Spezielle, die nur für die eine Filterkomponente gelten. Bei einer anderen könnten diese eventuell anders gesetzt werden oder sich zur Laufzeit ändern.
Wo lege ich solche Einstellungen ab?
- Globale, die für das Plugin allgemein gelten
- Spezielle, die nur für die eine Filterkomponente gelten. Bei einer anderen könnten diese eventuell anders gesetzt werden oder sich zur Laufzeit ändern.
Wo lege ich solche Einstellungen ab?
Re: Speichern von Einstellungen
Global für das Plugin lassen sich Einstellungen durch Überschreiben der entsprechenden Methoden sichern:
Für die Filterkomponente kann man sich Properties in der Klasse anlegen und diese dann in einer Datei speichern, die im Einstellungsverzeichnis von TV-Browser liegt, das erhält man durch Aufruf von:
Da davon auszugehen ist, dass es von Filterkomponente mehre gibt, sollte man im Dateinamen der Datei natürlich irgendeine Zuordnung zu der entsprechenden Filterkomponente einbauen.
Code: Alles auswählen
public void loadSettings(Properties settings) {
public Properties storeSettings() {
Code: Alles auswählen
Plugin.getPluginManager().getTvBrowserSettings().getTvBrowserUserHome()
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Speichern von Einstellungen
Hi,
ich würde gerne komponenten-spezifische Property-Files in der CSV-Datei-Filterkomponente einführen.
Hast Du vielleicht mal ein schönes Beispiel für die implementierung im TV-Browser?
Gruß
Sheldon
ich würde gerne komponenten-spezifische Property-Files in der CSV-Datei-Filterkomponente einführen.
Hast Du vielleicht mal ein schönes Beispiel für die implementierung im TV-Browser?
Gruß
Sheldon
Re: Speichern von Einstellungen
Wenn ich das richtig verstehe, soll es zu jeder, vom Benutzer erstellten, Filterkomponente eine eigene properties-Datei geben?
Das ist so direkt nicht vorgesehen, deshalb gibt es auch kein Beispiel dafür. Du könntest aber mit Plugin.getPluginManager().getTvBrowserSettings().getTvBrowserUserHome() erst einmal das Einstellungsverzeichnis von TV-Browser abfragen, dort dann ein Verzeichnis für die CSV-Filterkomponente erstellen (über File.mkdirs()) und dann dort entsprechend zum Namen der CSV-Dateien properties-Dateien anlegen. Die Properties-Klasse bietet die Methoden load() und store() um Properties einzulesen und zu speichern.
Das ist so direkt nicht vorgesehen, deshalb gibt es auch kein Beispiel dafür. Du könntest aber mit Plugin.getPluginManager().getTvBrowserSettings().getTvBrowserUserHome() erst einmal das Einstellungsverzeichnis von TV-Browser abfragen, dort dann ein Verzeichnis für die CSV-Filterkomponente erstellen (über File.mkdirs()) und dann dort entsprechend zum Namen der CSV-Dateien properties-Dateien anlegen. Die Properties-Klasse bietet die Methoden load() und store() um Properties einzulesen und zu speichern.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Speichern von Einstellungen
Ja, so ist es gedacht. Jede erstellte Filterkomponente soll ein separates Property-File bekommen.
Gibt es vielleicht ein Beispiel für das Lesen bzw. Schreiben von Properties?
Gibt es vielleicht ein Beispiel für das Lesen bzw. Schreiben von Properties?
Re: Speichern von Einstellungen
Hier ein Beispiel wie man auch komprimierte Properties laden und speichern kann.
Code: Alles auswählen
public static Properties loadProperties(final File propertiesFile) {
final Properties properties = new Properties();
if(propertiesFile.isFile()) {
InputStream in = null;
try {
in = new FileInputStream(propertiesFile);
if(propertiesFile.getName().toLowerCase().endsWith(".gz")) {
in = new GZIPInputStream(in);
}
properties.load(in);
}catch(IOException ioe) {
ioe.printStackTrace();
}finally {
try {
in.close();
}catch(IOException ioe) {}
}
}
return properties;
}
public static void saveProperties(final Properties properties, final File propertiesFile, String comment) {
if(properties != null) {
OutputStream out = null;
try {
out = new FileOutputStream(propertiesFile);
if(propertiesFile.getName().toLowerCase().endsWith(".gz")) {
out = new GZIPOutputStream(out);
}
properties.store(out, comment);
out.flush();
}catch(IOException ioe) {
ioe.printStackTrace();
}finally {
try {
out.close();
}catch(IOException ioe) {}
}
}
}
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Speichern von Einstellungen
Alles klar! Danke!
Hast Du auch ein Beispiel, wie man eine bestimmte Einstellung aus dem Properties-Objekt ausliest?
Hast Du auch ein Beispiel, wie man eine bestimmte Einstellung aus dem Properties-Objekt ausliest?
Re: Speichern von Einstellungen
Das ist total simpel: https://docs.oracle.com/javase/7/docs/a ... ng.String)
Sinnvoll ist es aber die Keys nicht direkt in den Aufruf von getProperty zu schreiben, sondern sich Variablen mit static final String im Kopf der Klasse anzulegen die mit KEY_ beginnen und diese Variablen dann zum Abrufen der Einstellungen zu verwenden. So verlierst du nicht die Übersicht über die verwendeten Schlüssel.
Sinnvoll ist es aber die Keys nicht direkt in den Aufruf von getProperty zu schreiben, sondern sich Variablen mit static final String im Kopf der Klasse anzulegen die mit KEY_ beginnen und diese Variablen dann zum Abrufen der Einstellungen zu verwenden. So verlierst du nicht die Übersicht über die verwendeten Schlüssel.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Speichern von Einstellungen
Das hatte ich auch so vor. Danke für die Hinweise!
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Speichern von Einstellungen
Kann man ein Property-File eigentlich auch strukturiert bzw sortiert speichern?
Dazu habe ich leider noch nichts Vernünftiges gefunden.
Ich denke da an eine Struktur wie in einer ini. Also z. B. so:
Dazu habe ich leider noch nichts Vernünftiges gefunden.
Ich denke da an eine Struktur wie in einer ini. Also z. B. so:
Code: Alles auswählen
# Sektor 1
property1=
property2=
property3=
# Sektor 2
property4=
property5=
property6=
Re: Speichern von Einstellungen
Das müsstest du dann schon selber programmieren. Ich weiß nicht genau nach welchen Kriterium die sortiert ist, aber dahinter steckt irgendeine Hash-Komponente und die ist auf schnellen Zugriff optimiert nicht auf Sortierung.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Speichern von Einstellungen
Danke! Das dachte ich mir schon. Das Property-Objekt ist ja eigentlich nichts anderes als eine HashMap.
Dann muß man den Inhalt wohl in eine Collection schreiben und die dann sortieren.
Das Speichern kann man ja dann mit einem FileWriter machen.
ich lasse mir da was einfallen. Aber danke!
Dann muß man den Inhalt wohl in eine Collection schreiben und die dann sortieren.
Das Speichern kann man ja dann mit einem FileWriter machen.
ich lasse mir da was einfallen. Aber danke!
Re: Speichern von Einstellungen
Falls in "Sektor abc" bzw. in "propertyxyz" ein bestimmtes Zeichen nicht vorkommt, so kann man es als Trenner nehmen:
Sortiert zu speichern erfordert nur eine kleine Anpassung der Properties:
http://www.java2s.com/Tutorial/Java/014 ... saving.htm
Ansonsten gibt es auch für das Lesen und Schreiben von Ini-Dateien entsprechende Bibliotheken - vorher aber auf die Lizenzbedingungen achten!
-- v6ph1
Code: Alles auswählen
s1.p1=...
s1.p2=...
http://www.java2s.com/Tutorial/Java/014 ... saving.htm
Ansonsten gibt es auch für das Lesen und Schreiben von Ini-Dateien entsprechende Bibliotheken - vorher aber auf die Lizenzbedingungen achten!
-- v6ph1
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Speichern von Einstellungen
Danke für den Hinweis. Das ist der Weg über die Collection, den ich meinte.
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: Speichern von Einstellungen
Hier ergeben sich noch ein paar kleine administrative Probleme.ds10 hat geschrieben:Wenn ich das richtig verstehe, soll es zu jeder, vom Benutzer erstellten, Filterkomponente eine eigene properties-Datei geben?
Das ist so direkt nicht vorgesehen, deshalb gibt es auch kein Beispiel dafür. Du könntest aber mit Plugin.getPluginManager().getTvBrowserSettings().getTvBrowserUserHome() erst einmal das Einstellungsverzeichnis von TV-Browser abfragen, dort dann ein Verzeichnis für die CSV-Filterkomponente erstellen (über File.mkdirs()) und dann dort entsprechend zum Namen der CSV-Dateien properties-Dateien anlegen. Die Properties-Klasse bietet die Methoden load() und store() um Properties einzulesen und zu speichern.
Wenn zwei CSV-Dateien in verschiedenen Verzeichnissen den gleichen Namen haben, kommt es mit diesem Ansatz zu einem Konflikt, da der Name des Property-Files nicht mehr eindeutig ist. Hier dachte ich daran, eventuell den Pfad der CSV-Datei in den Namen des Property-Files aufzunhmen. Schöner wäre natürlich, wenn man den Namen der aktuellen Instanz der Filterkomponenete, also den hinterlegten Namen der einzelnen CSV-Datei-Filterkomponnete, abfragen könnte. Geht das?
Wenn die Filterkomponente gelöscht oder das Plugin deinstallierert wird, bleibt das Property-File erhalten. Das ist zuerst einmal nicht schön und kann auch zu Problemen führen, wenn man wieder eine Filterkomponente mit gleichem Namen der CSV-Datei anlegt.
Gibt es im TV-Browser eine Möglichkeit, auf diese Ereignisse zu reagieren.