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;
import static net.codjo.mad.server.handler.XMLUtils.convertFromStringValue;
/**
*
*/
public class DeleteHandlerFactory extends AbstractHandlerFactory {
public DeleteHandlerFactory(MutablePicoContainer container, TableModel tableModel) {
super(container, tableModel);
}
public Handler createHandler() {
return new DeleteHandler(getTableModel(), getDatabase());
}
public String getHandlerId() {
return getTableModel().getHandlerIdProvider().getDeleteHandlerId();
}
private static class DeleteHandler extends AbstractSqlHandler {
DeleteHandler(TableModel tableModel, Database database) {
super(tableModel, database,
new AbstractQueryFactory() {
public String create(TableModel tableModel) {
StringBuilder sb = new StringBuilder("delete from ");
sb.append(tableModel.getName());
sb.append(buildWhereClause(tableModel));
String sql = sb.toString();
Log.debug(DeleteHandler.class, sql);
return sql;
}
});
}
@Override
protected void fillQuery(PreparedQuery query, Map<String, String> args) throws SQLException {
int idx = 1;
for (FieldModel field : getTableModel().getPks()) {
query.setObject(idx++,
convertFromStringValue(field.getJavaType(), args.get(field.getName())),
field.getType().getSqlType());
}
}
@Override
public String getId() {
return getTableModel().getHandlerIdProvider().getDeleteHandlerId();
}
}
}