/* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ package com.megatim.fdxcommons.tools.database.queries; import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction; import com.megatim.fdxcommons.model.enumeration.CriteriaLogicConnector; import com.megatim.fdxcommons.model.enumeration.Operateur; import com.megatim.fdxcommons.model.pojo.JsonTableDefinition; import com.megatim.fdxcommons.tools.database.exceptions.BadDataValueException; import com.megatim.fdxcommons.tools.database.exceptions.ColumnNotFoundException; import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError; import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion; 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 com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition; import com.megatim.fdxcommons.tools.database.tables.appcolumns.ParentIdColumnDefinition; import com.megatim.fdxcommons.tools.utils.JsonDataUtil; import com.megatim.fdxcommons.tools.utils.JsonTableUtil; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; /** * * @author ASUS */ public class JsonDelete { private final Connection connection; private final Map matchedData; private final String rootTableName; private final JsonTableDefinition tableDefinition; private final CommonDataProduction dataProduction; public JsonDelete(Connection connection, Map matchedData, String rootTableName, JsonTableDefinition tableDefinition, CommonDataProduction dataProduction) { this.connection = connection; this.matchedData = matchedData; this.rootTableName = rootTableName; this.tableDefinition = tableDefinition; this.dataProduction = dataProduction; } public void delete() throws ColumnNotFoundException, SQLException, BadDataValueException, LocalDateTimeValueParseError, Exception { Map> tableToMatchingIndexes = new JsonDataUtil().tableToMatchingIndexes(matchedData, rootTableName); Map> tableToDirectChildren = new JsonTableUtil(tableDefinition).tableToChildrenTables(); for (Map.Entry> entry : tableToMatchingIndexes.entrySet()) { Set indexes = entry.getValue(); List childrenTableList = tableToDirectChildren.get(entry.getKey()); final String parentTable = entry.getKey(); final String parentIdColumn = new ParentIdColumnDefinition().name(); final String indexColumn = new IndexColumnDefinition().name(); if (indexes != null) { QueryCriterion childrenQueryCriterion = queryCriterion(indexes, parentIdColumn); QueryCriterion parentQueryCriterion = queryCriterion(indexes, indexColumn); List childParams = parameters(childrenQueryCriterion); List parentParams = parameters(parentQueryCriterion); List columnNames = Arrays.asList(new DeletedColumnDefinition().name(), new DataProductionUpdateIdColumnDefinition().name(), new DateMiseAJourColumnDefinition().name()); if (childrenTableList != null && childrenTableList.isEmpty()) { for (String table : childrenTableList) { new UpdateQuery(connection, childrenQueryCriterion, table, columnNames, childParams).execute(); } } new UpdateQuery(connection, parentQueryCriterion, parentTable, columnNames, parentParams).execute(); } } } private List parameters(QueryCriterion queryCriterion) throws Exception { List params = new ArrayList<>(); //On ajoute les paramètres de 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 QueryCriterion queryCriterion(Set indexes, String columnName) { List criteria = new ArrayList<>(); indexes.stream().forEach(i -> criteria.add(new QueryCriterion(columnName, i, Operateur.EQUALS, null, Arrays.asList()))); return new QueryCriterion(null, null, null, CriteriaLogicConnector.OR, criteria); } }