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<Void> {
|
|
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<QueryParam> deletedParameters() throws Exception {
|
|
List<QueryParam> 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<String> 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();
|
}
|
|
}
|