--- /dev/null
+package org.simantics.utils;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.TreeMap;\r
+import java.util.concurrent.CopyOnWriteArrayList;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.adapter.AdaptException;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.binding.error.BindingException;\r
+import org.simantics.databoard.binding.mutable.Variant;\r
+\r
+public class Development {\r
+\r
+ public static TreeMap<String,Integer> histogram = new TreeMap<String,Integer>();\r
+\r
+ public static final boolean DEVELOPMENT = false;\r
+ \r
+ public static final String PRINT = "Development.print";\r
+\r
+ public interface DevelopmentListener {\r
+ \r
+ void handle(Object event);\r
+ \r
+ }\r
+ \r
+ final static private HashMap<String, Variant> properties = new HashMap<String, Variant>(); \r
+ \r
+ final static private CopyOnWriteArrayList<DevelopmentListener> listeners = new CopyOnWriteArrayList<DevelopmentListener>();\r
+\r
+ static {\r
+ \r
+ if(DEVELOPMENT) {\r
+ listeners.add(new DevelopmentListener() {\r
+ \r
+ @Override\r
+ public void handle(Object event) {\r
+ if((Boolean) getProperty(PRINT, Bindings.BOOLEAN))\r
+ System.err.println(event.toString());\r
+ }\r
+ \r
+ });\r
+ }\r
+\r
+ }\r
+ \r
+ public static void addListener(DevelopmentListener listener) {\r
+ listeners.add(listener);\r
+ }\r
+ \r
+ public static void removeListener(DevelopmentListener listener) {\r
+ listeners.remove(listener);\r
+ }\r
+ \r
+ public static void dispatchEvent(Object event) {\r
+ for(DevelopmentListener listener : listeners) {\r
+ listener.handle(event);\r
+ }\r
+ }\r
+ \r
+ \r
+ public static void setProperty(String name, Object value, Binding binding) {\r
+ assert(name != null);\r
+ assert(binding != null);\r
+ try {\r
+ binding.assertInstaceIsValid(value);\r
+ } catch (BindingException e) {\r
+ throw new RuntimeException(e);\r
+ }\r
+ properties.put(name, new Variant(binding, value));\r
+ }\r
+\r
+ @SuppressWarnings("unchecked")\r
+ public static <T> T getProperty(String name, Binding binding) {\r
+ Variant value = properties.get(name);\r
+ if(value == null) return null;\r
+ try {\r
+ return (T)value.getValue(binding);\r
+ } catch (AdaptException e) {\r
+ throw new RuntimeException(e);\r
+ }\r
+ }\r
+ \r
+ public static boolean isTrue(String name) {\r
+ Boolean value = getProperty(name, Bindings.BOOLEAN);\r
+ return value != null && value;\r
+ }\r
+ \r
+ public static Map<String, Variant> getProperties() {\r
+ return properties;\r
+ }\r
+ \r
+ public static void recordHistogram(Object o) {\r
+ String key = o.toString();\r
+ Integer i = Development.histogram.get(key);\r
+ if(i == null) i = 0;\r
+ Development.histogram.put(key, i+1);\r
+ }\r
+ \r
+}\r