1 package org.simantics.utils;
\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
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
14 public class Development {
\r
16 public static TreeMap<String,Integer> histogram = new TreeMap<String,Integer>();
\r
18 public static final boolean DEVELOPMENT = false;
\r
20 public static final String PRINT = "Development.print";
\r
22 public interface DevelopmentListener {
\r
24 void handle(Object event);
\r
28 final static private HashMap<String, Variant> properties = new HashMap<String, Variant>();
\r
30 final static private CopyOnWriteArrayList<DevelopmentListener> listeners = new CopyOnWriteArrayList<DevelopmentListener>();
\r
35 listeners.add(new DevelopmentListener() {
\r
38 public void handle(Object event) {
\r
39 if((Boolean) getProperty(PRINT, Bindings.BOOLEAN))
\r
40 System.err.println(event.toString());
\r
48 public static void addListener(DevelopmentListener listener) {
\r
49 listeners.add(listener);
\r
52 public static void removeListener(DevelopmentListener listener) {
\r
53 listeners.remove(listener);
\r
56 public static void dispatchEvent(Object event) {
\r
57 for(DevelopmentListener listener : listeners) {
\r
58 listener.handle(event);
\r
63 public static void setProperty(String name, Object value, Binding binding) {
\r
64 assert(name != null);
\r
65 assert(binding != null);
\r
67 binding.assertInstaceIsValid(value);
\r
68 } catch (BindingException e) {
\r
69 throw new RuntimeException(e);
\r
71 properties.put(name, new Variant(binding, value));
\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
79 return (T)value.getValue(binding);
\r
80 } catch (AdaptException e) {
\r
81 throw new RuntimeException(e);
\r
85 public static boolean isTrue(String name) {
\r
86 Boolean value = getProperty(name, Bindings.BOOLEAN);
\r
87 return value != null && value;
\r
90 public static Map<String, Variant> getProperties() {
\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