package ca.intelliware.ihtsdo.mlds.service.affiliatesimport;
import java.util.List;
import org.apache.commons.lang.StringUtils;
/**
* Holds the field values read from a single line of the CSV file
*/
public class LineRecord {
boolean header = false;
long lineNumber = 0;
List<String> fields;
boolean isBlank = false;
public LineRecord(long lineNumber, List<String> fields, boolean isBlank) {
this.lineNumber = lineNumber;
this.fields = fields;
this.isBlank = isBlank;
}
private String fieldValue(int fieldIndex) {
return fields.get(fieldIndex);
}
public void validate(ImportResult result, AffiliatesMapper affiliatesMapper) {
if (isBlank) {
return;
}
if (fields.size() != affiliatesMapper.getMappings().size()) {
result.addError(this, "Incorrect number of fields: found="+ fields.size()+" required="+affiliatesMapper.getMappings().size());
} else if (header) {
validateHeaderRecord(result, affiliatesMapper);
} else {
validateDataRecord(result, affiliatesMapper);
}
}
private void validateDataRecord(ImportResult result, AffiliatesMapper affiliatesMapper) {
for (FieldMapping mapping : affiliatesMapper.getMappings()) {
String valueString = fieldValue(mapping.columnIndex);
mapping.validateDataValue(valueString, this, result);
}
}
private void validateHeaderRecord(ImportResult result, AffiliatesMapper affiliatesMapper) {
for (FieldMapping mapping : affiliatesMapper.getMappings()) {
String valueString = fieldValue(mapping.columnIndex);
if (!StringUtils.equalsIgnoreCase(mapping.columnName, valueString)) {
result.addError(this, mapping, "Header value="+valueString+" does not match title="+mapping.columnName);
}
}
}
public void setValuesOfMatchingClass(Object rootObject, Class<?> matchingClazz, AffiliatesMapper affiliatesMapper) throws IllegalArgumentException, IllegalAccessException, InstantiationException {
for (FieldMapping mapping : affiliatesMapper.getMappings()) {
if (matchingClazz.equals(mapping.rootClazz)) {
String valueString = fieldValue(mapping.columnIndex);
mapping.setValue(rootObject, valueString);
}
}
}
}