View Javadoc
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  }