]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.common/src/org/simantics/db/common/CommandMetadata.java
Merge commit 'bf75fd9'
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / CommandMetadata.java
1 package org.simantics.db.common;\r
2 \r
3 import java.io.IOException;\r
4 import java.util.ArrayList;\r
5 import java.util.List;\r
6 \r
7 import org.simantics.databoard.Bindings;\r
8 import org.simantics.databoard.binding.Binding;\r
9 import org.simantics.databoard.serialization.SerializationException;\r
10 import org.simantics.databoard.serialization.Serializer;\r
11 import org.simantics.db.Metadata;\r
12 import org.simantics.db.Session;\r
13 import org.simantics.db.WriteGraph;\r
14 import org.simantics.db.exception.DatabaseException;\r
15 \r
16 public class CommandMetadata implements Metadata {\r
17 \r
18     public static final boolean DEBUG = false;\r
19     public static final String RESET_COMMAND = "// RESET";\r
20     \r
21     private static final Binding BINDING = \r
22             Bindings.getBindingUnchecked(CommandMetadata.class);\r
23     private static final Serializer SERIALIZER = \r
24             Bindings.getSerializerUnchecked(BINDING);\r
25     \r
26     public List<Command> commands;\r
27     \r
28     public static class Command {\r
29         public long modelId;\r
30         public String command;\r
31         \r
32         public Command() {         \r
33         }\r
34         \r
35         public Command(long modelId, String command) {\r
36             super();\r
37             this.modelId = modelId;\r
38             this.command = command;\r
39         }\r
40     }\r
41     \r
42     public CommandMetadata() {\r
43     }\r
44 \r
45     @Override\r
46     public byte[] serialise(Session session) {\r
47         try {\r
48             return SERIALIZER.serialize(this);\r
49         } catch (IOException e) {\r
50             e.printStackTrace();\r
51             throw new RuntimeException(e);\r
52         }\r
53     }\r
54     \r
55     public static CommandMetadata deserialise(Session session, byte[] input) {\r
56         if(input == null) {\r
57             CommandMetadata metadata = new CommandMetadata();\r
58             metadata.commands = new ArrayList<Command>();\r
59             return metadata;\r
60         }\r
61         try {\r
62             return (CommandMetadata)SERIALIZER.deserialize(input);\r
63         } catch (SerializationException e) {\r
64             e.printStackTrace();\r
65         } catch (IOException e) {\r
66             e.printStackTrace();\r
67         }\r
68         return null;\r
69     }\r
70 \r
71     public CommandMetadata add(Command command) {\r
72         commands.add(command);\r
73         return this;\r
74     }\r
75     \r
76     public List<Command> getCommands() {\r
77         return commands;\r
78     }\r
79 \r
80     public static void add(WriteGraph graph, long modelId, String command) throws DatabaseException {\r
81         if(DEBUG) {\r
82             System.out.println("-------------------------------------------------------------");\r
83             System.out.println(command);\r
84         }\r
85         graph.addMetadata(graph.getMetadata(CommandMetadata.class).add(\r
86                 new Command(modelId, command)));\r
87     }\r
88     \r
89     public static void addReset(WriteGraph graph, long modelId) throws DatabaseException {\r
90         graph.addMetadata(graph.getMetadata(CommandMetadata.class).add(\r
91                 new Command(modelId, RESET_COMMAND)));\r
92     }\r
93 }\r