]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/ClusteringSupportImpl.java
Sync git svn branch with SVN repository r33249.
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / ClusteringSupportImpl.java
1 package fi.vtt.simantics.procore.internal;\r
2 \r
3 import org.simantics.db.Resource;\r
4 import org.simantics.db.exception.DatabaseException;\r
5 import org.simantics.db.exception.ResourceNotFoundException;\r
6 import org.simantics.db.exception.RuntimeDatabaseException;\r
7 import org.simantics.db.impl.ClusterI;\r
8 import org.simantics.db.impl.ResourceImpl;\r
9 import org.simantics.db.impl.TransientGraph;\r
10 import org.simantics.db.procore.cluster.ClusterImpl;\r
11 import org.simantics.db.service.ClusteringSupport;\r
12 \r
13 public class ClusteringSupportImpl implements ClusteringSupport {\r
14 \r
15     final private SessionImplSocket session;\r
16 \r
17     ClusteringSupportImpl(SessionImplSocket session) {\r
18         this.session = session;\r
19     }\r
20 \r
21     @Override\r
22     public long createCluster() {\r
23         long id;\r
24         try {\r
25             id = session.graphSession.newClusterId();\r
26         } catch (DatabaseException e) {\r
27             throw new RuntimeDatabaseException("Failed to get new cluster id.", e);\r
28         }\r
29         session.clusterTable.makeCluster(id, session.writeOnly);\r
30         return id;\r
31     }\r
32 \r
33     @Override\r
34     public long getCluster(Resource r) {\r
35         int id = session.querySupport.getId(r);\r
36         if(id < 0) // Virtual resource\r
37             return TransientGraph.getVirtualClusterKey(id);\r
38         return session.clusterTable.getClusterIdByResourceKeyNoThrow(id);\r
39     }\r
40 \r
41     @Override\r
42     public int getNumberOfResources(long clusterId) throws DatabaseException {\r
43         return session.clusterTable.getClusterByClusterId(clusterId).getNumberOfResources(session.clusterTranslator);\r
44     }\r
45 \r
46     @Override\r
47     public Resource getResourceByKey(int resourceKey)\r
48             throws ResourceNotFoundException {\r
49         return session.getResourceByKey(resourceKey);\r
50     }\r
51 \r
52     @Override\r
53     public Resource getResourceByIndexAndCluster(int resourceIndex, long clusterId)\r
54             throws DatabaseException, ResourceNotFoundException {\r
55         if (resourceIndex < 1)\r
56             throw new ResourceNotFoundException("Illegal resource index=" + resourceIndex + " cluster=" + clusterId);\r
57         ClusterI cluster = session.getClusterTable().getLoadOrThrow(clusterId);\r
58         int n = cluster.getNumberOfResources(null);\r
59         if (resourceIndex > n)\r
60             throw new ResourceNotFoundException("Illegal resource index=" + resourceIndex + " cluster=" + clusterId\r
61                     + " max index=" + n);\r
62         return session.getResource(resourceIndex, clusterId);\r
63     }\r
64 //    @Override\r
65 //    public Id getModifiedId(long clusterId) throws DatabaseException {\r
66 //        return session.clusterTable.getClusterByClusterId(clusterId).getModifiedId();\r
67 //    }\r
68 \r
69     @Override\r
70     public Resource getClusterSetOfCluster(Resource r) throws DatabaseException {\r
71         if(!r.isPersistent()) return null;\r
72         ClusterImpl cluster = session.clusterTable.getClusterByResourceKey(((ResourceImpl)r).id);\r
73         Long rid = session.clusterSetsSupport.getSet(cluster.getClusterId());\r
74         if(rid == null || rid == 0) return null;\r
75         return session.resourceSerializer.getResource(rid);\r
76     }\r
77 \r
78     @Override\r
79     public Resource getClusterSetOfCluster(long cluster) throws DatabaseException {\r
80         Long rid = session.clusterSetsSupport.getSet(cluster);\r
81         if(rid == null || rid == 0) return null;\r
82         return session.resourceSerializer.getResource(rid);\r
83     }\r
84 \r
85     @Override\r
86     public boolean isClusterSet(Resource r) throws DatabaseException {\r
87         return session.containsClusterSet(r);\r
88     }\r
89 \r
90 }\r