ValueComparerTemplateBase.java

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

  2. import org.dbunit.DatabaseUnitException;
  3. import org.dbunit.dataset.ITable;
  4. import org.dbunit.dataset.datatype.DataType;

  5. /**
  6.  * Base class for {@link ValueComparer}s, providing template methods and common
  7.  * elements.
  8.  *
  9.  * @author Jeff Jensen
  10.  * @since 2.6.0
  11.  */
  12. public abstract class ValueComparerTemplateBase extends ValueComparerBase
  13. {
  14.     /**
  15.      * {@inheritDoc}
  16.      *
  17.      * This implementation calls
  18.      * {@link #isExpected(ITable, ITable, int, String, DataType, Object, Object)}.
  19.      *
  20.      * @see ValueComparer#compare(ITable, ITable, int, String, DataType, Object,
  21.      *      Object)
  22.      */
  23.     @Override
  24.     protected String doCompare(final ITable expectedTable,
  25.             final ITable actualTable, final int rowNum, final String columnName,
  26.             final DataType dataType, final Object expectedValue,
  27.             final Object actualValue) throws DatabaseUnitException
  28.     {
  29.         final String failMessage;

  30.         final boolean isExpected = isExpected(expectedTable, actualTable,
  31.                 rowNum, columnName, dataType, expectedValue, actualValue);
  32.         if (isExpected)
  33.         {
  34.             failMessage = null;
  35.         } else
  36.         {
  37.             failMessage = makeFailMessage(expectedValue, actualValue);
  38.         }

  39.         return failMessage;
  40.     }

  41.     /**
  42.      * Makes the fail message using {@link #getFailPhrase()}.
  43.      *
  44.      * @return the formatted fail message with the fail phrase.
  45.      */
  46.     protected String makeFailMessage(final Object expectedValue,
  47.             final Object actualValue)
  48.     {
  49.         final String failPhrase = getFailPhrase();
  50.         return String.format(BASE_FAIL_MSG, actualValue, failPhrase,
  51.                 expectedValue);
  52.     }

  53.     /** @return true if comparing actual to expected is as expected. */
  54.     protected abstract boolean isExpected(final ITable expectedTable,
  55.             final ITable actualTable, final int rowNum, final String columnName,
  56.             final DataType dataType, final Object expectedValue,
  57.             final Object actualValue) throws DatabaseUnitException;

  58.     /** @return The text snippet for substitution in {@link #BASE_FAIL_MSG}. */
  59.     protected abstract String getFailPhrase();
  60. }