]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.impl/src/org/simantics/db/impl/graph/SingleObjectProcedure.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / graph / SingleObjectProcedure.java
1 package org.simantics.db.impl.graph;\r
2 \r
3 import org.simantics.db.Resource;\r
4 import org.simantics.db.exception.DatabaseException;\r
5 import org.simantics.db.exception.NoSingleResultException;\r
6 import org.simantics.db.impl.query.IntProcedure;\r
7 import org.simantics.db.impl.query.QueryProcessor;\r
8 \r
9 public class SingleObjectProcedure implements IntProcedure {\r
10 \r
11         final private QueryProcessor processor;\r
12         private DatabaseException exception;\r
13         private Resource result;\r
14         \r
15         public SingleObjectProcedure(QueryProcessor processor) {\r
16                 this.processor = processor;\r
17         }\r
18         \r
19         @Override\r
20         public void execute(ReadGraphImpl graph, int i) {\r
21                 Resource resource = processor.querySupport.getResource(i);\r
22                 if(result != null) {\r
23                         exception = new NoSingleResultException("");\r
24                 } else {\r
25                         result = resource;\r
26                 }\r
27         }\r
28 \r
29         @Override\r
30         public void finished(ReadGraphImpl graph) {\r
31                 if(result == null) exception = new NoSingleResultException("");\r
32         }\r
33 \r
34         @Override\r
35         public void exception(ReadGraphImpl graph, Throwable throwable) {\r
36                 if(throwable instanceof DatabaseException) exception = (DatabaseException)throwable;\r
37                 else throwable = new DatabaseException(throwable);\r
38         }\r
39         \r
40         public Resource get() throws DatabaseException {\r
41                 if(exception != null) throw exception;\r
42                 else return result;\r
43         }\r
44 \r
45 }\r