--- /dev/null
+package fi.vtt.simantics.procore.internal;\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.ResourceSerializer;\r
+import org.simantics.db.common.utils.Logger;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.impl.ClusterI;\r
+import org.simantics.db.impl.ResourceImpl;\r
+import org.simantics.db.procore.cluster.ClusterImpl;\r
+import org.simantics.db.procore.cluster.ClusterTraits;\r
+import org.simantics.db.service.ResourceUID;\r
+import org.simantics.db.service.SerialisationSupport;\r
+\r
+import fi.vtt.simantics.procore.internal.SessionImplSocket.ResourceSerializerImpl;\r
+\r
+public class SerialisationSupportImpl implements SerialisationSupport {\r
+\r
+ final private SessionImplSocket session;\r
+ final private ResourceSerializerImpl serializer;\r
+ \r
+ SerialisationSupportImpl(SessionImplSocket session) {\r
+ this.session = session;\r
+ this.serializer = session.resourceSerializer;\r
+ }\r
+ \r
+ @Override\r
+ public ResourceSerializer getResourceSerializer() {\r
+ return serializer;\r
+ }\r
+\r
+ @Override\r
+ public long getRandomAccessId(int id) {\r
+ try {\r
+ return serializer.createRandomAccessId(id);\r
+ } catch (DatabaseException e) {\r
+ Logger.defaultLogError(e);\r
+ } catch (Throwable t) {\r
+ Logger.defaultLogError(t);\r
+ }\r
+ return 0;\r
+ }\r
+ \r
+ @Override\r
+ public int getTransientId(Resource resource) throws DatabaseException {\r
+ return serializer.getTransientId(resource);\r
+ }\r
+ \r
+ @Override\r
+ public Resource getResource(long randomAccessId) throws DatabaseException {\r
+ return serializer.getResource(randomAccessId);\r
+ }\r
+ \r
+ @Override\r
+ public int getTransientId(long randomAccessId) throws DatabaseException {\r
+ return serializer.getTransientId(randomAccessId);\r
+ }\r
+\r
+ @Override\r
+ public long getRandomAccessId(Resource resource) throws DatabaseException {\r
+ return serializer.getRandomAccessId(resource);\r
+ }\r
+\r
+ @Override\r
+ public Resource getResource(int transientId) throws DatabaseException {\r
+ return session.getResource(transientId);\r
+ }\r
+\r
+ @Override\r
+ public ResourceUID getUID(Resource resource) throws DatabaseException {\r
+ ResourceImpl impl = (ResourceImpl)resource;\r
+ int resourceKey = impl.id;\r
+ ClusterImpl cluster = session.clusterTable.getClusterByResourceKey(resourceKey);\r
+ return cluster.clusterUID.toRID(ClusterTraits.getResourceIndexFromResourceKey(resourceKey));\r
+ }\r
+\r
+ @Override\r
+ public Resource getResource(ResourceUID uid) throws DatabaseException {\r
+ ClusterI cluster = session.clusterTable.getClusterByClusterUIDOrMakeProxy(uid.asCID());\r
+ int key = ClusterTraits.createResourceKey(cluster.getClusterKey(), (int) uid.getIndex());\r
+ return new ResourceImpl(session.resourceSupport, key);\r
+ }\r
+ \r
+}\r