/*
|
* 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.utils;
|
|
import com.megatim.fdxcommons.model.integration.ColumnDefinition;
|
import com.megatim.fdxcommons.model.integration.json.JsonStructure;
|
import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
*
|
* @author ASUS
|
*/
|
public class JsonTableUtil {
|
|
private final JsonTableDefinition tableDefinition;
|
|
public JsonTableUtil(JsonTableDefinition tableDefinition) {
|
this.tableDefinition = tableDefinition;
|
}
|
|
public List<String> tablesName() {
|
List<String> tablesName = new ArrayList<>();
|
tablesName(tableDefinition, tablesName);
|
|
return tablesName;
|
}
|
|
/**
|
* La map est formé du nom complet de chaque colonne (clé) et son
|
* alias(valeur)
|
*
|
* @return
|
*/
|
public Map<String, String> columnsNameToAlias() {
|
Map<String, String> columnsNameToAlias = new HashMap<>();
|
columnsNameToAlias(tableDefinition, columnsNameToAlias);
|
|
return columnsNameToAlias;
|
}
|
|
public Map<String, String> tablesNameToAlias() {
|
Map<String, String> tablesNameToAlias = new HashMap<>();
|
int i = 0;
|
tablesNameToAlias(tableDefinition, tablesNameToAlias, i);
|
|
return tablesNameToAlias;
|
}
|
|
public Map<String, List<String>> tableToChildrenTables() {
|
Map<String, List<String>> tableToDirectChildren = new HashMap<>();
|
tableToDirectChildren(tableDefinition, tableToDirectChildren);
|
|
return tableToDirectChildren;
|
}
|
|
private void columnsNameToAlias(JsonTableDefinition tableDef, Map<String, String> columnsNameToAlias) {
|
for (ColumnDefinition c : tableDef.getColumnDefs()) {
|
columnsNameToAlias.put(tableDef.getTableName() + "." + c.getName(), tableDef.getTableName() + "_" + c.getName());
|
}
|
|
for (JsonTableDefinition t : tableDef.getTablesDefinition()) {
|
columnsNameToAlias(t, columnsNameToAlias);
|
}
|
}
|
|
private int tablesNameToAlias(JsonTableDefinition tableDef, Map<String, String> tablesNameToAlias, int i) {
|
tablesNameToAlias.put(tableDef.getTableName(), "t" + i);
|
i++;
|
|
for (JsonTableDefinition t : tableDef.getTablesDefinition()) {
|
i = tablesNameToAlias(t, tablesNameToAlias, i);
|
}
|
return i;
|
}
|
|
/**
|
* Liste de toutes les tables provenant de la définition du tableDfinition
|
* racine
|
*
|
* @param tableDefinition
|
* @param tablesName
|
*/
|
private void tablesName(JsonTableDefinition tableDefinition, List<String> tablesName) {
|
tablesName.add(tableDefinition.getTableName());
|
|
for (JsonTableDefinition t : tableDefinition.getTablesDefinition()) {
|
tablesName(t, tablesName);
|
}
|
}
|
|
private void tableToDirectChildren(JsonTableDefinition tableDefinition, Map<String, List<String>> tableToDirectChildren) {
|
List<String> children = new ArrayList<>();
|
|
for (JsonTableDefinition t : tableDefinition.getTablesDefinition()) {
|
children.add(t.getTableName());
|
|
if (t.getTablesDefinition().isEmpty()) {
|
tableToDirectChildren.put(t.getTableName(), Arrays.asList());
|
} else {
|
tableToDirectChildren(t, tableToDirectChildren);
|
}
|
}
|
tableToDirectChildren.put(tableDefinition.getTableName(), children);
|
}
|
}
|