package org.test4j.module.dbfit.model;
import java.util.*;
import java.sql.*;
import org.test4j.module.database.environment.normalise.NameNormaliser;
import org.test4j.tools.commons.PrimitiveHelper;
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 Exception {
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
String key = NameNormaliser.normaliseName(rsmd.getColumnName(i));
Object temp = rs.getObject(i);
Object value = DbParameterAccessor.normaliseValue(temp);
values.put(key, value);
}
}
public String getStringValue(String columnName) {
Object o = values.get(columnName);
if (o == null)
return "null";
return o.toString();
}
/**
* 返回整列值
*
* @return
*/
public List<String> getStringValues() {
List<String> strs = new ArrayList<String>();
for (Object o : values.values()) {
strs.add(o == null ? "null" : o.toString());
}
return strs;
}
public boolean matches(Map<String, Object> keyProperties) {
for (String key : keyProperties.keySet()) {
String normalisedKey = NameNormaliser.normaliseName(key);
if (!values.containsKey(normalisedKey)) {
return false;
}
Object left = keyProperties.get(key);
Object right = values.get(normalisedKey);
if (!equals(left, right)) {
return false;
}
}
return true;
}
private boolean equals(Object a, Object b) {
if (a == null && b == null) {
return true;
}
if (a == null || b == null) {
return false;
}
if (a instanceof Number && b instanceof Number) {
boolean isEqual = PrimitiveHelper.doesEqual((Number) a, (Number) b);
return isEqual;
} else {
return a.equals(b);
}
}
public Object get(String key) {
String normalisedKey = NameNormaliser.normaliseName(key);
return values.get(normalisedKey);
}
private boolean processed = false;
public void markProcessed() {
processed = true;
}
public boolean isProcessed() {
return processed;
}
}