package dbfit.util; import static dbfit.util.NameNormaliser.normaliseName; import static dbfit.util.ValueNormaliser.normaliseValue; import java.util.*; import java.sql.*; public class DataRow { private Map<String, Object> values = new HashMap<String, Object>(); public Set<String> getColumnNames() { return values.keySet(); } public DataRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException { for (int i = 1; i <= rsmd.getColumnCount(); i++) { addValue(rsmd.getColumnLabel(i), rs.getObject(i)); } } /** * Plain non-normalising c-tor */ public DataRow(Map<String, Object> rowValues) { this.values = rowValues; } private void addValue(final String name, final Object value) throws SQLException { values.put(normaliseName(name), normaliseValue(value)); } public String getStringValue(String columnName) { return String.valueOf(values.get(columnName)); } public boolean matches(final Map<String, Object> keyProperties) { for (String key: keyProperties.keySet()) { if (!matches(key, keyProperties.get(key))) { return false; } } return true; } private boolean matches(final String key, final Object value) { String nkey = normaliseName(key); return values.containsKey(nkey) && equals(value, values.get(nkey)); } private boolean equals(Object a, Object b) { return Objects.equals(a, b); } public Object get(String key) { return values.get(normaliseName(key)); } @Override public String toString() { return String.valueOf(values); } }