]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/genericrelation/ExternalRequest.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / genericrelation / ExternalRequest.java
1 package org.simantics.db.layer0.genericrelation;\r
2 \r
3 import org.simantics.db.ReadGraph;\r
4 import org.simantics.db.Resource;\r
5 import org.simantics.db.Session;\r
6 import org.simantics.db.common.request.ParametrizedPrimitiveRead;\r
7 import org.simantics.db.layer0.adapter.GenericRelationIndex;\r
8 import org.simantics.db.procedure.Listener;\r
9 import org.simantics.utils.datastructures.Pair;\r
10 \r
11 class ExternalRequest extends ParametrizedPrimitiveRead<Pair<GenericRelationIndex,Resource>,Long> implements Runnable {\r
12 \r
13     private static long value = 0;\r
14     private Session session;\r
15     private Listener<Long> procedure;\r
16 \r
17     public ExternalRequest(GenericRelationIndex index, Resource model) {\r
18         super(Pair.make(index, model));\r
19     }\r
20 \r
21     @Override\r
22     public void register(ReadGraph graph, Listener<Long> procedure) {\r
23         synchronized(getClass()) {\r
24             procedure.execute(value++);\r
25         }\r
26         if(procedure.isDisposed()) return;\r
27         assert(this.procedure == null);\r
28         this.session = graph.getSession();\r
29         this.procedure = procedure;\r
30         parameter.first.addListener(graph, parameter.second, this);\r
31     }\r
32     \r
33     @Override\r
34     public void unregistered() {\r
35         parameter.first.removeListener(session, parameter.second, this);\r
36     }\r
37     \r
38     @Override\r
39     public void run() {\r
40         synchronized(getClass()) {\r
41             procedure.execute(value++);\r
42         }\r
43     }\r
44     \r
45 }