package com.infusion.tenant.datasource;

import org.apache.commons.dbcp.BasicDataSource;

import java.sql.SQLException;

import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import com.infusion.tenant.CurrentTenant;

import javax.sql.DataSource;

/**
 * This class allows pooled data sources to be used for multiple tenant databases. 
 */
public class TenantPooledDataSource extends BasicDataSource implements TenantDataSource {
// ======================================================================================================================== 
//    Static Fields 
// ======================================================================================================================== 

    public static final boolean multiTenant = true;

// ======================================================================================================================== 
//    Instance Fields
// ======================================================================================================================== 

    private CurrentTenant currentTenant;
    private DataSourceUrlResolver dataSourceUrlResolver;

// ======================================================================================================================== 
//    Public Instance Methods
// ======================================================================================================================== 

    public boolean isWrapperFor(Class<?> aClass) throws SQLException {
        throw new NotImplementedException();
    }

    public void setCurrentTenant(CurrentTenant currentTenant) {
        this.currentTenant = currentTenant;
    }

    public void setDataSourceUrlResolver(DataSourceUrlResolver dataSourceUrlResolver) {
        this.dataSourceUrlResolver = dataSourceUrlResolver;
    }

    public <T> T unwrap(Class<T> tClass) throws SQLException {
        throw new NotImplementedException();
    }

// ======================================================================================================================== 
//    Non-Public Instance Methods
// ======================================================================================================================== 

    @Override
    protected DataSource createDataSource() throws SQLException {
        final String dataSourceUrl = dataSourceUrlResolver.getDataSourceUrl(currentTenant.get());
        if (dataSourceUrl != null) {
            this.url = dataSourceUrl;
        }
        return super.createDataSource();    
    }
}

@@ -118,79 +118,8 @@
 n;%0A%0A
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;%0A
 impo
@@ -190,19 +190,16 @@
 ce;%0A%0A/**
-%0A *
  This cl
@@ -270,18 +270,16 @@
 tabases.
- %0A
  */%0Apubl
@@ -361,17 +361,17 @@
 taSource
- 
+%0A
 %7B%0A// ===
@@ -679,19 +679,17 @@
 tiTenant
- = 
+=
 true;%0A%0A/
@@ -1400,32 +1400,36 @@
 ows SQLException
+%0A   
  %7B%0A        throw
@@ -1429,38 +1429,44 @@
   throw new 
-NotImplemented
+UnsupportedOperation
 Exception();
@@ -1534,16 +1534,20 @@
 tTenant)
+%0A   
  %7B%0A     
@@ -1567,19 +1567,17 @@
 ntTenant
- = 
+=
 currentT
@@ -1675,16 +1675,20 @@
 esolver)
+%0A   
  %7B%0A     
@@ -1716,19 +1716,17 @@
 Resolver
- = 
+=
 dataSour
@@ -1799,32 +1799,36 @@
 ows SQLException
+%0A   
  %7B%0A        throw
@@ -1836,22 +1836,28 @@
 new 
-NotImplemented
+UnsupportedOperation
 Exce
@@ -2234,16 +2234,20 @@
 xception
+%0A   
  %7B%0A     
@@ -2275,19 +2275,17 @@
 ourceUrl
- = 
+=
 dataSour
@@ -2371,16 +2371,24 @@
 != null)
+%0A       
  %7B%0A     
@@ -2406,11 +2406,9 @@
 .url
- = 
+=
 data
@@ -2468,20 +2468,16 @@
 ource();
-    
 %0A    %7D%0A%7D

convert deprecated exception to one that is supported