View Javadoc
1   package com.atlassian.dbexporter.importer;
2   
3   import com.atlassian.dbexporter.Context;
4   import com.atlassian.dbexporter.DatabaseInformation;
5   import com.atlassian.dbexporter.ImportExportErrorService;
6   import com.atlassian.dbexporter.node.NodeParser;
7   import com.atlassian.dbexporter.progress.ProgressMonitor;
8   
9   import java.util.Map;
10  
11  import static com.atlassian.dbexporter.importer.ImporterUtils.checkEndNode;
12  import static com.atlassian.dbexporter.importer.ImporterUtils.checkStartNode;
13  import static com.atlassian.dbexporter.node.NodeBackup.DatabaseInformationNode;
14  import static com.atlassian.dbexporter.node.NodeBackup.DatabaseInformationNode.getMetaKey;
15  import static com.atlassian.dbexporter.node.NodeBackup.DatabaseInformationNode.getMetaValue;
16  import static com.atlassian.dbexporter.progress.ProgressMonitor.Task;
17  import static com.google.common.base.Preconditions.checkNotNull;
18  import static com.google.common.collect.Maps.newHashMap;
19  
20  public final class DatabaseInformationImporter extends AbstractSingleNodeImporter {
21      private DatabaseInformationChecker infoChecker;
22  
23      public DatabaseInformationImporter(ImportExportErrorService errorService) {
24          this(errorService, NoOpDatabaseInformationChecker.INSTANCE);
25      }
26  
27      public DatabaseInformationImporter(ImportExportErrorService errorService, DatabaseInformationChecker infoChecker) {
28          super(errorService);
29          this.infoChecker = checkNotNull(infoChecker);
30      }
31  
32      @Override
33      protected void doImportNode(NodeParser node, ImportConfiguration configuration, Context context) {
34          final ProgressMonitor monitor = configuration.getProgressMonitor();
35          monitor.begin(Task.DATABASE_INFORMATION);
36  
37          final DatabaseInformation info = doImportDatabaseInformation(node);
38          infoChecker.check(info);
39          context.put(info);
40  
41          monitor.end(Task.DATABASE_INFORMATION);
42      }
43  
44      private DatabaseInformation doImportDatabaseInformation(NodeParser node) {
45          final Map<String, String> meta = newHashMap();
46          checkStartNode(node, DatabaseInformationNode.NAME);
47          doImportMetas(node.getNextNode(), meta);
48          checkEndNode(node, DatabaseInformationNode.NAME);
49          node.getNextNode(); // done with the database information
50          return new DatabaseInformation(meta);
51      }
52  
53      private void doImportMetas(NodeParser node, Map<String, String> meta) {
54          while (node.getName().equals(DatabaseInformationNode.META)) {
55              doImportMeta(node, meta);
56          }
57      }
58  
59      private void doImportMeta(NodeParser node, Map<String, String> meta) {
60          checkStartNode(node, DatabaseInformationNode.META);
61          meta.put(getMetaKey(node), getMetaValue(node));
62          checkEndNode(node.getNextNode(), DatabaseInformationNode.META);
63          node.getNextNode(); // go to next node
64      }
65  
66      @Override
67      protected String getNodeName() {
68          return DatabaseInformationNode.NAME;
69      }
70  
71      private static final class NoOpDatabaseInformationChecker implements DatabaseInformationChecker {
72          private static final DatabaseInformationChecker INSTANCE = new NoOpDatabaseInformationChecker();
73  
74          private NoOpDatabaseInformationChecker() {
75          }
76  
77          public void check(DatabaseInformation information) {
78              // no-op
79          }
80      }
81  }