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;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
16 public class Development {
18 private static final Logger LOGGER = LoggerFactory.getLogger(Development.class);
19 public static TreeMap<String,Integer> histogram = new TreeMap<>();
21 public static final boolean DEVELOPMENT = false;
23 public static final String PRINT = "Development.print";
25 public interface DevelopmentListener {
27 void handle(Object event);
31 final static private HashMap<String, Variant> properties = new HashMap<>();
33 final static private CopyOnWriteArrayList<DevelopmentListener> listeners = new CopyOnWriteArrayList<>();
38 listeners.add(new DevelopmentListener() {
41 public void handle(Object event) {
42 if((Boolean) getProperty(PRINT, Bindings.BOOLEAN))
43 LOGGER.info(event.toString());
51 public static void addListener(DevelopmentListener listener) {
52 listeners.add(listener);
55 public static void removeListener(DevelopmentListener listener) {
56 listeners.remove(listener);
59 public static void dispatchEvent(Object event) {
60 for(DevelopmentListener listener : listeners) {
61 listener.handle(event);
66 public static void setProperty(String name, Object value, Binding binding) {
68 assert(binding != null);
70 binding.assertInstaceIsValid(value);
71 } catch (BindingException e) {
72 throw new RuntimeException(e);
74 properties.put(name, new Variant(binding, value));
77 @SuppressWarnings("unchecked")
78 public static <T> T getProperty(String name, Binding binding) {
79 Variant value = properties.get(name);
80 if(value == null) return null;
82 return (T)value.getValue(binding);
83 } catch (AdaptException e) {
84 throw new RuntimeException(e);
88 public static boolean isTrue(String name) {
89 Boolean value = getProperty(name, Bindings.BOOLEAN);
90 return value != null && value;
93 public static Map<String, Variant> getProperties() {
97 public static void recordHistogram(Object o) {
98 String key = o.toString();
99 Integer i = histogram.get(key);
100 histogram.put(key, i == null ? 1 : i+1);