]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.db.common;\r
2 \r
3 import java.lang.reflect.Method;\r
4 import java.util.Map;\r
5 \r
6 import org.simantics.db.Metadata;\r
7 import org.simantics.db.Session;\r
8 import org.simantics.db.common.utils.Logger;\r
9 import org.simantics.db.exception.ServiceException;\r
10 \r
11 public class MetadataUtils {\r
12 \r
13     private static final boolean TRACE_METADATA_SERIALIZATION = false;\r
14 \r
15     public static <T extends Metadata> boolean hasMetadata(Map<String,byte[]> metadata, Class<T> clazz) {\r
16         return metadata.containsKey(clazz.getName());\r
17     }\r
18     \r
19     @SuppressWarnings("unchecked")\r
20     public static <T extends Metadata> T getMetadata(Session session, Map<String,byte[]> metadata, Class<T> clazz) throws ServiceException {\r
21         byte[] data = metadata.get(clazz.getName());\r
22         if (TRACE_METADATA_SERIALIZATION) {\r
23             if (data != null)\r
24                 System.out.println("deserializing " + data.length + " bytes of metadata into " + clazz);\r
25         }\r
26         Method m;\r
27         try {\r
28             m = clazz.getMethod("deserialise", Session.class, byte[].class);\r
29             return (T) m.invoke(null, session, data);\r
30         } catch (Exception e) {\r
31             e.printStackTrace();\r
32             Logger.defaultLogError(e.toString());\r
33         }\r
34         return null;\r
35     }\r
36     \r
37     public static <T> void addMetadata(Session session, Map<String,byte[]> metadata, Metadata data) throws ServiceException {\r
38         byte[] blob = data.serialise(session);\r
39         if (TRACE_METADATA_SERIALIZATION)\r
40             System.out.println("serialized " + blob.length + " bytes of metadata into for " + data.getClass());\r
41         metadata.put(data.getClass().getName(), blob);\r
42     }\r
43     \r
44 }\r