package com.megatim.fdxcommons.tools.database.queries; import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction; import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion; import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor; import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData; import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam; import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters; import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition; import com.megatim.fdxcommons.tools.database.tables.appcolumns.DateMiseAJourColumnDefinition; import com.megatim.fdxcommons.tools.database.tables.appcolumns.DeletedColumnDefinition; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.ArrayList; import java.util.List; /** * * @author Gabuntu */ public class DeleteQuery implements QueryMetaData { private final Connection connection; private final QueryCriterion queryCriterion; private final String tableName; private final CommonDataProduction dataProduction; public DeleteQuery(String tableName, Connection connection, QueryCriterion queryCriterion, CommonDataProduction dataProduction) { this.connection = connection; this.queryCriterion = queryCriterion; this.tableName = tableName; this.dataProduction = dataProduction; } @Override public Void execute() throws Exception { System.out.println("<----------------------------------------------------------------------------------------------------------->"); System.out.println(deleteQuery()); System.out.println("<----------------------------------------------------------------------------------------------------------->"); try ( PreparedStatement statement = connection.prepareStatement(deleteQuery())) { connection.setAutoCommit(false); new DefaultPreparedStatementProcessor().process(statement, deletedParameters()); statement.execute(); connection.commit(); return null; } } private List deletedParameters() throws Exception { List params = new ArrayList<>(); //On ajoute les paramètres spécifiques à l'application params.add(new QueryParam(new DeletedColumnDefinition().name(), 1)); params.add(new QueryParam(new DataProductionUpdateIdColumnDefinition().name(), dataProduction.getId())); params.add(new QueryParam(new DateMiseAJourColumnDefinition().name(), dataProduction.getDateProduction())); //On ajoute ensuite les paramètre de la clause WHERE params.addAll(new WhereQueryParameters(queryCriterion).parameters()); return params; } private String deleteQuery() throws Exception { return "UPDATE " + tableName + " " + setQueryPart() + " " + new WhereQueryString(queryCriterion).query(); } private String setQueryPart() throws Exception { List columnsToUpdate = new ArrayList<>(); //Pendant l'update on set également certaines colonnes de l'application columnsToUpdate.add(new DeletedColumnDefinition().name()); columnsToUpdate.add(new DataProductionUpdateIdColumnDefinition().name()); columnsToUpdate.add(new DateMiseAJourColumnDefinition().name()); StringBuilder query = new StringBuilder("SET "); int index = 0; for (String column : columnsToUpdate) { if ((index + 1) < columnsToUpdate.size()) { query.append(column).append(" = ? ,"); } else { query.append(column).append(" = ?"); } index++; } return query.toString(); } }