/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.framework.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.AbstractDataSource;
/**
* This class implements the data source helper.
*/
public final class DecoratedDataSource
extends AbstractDataSource
{
private final DataSource dataSource;
private final ConnectionDecorator decorator;
public DecoratedDataSource( final DataSource dataSource, final ConnectionDecorator decorator )
{
this.dataSource = dataSource;
this.decorator = decorator;
}
private DataSource getInnerDataSource()
{
if (this.dataSource instanceof DecoratedDataSource) {
return ((DecoratedDataSource)this.dataSource).dataSource;
} else {
return this.dataSource;
}
}
@Override
@SuppressWarnings("unchecked")
public <T> T unwrap(final Class<T> type)
throws SQLException
{
if (type.equals(DataSource.class)) {
return (T)getInnerDataSource();
}
return super.unwrap(type);
}
public Connection getConnection()
throws SQLException
{
return this.decorator.decorate( this.dataSource.getConnection() );
}
public Connection getConnection( String user, String password )
throws SQLException
{
return this.decorator.decorate( this.dataSource.getConnection( user, password ) );
}
}