1 package org.simantics.db.common;
\r
3 import java.lang.reflect.Method;
\r
4 import java.util.Map;
\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
11 public class MetadataUtils {
\r
13 private static final boolean TRACE_METADATA_SERIALIZATION = false;
\r
15 public static <T extends Metadata> boolean hasMetadata(Map<String,byte[]> metadata, Class<T> clazz) {
\r
16 return metadata.containsKey(clazz.getName());
\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
24 System.out.println("deserializing " + data.length + " bytes of metadata into " + clazz);
\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
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