1 package com.atlassian.dbexporter.node;
2
3 import java.math.BigDecimal;
4 import java.math.BigInteger;
5 import java.sql.Timestamp;
6
7 import static com.google.common.base.Preconditions.checkArgument;
8
9
10
11
12 public final class NodeBackup {
13 public final static class RootNode {
14 public static final String NAME = "backup";
15
16 public static NodeParser get(NodeStreamReader nsr) {
17 NodeParser node = nsr.getRootNode();
18 checkArgument(NAME.equals(node.getName()), "Root node is not '" + NAME + "'");
19 return node;
20 }
21
22 public static NodeCreator add(NodeStreamWriter nsw) {
23 return nsw.addRootNode(NAME);
24 }
25 }
26
27 public final static class DatabaseInformationNode {
28 public static final String NAME = "database";
29 public static final String META = "meta";
30 private static final String META_KEY = "key";
31 private static final String META_VALUE = "value";
32
33 public static NodeCreator addMeta(NodeCreator node, String key, String value) {
34 return node.addNode(META).addAttribute(META_KEY, key).addAttribute(META_VALUE, value).closeEntity();
35 }
36
37 public static String getMetaKey(NodeParser node) {
38 return node.getRequiredAttribute(META_KEY);
39 }
40
41 public static String getMetaValue(NodeParser node) {
42 return node.getRequiredAttribute(META_VALUE);
43 }
44 }
45
46 public final static class TableDefinitionNode {
47 public static final String NAME = "table";
48 private static final String NAME_ATTR = "name";
49
50 public static NodeCreator add(NodeCreator node) {
51 return node.addNode(NAME);
52 }
53
54 public static String getName(NodeParser node) {
55 return node.getRequiredAttribute(NAME_ATTR);
56 }
57
58 public static NodeCreator setName(NodeCreator node, String name) {
59 return node.addAttribute(NAME_ATTR, name);
60 }
61 }
62
63 public final static class ColumnDefinitionNode {
64 public static final String NAME = "column";
65
66 private static final String NAME_ATTR = "name";
67 private static final String PRIMARY_KEY = "primaryKey";
68 private static final String AUTO_INCREMENT = "autoIncrement";
69 private static final String SQL_TYPE = "sqlType";
70 private static final String PRECISION = "precision";
71 private static final String SCALE = "scale";
72
73 public static NodeCreator add(NodeCreator node) {
74 return node.addNode(NAME);
75 }
76
77 public static String getName(NodeParser node) {
78 return node.getRequiredAttribute(NAME_ATTR);
79 }
80
81 public static NodeCreator setName(NodeCreator node, String name) {
82 return node.addAttribute(NAME_ATTR, name);
83 }
84
85 public static boolean isPrimaryKey(NodeParser node) {
86 return Boolean.valueOf(node.getAttribute(PRIMARY_KEY));
87 }
88
89 public static NodeCreator setPrimaryKey(NodeCreator node, Boolean primaryKey) {
90 return primaryKey == null ? node : node.addAttribute(PRIMARY_KEY, String.valueOf(primaryKey));
91 }
92
93 public static boolean isAutoIncrement(NodeParser node) {
94 return Boolean.valueOf(node.getAttribute(AUTO_INCREMENT));
95 }
96
97 public static NodeCreator setAutoIncrement(NodeCreator node, Boolean autoIncrement) {
98 return autoIncrement == null ? node : node.addAttribute(AUTO_INCREMENT, String.valueOf(autoIncrement));
99 }
100
101 public static int getSqlType(NodeParser node) {
102 return Integer.valueOf(node.getRequiredAttribute(SQL_TYPE));
103 }
104
105 public static NodeCreator setSqlType(NodeCreator node, int sqlType) {
106 return node.addAttribute(SQL_TYPE, String.valueOf(sqlType));
107 }
108
109 public static Integer getPrecision(NodeParser node) {
110 final String stringPrecision = node.getAttribute(PRECISION);
111 return stringPrecision == null ? null : Integer.valueOf(stringPrecision);
112 }
113
114 public static NodeCreator setPrecision(NodeCreator node, Integer precision) {
115 return precision == null ? node : node.addAttribute(PRECISION, String.valueOf(precision));
116 }
117
118 public static Integer getScale(NodeParser node) {
119 final String stringScale = node.getAttribute(SCALE);
120 return stringScale == null ? null : Integer.valueOf(stringScale);
121 }
122
123 public static NodeCreator setScale(NodeCreator node, Integer scale) {
124 return scale == null ? node : node.addAttribute(SCALE, String.valueOf(scale));
125 }
126 }
127
128 public final static class ForeignKeyDefinitionNode {
129 public static final String NAME = "foreignKey";
130
131 private static final String NAME_ATTR = "name";
132 private static final String FROM_TABLE = "fromTable";
133 private static final String FROM_COLUMN = "fromColumn";
134 private static final String TO_TABLE = "toTable";
135 private static final String TO_COLUMN = "toColumn";
136
137 public static NodeCreator add(NodeCreator node) {
138 return node.addNode(NAME);
139 }
140
141 public static String getName(NodeParser node) {
142 return node.getRequiredAttribute(NAME_ATTR);
143 }
144
145 public static String getFromTable(NodeParser node) {
146 return node.getRequiredAttribute(FROM_TABLE);
147 }
148
149 public static NodeCreator setFromTable(NodeCreator node, String fromTable) {
150 return node.addAttribute(FROM_TABLE, fromTable);
151 }
152
153 public static String getFromColumn(NodeParser node) {
154 return node.getRequiredAttribute(FROM_COLUMN);
155 }
156
157 public static NodeCreator setFromColumn(NodeCreator node, String fromColumn) {
158 return node.addAttribute(FROM_COLUMN, fromColumn);
159 }
160
161 public static String getToTable(NodeParser node) {
162 return node.getRequiredAttribute(TO_TABLE);
163 }
164
165 public static NodeCreator setToTable(NodeCreator node, String toTable) {
166 return node.addAttribute(TO_TABLE, toTable);
167 }
168
169 public static NodeCreator setToColumn(NodeCreator node, String toField) {
170 return node.addAttribute(TO_COLUMN, toField);
171 }
172
173 public static String getToColumn(NodeParser node) {
174 return node.getRequiredAttribute(TO_COLUMN);
175 }
176 }
177
178 public final static class TableDataNode {
179 public static final String NAME = "data";
180 private static final String NAME_ATTR = "tableName";
181
182 public static NodeCreator add(NodeCreator node, String tableName) {
183 return node.addNode(NAME).addAttribute(NAME_ATTR, tableName);
184 }
185
186 public static String getName(NodeParser node) {
187 return node.getRequiredAttribute(NAME_ATTR);
188 }
189 }
190
191 public final static class ColumnDataNode {
192 public static final String NAME = "column";
193 private static final String NAME_ATTR = "name";
194
195 public static NodeCreator add(NodeCreator node, String columnName) {
196 return node.addNode(NAME).addAttribute(NAME_ATTR, columnName);
197 }
198
199 public static String getName(NodeParser node) {
200 return node.getRequiredAttribute(NAME_ATTR);
201 }
202 }
203
204 public final static class RowDataNode {
205 public static final String NAME = "row";
206 private static final String STRING = "string";
207 private static final String BOOLEAN = "boolean";
208 private static final String INTEGER = "integer";
209 private static final String DOUBLE = "double";
210 private static final String DATE = "timestamp";
211 private static final String BINARY = "binary";
212
213 public static NodeCreator add(NodeCreator node) {
214 return node.addNode(NAME);
215 }
216
217 public static NodeCreator append(NodeCreator node, BigInteger value) {
218 return node.addNode(INTEGER).setContentAsBigInteger(value == null ? null : value).closeEntity();
219 }
220
221 public static NodeCreator append(NodeCreator node, BigDecimal value) {
222 return node.addNode(DOUBLE).setContentAsBigDecimal(value == null ? null : value).closeEntity();
223 }
224
225 public static NodeCreator append(NodeCreator node, String value) {
226 return node.addNode(STRING).setContentAsString(value).closeEntity();
227 }
228
229 public static NodeCreator append(NodeCreator node, Boolean value) {
230 return node.addNode(BOOLEAN).setContentAsBoolean(value).closeEntity();
231 }
232
233 public static NodeCreator append(NodeCreator node, Timestamp value) {
234 return node.addNode(DATE).setContentAsDate(value).closeEntity();
235 }
236
237 public static NodeCreator append(NodeCreator node, byte[] value) {
238 return node.addNode(BINARY).setContentAsBinary(value).closeEntity();
239 }
240
241 public static boolean isString(NodeParser node) {
242 return STRING.equals(node.getName());
243 }
244
245 public static boolean isBoolean(NodeParser node) {
246 return BOOLEAN.equals(node.getName());
247 }
248
249 public static boolean isInteger(NodeParser node) {
250 return INTEGER.equals(node.getName());
251 }
252
253 public static boolean isDouble(NodeParser node) {
254 return DOUBLE.equals(node.getName());
255 }
256
257 public static boolean isDate(NodeParser node) {
258 return DATE.equals(node.getName());
259 }
260
261 public static boolean isBinary(NodeParser node) {
262 return BINARY.equals(node.getName());
263 }
264 }
265 }