ConditionalSelectorMultiValueComparer.java

  1. package org.dbunit.assertion.comparer.value;

  2. import static org.junit.jupiter.api.Assertions.assertNotNull;

  3. import java.util.Map;

  4. import org.dbunit.DatabaseUnitException;
  5. import org.dbunit.dataset.ITable;
  6. import org.dbunit.dataset.datatype.DataType;

  7. /**
  8.  * Use a {@link ValueComparerSelector} to select a {@link ValueComparer} for the
  9.  * column from a {@link Map} of them.
  10.  *
  11.  * @author Jeff Jensen
  12.  * @since 2.6.0
  13.  */
  14. public class ConditionalSelectorMultiValueComparer extends ValueComparerBase
  15. {
  16.     private final ValueComparerSelector valueComparerSelector;
  17.     private final Map<Object, ValueComparer> valueComparers;

  18.     public ConditionalSelectorMultiValueComparer(final Map<Object, ValueComparer> valueComparers,
  19.             final ValueComparerSelector valueComparerSelector) {
  20.         assertNotNull(valueComparerSelector, "valueComparerSelector is null.");
  21.         assertNotNull(valueComparers, "valueComparers is null.");

  22.         this.valueComparerSelector = valueComparerSelector;
  23.         this.valueComparers = valueComparers;
  24.     }

  25.     @Override
  26.     public String doCompare(final ITable expectedTable,
  27.             final ITable actualTable, final int rowNum, final String columnName,
  28.             final DataType dataType, final Object expectedValue,
  29.             final Object actualValue) throws DatabaseUnitException
  30.     {
  31.         final ValueComparer valueComparer = valueComparerSelector.select(
  32.                 expectedTable, actualTable, rowNum, columnName, dataType,
  33.                 expectedValue, actualValue, valueComparers);
  34.         if (valueComparer == null)
  35.         {
  36.             final String msg =
  37.                     "No ValueComparer found by valueComparerSelector="
  38.                             + valueComparerSelector + " in map="
  39.                             + valueComparers;
  40.             throw new IllegalStateException(msg);
  41.         }

  42.         return valueComparer.compare(expectedTable, actualTable, rowNum,
  43.                 columnName, dataType, expectedValue, actualValue);
  44.     }

  45.     @Override
  46.     public String toString()
  47.     {
  48.         final StringBuilder sb = new StringBuilder(400);
  49.         sb.append(super.toString());
  50.         sb.append(": [valueComparerSelector=");
  51.         sb.append(valueComparerSelector.getClass().getName());
  52.         sb.append(", inValuesValueComparer=");
  53.         sb.append(valueComparers);
  54.         sb.append("]");

  55.         return sb.toString();
  56.     }
  57. }