X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.common%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fcommon%2FMetadataUtils.java;fp=bundles%2Forg.simantics.db.common%2Fsrc%2Forg%2Fsimantics%2Fdb%2Fcommon%2FMetadataUtils.java;h=30e21ff52ea6a00b101cefcea6848ee3cf279dfe;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git 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 index 000000000..30e21ff52 --- /dev/null +++ b/bundles/org.simantics.db.common/src/org/simantics/db/common/MetadataUtils.java @@ -0,0 +1,44 @@ +package org.simantics.db.common; + +import java.lang.reflect.Method; +import java.util.Map; + +import org.simantics.db.Metadata; +import org.simantics.db.Session; +import org.simantics.db.common.utils.Logger; +import org.simantics.db.exception.ServiceException; + +public class MetadataUtils { + + private static final boolean TRACE_METADATA_SERIALIZATION = false; + + public static boolean hasMetadata(Map metadata, Class clazz) { + return metadata.containsKey(clazz.getName()); + } + + @SuppressWarnings("unchecked") + public static T getMetadata(Session session, Map metadata, Class clazz) throws ServiceException { + byte[] data = metadata.get(clazz.getName()); + if (TRACE_METADATA_SERIALIZATION) { + if (data != null) + System.out.println("deserializing " + data.length + " bytes of metadata into " + clazz); + } + Method m; + try { + m = clazz.getMethod("deserialise", Session.class, byte[].class); + return (T) m.invoke(null, session, data); + } catch (Exception e) { + e.printStackTrace(); + Logger.defaultLogError(e.toString()); + } + return null; + } + + public static void addMetadata(Session session, Map metadata, Metadata data) throws ServiceException { + byte[] blob = data.serialise(session); + if (TRACE_METADATA_SERIALIZATION) + System.out.println("serialized " + blob.length + " bytes of metadata into for " + data.getClass()); + metadata.put(data.getClass().getName(), blob); + } + +}