]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/utils/JoinMap.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / utils / JoinMap.java
1 package org.simantics.modeling.utils;\r
2 \r
3 import gnu.trove.map.hash.THashMap;\r
4 \r
5 import org.simantics.db.Resource;\r
6 import org.simantics.db.WriteGraph;\r
7 import org.simantics.db.exception.DatabaseException;\r
8 import org.simantics.db.exception.RuntimeDatabaseException;\r
9 import org.simantics.layer0.Layer0;\r
10 import org.simantics.scl.runtime.SCLContext;\r
11 import org.simantics.scl.runtime.function.FunctionImpl1;\r
12 import org.simantics.structural.stubs.StructuralResource2;\r
13 \r
14 public class JoinMap extends FunctionImpl1<Object, Resource> {\r
15 \r
16     THashMap<Object,Resource> map = new THashMap<Object,Resource>(); \r
17     \r
18     @Override\r
19     public Resource apply(Object key) {\r
20         Resource join = map.get(key);\r
21         if(join == null) {\r
22             try {\r
23                 WriteGraph g = (WriteGraph)SCLContext.getCurrent().get("graph");\r
24                 Layer0 L0 = Layer0.getInstance(g);\r
25                 StructuralResource2 STR = StructuralResource2.getInstance(g);\r
26                 join = g.newResource();\r
27                 g.claim(join, L0.InstanceOf, STR.ConnectionJoin);\r
28                 map.put(key, join);\r
29             } catch(DatabaseException e) {\r
30                 throw new RuntimeDatabaseException(e);\r
31             }\r
32         }\r
33         return join;\r
34     }\r
35 \r
36 }\r