1 package org.simantics.utils;
3 import java.util.HashMap;
5 import java.util.TreeMap;
6 import java.util.concurrent.CopyOnWriteArrayList;
8 import org.simantics.databoard.Bindings;
9 import org.simantics.databoard.adapter.AdaptException;
10 import org.simantics.databoard.binding.Binding;
11 import org.simantics.databoard.binding.error.BindingException;
12 import org.simantics.databoard.binding.mutable.Variant;
14 public class Development {
16 public static TreeMap<String,Integer> histogram = new TreeMap<String,Integer>();
18 public static final boolean DEVELOPMENT = false;
20 public static final String PRINT = "Development.print";
22 public interface DevelopmentListener {
24 void handle(Object event);
28 final static private HashMap<String, Variant> properties = new HashMap<String, Variant>();
30 final static private CopyOnWriteArrayList<DevelopmentListener> listeners = new CopyOnWriteArrayList<DevelopmentListener>();
35 listeners.add(new DevelopmentListener() {
38 public void handle(Object event) {
39 if((Boolean) getProperty(PRINT, Bindings.BOOLEAN))
40 System.err.println(event.toString());
48 public static void addListener(DevelopmentListener listener) {
49 listeners.add(listener);
52 public static void removeListener(DevelopmentListener listener) {
53 listeners.remove(listener);
56 public static void dispatchEvent(Object event) {
57 for(DevelopmentListener listener : listeners) {
58 listener.handle(event);
63 public static void setProperty(String name, Object value, Binding binding) {
65 assert(binding != null);
67 binding.assertInstaceIsValid(value);
68 } catch (BindingException e) {
69 throw new RuntimeException(e);
71 properties.put(name, new Variant(binding, value));
74 @SuppressWarnings("unchecked")
75 public static <T> T getProperty(String name, Binding binding) {
76 Variant value = properties.get(name);
77 if(value == null) return null;
79 return (T)value.getValue(binding);
80 } catch (AdaptException e) {
81 throw new RuntimeException(e);
85 public static boolean isTrue(String name) {
86 Boolean value = getProperty(name, Bindings.BOOLEAN);
87 return value != null && value;
90 public static Map<String, Variant> getProperties() {
94 public static void recordHistogram(Object o) {
95 String key = o.toString();
96 Integer i = Development.histogram.get(key);
98 Development.histogram.put(key, i+1);