1 package org.simantics.db.layer0.request.external;
\r
3 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
\r
4 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
\r
5 import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
\r
6 import org.eclipse.core.runtime.preferences.InstanceScope;
\r
7 import org.simantics.db.ReadGraph;
\r
8 import org.simantics.db.common.request.ParametrizedPrimitiveRead;
\r
9 import org.simantics.db.procedure.Listener;
\r
10 import org.simantics.utils.datastructures.Pair;
\r
13 * @author Antti Villberg
\r
16 public class EclipsePreferencePrimitiveRead extends ParametrizedPrimitiveRead<Pair<String,String>,String> implements IPreferenceChangeListener {
\r
18 private Listener<String> listener;
\r
20 public EclipsePreferencePrimitiveRead(String plugin, String key) {
\r
21 super(Pair.make(plugin, key));
\r
25 public void register(ReadGraph graph, Listener<String> procedure) {
\r
26 IEclipsePreferences preferenceNode = resolvePreferenceNode();
\r
27 if (!procedure.isDisposed() && preferenceNode != null) {
\r
28 preferenceNode.addPreferenceChangeListener(this);
\r
30 listener = procedure;
\r
31 String value = preferenceNode != null ? preferenceNode.get(parameter.second, null) : null;
\r
32 procedure.execute(value);
\r
36 public void preferenceChange(PreferenceChangeEvent event) {
\r
37 if (parameter.second.equals(event.getKey())) {
\r
38 IEclipsePreferences preferenceNode = resolvePreferenceNode();
\r
39 String value = preferenceNode != null ? preferenceNode.get(parameter.second, null) : null;
\r
40 listener.execute(value);
\r
45 public void unregistered() {
\r
46 IEclipsePreferences preferenceNode = resolvePreferenceNode();
\r
47 if (preferenceNode != null) {
\r
48 preferenceNode.removePreferenceChangeListener(this);
\r
53 private IEclipsePreferences resolvePreferenceNode() {
\r
54 IEclipsePreferences preferenceNode = InstanceScope.INSTANCE.getNode( parameter.first );
\r
55 return preferenceNode;
\r