]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.utils/src/org/simantics/utils/Development.java b/bundles/org.simantics.utils/src/org/simantics/utils/Development.java
new file mode 100644 (file)
index 0000000..1532bd1
--- /dev/null
@@ -0,0 +1,101 @@
+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