package org.ccframe.commons.dbunit; import org.ccframe.commons.util.DbUnitUtils; import org.ccframe.commons.util.DbUnitUtils.DBTYPE; import org.dbunit.database.IDatabaseConnection; import org.dbunit.dataset.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; public class ReplacementDataSet extends AbstractDataSet { /** * Logger for this class */ private static final Logger LOGGER = LoggerFactory.getLogger(ReplacementDataSet.class); private final IDataSet dataSet; private IDatabaseConnection connection; private DBTYPE dbType; private List processorList = new ArrayList(); private static int tableId = 0; public ReplacementDataSet(IDataSet dataSet, IDatabaseConnection connection, DBTYPE dbType, List processorList) { this.dataSet = dataSet; this.connection = connection; this.dbType = dbType; this.processorList.addAll(processorList); } private ReplacementTable createReplacementTable(ITable table) { tableId ++; return new ReplacementTable(table, tableId, connection, dbType, processorList); } //////////////////////////////////////////////////////////////////////////// // AbstractDataSet class protected ITableIterator createIterator(boolean reversed) throws DataSetException { return new ReplacementIterator(reversed ? dataSet.reverseIterator() : dataSet.iterator()); } //////////////////////////////////////////////////////////////////////////// // IDataSet interface public String[] getTableNames() throws DataSetException { LOGGER.debug("getTableNames() - start"); return dataSet.getTableNames(); } public ITableMetaData getTableMetaData(String tableName) throws DataSetException { return dataSet.getTableMetaData(tableName); } public ITable getTable(String tableName) throws DataSetException { return createReplacementTable(dataSet.getTable(tableName)); } //////////////////////////////////////////////////////////////////////////// // ReplacementIterator class private class ReplacementIterator implements ITableIterator { // private final Logger logger = LoggerFactory.getLogger(ReplacementIterator.class); private final ITableIterator iterator; public ReplacementIterator(ITableIterator iterator) { this.iterator = iterator; } //////////////////////////////////////////////////////////////////////// // ITableIterator interface public boolean next() throws DataSetException { return iterator.next(); } public ITableMetaData getTableMetaData() throws DataSetException { return iterator.getTableMetaData(); } public ITable getTable() throws DataSetException { return createReplacementTable(iterator.getTable()); } } }