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