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 SelectByPkHandlerFactory extends AbstractHandlerFactory {
public SelectByPkHandlerFactory(MutablePicoContainer container, TableModel tableModel) {
super(container, tableModel);
}
public String getHandlerId() {
return getTableModel().getHandlerIdProvider().getSelectHandlerById();
}
public Handler createHandler() {
return new SelectByPkHandler(getTableModel(), getDatabase());
}
private static class SelectByPkHandler extends AbstractSqlHandler {
SelectByPkHandler(TableModel table, Database database) {
super(table, database,
new AbstractQueryFactory() {
public String create(TableModel table) {
String sql = buildSelectClause(table) + buildWhereClause(table);
Log.debug(SelectByPkHandler.class, sql);
return sql;
}
});
addGetters();
}
@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().getSelectHandlerById();
}
}
}