package org.openlca.io.refdata;
import java.sql.PreparedStatement;
import java.sql.Types;
import java.util.List;
import org.openlca.core.model.ModelType;
import org.openlca.io.maps.Maps;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.constraint.StrNotNullOrEmpty;
import org.supercsv.cellprocessor.ift.CellProcessor;
class UnitGroupImport extends AbstractImport {
@Override
protected String getStatement() {
return "insert into tbl_unit_groups (id, ref_id, name, f_category, "
+ "description, f_reference_unit, f_default_flow_property) "
+ "values (?, ?, ?, ?, ?, ?, ?)";
}
@Override
protected CellProcessor[] getCellProcessors() {
CellProcessor notEmpty = new StrNotNullOrEmpty();
CellProcessor optional = new Optional();
return new CellProcessor[] { notEmpty, // 0: refId
notEmpty, // 1: name
optional, // 2: description
optional, // 3: category ID
optional, // 4: default property ID
notEmpty, // 5: reference unit ID
};
}
@Override
protected boolean isValid(List<Object> values) {
String refId = Maps.getString(values, 0);
if (!seq.isInDatabase(ModelType.UNIT_GROUP, refId))
return true;
log.info("unit group {} {} is already in the database", values.get(1),
values.get(0));
return false;
}
@Override
protected void setValues(PreparedStatement statement, List<Object> vals)
throws Exception {
String refId = Maps.getString(vals, 0);
long id = seq.get(ModelType.UNIT_GROUP, refId);
statement.setLong(1, id);
statement.setString(2, refId);
statement.setString(3, Maps.getString(vals, 1));
String catRefId = Maps.getString(vals, 3);
if (catRefId == null)
statement.setNull(4, Types.BIGINT);
else
statement.setLong(4, seq.get(ModelType.CATEGORY, catRefId));
statement.setString(5, Maps.getString(vals, 2));
statement.setLong(6, seq.get(ModelType.UNIT, Maps.getString(vals, 5)));
String propRefId = Maps.getString(vals, 4);
if (propRefId == null)
statement.setNull(7, Types.BIGINT);
else
statement.setLong(7, seq.get(ModelType.FLOW_PROPERTY, propRefId));
}
}