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