--- /dev/null
+package org.simantics.modeling.utils;\r
+\r
+import gnu.trove.map.hash.THashMap;\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.exception.RuntimeDatabaseException;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.scl.runtime.SCLContext;\r
+import org.simantics.scl.runtime.function.FunctionImpl1;\r
+import org.simantics.structural.stubs.StructuralResource2;\r
+\r
+public class JoinMap extends FunctionImpl1<Object, Resource> {\r
+\r
+ THashMap<Object,Resource> map = new THashMap<Object,Resource>(); \r
+ \r
+ @Override\r
+ public Resource apply(Object key) {\r
+ Resource join = map.get(key);\r
+ if(join == null) {\r
+ try {\r
+ WriteGraph g = (WriteGraph)SCLContext.getCurrent().get("graph");\r
+ Layer0 L0 = Layer0.getInstance(g);\r
+ StructuralResource2 STR = StructuralResource2.getInstance(g);\r
+ join = g.newResource();\r
+ g.claim(join, L0.InstanceOf, STR.ConnectionJoin);\r
+ map.put(key, join);\r
+ } catch(DatabaseException e) {\r
+ throw new RuntimeDatabaseException(e);\r
+ }\r
+ }\r
+ return join;\r
+ }\r
+\r
+}\r