1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.dbunit.dataset;
22
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 import java.util.HashMap;
27 import java.util.Map;
28
29
30
31
32
33
34
35
36
37 public class ReplacementDataSet extends AbstractDataSet
38 {
39
40
41
42
43 private static final Logger logger = LoggerFactory.getLogger(ReplacementDataSet.class);
44
45 private final IDataSet _dataSet;
46 private final Map _objectMap;
47 private final Map _substringMap;
48 private String _startDelim;
49 private String _endDelim;
50 private boolean _strictReplacement;
51
52
53
54
55
56
57
58 public ReplacementDataSet(IDataSet dataSet)
59 {
60 _dataSet = dataSet;
61 _objectMap = new HashMap();
62 _substringMap = new HashMap();
63 }
64
65
66
67
68
69
70
71
72 public ReplacementDataSet(IDataSet dataSet, Map objectMap, Map substringMap)
73 {
74 _dataSet = dataSet;
75 _objectMap = objectMap == null ? new HashMap() : objectMap;
76 _substringMap = substringMap == null ? new HashMap() : substringMap;
77 }
78
79
80
81
82
83
84
85 public void setStrictReplacement(boolean strictReplacement) {
86 this._strictReplacement = strictReplacement;
87 }
88
89
90
91
92
93
94
95 public void addReplacementObject(Object originalObject, Object replacementObject)
96 {
97 logger.debug("addReplacementObject(originalObject={}, replacementObject={}) - start", originalObject, replacementObject);
98
99 _objectMap.put(originalObject, replacementObject);
100 }
101
102
103
104
105
106
107
108 public void addReplacementSubstring(String originalSubstring,
109 String replacementSubstring)
110 {
111 logger.debug("addReplacementSubstring(originalSubstring={}, replacementSubstring={}) - start", originalSubstring, replacementSubstring);
112
113 if (originalSubstring == null || replacementSubstring == null)
114 {
115 throw new NullPointerException();
116 }
117
118 _substringMap.put(originalSubstring, replacementSubstring);
119 }
120
121
122
123
124 public void setSubstringDelimiters(String startDelimiter, String endDelimiter)
125 {
126 logger.debug("setSubstringDelimiters(startDelimiter={}, endDelimiter={}) - start", startDelimiter, endDelimiter);
127
128 if (startDelimiter == null || endDelimiter == null)
129 {
130 throw new NullPointerException();
131 }
132
133 _startDelim = startDelimiter;
134 _endDelim = endDelimiter;
135 }
136
137 private ReplacementTable createReplacementTable(ITable table)
138 {
139 logger.debug("createReplacementTable(table={}) - start", table);
140
141 ReplacementTable replacementTable = new ReplacementTable(
142 table, _objectMap, _substringMap, _startDelim, _endDelim);
143 replacementTable.setStrictReplacement(_strictReplacement);
144 return replacementTable;
145 }
146
147
148
149
150 protected ITableIterator createIterator(boolean reversed)
151 throws DataSetException
152 {
153 if(logger.isDebugEnabled())
154 logger.debug("createIterator(reversed={}) - start", String.valueOf(reversed));
155
156 return new ReplacementIterator(reversed ?
157 _dataSet.reverseIterator() : _dataSet.iterator());
158 }
159
160
161
162
163 public String[] getTableNames() throws DataSetException
164 {
165 logger.debug("getTableNames() - start");
166
167 return _dataSet.getTableNames();
168 }
169
170 public ITableMetaData getTableMetaData(String tableName)
171 throws DataSetException
172 {
173 logger.debug("getTableMetaData(tableName={}) - start", tableName);
174
175 return _dataSet.getTableMetaData(tableName);
176 }
177
178 public ITable getTable(String tableName) throws DataSetException
179 {
180 logger.debug("getTable(tableName={}) - start", tableName);
181
182 return createReplacementTable(_dataSet.getTable(tableName));
183 }
184
185
186
187
188 private class ReplacementIterator implements ITableIterator
189 {
190
191
192
193
194 private final Logger logger = LoggerFactory.getLogger(ReplacementIterator.class);
195
196 private final ITableIterator _iterator;
197
198 public ReplacementIterator(ITableIterator iterator)
199 {
200 _iterator = iterator;
201 }
202
203
204
205
206 public boolean next() throws DataSetException
207 {
208 logger.debug("next() - start");
209
210 return _iterator.next();
211 }
212
213 public ITableMetaData getTableMetaData() throws DataSetException
214 {
215 logger.debug("getTableMetaData() - start");
216
217 return _iterator.getTableMetaData();
218 }
219
220 public ITable getTable() throws DataSetException
221 {
222 logger.debug("getTable() - start");
223
224 return createReplacementTable(_iterator.getTable());
225 }
226 }
227 }