/* * 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.metadata; import com.megatim.fdxcommons.model.pojo.JsonTableDefinition; import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions; import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationColumnDefinitions; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; /** * * @author ASUS */ public class AliasedQueryCriterion { private final JsonTableDefinition tableDefinition; private final QueryCriterion queryCriterion; private final Map tablesNameToAlias; private final FdxApiColumnDefinitions apiColumnDefinitions = new FdxApiColumnDefinitions(); private final FdxConsultationColumnDefinitions fdxConsColumnDefinitions = new FdxConsultationColumnDefinitions(); public AliasedQueryCriterion(JsonTableDefinition tableDefinition, QueryCriterion queryCriterion, Map tablesNameToAlias) { this.tableDefinition = tableDefinition; this.queryCriterion = queryCriterion; this.tablesNameToAlias = tablesNameToAlias; } public QueryCriterion aliasedQueryCriterion() { return queryCriterion != null ? aliasedQueryCriterion(queryCriterion) : null; } private QueryCriterion aliasedQueryCriterion(QueryCriterion criterion) { if (criterion == null) { return null; } if (criterion.getSubCriteria() != null && !criterion.getSubCriteria().isEmpty() && criterion.getCriteriaLogicConnector() != null) { List subCriteria = new ArrayList<>(); for (QueryCriterion qc : criterion.getSubCriteria()) { QueryCriterion parseCriterion = aliasedQueryCriterion(qc); if (parseCriterion != null) { subCriteria.add(parseCriterion); } } if (!subCriteria.isEmpty()) { return new QueryCriterion(null, null, null, criterion.getCriteriaLogicConnector(), subCriteria ); } } else if ((criterion.getSubCriteria() == null || criterion.getSubCriteria().isEmpty())) { return new QueryCriterion(columnFullQualifiedName(criterion.getNomColonne()), criterion.getCriteriaValue(), criterion.getOperateur(), null, Arrays.asList() ); } return null; } private String tableName(String nomColonne) { if (apiColumnDefinitions.isAppColumnDefinition(nomColonne) || fdxConsColumnDefinitions.isAppColumnDefinition(nomColonne)) { return tableDefinition.getTableName(); } else if (tableDefinition.getColumnDefs().stream().filter(c -> c.getName().equalsIgnoreCase(nomColonne)).findFirst().isPresent()) { return tableDefinition.getTableName(); } else { return tableName(nomColonne, tableDefinition.getTablesDefinition()); } } private String tableName(String nomColonne, List tablesDef) { String tableName = null; for (JsonTableDefinition t : tablesDef) { tableName = tableName(nomColonne, t); if (tableName != null) { return tableName; } } return tableName; } private String columnFullQualifiedName(String nomColonne) { String[] nomColonneArray = nomColonne.split("\\."); String finalNomColonne = nomColonneArray[nomColonneArray.length - 1]; String tableName = tableName(finalNomColonne); return tablesNameToAlias.get(tableName) + "." + finalNomColonne; } private String tableName(String nomColonne, JsonTableDefinition t) { if (apiColumnDefinitions.isAppColumnDefinition(nomColonne) || fdxConsColumnDefinitions.isAppColumnDefinition(nomColonne)) { return t.getTableName(); } else if (t.getColumnDefs().stream().filter(c -> c.getName().equalsIgnoreCase(nomColonne)).findFirst().isPresent()) { return t.getTableName(); } else { if (t.getTablesDefinition().isEmpty()) { return null; } else { return tableName(nomColonne, t.getTablesDefinition()); } } } }