]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.utils/src/org/simantics/utils/Development.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.utils / src / org / simantics / utils / Development.java
1 package org.simantics.utils;\r
2 \r
3 import java.util.HashMap;\r
4 import java.util.Map;\r
5 import java.util.TreeMap;\r
6 import java.util.concurrent.CopyOnWriteArrayList;\r
7 \r
8 import org.simantics.databoard.Bindings;\r
9 import org.simantics.databoard.adapter.AdaptException;\r
10 import org.simantics.databoard.binding.Binding;\r
11 import org.simantics.databoard.binding.error.BindingException;\r
12 import org.simantics.databoard.binding.mutable.Variant;\r
13 \r
14 public class Development {\r
15 \r
16         public static TreeMap<String,Integer> histogram = new TreeMap<String,Integer>();\r
17 \r
18         public static final boolean DEVELOPMENT = false;\r
19         \r
20         public static final String PRINT = "Development.print";\r
21 \r
22         public interface DevelopmentListener {\r
23                 \r
24                 void handle(Object event);\r
25                 \r
26         }\r
27         \r
28         final static private HashMap<String, Variant> properties = new HashMap<String, Variant>(); \r
29         \r
30         final static private CopyOnWriteArrayList<DevelopmentListener> listeners = new CopyOnWriteArrayList<DevelopmentListener>();\r
31 \r
32         static {\r
33                 \r
34                 if(DEVELOPMENT) {\r
35                         listeners.add(new DevelopmentListener() {\r
36         \r
37                                 @Override\r
38                                 public void handle(Object event) {\r
39                                         if((Boolean) getProperty(PRINT, Bindings.BOOLEAN))\r
40                                                 System.err.println(event.toString());\r
41                                 }\r
42         \r
43                         });\r
44                 }\r
45 \r
46         }\r
47         \r
48         public static void addListener(DevelopmentListener listener) {\r
49                 listeners.add(listener);\r
50         }\r
51         \r
52         public static void removeListener(DevelopmentListener listener) {\r
53                 listeners.remove(listener);\r
54         }\r
55         \r
56         public static void dispatchEvent(Object event) {\r
57                 for(DevelopmentListener listener : listeners) {\r
58                         listener.handle(event);\r
59                 }\r
60         }\r
61         \r
62         \r
63         public static void setProperty(String name, Object value, Binding binding) {\r
64                 assert(name != null);\r
65                 assert(binding != null);\r
66                 try {\r
67                         binding.assertInstaceIsValid(value);\r
68                 } catch (BindingException e) {\r
69                         throw new RuntimeException(e);\r
70                 }\r
71                 properties.put(name, new Variant(binding, value));\r
72         }\r
73 \r
74         @SuppressWarnings("unchecked")\r
75         public static <T> T getProperty(String name, Binding binding) {\r
76                 Variant value = properties.get(name);\r
77                 if(value == null) return null;\r
78                 try {\r
79                         return (T)value.getValue(binding);\r
80                 } catch (AdaptException e) {\r
81                         throw new RuntimeException(e);\r
82                 }\r
83         }\r
84         \r
85         public static boolean isTrue(String name) {\r
86                 Boolean value = getProperty(name, Bindings.BOOLEAN);\r
87                 return value != null && value;\r
88         }\r
89         \r
90         public static Map<String, Variant> getProperties() {\r
91                 return properties;\r
92         }\r
93         \r
94         public static void recordHistogram(Object o) {\r
95                 String key = o.toString();\r
96                 Integer i = Development.histogram.get(key);\r
97                 if(i == null) i = 0;\r
98                 Development.histogram.put(key, i+1);\r
99         }\r
100         \r
101 }\r