1 package org.dbunit.assertion.comparer.value;
2
3 import static org.junit.jupiter.api.Assertions.assertNotNull;
4
5 import java.util.Map;
6
7 import org.dbunit.DatabaseUnitException;
8 import org.dbunit.dataset.ITable;
9 import org.dbunit.dataset.datatype.DataType;
10
11
12
13
14
15
16
17
18 public class ConditionalSelectorMultiValueComparer extends ValueComparerBase
19 {
20 private final ValueComparerSelector valueComparerSelector;
21 private final Map<Object, ValueComparer> valueComparers;
22
23 public ConditionalSelectorMultiValueComparer(final Map<Object, ValueComparer> valueComparers,
24 final ValueComparerSelector valueComparerSelector) {
25 assertNotNull(valueComparerSelector, "valueComparerSelector is null.");
26 assertNotNull(valueComparers, "valueComparers is null.");
27
28 this.valueComparerSelector = valueComparerSelector;
29 this.valueComparers = valueComparers;
30 }
31
32 @Override
33 public String doCompare(final ITable expectedTable,
34 final ITable actualTable, final int rowNum, final String columnName,
35 final DataType dataType, final Object expectedValue,
36 final Object actualValue) throws DatabaseUnitException
37 {
38 final ValueComparer valueComparer = valueComparerSelector.select(
39 expectedTable, actualTable, rowNum, columnName, dataType,
40 expectedValue, actualValue, valueComparers);
41 if (valueComparer == null)
42 {
43 final String msg =
44 "No ValueComparer found by valueComparerSelector="
45 + valueComparerSelector + " in map="
46 + valueComparers;
47 throw new IllegalStateException(msg);
48 }
49
50 return valueComparer.compare(expectedTable, actualTable, rowNum,
51 columnName, dataType, expectedValue, actualValue);
52 }
53
54 @Override
55 public String toString()
56 {
57 final StringBuilder sb = new StringBuilder(400);
58 sb.append(super.toString());
59 sb.append(": [valueComparerSelector=");
60 sb.append(valueComparerSelector.getClass().getName());
61 sb.append(", inValuesValueComparer=");
62 sb.append(valueComparers);
63 sb.append("]");
64
65 return sb.toString();
66 }
67 }