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;
23
24 import org.dbunit.assertion.DefaultFailureHandler;
25 import org.dbunit.assertion.SimpleAssert;
26 import org.dbunit.database.IDatabaseConnection;
27 import org.dbunit.dataset.IDataSet;
28 import org.dbunit.operation.DatabaseOperation;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32
33
34
35
36
37
38
39
40
41 public abstract class AbstractDatabaseTester extends SimpleAssert implements IDatabaseTester
42 {
43
44
45
46 private static final Logger logger = LoggerFactory.getLogger(AbstractDatabaseTester.class);
47
48
49
50
51 private static final class OperationType
52 {
53 public static final OperationType SET_UP = new OperationType("setUp");
54 public static final OperationType TEAR_DOWN = new OperationType("tearDown");
55
56 private final String key;
57
58 private OperationType(String key)
59 {
60 this.key = key;
61 }
62
63 @Override
64 public String toString()
65 {
66 return "OperationType: " + key;
67 }
68 }
69
70 private IDataSet dataSet;
71 private String schema;
72 private DatabaseOperation setUpOperation = DatabaseOperation.CLEAN_INSERT;
73 private DatabaseOperation tearDownOperation = DatabaseOperation.NONE;
74 private IOperationListener operationListener;
75
76 public AbstractDatabaseTester()
77 {
78 this(null);
79 }
80
81
82
83
84
85
86 public AbstractDatabaseTester(String schema)
87 {
88 super(new DefaultFailureHandler());
89 this.schema = schema;
90 }
91
92 public void closeConnection(IDatabaseConnection connection) throws Exception
93 {
94 logger.debug("closeConnection(connection={}) - start", connection);
95
96 connection.close();
97 }
98
99 public IDataSet getDataSet()
100 {
101 logger.debug("getDataSet() - start");
102
103 return dataSet;
104 }
105
106 public void onSetup() throws Exception
107 {
108 logger.debug("onSetup() - start");
109 executeOperation(getSetUpOperation(), OperationType.SET_UP);
110 }
111
112 public void onTearDown() throws Exception
113 {
114 logger.debug("onTearDown() - start");
115 executeOperation(getTearDownOperation(), OperationType.TEAR_DOWN);
116 }
117
118 public void setDataSet(IDataSet dataSet)
119 {
120 logger.debug("setDataSet(dataSet={}) - start", dataSet);
121
122 this.dataSet = dataSet;
123 }
124
125 public void setSchema(String schema)
126 {
127 logger.debug("setSchema(schema={}) - start", schema);
128
129 logger.warn("setSchema() should not be used anymore");
130 this.schema = schema;
131 }
132
133 public void setSetUpOperation(DatabaseOperation setUpOperation)
134 {
135 logger.debug("setSetUpOperation(setUpOperation={}) - start", setUpOperation);
136
137 this.setUpOperation = setUpOperation;
138 }
139
140 public void setTearDownOperation(DatabaseOperation tearDownOperation)
141 {
142 logger.debug("setTearDownOperation(tearDownOperation={}) - start", tearDownOperation);
143
144 this.tearDownOperation = tearDownOperation;
145 }
146
147
148
149
150 protected String getSchema()
151 {
152 logger.trace("getSchema() - start");
153
154 return schema;
155 }
156
157
158
159
160 public DatabaseOperation getSetUpOperation()
161 {
162 logger.trace("getSetUpOperation() - start");
163
164 return setUpOperation;
165 }
166
167
168
169
170 public DatabaseOperation getTearDownOperation()
171 {
172 logger.trace("getTearDownOperation() - start");
173
174 return tearDownOperation;
175 }
176
177
178
179
180
181 private void executeOperation(DatabaseOperation operation, OperationType type) throws Exception
182 {
183 logger.debug("executeOperation(operation={}) - start", operation);
184
185 if (operation != DatabaseOperation.NONE)
186 {
187
188 if (operationListener == null)
189 {
190 logger.debug("OperationListener is null and will be defaulted.");
191 operationListener = new DefaultOperationListener();
192 }
193
194 IDatabaseConnection connection = getConnection();
195 operationListener.connectionRetrieved(connection);
196
197 try
198 {
199 operation.execute(connection, getDataSet());
200 } finally
201 {
202
203
204 if (type == OperationType.SET_UP)
205 {
206 operationListener.operationSetUpFinished(connection);
207 } else if (type == OperationType.TEAR_DOWN)
208 {
209 operationListener.operationTearDownFinished(connection);
210 } else
211 {
212 throw new DatabaseUnitRuntimeException("Cannot happen - unknown OperationType specified: " + type);
213 }
214 }
215 }
216 }
217
218 public void setOperationListener(IOperationListener operationListener)
219 {
220 logger.debug("setOperationListener(operationListener={}) - start", operationListener);
221 this.operationListener = operationListener;
222 }
223
224 @Override
225 public String toString()
226 {
227 final StringBuilder sb = new StringBuilder();
228 sb.append(getClass().getName()).append("[");
229 sb.append("schema=").append(schema);
230 sb.append(", dataSet=").append(dataSet);
231 sb.append(", setUpOperation=").append(setUpOperation);
232 sb.append(", tearDownOperation=").append(tearDownOperation);
233 sb.append(", operationListener=").append(operationListener);
234 sb.append("]");
235 return sb.toString();
236 }
237 }