DefaultVerifyTableDefinitionVerifier.java

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

  2. import java.util.Map;

  3. import org.dbunit.VerifyTableDefinition;
  4. import org.dbunit.assertion.comparer.value.ValueComparer;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;

  7. /**
  8.  * Default implementation for {@link VerifyTableDefinitionVerifier} which throws
  9.  * {@link IllegalStateException} on configuration conflicts.
  10.  *
  11.  * @author Jeff Jensen
  12.  * @since 2.6.0
  13.  */
  14. public class DefaultVerifyTableDefinitionVerifier
  15.         implements VerifyTableDefinitionVerifier
  16. {
  17.     private final Logger log = LoggerFactory.getLogger(getClass());

  18.     @Override
  19.     public void verify(final VerifyTableDefinition verifyTableDefinition)
  20.     {
  21.         final String tableName = verifyTableDefinition.getTableName();
  22.         final String[] columnExclusionFilters =
  23.                 verifyTableDefinition.getColumnExclusionFilters();
  24.         final Map<String, ValueComparer> columnValueComparers =
  25.                 verifyTableDefinition.getColumnValueComparers();

  26.         verify(tableName, columnExclusionFilters, columnValueComparers);
  27.     }

  28.     public void verify(final String tableName,
  29.             final String[] columnExclusionFilters,
  30.             final Map<String, ValueComparer> columnValueComparers)
  31.     {
  32.         final boolean hasColumnExclusionFilters =
  33.                 hasColumnExclusionFilters(columnExclusionFilters);
  34.         final boolean hasColumnValueComparers =
  35.                 hasColumnValueComparers(columnValueComparers);

  36.         if (hasColumnExclusionFilters && hasColumnValueComparers)
  37.         {
  38.             doVerify(tableName, columnExclusionFilters, columnValueComparers);
  39.         }
  40.     }

  41.     /** Verify the columnExclusionFilters and columnValueComparers agree. */
  42.     protected void doVerify(final String tableName,
  43.             final String[] columnExclusionFilters,
  44.             final Map<String, ValueComparer> columnValueComparers)
  45.     {
  46.         for (final String columnName : columnExclusionFilters)
  47.         {
  48.             log.trace("doVerify: columnName={}", columnName);
  49.             failIfColumnValueComparersHaveExcludedColumn(tableName, columnName,
  50.                     columnValueComparers);
  51.         }
  52.     }

  53.     protected void failIfColumnValueComparersHaveExcludedColumn(
  54.             final String tableName, final String columnName,
  55.             final Map<String, ValueComparer> columnValueComparers)
  56.     {
  57.         final ValueComparer valueComparer =
  58.                 columnValueComparers.get(columnName);
  59.         if (valueComparer == null)
  60.         {
  61.             log.trace("failIfColumnValueComparersHaveExcludedColumn:"
  62.                     + "config ok as no valueComparer found"
  63.                     + " for excluded columnName={}", columnName);
  64.         } else
  65.         {
  66.             final String msg = "Test setup conflict: table=" + tableName
  67.                     + ", columnName=" + columnName
  68.                     + ", has a VerifyTableDefinition column exclusion"
  69.                     + " and a specific column ValueComparer=" + valueComparer
  70.                     + "; to test the column, remove the exclusion;"
  71.                     + " to ignore the column, remove the ValueComparer";
  72.             log.error("failIfColumnValueComparersHaveExcludedColumn: {}", msg);
  73.             throw new IllegalStateException(msg);
  74.         }
  75.     }

  76.     protected boolean hasColumnExclusionFilters(
  77.             final String[] columnExclusionFilters)
  78.     {
  79.         final boolean isMissing = columnExclusionFilters == null
  80.                 || columnExclusionFilters.length == 0;

  81.         if (isMissing)
  82.         {
  83.             log.debug("hasColumnExclusionFilters:"
  84.                     + " no columnExclusionFilters specified");
  85.         }

  86.         return !isMissing;
  87.     }

  88.     protected boolean hasColumnValueComparers(
  89.             final Map<String, ValueComparer> columnValueComparers)
  90.     {
  91.         final boolean isMissing =
  92.                 columnValueComparers == null || columnValueComparers.isEmpty();

  93.         if (isMissing)
  94.         {
  95.             log.debug("hasColumnValueComparers:"
  96.                     + " no columnValueComparers specified");
  97.         }

  98.         return !isMissing;
  99.     }
  100. }