1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.dbunit.dataset;
23
24 import org.dbunit.dataset.stream.IDataSetConsumer;
25 import org.dbunit.dataset.stream.IDataSetProducer;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29
30
31
32
33
34
35
36
37 public class CachedDataSet extends AbstractDataSet implements IDataSetConsumer
38 {
39 private static final Logger logger = LoggerFactory.getLogger(CachedDataSet.class);
40
41 private DefaultTable _activeTable;
42
43
44
45
46 public CachedDataSet() throws DataSetException {
47 super();
48 initialize();
49 }
50
51
52
53
54 public CachedDataSet(IDataSet dataSet) throws DataSetException
55 {
56 super(dataSet.isCaseSensitiveTableNames());
57 initialize();
58
59 final ITableIterator iterator = dataSet.iterator();
60 while (iterator.next())
61 {
62 final ITable table = iterator.getTable();
63 _orderedTableNameMap.add(table.getTableMetaData().getTableName(),
64 new CachedTable(table));
65 }
66 }
67
68
69
70
71 public CachedDataSet(IDataSetProducer producer) throws DataSetException
72 {
73 this(producer, false);
74 }
75
76
77
78
79
80
81
82 public CachedDataSet(IDataSetProducer producer, boolean caseSensitiveTableNames) throws DataSetException
83 {
84 super(caseSensitiveTableNames);
85 initialize();
86
87 producer.setConsumer(this);
88 producer.produce();
89 }
90
91
92
93
94 protected ITableIterator createIterator(boolean reversed)
95 throws DataSetException
96 {
97 if(logger.isDebugEnabled())
98 logger.debug("createIterator(reversed={}) - start", String.valueOf(reversed));
99
100 ITable[] tables = (ITable[])_orderedTableNameMap.orderedValues().toArray(new ITable[0]);
101 return new DefaultTableIterator(tables, reversed);
102 }
103
104
105
106
107 public void startDataSet() throws DataSetException
108 {
109 logger.debug("startDataSet() - start");
110 _orderedTableNameMap = super.createTableNameMap();
111 }
112
113 public void endDataSet() throws DataSetException
114 {
115 logger.debug("endDataSet() - start");
116 logger.debug("endDataSet() - the final tableMap is: " + _orderedTableNameMap);
117 }
118
119 public void startTable(ITableMetaData metaData) throws DataSetException
120 {
121 logger.debug("startTable(metaData={}) - start", metaData);
122 _activeTable = new DefaultTable(metaData);
123 }
124
125 public void endTable() throws DataSetException
126 {
127 logger.debug("endTable() - start");
128 String tableName = _activeTable.getTableMetaData().getTableName();
129
130 if(_orderedTableNameMap.containsTable(tableName))
131 {
132 DefaultTable existingTable = (DefaultTable)_orderedTableNameMap.get(tableName);
133
134 existingTable.addTableRows(_activeTable);
135 }
136 else
137 {
138 _orderedTableNameMap.add(tableName, _activeTable);
139 }
140 _activeTable = null;
141 }
142
143 public void row(Object[] values) throws DataSetException
144 {
145 logger.debug("row(values={}) - start", values);
146 _activeTable.addRow(values);
147 }
148 }