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