]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/SerialisationSupportImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / SerialisationSupportImpl.java
diff --git a/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/SerialisationSupportImpl.java b/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/SerialisationSupportImpl.java
new file mode 100644 (file)
index 0000000..b6a6e20
--- /dev/null
@@ -0,0 +1,83 @@
+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