Speichern von Einstellungen

Hier haben Plugin-Entwickler die Möglichkeit, sich auszutauschen.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Speichern von Einstellungen

Beitrag von Sheldon2012 »

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?
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Speichern von Einstellungen

Beitrag von ds10 »

Global für das Plugin lassen sich Einstellungen durch Überschreiben der entsprechenden Methoden sichern:

Code: Alles auswählen

public void loadSettings(Properties settings) {
public Properties storeSettings() {
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:

Code: Alles auswählen

Plugin.getPluginManager().getTvBrowserSettings().getTvBrowserUserHome()
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.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Speichern von Einstellungen

Beitrag von Sheldon2012 »

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
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Speichern von Einstellungen

Beitrag von ds10 »

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.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Speichern von Einstellungen

Beitrag von Sheldon2012 »

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?
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Speichern von Einstellungen

Beitrag von ds10 »

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
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Speichern von Einstellungen

Beitrag von Sheldon2012 »

Alles klar! Danke!
Hast Du auch ein Beispiel, wie man eine bestimmte Einstellung aus dem Properties-Objekt ausliest?
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Speichern von Einstellungen

Beitrag von ds10 »

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.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Speichern von Einstellungen

Beitrag von Sheldon2012 »

Das hatte ich auch so vor. Danke für die Hinweise!
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Speichern von Einstellungen

Beitrag von Sheldon2012 »

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:

Code: Alles auswählen

# Sektor 1
property1=
property2=
property3=

# Sektor 2
property4=
property5=
property6=

ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Speichern von Einstellungen

Beitrag von ds10 »

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
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Speichern von Einstellungen

Beitrag von Sheldon2012 »

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!
v6ph1
Site Admin
Beiträge: 1276
Registriert: 13 Jan 2008, 05:07
Wohnort: Radebeul

Re: Speichern von Einstellungen

Beitrag von v6ph1 »

Falls in "Sektor abc" bzw. in "propertyxyz" ein bestimmtes Zeichen nicht vorkommt, so kann man es als Trenner nehmen:

Code: Alles auswählen

s1.p1=...
s1.p2=...
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
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Speichern von Einstellungen

Beitrag von Sheldon2012 »

Danke für den Hinweis. Das ist der Weg über die Collection, den ich meinte.
Sheldon2012
Plugin-Developer
Beiträge: 1206
Registriert: 25 Dez 2012, 07:35

Re: Speichern von Einstellungen

Beitrag von Sheldon2012 »

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.
Hier ergeben sich noch ein paar kleine administrative Probleme.

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.
Antworten