/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.dataprocess.server.kernel; import net.codjo.dataprocess.common.Log; import net.codjo.dataprocess.common.model.ArgList; import net.codjo.dataprocess.common.model.ArgModel; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import static net.codjo.dataprocess.common.DataProcessConstants.COLUMN; import static net.codjo.dataprocess.common.DataProcessConstants.QUOTE; import static net.codjo.dataprocess.common.DataProcessConstants.SEPARATOR; /** * */ abstract class AbstractSqlTreatment extends AbstractTreatment { @Override protected void buildArgument() { Log.debug(getClass(), " *********** BUILD ARGUMENTS SQL TREATMENT"); Map<String, Argument> localArgs = new HashMap<String, Argument>(); ArgList arglist = getTreatmentModel().getArguments(); if (arglist.getArgs() != null) { for (ArgModel argModel : arglist.getArgs()) { String key; String name = argModel.getName().trim(); if (SEPARATOR.equals(name) || QUOTE.equals(name) || COLUMN.equals(name)) { key = name; } else { key = String.valueOf(argModel.getPosition()); } localArgs.put(key, new Argument(argModel)); } } else { localArgs = null; } setArgs(localArgs); } String buildStoredProcQuery() { return "{call " + getTreatmentModel().getTarget() + ' ' + prepareArgumentsForProcStock() + '}'; } protected void configureStatement(PreparedStatement prep) throws SQLException { Map<String, Argument> args = getArgs(); if (args != null && !args.isEmpty()) { for (Map.Entry<String, Argument> entry : args.entrySet()) { String key = entry.getKey(); if (!SEPARATOR.equalsIgnoreCase(key) && !QUOTE.equalsIgnoreCase(key) && !COLUMN.equalsIgnoreCase(key)) { Argument arg = entry.getValue(); prep.setObject(Integer.parseInt(key), arg.getValue(), arg.getType()); if (Log.isDebugEnabled()) { Log.debug(getClass(), "*********** Param�tre SQL --> Position :" + Integer.parseInt(key) + " - Valeur :" + arg.getValue() + " - Type sql:" + arg.getType()); } } } } } String prepareArgumentsForProcStock() { Map<String, Argument> args = getArgs(); if (args != null && !args.isEmpty()) { List<Argument> argumentList = new ArrayList<Argument>(); argumentList.addAll(args.values()); Collections.sort(argumentList, Argument.getPositionComparator()); StringBuilder result = new StringBuilder(); for (Argument arg : argumentList) { result.append(',').append(arg.getName()).append(" = ? "); } return result.substring(1); } return null; } }