View Javadoc
1   package com.atlassian.dbexporter.exporter;
2   
3   import com.atlassian.dbexporter.ConnectionProvider;
4   import com.atlassian.dbexporter.ImportExportErrorService;
5   import com.google.common.collect.ImmutableMap;
6   
7   import java.sql.Connection;
8   import java.sql.DatabaseMetaData;
9   import java.sql.SQLException;
10  import java.util.Map;
11  
12  import static com.atlassian.dbexporter.jdbc.JdbcUtils.closeQuietly;
13  import static com.atlassian.dbexporter.jdbc.JdbcUtils.metadata;
14  import static com.google.common.base.Preconditions.checkNotNull;
15  
16  public final class ConnectionProviderInformationReader implements DatabaseInformationReader {
17      private final ImportExportErrorService errorService;
18      private final ConnectionProvider connectionProvider;
19  
20      public ConnectionProviderInformationReader(ImportExportErrorService errorService, ConnectionProvider connectionProvider) {
21          this.errorService = checkNotNull(errorService);
22          this.connectionProvider = checkNotNull(connectionProvider);
23      }
24  
25      @Override
26      public Map<String, String> get() {
27          Connection connection = null;
28          try {
29              final ImmutableMap.Builder<String, String> mapBuilder = ImmutableMap.builder();
30  
31              connection = getConnection();
32              final DatabaseMetaData metaData = metadata(errorService, connection);
33  
34              mapBuilder.put("database.name", getDatabaseName(metaData));
35              mapBuilder.put("database.version", getDatabaseVersion(metaData));
36              mapBuilder.put("database.minorVersion", getDatabaseMinorVersion(metaData));
37              mapBuilder.put("database.majorVersion", getDatabaseMajorVersion(metaData));
38  
39              mapBuilder.put("driver.name", getDriverName(metaData));
40              mapBuilder.put("driver.version", getDriverVersion(metaData));
41  
42              return mapBuilder.build();
43          } finally {
44              closeQuietly(connection);
45          }
46      }
47  
48      private Connection getConnection() {
49          try {
50              return connectionProvider.getConnection();
51          } catch (SQLException e) {
52              throw errorService.newImportExportSqlException(null, "Could not get connection from provider", e);
53          }
54      }
55  
56      private String getDatabaseName(DatabaseMetaData metaData) {
57          try {
58              return metaData.getDatabaseProductName();
59          } catch (SQLException e) {
60              throw errorService.newImportExportSqlException(null, "Could not get database product name from metadata", e);
61          }
62      }
63  
64      private String getDatabaseVersion(DatabaseMetaData metaData) {
65          try {
66              return metaData.getDatabaseProductVersion();
67          } catch (SQLException e) {
68              throw errorService.newImportExportSqlException(null, "Could not get database product version from metadata", e);
69          }
70      }
71  
72      private String getDatabaseMinorVersion(DatabaseMetaData metaData) {
73          try {
74              return String.valueOf(metaData.getDatabaseMinorVersion());
75          } catch (SQLException e) {
76              throw errorService.newImportExportSqlException(null, "Could not get database minor version from metadata", e);
77          }
78      }
79  
80      private String getDatabaseMajorVersion(DatabaseMetaData metaData) {
81          try {
82              return String.valueOf(metaData.getDatabaseMajorVersion());
83          } catch (SQLException e) {
84              throw errorService.newImportExportSqlException(null, "Could not get database major version from metadata", e);
85          }
86      }
87  
88      private String getDriverName(DatabaseMetaData metaData) {
89          try {
90              return metaData.getDriverName();
91          } catch (SQLException e) {
92              throw errorService.newImportExportSqlException(null, "Could not get driver name from metadata", e);
93          }
94      }
95  
96      private String getDriverVersion(DatabaseMetaData metaData) {
97          try {
98              return metaData.getDriverVersion();
99          } catch (SQLException e) {
100             throw errorService.newImportExportSqlException(null, "Could not get driver version from metadata", e);
101         }
102     }
103 }