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