View Javadoc
1   package com.atlassian.refapp.activeobjects;
2   
3   import com.atlassian.activeobjects.spi.AbstractTenantAwareDataSourceProvider;
4   import com.atlassian.activeobjects.spi.DatabaseType;
5   import com.atlassian.refapp.api.ConnectionProvider;
6   import com.atlassian.tenancy.api.Tenant;
7   import com.google.common.collect.ImmutableMap;
8   
9   import javax.annotation.Nonnull;
10  import javax.sql.DataSource;
11  
12  import java.util.Map;
13  
14  import static com.google.common.base.Preconditions.checkNotNull;
15  
16  public class RefappTenantAwareDataSourceProvider extends AbstractTenantAwareDataSourceProvider {
17      private final ConnectionProvider connectionProvider;
18  
19      private static final Map<String, DatabaseType> TYPE_MAPPING = ImmutableMap.<String, DatabaseType>builder()
20              .put("org.h2.Driver", DatabaseType.H2)
21              .put("org.postgresql.Driver", DatabaseType.POSTGRESQL)
22              .put("com.mysql.jdbc.Driver", DatabaseType.MYSQL)
23              .put("net.sourceforge.jtds.jdbc.Driver", DatabaseType.MS_SQL)
24              .put("com.microsoft.sqlserver.jdbc.SQLServerDriver", DatabaseType.MS_SQL)
25              .put("oracle.jdbc.OracleDriver", DatabaseType.ORACLE)
26              .build();
27  
28      public RefappTenantAwareDataSourceProvider(@Nonnull final ConnectionProvider connectionProvider) {
29          this.connectionProvider = checkNotNull(connectionProvider);
30      }
31  
32      @Nonnull
33      @Override
34      public DataSource getDataSource(@Nonnull final Tenant tenant) {
35          return connectionProvider.dataSource();
36      }
37  
38      @Nonnull
39      @Override
40      public DatabaseType getDatabaseType(@Nonnull final Tenant tenant) {
41          final DatabaseType databaseType = TYPE_MAPPING.get(connectionProvider.driverClassName());
42          if (databaseType == null) {
43              throw new RuntimeException("unknown driver class name '" + connectionProvider.driverClassName() + "'");
44          }
45          return databaseType;
46      }
47  
48      @Override
49      public String getSchema(@Nonnull Tenant tenant) {
50          return connectionProvider.schema().orElse(null);
51      }
52  }