PreferenceStore und unterschiedliche Plugins

stefan.

Mitglied
Hallo,

Ich verwalte meine Konfiguration mit dem Eclipse PreferenceStore.

Java:
public class MyPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

public FixPreferencePage() {
		super(GRID);
		setPreferenceStore(Activator.getDefault().getPreferenceStore());
		setDescription("My preference page");
	}
	
	/**
	 * Creates the field editors. Field editors are abstractions of
	 * the common GUI blocks needed to manipulate various types
	 * of preferences. Each field editor knows how to save and
	 * restore itself.
	 */
	public void createFieldEditors() {
		addField(new StringFieldEditor(PreferenceConstants.P_DICTIONARYDIR, 
				"&Dictionary Directory:", getFieldEditorParent()));
		
		//FileFieldEditor
		addField(new StringFieldEditor(PreferenceConstants.P_FILENAME, 
				"&Filename:", getFieldEditorParent()));
		
	}
}

Mittels
Java:
Activator.getDefault().getPreferenceStore().getString(PreferenceConstants.P_DICTIONARYDIR)
kann ich diese dann einfach wieder auslesen.
Leider funktioniert das nur innerhalb des Plugins, wo die Konfiguration definiert ist. Sobald ich die Konfig aus einem anderen Plugin versuche auszulesen kommt nur ein leerer String zurück. Ich muss doch aber auf die Konfiguration auch von anderen Plugins lesen können oder etwa nicht ???
 

Wildcard

Top Contributor
Letztlich geht das zurück auf den Preferences Service der 3 unterschiedliche Scopes hat:
Installation - global pro Eclipse installation
Instance - pro Workspace
Project - pro Projekt

Die Preferences sind keine einfache Hashmap, sondern eine Baumstruktur.
Code:
Activator.getDefault().getPreferenceStore()
delegiert intern an den Instance Scope. Aus diesem Scope wird dann eine Preference Node mit dem Namen der plugin ID herausgegriffen und alle Settings werden unter diesem Knoten gespeichert. Die Settings des Plugins werden also durch die Plugin ID qualifiziert.
Wenn du auf die Preferences eines anderen Plugins zugreifen willst dann kannst du das tun indem du:
1) Code aus dem anderen Plugin aufrufst der die Werte zurückliefert
2) Dir den Instance vom Preferences Service besorgst, die Node mit Namen [pluginID] selektierst und dann den Wert abholst.
 

stefan.

Mitglied
und jedes Plugin besitzt einen separaten Workspace?

1) Code aus dem anderen Plugin aufrufst der die Werte zurückliefert
Würde gehen aber wäre Designtechnisch eher ne Notlösung ... !?

2) Dir den Instance vom Preferences Service besorgst, die Node mit Namen [pluginID] selektierst und dann den Wert abholst.

Wie bekomme ich den Instance vom Preference Service?

Mit
Java:
Preferences preferences = new ConfigurationScope().getNode("PLUGIN_ID");
        Preferences sub1 = preferences.node("PLUGIN_ID");

        System.out.println("DICTIONARYDIR: "+sub1.get(PreferenceConstants.P_DICTIONARYDIR, "not found"));
hatte ich leider keinen Erfolg.
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
und jedes Plugin besitzt einen separaten Workspace?
Nein, es gibt immer nur einen Workspace (dort liegen deine Projekte).
Preferences preferences = new ConfigurationScope().getNode("PLUGIN_ID");
PLUGIN_ID war nicht wörtlich gemeint. Du musst das durch die konkrete Plugin ID ersetzen. Ausserdem ist es nicht der Configuration Scope, sondern der Instance Scope.
Der Configuration Scope ist global für die gesamte Eclipse Installation, der Instance Scope pro Workspace.
 

stefan.

Mitglied
Statt PLUGIN_ID hatte ich schon die richtige ID eingesetzt ;) Nach langem Probieren habe ich jetzt auch herraus gefunden, dass ich die Konfig nur auslesen kann, wenn vorher der Wert über den Konfig Dialog neu gesetzt wurde. (Obwohl ich Standard Werte angegeben habe).

Also Danke nochmal Wildcard ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V PreferenceStore -> Properties extrahieren? Plattformprogrammierung 5
M RCP Viewparts werden sporadisch in unterschiedliche Perspektiven abgelegt Plattformprogrammierung 7
D Unterschiedliche Berechtigungen Plattformprogrammierung 3
D RCP P2-Repository für Eclipse-Plugins Plattformprogrammierung 0
A RCP Objekt(parameter) zwischen Plugins austauschen Plattformprogrammierung 0
D RCP closed source RCP erweitern & Plugins nutzen Plattformprogrammierung 4
J Zwei Applikationen aus mehreren Plugins generieren Plattformprogrammierung 2
M RCP Ein Command in mehreren Plugins verwenden? Plattformprogrammierung 12
G RCP Abhängigkeiten von Eclipse Plugins Plattformprogrammierung 9
S Equinox: plugins und features Plattformprogrammierung 8
J Daten zwischen Plugins austauschen Plattformprogrammierung 4
M Daten zwischen 2 Eclipse-Plugins tauschen Plattformprogrammierung 5
P Wo im Projekt weitere Plugins anmelden ? Plattformprogrammierung 2
lumo ECLIPSE RCP - mehrere plugins - eine resource? Plattformprogrammierung 3
M Teilweise Probleme beim Updaten von Plugins Plattformprogrammierung 3
S Versionsprobleme beim Erstellen eines Plugins Plattformprogrammierung 6
E Test von RCP Plugins in Fragmente oder Plugins Plattformprogrammierung 3
G Aufteilung Plugins Plattformprogrammierung 8
M JUnit 4.3.1 aus eclipse plugins durch junit 4.4 ersetzen Plattformprogrammierung 2
dzim java.lang.ClassNotFoundException beim laden eines Plugins Plattformprogrammierung 10
Paule Eclipse Instanz + eigene Plugins Plattformprogrammierung 4
S Plugins interagieren lassen Plattformprogrammierung 6
Wildcard Wie buildet ihr eure PlugIns? Plattformprogrammierung 6
dzim eigene Application und PlugIns Plattformprogrammierung 16
dzim Classpath in PlugIns Plattformprogrammierung 7
T [RCP] Was passiert genau beim laden eines Plugins? Plattformprogrammierung 4
G Eclipse, Plugins, Properties, und wo zum Geier steckt das? Plattformprogrammierung 21
lhein Sprachumschaltung eines eigenen Eclipse Plugins Plattformprogrammierung 8
T Kommunikation zwischen Plugins (RCP) Plattformprogrammierung 18

Ähnliche Java Themen


Oben