/* * 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.fdxconsultation.core.impl.helper; import com.megatim.fdxcommons.model.dataproduction.CommonDataProduction; import com.megatim.fdxcommons.model.enumeration.Operateur; import com.megatim.fdxcommons.model.enumeration.StatutDataProduction; import com.megatim.fdxcommons.tools.database.queries.CustomQueries; import com.megatim.fdxcommons.tools.database.queries.DeleteTableDataQuery; import com.megatim.fdxcommons.tools.database.queries.UpdateDataProductionQuery; import com.megatim.fdxcommons.tools.database.queries.metadata.FdxTableDefinition; import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion; import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition; import com.megatim.fdxcommons.tools.database.tables.FdxConsultationTable; import com.megatim.fdxcommons.tools.database.tables.FdxTableColumnData; import com.megatim.fdxcommons.tools.database.tables.FdxTableRow; import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition; import com.megatim.fdxconsultation.core.ifaces.helper.TableInsert; import com.megatim.fdxconsultation.core.impl.factory.FdxConsultationTableFactory; import java.sql.Connection; import java.sql.SQLException; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import javax.enterprise.context.Dependent; import javax.naming.NamingException; /** * * @author ASUS */ @Dependent public class FdxConsultationTableInsert implements TableInsert { @Override public Long insert(CommonDataProduction dataProduction, List data, Connection connection) throws NamingException, SQLException, Exception { FdxConsultationTable fdxConsTable = FdxConsultationTableFactory.createTable(dataProduction.getCodeTypeFichier(), dataProduction.getReferentielVersion(), connection); FdxTableDefinition tableDefinition = fdxConsTable.tableDefinition(connection); final String tableName = fdxConsTable.getTableName().name(connection); if (dataProduction.getId() != null) { if (!data.isEmpty()) { Optional optIndexData = data.get(0).getDataColumns().stream().filter(p -> p.getName().equals(new IndexColumnDefinition().name())).findFirst(); //Si fdx_index est trouvé dans les données existantes, alors la nouvelle dataproduction est une modification et donc on doit supprimer les anciennes avant l'insertion if (optIndexData.isPresent() && new CustomQueries().fdxIndexExists((Long) optIndexData.get().getValue(), tableName, connection)) { List indexes = data .stream() .flatMap(f -> f.getDataColumns().stream().filter(p -> p.getName().equals(new IndexColumnDefinition().name()))) .map(m -> (Long) m.getValue()) .collect(Collectors.toList()); //Supprimer les anciennes lignes de même index new DeleteTableDataQuery(tableName, connection, deleteExistingIndexesCriterion(indexes)).execute(); } fdxConsTable.insert(data, dataProduction.getId(), connection); } if (dataProduction.getStatutDataProduction().equals(StatutDataProduction.A_CONSOMMER)) { new UpdateDataProductionQuery(dataProduction, connection).execute(); if (tableDefinition.isReferentiel()) { new DeleteTableDataQuery(tableName, connection, whereDataProductionIsNotEqualCriterion(dataProduction.getId())).execute(); } } } return dataProduction.getStatutDataProduction().equals(StatutDataProduction.A_CONSOMMER) ? dataProduction.getId() : null; } private QueryCriterion deleteExistingIndexesCriterion(List indexes) { return new QueryCriterion(new IndexColumnDefinition().name(), indexes, Operateur.IN, null, Arrays.asList()); } private QueryCriterion whereDataProductionIsNotEqualCriterion(Long dataProductionId) { return new QueryCriterion(new DataProductionIdColumnDefinition().name(), dataProductionId, Operateur.NOT_EQUALS, null, Arrays.asList()); } }