001: /*
002: *
003: * The DbUnit Database Testing Framework
004: * Copyright (C)2002-2004, DbUnit.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: */
021:
022: package org.dbunit.dataset;
023:
024: import org.slf4j.Logger;
025: import org.slf4j.LoggerFactory;
026:
027: import org.dbunit.dataset.stream.IDataSetConsumer;
028: import org.dbunit.dataset.stream.IDataSetProducer;
029:
030: import java.util.ArrayList;
031: import java.util.List;
032:
033: /**
034: * Hold copy of another dataset or a consumed provider content.
035: *
036: * @author Manuel Laflamme
037: * @since Apr 18, 2003
038: * @version $Revision: 554 $
039: */
040: public class CachedDataSet extends AbstractDataSet implements
041: IDataSetConsumer {
042:
043: /**
044: * Logger for this class
045: */
046: private static final Logger logger = LoggerFactory
047: .getLogger(CachedDataSet.class);
048:
049: private ITable[] _tables;
050:
051: private List _tableList;
052: private DefaultTable _activeTable;
053:
054: /**
055: * Default constructor.
056: */
057: public CachedDataSet() {
058: }
059:
060: /**
061: * Creates a copy of the specified dataset.
062: */
063: public CachedDataSet(IDataSet dataSet) throws DataSetException {
064: List tableList = new ArrayList();
065: ITableIterator iterator = dataSet.iterator();
066: while (iterator.next()) {
067: tableList.add(new CachedTable(iterator.getTable()));
068: }
069: _tables = (ITable[]) tableList.toArray(new ITable[0]);
070: }
071:
072: /**
073: * Creates a CachedDataSet that syncronously consume the specified producer.
074: */
075: public CachedDataSet(IDataSetProducer producer)
076: throws DataSetException {
077: producer.setConsumer(this );
078: producer.produce();
079: }
080:
081: ////////////////////////////////////////////////////////////////////////////
082: // AbstractDataSet class
083:
084: protected ITableIterator createIterator(boolean reversed)
085: throws DataSetException {
086: logger.debug("createIterator(reversed=" + reversed
087: + ") - start");
088:
089: return new DefaultTableIterator(_tables, reversed);
090: }
091:
092: ////////////////////////////////////////////////////////////////////////
093: // IDataSetConsumer interface
094:
095: public void startDataSet() throws DataSetException {
096: logger.debug("startDataSet() - start");
097:
098: _tableList = new ArrayList();
099: _tables = null;
100: }
101:
102: public void endDataSet() throws DataSetException {
103: logger.debug("endDataSet() - start");
104:
105: _tables = (ITable[]) _tableList.toArray(new ITable[0]);
106: _tableList = null;
107: }
108:
109: public void startTable(ITableMetaData metaData)
110: throws DataSetException {
111: logger.debug("startTable(metaData=" + metaData + ") - start");
112:
113: _activeTable = new DefaultTable(metaData);
114: // System.out.println("START " + _activeMetaData.getTableName());
115: }
116:
117: public void endTable() throws DataSetException {
118: logger.debug("endTable() - start");
119:
120: // System.out.println("END " + _activeMetaData.getTableName());
121: _tableList.add(_activeTable);
122: _activeTable = null;
123: }
124:
125: public void row(Object[] values) throws DataSetException {
126: logger.debug("row(values=" + values + ") - start");
127:
128: _activeTable.addRow(values);
129: }
130: }
|