Seite 1 von 3

Speichern von Einstellungen

Verfasst: 05 Aug 2015, 20:31
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?

Re: Speichern von Einstellungen

Verfasst: 05 Aug 2015, 20:41
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.

Re: Speichern von Einstellungen

Verfasst: 22 Feb 2016, 16:15
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

Re: Speichern von Einstellungen

Verfasst: 22 Feb 2016, 16:46
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.

Re: Speichern von Einstellungen

Verfasst: 22 Feb 2016, 17:03
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?

Re: Speichern von Einstellungen

Verfasst: 22 Feb 2016, 17:42
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) {}
      }
    }
  }

Re: Speichern von Einstellungen

Verfasst: 22 Feb 2016, 18:15
von Sheldon2012
Alles klar! Danke!
Hast Du auch ein Beispiel, wie man eine bestimmte Einstellung aus dem Properties-Objekt ausliest?

Re: Speichern von Einstellungen

Verfasst: 22 Feb 2016, 18:22
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.

Re: Speichern von Einstellungen

Verfasst: 22 Feb 2016, 18:31
von Sheldon2012
Das hatte ich auch so vor. Danke für die Hinweise!

Re: Speichern von Einstellungen

Verfasst: 25 Feb 2016, 18:56
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=


Re: Speichern von Einstellungen

Verfasst: 25 Feb 2016, 20:47
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.

Re: Speichern von Einstellungen

Verfasst: 25 Feb 2016, 20:59
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!

Re: Speichern von Einstellungen

Verfasst: 26 Feb 2016, 11:43
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

Re: Speichern von Einstellungen

Verfasst: 26 Feb 2016, 16:01
von Sheldon2012
Danke für den Hinweis. Das ist der Weg über die Collection, den ich meinte.

Re: Speichern von Einstellungen

Verfasst: 13 Mär 2016, 12:06
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.