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.DBModelConstants.TraceParamTypeTableModel;
import fr.inria.soctrace.lib.storage.utils.SQLConstants;
import fr.inria.soctrace.lib.storage.utils.SQLConstants.FramesocTable;
public class TraceParamTypeModelRebuilder extends DBModelRebuilder {
private static final Logger logger = LoggerFactory.getLogger(TraceParamTypeModelRebuilder.class);
public TraceParamTypeModelRebuilder() {
table = FramesocTable.TRACE_PARAM_TYPE;
getTableQuery = SQLConstants.PREPARED_STATEMENT_TRACE_PARAM_TYPE_INSERT;
}
@Override
public void copyValues(PreparedStatement statement, ResultSet rs)
throws SoCTraceException {
for (TraceParamTypeTableModel traceParamTypeTableModel : TraceParamTypeTableModel
.values()) {
// If it is one of the difference
if (oldModelDiff.containsKey(traceParamTypeTableModel.toString())) {
// If missing parameter
if (oldModelDiff.get(traceParamTypeTableModel.toString()) == MISSING_PARAMETER_VALUE) {
// Put default value
addToStatement(statement,
traceParamTypeTableModel.getDefaultValue(),
traceParamTypeTableModel.getPosition(),
traceParamTypeTableModel.getType());
} else {
// Put the value at the correct place
addToStatement(statement, rs,
traceParamTypeTableModel.getPosition(),
oldModelDiff.get(traceParamTypeTableModel.toString()),
traceParamTypeTableModel.getType());
}
// Remove parameter from table
oldModelDiff.remove(traceParamTypeTableModel.toString());
} else {
// Just copy it
addToStatement(statement, rs, traceParamTypeTableModel.getPosition(),
traceParamTypeTableModel.getPosition(),
traceParamTypeTableModel.getType());
}
}
if (!oldModelDiff.keySet().isEmpty()) {
logger.info("Trace Parameters 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 TraceParamTypeTableModel.getValueAt(pos).getDbColumnName();
}
@Override
public int getColumnNumber() {
return TraceParamTypeTableModel.numberOfColumns();
}
}