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