/*
|
* 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<String, String> tablesNameToAlias;
|
private final FdxApiColumnDefinitions apiColumnDefinitions = new FdxApiColumnDefinitions();
|
private final FdxConsultationColumnDefinitions fdxConsColumnDefinitions = new FdxConsultationColumnDefinitions();
|
|
public AliasedQueryCriterion(JsonTableDefinition tableDefinition, QueryCriterion queryCriterion, Map<String, String> 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<QueryCriterion> 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<JsonTableDefinition> 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());
|
}
|
}
|
}
|
}
|