package net.codjo.dataprocess.server.handler.handlerfactory;
import net.codjo.database.api.Database;
import net.codjo.database.api.query.PreparedQuery;
import net.codjo.dataprocess.common.Log;
import net.codjo.dataprocess.common.table.model.FieldModel;
import net.codjo.dataprocess.common.table.model.TableModel;
import net.codjo.mad.server.handler.Handler;
import java.sql.SQLException;
import java.util.Map;
import org.picocontainer.MutablePicoContainer;
/**
*
*/
public class InsertHandlerFactory extends AbstractHandlerFactory {
public InsertHandlerFactory(MutablePicoContainer container, TableModel tableModel) {
super(container, tableModel);
}
public String getHandlerId() {
return getTableModel().getHandlerIdProvider().getInsertHandlerId();
}
public Handler createHandler() {
return new InsertHandler(getTableModel(), getDatabase());
}
private static class InsertHandler extends AbstractSqlHandler {
InsertHandler(TableModel table, Database database) {
super(table, database,
new AbstractQueryFactory() {
public String create(TableModel tableModel) {
String sql = String.format("insert into %s (%s) %s",
tableModel.getName(),
buildFieldNameList(tableModel.getNotPks()),
buildFieldValuesList(tableModel.getNotPks().size()));
Log.debug(InsertHandler.class, sql);
return sql;
}
});
}
@Override
protected void fillQuery(PreparedQuery query, Map<String, String> args) throws SQLException {
int idx = 1;
for (FieldModel field : getTableModel().getNotPks()) {
String value = args.get(field.getName());
int sqlType = field.getType().getSqlType();
if (value == null || "null".equals(value)) {
query.setObject(idx++, null, sqlType);
}
else {
query.setObject(idx++, value, sqlType);
}
}
}
@Override
public String getId() {
return getTableModel().getHandlerIdProvider().getInsertHandlerId();
}
}
}