]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/request/external/EclipsePreferencePrimitiveRead.java
Added resourceId and GUID to diagram DnD content
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / request / external / EclipsePreferencePrimitiveRead.java
1 package org.simantics.db.layer0.request.external;
2
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;
11
12 /**
13  * @author Antti Villberg
14  * @since 1.22.0
15  */
16 public class EclipsePreferencePrimitiveRead extends ParametrizedPrimitiveRead<Pair<String,String>,String> implements IPreferenceChangeListener {
17
18     private Listener<String> listener;
19
20     public EclipsePreferencePrimitiveRead(String plugin, String key) {
21         super(Pair.make(plugin, key));
22     }
23
24     @Override
25     public void register(ReadGraph graph, Listener<String> procedure) {
26         IEclipsePreferences preferenceNode = resolvePreferenceNode();
27         if (!procedure.isDisposed() && preferenceNode != null) {
28             preferenceNode.addPreferenceChangeListener(this);
29         }
30         listener = procedure;
31         String value = preferenceNode != null ? preferenceNode.get(parameter.second, null) : null;
32         procedure.execute(value);
33     }
34
35     @Override
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);
41         }
42     }
43
44     @Override
45     public void unregistered() {
46         IEclipsePreferences preferenceNode = resolvePreferenceNode();
47         if (preferenceNode != null) {
48             preferenceNode.removePreferenceChangeListener(this);
49         }
50         listener = null;
51     }
52
53     private IEclipsePreferences resolvePreferenceNode() {
54         IEclipsePreferences preferenceNode = InstanceScope.INSTANCE.getNode( parameter.first );
55         return preferenceNode;
56     }
57
58 }