]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.common/src/org/simantics/db/common/MetadataUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / MetadataUtils.java
diff --git a/bundles/org.simantics.db.common/src/org/simantics/db/common/MetadataUtils.java b/bundles/org.simantics.db.common/src/org/simantics/db/common/MetadataUtils.java
new file mode 100644 (file)
index 0000000..30e21ff
--- /dev/null
@@ -0,0 +1,44 @@
+package org.simantics.db.common;\r
+\r
+import java.lang.reflect.Method;\r
+import java.util.Map;\r
+\r
+import org.simantics.db.Metadata;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.common.utils.Logger;\r
+import org.simantics.db.exception.ServiceException;\r
+\r
+public class MetadataUtils {\r
+\r
+    private static final boolean TRACE_METADATA_SERIALIZATION = false;\r
+\r
+    public static <T extends Metadata> boolean hasMetadata(Map<String,byte[]> metadata, Class<T> clazz) {\r
+       return metadata.containsKey(clazz.getName());\r
+    }\r
+    \r
+    @SuppressWarnings("unchecked")\r
+    public static <T extends Metadata> T getMetadata(Session session, Map<String,byte[]> metadata, Class<T> clazz) throws ServiceException {\r
+        byte[] data = metadata.get(clazz.getName());\r
+        if (TRACE_METADATA_SERIALIZATION) {\r
+            if (data != null)\r
+                System.out.println("deserializing " + data.length + " bytes of metadata into " + clazz);\r
+        }\r
+        Method m;\r
+        try {\r
+            m = clazz.getMethod("deserialise", Session.class, byte[].class);\r
+            return (T) m.invoke(null, session, data);\r
+        } catch (Exception e) {\r
+            e.printStackTrace();\r
+            Logger.defaultLogError(e.toString());\r
+        }\r
+        return null;\r
+    }\r
+    \r
+    public static <T> void addMetadata(Session session, Map<String,byte[]> metadata, Metadata data) throws ServiceException {\r
+        byte[] blob = data.serialise(session);\r
+        if (TRACE_METADATA_SERIALIZATION)\r
+            System.out.println("serialized " + blob.length + " bytes of metadata into for " + data.getClass());\r
+        metadata.put(data.getClass().getName(), blob);\r
+    }\r
+    \r
+}\r