View Javadoc
1   package org.dbunit.assertion.comparer.value.builder;
2   
3   import java.util.Collections;
4   import java.util.HashMap;
5   import java.util.Map;
6   
7   import org.dbunit.assertion.comparer.value.ValueComparer;
8   
9   /**
10   * Convenience methods to help build the map of table name -> map of column name
11   * -> {@link ValueComparer}.
12   *
13   * @author Jeff Jensen
14   * @since 2.6.0
15   */
16  public class TableColumnValueComparerMapBuilder
17  {
18      private Map<String, Map<String, ValueComparer>> comparers = new HashMap<>();
19  
20      /**
21       * Add all mappings from the specified table map to this builder.
22       *
23       * @return this for fluent syntax.
24       */
25      public TableColumnValueComparerMapBuilder add(
26              final Map<String, Map<String, ValueComparer>> tableColumnValueComparers)
27      {
28          comparers.putAll(tableColumnValueComparers);
29  
30          return this;
31      }
32  
33      /**
34       * Add all mappings from the specified
35       * {@link TableColumnValueComparerMapBuilder} builder to this builder.
36       *
37       * @return this for fluent syntax.
38       */
39      public TableColumnValueComparerMapBuilder add(
40              final TableColumnValueComparerMapBuilder tableColumnValueComparerMapBuilder)
41      {
42          final Map<String, Map<String, ValueComparer>> map =
43                  tableColumnValueComparerMapBuilder.build();
44          comparers.putAll(map);
45  
46          return this;
47      }
48  
49      /**
50       * Add all mappings from the specified column map to a column map for the
51       * specified table in this builder.
52       *
53       * @return this for fluent syntax.
54       */
55      public TableColumnValueComparerMapBuilder add(final String tableName,
56              final Map<String, ValueComparer> columnValueComparers)
57      {
58          final Map<String, ValueComparer> map = findOrMakeColumnMap(tableName);
59  
60          map.putAll(columnValueComparers);
61  
62          return this;
63      }
64  
65      /**
66       * Add all mappings from the specified {@link ColumnValueComparerMapBuilder}
67       * builder to a column map for the specified table in this builder.
68       *
69       * @return this for fluent syntax.
70       */
71      public TableColumnValueComparerMapBuilder add(final String tableName,
72              final ColumnValueComparerMapBuilder columnValueComparerMapBuilder)
73      {
74          final Map<String, ValueComparer> map = findOrMakeColumnMap(tableName);
75          final Map<String, ValueComparer> columnMap =
76                  columnValueComparerMapBuilder.build();
77  
78          map.putAll(columnMap);
79  
80          return this;
81      }
82  
83      /**
84       * Add a table to column to {@link ValueComparer} mapping.
85       *
86       * @return this for fluent syntax.
87       */
88      public TableColumnValueComparerMapBuilder add(final String tableName,
89              final String columnName, final ValueComparer valueComparer)
90      {
91          final Map<String, ValueComparer> map = findOrMakeColumnMap(tableName);
92          map.put(columnName, valueComparer);
93  
94          return this;
95      }
96  
97      /** @return The unmodifiable assembled map. */
98      public Map<String, Map<String, ValueComparer>> build()
99      {
100         return Collections.unmodifiableMap(comparers);
101     }
102 
103     protected Map<String, ValueComparer> findOrMakeColumnMap(
104             final String tableName)
105     {
106         Map<String, ValueComparer> map = comparers.get(tableName);
107         if (map == null)
108         {
109             map = makeColumnToValueComparerMap();
110             comparers.put(tableName, map);
111         }
112 
113         return map;
114     }
115 
116     protected Map<String, ValueComparer> makeColumnToValueComparerMap()
117     {
118         return new HashMap<>();
119     }
120 }