View Javadoc
1   package com.atlassian.activeobjects.spi;
2   
3   import com.atlassian.tenancy.api.Tenant;
4   import com.atlassian.tenancy.api.TenantContext;
5   
6   import javax.sql.DataSource;
7   
8   /**
9    * Compatibility implementation which calls {@link com.atlassian.activeobjects.spi.TenantAwareDataSourceProvider}
10   * with the current tenant.
11   *
12   * Will throw {@link java.lang.IllegalStateException} if invoked when there is no tenant present.
13   */
14  public class DataSourceProviderImpl implements DataSourceProvider {
15      private final TenantAwareDataSourceProvider tenantAwareDataSourceProvider;
16  
17      private final TenantContext tenantContext;
18  
19      public DataSourceProviderImpl(final TenantAwareDataSourceProvider tenantAwareDataSourceProvider, final TenantContext tenantContext) {
20          this.tenantAwareDataSourceProvider = tenantAwareDataSourceProvider;
21          this.tenantContext = tenantContext;
22      }
23  
24      @Override
25      public DataSource getDataSource() {
26          Tenant tenant = tenantContext.getCurrentTenant();
27          if (tenant == null) {
28              throw new IllegalStateException("tenant / dataSource unavailable");
29          }
30          return tenantAwareDataSourceProvider.getDataSource(tenant);
31      }
32  
33      @Override
34      public DatabaseType getDatabaseType() {
35          Tenant tenant = tenantContext.getCurrentTenant();
36          if (tenant == null) {
37              throw new IllegalStateException("tenant / databaseType unavailable");
38          }
39          return tenantAwareDataSourceProvider.getDatabaseType(tenant);
40      }
41  
42      @Override
43      public String getSchema() {
44          Tenant tenant = tenantContext.getCurrentTenant();
45          if (tenant == null) {
46              throw new IllegalStateException("tenant / schema unavailable");
47          }
48          return tenantAwareDataSourceProvider.getSchema(tenant);
49      }
50  }