ConditionalSelectorMultiValueComparer.java
package org.dbunit.assertion.comparer.value;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.util.Map;
import org.dbunit.DatabaseUnitException;
import org.dbunit.dataset.ITable;
import org.dbunit.dataset.datatype.DataType;
/**
* Use a {@link ValueComparerSelector} to select a {@link ValueComparer} for the
* column from a {@link Map} of them.
*
* @author Jeff Jensen
* @since 2.6.0
*/
public class ConditionalSelectorMultiValueComparer extends ValueComparerBase
{
private final ValueComparerSelector valueComparerSelector;
private final Map<Object, ValueComparer> valueComparers;
public ConditionalSelectorMultiValueComparer(final Map<Object, ValueComparer> valueComparers,
final ValueComparerSelector valueComparerSelector) {
assertNotNull(valueComparerSelector, "valueComparerSelector is null.");
assertNotNull(valueComparers, "valueComparers is null.");
this.valueComparerSelector = valueComparerSelector;
this.valueComparers = valueComparers;
}
@Override
public String doCompare(final ITable expectedTable,
final ITable actualTable, final int rowNum, final String columnName,
final DataType dataType, final Object expectedValue,
final Object actualValue) throws DatabaseUnitException
{
final ValueComparer valueComparer = valueComparerSelector.select(
expectedTable, actualTable, rowNum, columnName, dataType,
expectedValue, actualValue, valueComparers);
if (valueComparer == null)
{
final String msg =
"No ValueComparer found by valueComparerSelector="
+ valueComparerSelector + " in map="
+ valueComparers;
throw new IllegalStateException(msg);
}
return valueComparer.compare(expectedTable, actualTable, rowNum,
columnName, dataType, expectedValue, actualValue);
}
@Override
public String toString()
{
final StringBuilder sb = new StringBuilder(400);
sb.append(super.toString());
sb.append(": [valueComparerSelector=");
sb.append(valueComparerSelector.getClass().getName());
sb.append(", inValuesValueComparer=");
sb.append(valueComparers);
sb.append("]");
return sb.toString();
}
}