View Javadoc
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   * Represents the nodes being read/written for backups
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 }