Kenmegne
7 days ago 23a46b4be35277e06ec89f48730eeb694e686be8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
 * 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);
    }
}