/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright 2008 - 2009 Pentaho Corporation. All rights reserved.
*/
package org.pentaho.pac.server.datasources;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.exception.JDBCConnectionException;
import org.pentaho.pac.common.datasources.DuplicateDataSourceException;
import org.pentaho.pac.common.datasources.NonExistingDataSourceException;
import org.pentaho.pac.server.common.DAOException;
import org.pentaho.pac.server.common.HibernateSessionFactory;
import org.pentaho.platform.api.repository.datasource.IDatasource;
import org.pentaho.platform.repository.datasource.Datasource;
public class DataSourceHibernateDAO implements IDataSourceDAO {
public DataSourceHibernateDAO() {
}
public void createDataSource(IDatasource newDataSource) throws DuplicateDataSourceException, DAOException {
if (getDataSource(newDataSource.getName()) == null) {
try {
getSession().save(newDataSource);
} catch (HibernateException ex) {
getSession().evict(newDataSource);
throw new DAOException( ex.getMessage(), ex );
}
} else {
throw new DuplicateDataSourceException(newDataSource.getName());
}
}
public void deleteDataSource(IDatasource dataSource) throws NonExistingDataSourceException, DAOException {
IDatasource tmpDataSource = getDataSource(dataSource.getName());
if (tmpDataSource != null) {
try {
getSession().delete(tmpDataSource);
} catch (HibernateException ex) {
throw new DAOException( ex.getMessage(), ex );
}
} else {
throw new NonExistingDataSourceException(dataSource.getName());
}
}
public IDatasource getDataSource(String jndiName) throws DAOException {
try {
return(IDatasource) getSession().get(Datasource.class.getName(), jndiName);
} catch (HibernateException ex) {
throw new DAOException(ex.getMessage(), ex);
}
}
@SuppressWarnings("unchecked")
public List<IDatasource> getDataSources() throws DAOException {
try {
String nameQuery = "org.pentaho.platform.repository.datasource.Datasource.findAllDatasources"; //$NON-NLS-1$
Query qry = getSession().getNamedQuery(nameQuery).setCacheable(true);
return qry.list();
} catch (HibernateException ex) {
throw new DAOException( ex.getMessage(), ex );
}
}
public void updateDataSource(IDatasource dataSource) throws NonExistingDataSourceException, DAOException {
try {
getSession().update(dataSource);
} catch (HibernateException ex) {
throw new DAOException( ex.getMessage(), ex );
}
}
public Session getSession() {
return HibernateSessionFactory.getSession();
}
public void beginTransaction() throws DAOException {
try {
getSession().beginTransaction();
} catch ( JDBCConnectionException ex )
{
throw new DAOException( ex.getMessage(), ex );
}
}
public void commitTransaction() throws DAOException {
try {
getSession().getTransaction().commit();
} catch ( JDBCConnectionException ex )
{
throw new DAOException( ex.getMessage(), ex );
}
}
public void rollbackTransaction() throws DAOException {
try {
getSession().getTransaction().rollback();
} catch ( JDBCConnectionException ex )
{
throw new DAOException( ex.getMessage(), ex );
}
}
public void closeSession() {
HibernateSessionFactory.closeSession();
}
}