--- /dev/null
+package org.simantics.db.layer0.genericrelation;\r
+\r
+import gnu.trove.set.hash.THashSet;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import org.simantics.db.Resource;\r
+\r
+class DependenciesListenerStore {\r
+ \r
+ private final Map<Resource,Set<Runnable>> listeners = new HashMap<Resource,Set<Runnable>>();\r
+\r
+ public synchronized void addListener(Resource model, Runnable listener) {\r
+ Set<Runnable> list = listeners.get(model);\r
+ if(list == null) {\r
+ list = new THashSet<Runnable>();\r
+ listeners.put(model, list);\r
+ }\r
+ list.add(listener);\r
+ if (DependenciesRelation.DEBUG_LISTENERS) {\r
+ System.out.println("DependenciesRelation.addListener(" + listener + "), " + listeners.size() + " total listeners");\r
+ new Exception("DependenciesRelation.addListener(" + listener + ")").printStackTrace(System.out);\r
+ }\r
+ }\r
+\r
+ public synchronized void removeListener(Resource model, Runnable listener) {\r
+ Set<Runnable> list = listeners.get(model);\r
+ if(list == null) return;\r
+ list.remove(listener);\r
+ if (DependenciesRelation.DEBUG_LISTENERS) {\r
+ System.out.println("DependenciesRelation.removeListener(" + listener + "), " + listeners.size() + " total listeners");\r
+ new Exception("DependenciesRelation.removeListener(" + listener + ")").printStackTrace(System.out);\r
+ }\r
+ }\r
+\r
+ public synchronized void fireListeners(Resource model) {\r
+ Set<Runnable> list = listeners.get(model);\r
+ if(list == null) return;\r
+ for (Runnable r : list) {\r
+ r.run();\r
+ }\r
+ }\r
+\r
+}
\ No newline at end of file