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
12
13
14
15
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
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 }