1 package com.atlassian.dbexporter;
2
3 import java.util.Map;
4
5 import static com.google.common.base.Preconditions.checkNotNull;
6 import static com.google.common.collect.Maps.newHashMap;
7
8 public final class DatabaseInformation {
9 private final Map<String, String> meta;
10
11 public DatabaseInformation(Map<String, String> meta) {
12 this.meta = newHashMap(checkNotNull(meta));
13 }
14
15 public <T> T get(String key, StringConverter<T> converter) {
16 return converter.convert(getString(key));
17 }
18
19 public <T> T get(String key, StringConverter<T> converter, T defaultValue) {
20 return converter.convert(getString(key), defaultValue);
21 }
22
23 public String getString(String key) {
24 return meta.get(key);
25 }
26
27 public String getString(String key, String defaultValue) {
28 return get(key, new StringStringConverter(), defaultValue);
29 }
30
31 public int getInt(String key) {
32 return get(key, new IntStringConverter());
33 }
34
35 public int getInt(String key, int defaultValue) {
36 return get(key, new IntStringConverter(), defaultValue);
37 }
38
39 public boolean isEmpty() {
40 return meta.isEmpty();
41 }
42
43 public static interface StringConverter<T> {
44 T convert(String s);
45
46 T convert(String s, T defaultValue);
47 }
48
49 public static abstract class AbstractStringConverter<T> implements StringConverter<T> {
50 public final T convert(String s, T defaultValue) {
51 final T value = convert(s);
52 return value != null ? value : defaultValue;
53 }
54 }
55
56 private static final class StringStringConverter extends AbstractStringConverter<String> {
57 public String convert(String s) {
58 return s;
59 }
60 }
61
62 private static final class IntStringConverter extends AbstractStringConverter<Integer> {
63 public Integer convert(String s) {
64 return Integer.valueOf(s);
65 }
66 }
67 }