/activeobjects-dbex/src/main/java/com/atlassian/dbexporter/node/NodeBackup.java

https://bitbucket.org/activeobjects/ao-plugin · Java · 265 lines · 202 code · 60 blank · 3 comment · 8 complexity · c56dc8021293173723bd44b28daece19 MD5 · raw file

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