package com.megatim.fdxconsultation.core.impl.stats; import com.megatim.fdxcommons.model.integration.ColumnDefinition; import com.megatim.fdxcommons.tools.database.exceptions.BadQueryCriteriaException; import com.megatim.fdxcommons.tools.database.exceptions.LocalDateTimeValueParseError; import com.megatim.fdxcommons.tools.database.queries.metadata.ParsedQueryCriterion; import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion; import com.megatim.fdxcommons.tools.database.tables.FdxTableColumns; import com.megatim.fdxcommons.tools.utils.CriteriaEntityFromViewToQueryCriterion; import com.megatim.fdxconsultation.model.dto.stats.TableConfigurationDto; import com.megatim.fdxconsultation.model.dto.stats.TableauBordColumnDto; import com.megatim.fdxconsultation.model.stats.CriteriaEntityPersisted; import com.megatim.fdxconsultation.model.stats.TableConfiguration; import com.megatim.fdxconsultation.model.stats.TableauBordColumn; import java.sql.SQLException; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import javax.naming.NamingException; /** * * @author Gabuntu */ public class ConvertedTableConfiguration { private final TableConfigurationDto tableConfigurationDto; private final List columnDefinitions; private final FdxTableColumns fdxTableColumns; public ConvertedTableConfiguration(TableConfigurationDto tableConfigurationDto, FdxTableColumns fdxTableColumns, List columnDefinitions) { this.tableConfigurationDto = tableConfigurationDto; this.columnDefinitions = columnDefinitions; this.fdxTableColumns = fdxTableColumns; } public TableConfiguration tableConfiguration() throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException { TableConfiguration tableConfiguration = new TableConfiguration(); tableConfiguration.setFonctionAggregation(tableConfigurationDto.getFonctionAggregation()); tableConfiguration.setLibelle(tableConfigurationDto.getLibelle()); tableConfiguration.setColor(tableConfigurationDto.getColor()); TableauBordColumn targetedColumn = tableConfigurationDto.getTargetedColumn() != null ? convert(tableConfigurationDto.getTargetedColumn()) : null; tableConfiguration.setTargetedColumn(targetedColumn); Set groupinColumns = convert(tableConfigurationDto.getGroupingColumns()); groupinColumns.forEach(gC -> { tableConfiguration.getGroupingColumns().add(gC); gC.setTableConfiguration(tableConfiguration); }); tableConfiguration.setTypeResultatConfiguration(tableConfigurationDto.getTypeResultatConfiguration()); QueryCriterion criterion = queryCriterion(); if (criterion != null) { CriteriaEntityPersisted criterionPersisted = new ConvertedCriteriaEntityPersisted(criterion, columnDefinitions).criteriaEntityPersisted(); tableConfiguration.setCriterion(criterionPersisted); criterionPersisted.setTableConfiguration(tableConfiguration); } return tableConfiguration; } private QueryCriterion queryCriterion() throws SQLException, NamingException, LocalDateTimeValueParseError, BadQueryCriteriaException { return new ParsedQueryCriterion( new CriteriaEntityFromViewToQueryCriterion(tableConfigurationDto.getCriterion()).queryCriterion(), fdxTableColumns, columnDefinitions ).parsedCriterion(); } private Set convert(Set columns) { return columns.stream().map(g -> convert(g)).collect(Collectors.toSet()); } private TableauBordColumn convert(TableauBordColumnDto tableauBordColumnDto) { return new TableauBordColumn(null, tableauBordColumnDto.getName(), tableauBordColumnDto.getTypeDonnee(), null); } }