View Javadoc
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   * Use a {@link ValueComparerSelector} to select a {@link ValueComparer} for the
13   * column from a {@link Map} of them.
14   *
15   * @author Jeff Jensen
16   * @since 2.6.0
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  }