1 package com.atlassian.dbexporter.exporter;
2
3 import com.atlassian.dbexporter.Context;
4 import com.atlassian.dbexporter.DatabaseInformation;
5 import com.atlassian.dbexporter.node.NodeCreator;
6 import com.atlassian.dbexporter.progress.ProgressMonitor;
7
8 import java.util.Map;
9
10 import static com.atlassian.dbexporter.node.NodeBackup.DatabaseInformationNode;
11 import static com.atlassian.dbexporter.progress.ProgressMonitor.Task;
12 import static com.google.common.base.Preconditions.checkNotNull;
13 import static java.util.Collections.emptyMap;
14
15 public final class DatabaseInformationExporter implements Exporter {
16 private final DatabaseInformationReader databaseInformationReader;
17
18 public DatabaseInformationExporter() {
19 this(new DatabaseInformationReader() {
20 public Map<String, String> get() {
21 return emptyMap();
22 }
23 });
24 }
25
26 public DatabaseInformationExporter(DatabaseInformationReader databaseInformationReader) {
27 this.databaseInformationReader = checkNotNull(databaseInformationReader);
28 }
29
30 @Override
31 public void export(NodeCreator node, ExportConfiguration configuration, Context context) {
32 final ProgressMonitor monitor = configuration.getProgressMonitor();
33 monitor.begin(Task.DATABASE_INFORMATION);
34 final Map<String, String> properties = databaseInformationReader.get();
35 if (!properties.isEmpty()) {
36 export(node, properties);
37 }
38 context.put(new DatabaseInformation(properties));
39 monitor.end(Task.DATABASE_INFORMATION);
40 }
41
42 private void export(NodeCreator node, Map<String, String> properties) {
43 node.addNode(DatabaseInformationNode.NAME);
44 for (Map.Entry<String, String> property : properties.entrySet()) {
45 DatabaseInformationNode.addMeta(node, property.getKey(), property.getValue());
46 }
47 node.closeEntity();
48 }
49 }