package fr.inria.soctrace.lib.storage.updater;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.inria.soctrace.lib.model.utils.SoCTraceException;
import fr.inria.soctrace.lib.storage.utils.SQLConstants;
import fr.inria.soctrace.lib.storage.utils.DBModelConstants.TraceTypeTableModel;
import fr.inria.soctrace.lib.storage.utils.SQLConstants.FramesocTable;
public class TraceTypeModelRebuilder extends DBModelRebuilder {
private static final Logger logger = LoggerFactory.getLogger(TraceTypeModelRebuilder.class);
public TraceTypeModelRebuilder() {
table = FramesocTable.TRACE_TYPE;
getTableQuery = SQLConstants.PREPARED_STATEMENT_TRACE_TYPE_INSERT;
}
@Override
public void copyValues(PreparedStatement statement, ResultSet rs)
throws SoCTraceException {
for (TraceTypeTableModel traceTypeTableModel : TraceTypeTableModel
.values()) {
// If it is one of the difference
if (oldModelDiff.containsKey(traceTypeTableModel.toString())) {
// If missing parameter
if (oldModelDiff.get(traceTypeTableModel.toString()) == MISSING_PARAMETER_VALUE) {
// Put default value
addToStatement(statement,
traceTypeTableModel.getDefaultValue(),
traceTypeTableModel.getPosition(),
traceTypeTableModel.getType());
} else {
// Put the value at the correct place
addToStatement(statement, rs,
traceTypeTableModel.getPosition(),
oldModelDiff.get(traceTypeTableModel.toString()),
traceTypeTableModel.getType());
}
// Remove parameter from table
oldModelDiff.remove(traceTypeTableModel.toString());
} else {
// Just copy it
addToStatement(statement, rs, traceTypeTableModel.getPosition(),
traceTypeTableModel.getPosition(),
traceTypeTableModel.getType());
}
}
if (!oldModelDiff.keySet().isEmpty()) {
logger.info("Trace Type: the following parameters were not imported in the new model:");
for (String columnName : oldModelDiff.keySet())
logger.info(" *" + columnName);
}
}
@Override
public String getValueAt(int pos) {
return TraceTypeTableModel.getValueAt(pos).getDbColumnName();
}
@Override
public int getColumnNumber() {
return TraceTypeTableModel.numberOfColumns();
}
}