View Javadoc
1   package com.atlassian.dbexporter.exporter;
2   
3   import com.atlassian.dbexporter.Column;
4   import com.atlassian.dbexporter.Context;
5   import com.atlassian.dbexporter.DatabaseInformation;
6   import com.atlassian.dbexporter.ForeignKey;
7   import com.atlassian.dbexporter.Table;
8   import com.atlassian.dbexporter.node.NodeCreator;
9   import com.atlassian.dbexporter.progress.ProgressMonitor;
10  
11  import static com.atlassian.dbexporter.node.NodeBackup.ColumnDefinitionNode;
12  import static com.atlassian.dbexporter.node.NodeBackup.ForeignKeyDefinitionNode;
13  import static com.atlassian.dbexporter.node.NodeBackup.TableDefinitionNode;
14  import static com.atlassian.dbexporter.progress.ProgressMonitor.Task;
15  import static com.google.common.base.Preconditions.checkNotNull;
16  import static com.google.common.collect.Lists.newLinkedList;
17  
18  public final class TableDefinitionExporter implements Exporter {
19      private final TableReader tableReader;
20  
21      public TableDefinitionExporter(TableReader tableReader) {
22          this.tableReader = checkNotNull(tableReader);
23      }
24  
25      @Override
26      public void export(NodeCreator node, ExportConfiguration configuration, Context context) {
27          final ProgressMonitor monitor = configuration.getProgressMonitor();
28          monitor.begin(Task.TABLE_DEFINITION);
29  
30          int tableCount = 0;
31          final Iterable<Table> tables = tableReader.read(getDatabaseInformation(context), configuration.getEntityNameProcessor());
32          for (Table table : tables) {
33              export(node, table);
34              tableCount++;
35          }
36          monitor.end(Task.TABLE_DEFINITION);
37          monitor.totalNumberOfTables(tableCount);
38  
39          context.putAll(newLinkedList(tables));
40      }
41  
42      private DatabaseInformation getDatabaseInformation(Context context) {
43          return checkNotNull(context.get(DatabaseInformation.class));
44      }
45  
46      private void export(NodeCreator node, Table table) {
47          TableDefinitionNode.add(node);
48          TableDefinitionNode.setName(node, table.getName());
49  
50          for (Column column : table.getColumns()) {
51              export(node, column);
52          }
53  
54          for (ForeignKey foreignKey : table.getForeignKeys()) {
55              export(node, foreignKey);
56          }
57  
58          node.closeEntity();
59      }
60  
61      private void export(NodeCreator node, Column column) {
62          ColumnDefinitionNode.add(node);
63          ColumnDefinitionNode.setName(node, column.getName());
64          ColumnDefinitionNode.setPrimaryKey(node, column.isPrimaryKey());
65          ColumnDefinitionNode.setAutoIncrement(node, column.isAutoIncrement());
66          ColumnDefinitionNode.setSqlType(node, column.getSqlType());
67          ColumnDefinitionNode.setPrecision(node, column.getPrecision());
68          ColumnDefinitionNode.setScale(node, column.getScale());
69          node.closeEntity();
70      }
71  
72      private void export(NodeCreator node, ForeignKey foreignKey) {
73          ForeignKeyDefinitionNode.add(node);
74          ForeignKeyDefinitionNode.setFromTable(node, foreignKey.getFromTable());
75          ForeignKeyDefinitionNode.setFromColumn(node, foreignKey.getFromField());
76          ForeignKeyDefinitionNode.setToTable(node, foreignKey.getToTable());
77          ForeignKeyDefinitionNode.setToColumn(node, foreignKey.getToField());
78          node.closeEntity();
79      }
80  }