View Javadoc
1   package com.atlassian.dbexporter;
2   
3   import java.util.Locale;
4   
5   /**
6    * A class that gives easy access to some database information
7    *
8    * @author Samuel Le Berrigaud
9    */
10  public final class DatabaseInformations {
11      private DatabaseInformations() {
12      }
13  
14      public static Database database(DatabaseInformation info) {
15          return new DatabaseImpl(info.get("database.name", new DatabaseTypeConverter()));
16      }
17  
18      public static interface Database {
19          Type getType();
20  
21          static enum Type {
22              H2,
23              HSQL,
24              MYSQL,
25              POSTGRES,
26              ORACLE,
27              MSSQL,
28              UNKNOWN
29          }
30      }
31  
32      private static class DatabaseTypeConverter extends DatabaseInformation.AbstractStringConverter<Database.Type> {
33          @Override
34          public Database.Type convert(String dbName) {
35              if (isEmpty(dbName)) {
36                  return Database.Type.UNKNOWN;
37              }
38  
39              if (isH2(dbName)) {
40                  return Database.Type.H2;
41              }
42  
43              if (isHsql(dbName)) {
44                  return Database.Type.HSQL;
45              }
46  
47              if (isMySql(dbName)) {
48                  return Database.Type.MYSQL;
49              }
50  
51              if (isPostgres(dbName)) {
52                  return Database.Type.POSTGRES;
53              }
54  
55              if (isOracle(dbName)) {
56                  return Database.Type.ORACLE;
57              }
58  
59              if (isMsSql(dbName)) {
60                  return Database.Type.MSSQL;
61              }
62  
63              return Database.Type.UNKNOWN;
64          }
65  
66          private boolean isEmpty(String dbName) {
67              return dbName == null || dbName.trim().length() == 0;
68          }
69  
70          private boolean isH2(String dbName) {
71              return startsWithIgnoreCase(dbName, "H2");
72          }
73  
74          private boolean isHsql(String dbName) {
75              return startsWithIgnoreCase(dbName, "HSQL");
76          }
77  
78          private boolean isMySql(String dbName) {
79              return startsWithIgnoreCase(dbName, "MySQL");
80          }
81  
82          private boolean isPostgres(String dbName) {
83              return startsWithIgnoreCase(dbName, "PostgreSQL");
84          }
85  
86          private boolean isOracle(String dbName) {
87              return startsWithIgnoreCase(dbName, "Oracle");
88          }
89  
90          private boolean isMsSql(String dbName) {
91              return startsWithIgnoreCase(dbName, "Microsoft");
92          }
93  
94          private boolean startsWithIgnoreCase(String s, String start) {
95              return toLowerCase(s).startsWith(toLowerCase(start));
96          }
97  
98          private String toLowerCase(String s) {
99              return s == null ? s : s.toLowerCase(Locale.ENGLISH);
100         }
101     }
102 
103     private static class DatabaseImpl implements Database {
104         private final Type type;
105 
106         public DatabaseImpl(Type type) {
107             this.type = type;
108         }
109 
110         @Override
111         public Type getType() {
112             return type;
113         }
114 
115         @Override
116         public String toString() {
117             return new StringBuilder().append(getType()).toString();
118         }
119     }
120 }