/*
* Copyright 2010, 2011 Christopher Pheby
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jadira.usertype.dateandtime.shared.dbunit;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.persistence.EntityManager;
import org.dbunit.Assertion;
import org.dbunit.DatabaseUnitException;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.ext.h2.H2Connection;
import org.dbunit.ext.oracle.OracleConnection;
import org.hibernate.Session;
import org.hibernate.engine.jdbc.spi.JdbcWrapper;
import org.hibernate.jdbc.Work;
public class DatabaseCapable {
protected void verifyDatabaseTable(final EntityManager manager, final String tableName) throws RuntimeDatabaseUnitException {
Work work = new Work() {
@Override
public void execute(Connection connection) throws SQLException {
final Connection wrappedConnection;
if (connection instanceof JdbcWrapper) {
wrappedConnection = (Connection) ((JdbcWrapper<?>) connection).getWrappedObject();
} else {
wrappedConnection = connection;
}
IDataSet databaseDataSet;
DatabaseConnection dbunitConnection;
try {
if (wrappedConnection.getClass().getName().equals("oracle.jdbc.driver.T4CConnection")) {
dbunitConnection = new OracleConnection(wrappedConnection, "chris");
} else {
dbunitConnection = new H2Connection(wrappedConnection, null);
}
databaseDataSet = dbunitConnection.createDataSet();
} catch (DatabaseUnitException ex) {
throw new RuntimeException(ex);
}
ITable actualTable;
try {
actualTable = databaseDataSet.getTable(tableName);
File placeholder = new File(DatabaseCapable.class
.getResource("/expected/.dbunit-comparison-files")
.getFile());
File comparisonFile = new File(placeholder.getParentFile()
.getPath()
+ System.getProperty("file.separator")
+ tableName + ".xml");
// writeExpectedFile(dbunitConnection, comparisonFile, tableName);
IDataSet expectedDataSet = new FlatXmlDataSetBuilder()
.build(comparisonFile);
ITable expectedTable = expectedDataSet.getTable(tableName);
Assertion.assertEquals(expectedTable, actualTable);
} catch (DatabaseUnitException ex) {
throw new RuntimeDatabaseUnitException(ex);
} catch (IOException ex) {
throw new RuntimeDatabaseUnitException(ex);
}
}
};
((Session) (manager.getDelegate())).doWork(work);
}
protected void writeExpectedFile(IDatabaseConnection dbunitConnection,
File outputFile, String tableName) throws IOException,
DataSetException {
QueryDataSet partialDataSet = new QueryDataSet(dbunitConnection);
partialDataSet.addTable(tableName);
FlatXmlDataSet.write(partialDataSet, new FileOutputStream(outputFile));
}
}