]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.common/src/org/simantics/db/common/CommandMetadata.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / CommandMetadata.java
diff --git a/bundles/org.simantics.db.common/src/org/simantics/db/common/CommandMetadata.java b/bundles/org.simantics.db.common/src/org/simantics/db/common/CommandMetadata.java
new file mode 100644 (file)
index 0000000..6d98016
--- /dev/null
@@ -0,0 +1,93 @@
+package org.simantics.db.common;\r
+\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.serialization.SerializationException;\r
+import org.simantics.databoard.serialization.Serializer;\r
+import org.simantics.db.Metadata;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+\r
+public class CommandMetadata implements Metadata {\r
+\r
+    public static final boolean DEBUG = false;\r
+    public static final String RESET_COMMAND = "// RESET";\r
+    \r
+    private static final Binding BINDING = \r
+            Bindings.getBindingUnchecked(CommandMetadata.class);\r
+    private static final Serializer SERIALIZER = \r
+            Bindings.getSerializerUnchecked(BINDING);\r
+    \r
+    public List<Command> commands;\r
+    \r
+    public static class Command {\r
+        public long modelId;\r
+        public String command;\r
+        \r
+        public Command() {         \r
+        }\r
+        \r
+        public Command(long modelId, String command) {\r
+            super();\r
+            this.modelId = modelId;\r
+            this.command = command;\r
+        }\r
+    }\r
+    \r
+    public CommandMetadata() {\r
+    }\r
+\r
+    @Override\r
+    public byte[] serialise(Session session) {\r
+        try {\r
+            return SERIALIZER.serialize(this);\r
+        } catch (IOException e) {\r
+            e.printStackTrace();\r
+            throw new RuntimeException(e);\r
+        }\r
+    }\r
+    \r
+    public static CommandMetadata deserialise(Session session, byte[] input) {\r
+        if(input == null) {\r
+            CommandMetadata metadata = new CommandMetadata();\r
+            metadata.commands = new ArrayList<Command>();\r
+            return metadata;\r
+        }\r
+        try {\r
+            return (CommandMetadata)SERIALIZER.deserialize(input);\r
+        } catch (SerializationException e) {\r
+            e.printStackTrace();\r
+        } catch (IOException e) {\r
+            e.printStackTrace();\r
+        }\r
+        return null;\r
+    }\r
+\r
+    public CommandMetadata add(Command command) {\r
+        commands.add(command);\r
+        return this;\r
+    }\r
+    \r
+    public List<Command> getCommands() {\r
+        return commands;\r
+    }\r
+\r
+    public static void add(WriteGraph graph, long modelId, String command) throws DatabaseException {\r
+        if(DEBUG) {\r
+            System.out.println("-------------------------------------------------------------");\r
+            System.out.println(command);\r
+        }\r
+        graph.addMetadata(graph.getMetadata(CommandMetadata.class).add(\r
+                new Command(modelId, command)));\r
+    }\r
+    \r
+    public static void addReset(WriteGraph graph, long modelId) throws DatabaseException {\r
+        graph.addMetadata(graph.getMetadata(CommandMetadata.class).add(\r
+                new Command(modelId, RESET_COMMAND)));\r
+    }\r
+}\r