View Javadoc
1   package org.dbunit.assertion.comparer.value.verifier;
2   
3   import java.util.Map;
4   
5   import org.dbunit.VerifyTableDefinition;
6   import org.dbunit.assertion.comparer.value.ValueComparer;
7   import org.slf4j.Logger;
8   import org.slf4j.LoggerFactory;
9   
10  /**
11   * Default implementation for {@link VerifyTableDefinitionVerifier} which throws
12   * {@link IllegalStateException} on configuration conflicts.
13   *
14   * @author Jeff Jensen
15   * @since 2.6.0
16   */
17  public class DefaultVerifyTableDefinitionVerifier
18          implements VerifyTableDefinitionVerifier
19  {
20      private final Logger log = LoggerFactory.getLogger(getClass());
21  
22      @Override
23      public void verify(final VerifyTableDefinition verifyTableDefinition)
24      {
25          final String tableName = verifyTableDefinition.getTableName();
26          final String[] columnExclusionFilters =
27                  verifyTableDefinition.getColumnExclusionFilters();
28          final Map<String, ValueComparer> columnValueComparers =
29                  verifyTableDefinition.getColumnValueComparers();
30  
31          verify(tableName, columnExclusionFilters, columnValueComparers);
32      }
33  
34      public void verify(final String tableName,
35              final String[] columnExclusionFilters,
36              final Map<String, ValueComparer> columnValueComparers)
37      {
38          final boolean hasColumnExclusionFilters =
39                  hasColumnExclusionFilters(columnExclusionFilters);
40          final boolean hasColumnValueComparers =
41                  hasColumnValueComparers(columnValueComparers);
42  
43          if (hasColumnExclusionFilters && hasColumnValueComparers)
44          {
45              doVerify(tableName, columnExclusionFilters, columnValueComparers);
46          }
47      }
48  
49      /** Verify the columnExclusionFilters and columnValueComparers agree. */
50      protected void doVerify(final String tableName,
51              final String[] columnExclusionFilters,
52              final Map<String, ValueComparer> columnValueComparers)
53      {
54          for (final String columnName : columnExclusionFilters)
55          {
56              log.trace("doVerify: columnName={}", columnName);
57              failIfColumnValueComparersHaveExcludedColumn(tableName, columnName,
58                      columnValueComparers);
59          }
60      }
61  
62      protected void failIfColumnValueComparersHaveExcludedColumn(
63              final String tableName, final String columnName,
64              final Map<String, ValueComparer> columnValueComparers)
65      {
66          final ValueComparer valueComparer =
67                  columnValueComparers.get(columnName);
68          if (valueComparer == null)
69          {
70              log.trace("failIfColumnValueComparersHaveExcludedColumn:"
71                      + "config ok as no valueComparer found"
72                      + " for excluded columnName={}", columnName);
73          } else
74          {
75              final String msg = "Test setup conflict: table=" + tableName
76                      + ", columnName=" + columnName
77                      + ", has a VerifyTableDefinition column exclusion"
78                      + " and a specific column ValueComparer=" + valueComparer
79                      + "; to test the column, remove the exclusion;"
80                      + " to ignore the column, remove the ValueComparer";
81              log.error("failIfColumnValueComparersHaveExcludedColumn: {}", msg);
82              throw new IllegalStateException(msg);
83          }
84      }
85  
86      protected boolean hasColumnExclusionFilters(
87              final String[] columnExclusionFilters)
88      {
89          final boolean isMissing = columnExclusionFilters == null
90                  || columnExclusionFilters.length == 0;
91  
92          if (isMissing)
93          {
94              log.debug("hasColumnExclusionFilters:"
95                      + " no columnExclusionFilters specified");
96          }
97  
98          return !isMissing;
99      }
100 
101     protected boolean hasColumnValueComparers(
102             final Map<String, ValueComparer> columnValueComparers)
103     {
104         final boolean isMissing =
105                 columnValueComparers == null || columnValueComparers.isEmpty();
106 
107         if (isMissing)
108         {
109             log.debug("hasColumnValueComparers:"
110                     + " no columnValueComparers specified");
111         }
112 
113         return !isMissing;
114     }
115 }