/*
|
* 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.contrat;
|
|
import com.megatim.fdxcommons.model.pojo.JsonTableDefinition;
|
import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
|
import com.megatim.fdxcommons.model.integration.ColumnDefinition;
|
import com.megatim.fdxcommons.model.integration.json.JsonStructure;
|
import java.sql.SQLException;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
*
|
* @author ASUS
|
*/
|
public class JsonStructureIterator {
|
|
private final JsonStructure jsonStructure;
|
private final String tableName;
|
|
public JsonStructureIterator(String tableName, JsonStructure jsonStructure) {
|
this.jsonStructure = jsonStructure;
|
this.tableName = tableName;
|
}
|
|
/**
|
* ColumnDefinition mais avec le nom complet de la colonne (exples :
|
* adresse.ville, cpteBanque.rib pour les colonnes de niveau 2)
|
*
|
* @return
|
*/
|
public List<ColumnDefinition> columnsDefinitionWithFullQualifiedName() {
|
List<ColumnDefinition> columnsDefinition = new ArrayList<>();
|
|
List<JsonStructure> fields = jsonStructure.getFields();
|
List<JsonStructure> fieldsWithoutParent = fields.stream().filter(f -> !f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
|
List<JsonStructure> fieldsWithParent = fields.stream().filter(f -> f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
|
|
columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(fieldsWithoutParent, ""));
|
fieldsWithParent.stream().forEach(j -> columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(j, "")));
|
|
return columnsDefinition;
|
}
|
|
public JsonTableDefinition tableDefinition() throws SQLException {
|
List<JsonStructure> fields = jsonStructure.getFields();
|
|
List<JsonStructure> simpleFields = fields.stream().filter(f -> !f.isCollection() && !f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
|
JsonTableDefinition tableDefinition = new JsonTableDefinition(tableName.toLowerCase(), columnsDefinition(simpleFields), null, "");
|
|
List<JsonStructure> objectFields = fields.stream().filter(f -> f.isCollection() || f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
|
|
for (JsonStructure j : objectFields) {
|
tableDefinition.getTablesDefinition().add(tableDefinition(j, tableName, j.getName()));
|
}
|
return tableDefinition;
|
}
|
|
private List<ColumnDefinition> columnsDefinitionWithFullQualifiedName(JsonStructure jsonStructure, String parentFullQualifiedName) {
|
List<ColumnDefinition> columnsDefinition = new ArrayList<>();
|
|
for (JsonStructure j : jsonStructure.getFields()) {
|
if (j.getTypeDonnee().equals(TypeDonnee.OBJET)) {
|
if (parentFullQualifiedName.isEmpty()) {
|
columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(j, jsonStructure.getName()));
|
} else {
|
columnsDefinition.addAll(columnsDefinitionWithFullQualifiedName(j, parentFullQualifiedName + "." + jsonStructure.getName()));
|
}
|
} else {
|
if (parentFullQualifiedName.isEmpty()) {
|
columnsDefinition.add(columnDefinitionWithFullQualifiedName(j, jsonStructure.getName()));
|
} else {
|
columnsDefinition.add(columnDefinitionWithFullQualifiedName(j, parentFullQualifiedName + "." + jsonStructure.getName()));
|
}
|
|
}
|
}
|
return columnsDefinition;
|
}
|
|
private JsonTableDefinition tableDefinition(JsonStructure jsonStruct, String parentTableName, String parentFieldName) {
|
JsonTableDefinition tableDef = null;
|
|
if (jsonStruct.getTypeDonnee().equals(TypeDonnee.OBJET)) {
|
List<JsonStructure> simpleFields = jsonStruct.getFields().stream().filter(f -> !f.isCollection() && !f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
|
tableDef = new JsonTableDefinition((parentTableName + "_" + jsonStruct.getName()).toLowerCase(), columnsDefinition(simpleFields), parentTableName.toLowerCase(), parentFieldName);
|
|
List<JsonStructure> objectFields = jsonStruct.getFields().stream().filter(f -> f.isCollection() || f.getTypeDonnee().equals(TypeDonnee.OBJET)).collect(Collectors.toList());
|
|
for (JsonStructure j : objectFields) {
|
String newParentTableName = parentTableName.isEmpty() ? jsonStruct.getName() : parentTableName + "_" + jsonStruct.getName();
|
String newParentFieldName = parentFieldName.isEmpty() ? jsonStruct.getName() : parentFieldName + "." + j.getName();
|
tableDef.getTablesDefinition().add(tableDefinition(j, newParentTableName, newParentFieldName));
|
}
|
} else if (jsonStruct.isCollection()) {
|
tableDef = new JsonTableDefinition((parentTableName + "_" + jsonStruct.getName()).toLowerCase(), columnsDefinition(Arrays.asList(jsonStruct)), parentTableName.toLowerCase(), parentFieldName);
|
}
|
return tableDef;
|
}
|
|
private List<ColumnDefinition> columnsDefinition(List<JsonStructure> fields) {
|
List<ColumnDefinition> columnsDefinition = new ArrayList<>();
|
fields.stream().forEach(f -> columnsDefinition.add(new ColumnDefinition(f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection())));
|
|
return columnsDefinition;
|
}
|
|
private List<ColumnDefinition> columnsDefinitionWithFullQualifiedName(List<JsonStructure> fields, String parentFullQualifiedName) {
|
List<ColumnDefinition> columnsDefinition = new ArrayList<>();
|
fields.stream().forEach(f -> {
|
if (parentFullQualifiedName.isEmpty()) {
|
columnsDefinition.add(new ColumnDefinition(f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection()));
|
} else {
|
columnsDefinition.add(new ColumnDefinition(parentFullQualifiedName + "." + f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection()));
|
}
|
}
|
);
|
|
return columnsDefinition;
|
}
|
|
private ColumnDefinition columnDefinitionWithFullQualifiedName(JsonStructure f, String parentFullQualifiedName) {
|
if (parentFullQualifiedName.isEmpty()) {
|
return new ColumnDefinition(f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection());
|
} else {
|
return new ColumnDefinition(parentFullQualifiedName + "." + f.getName(), f.getTypeDonnee().name(), f.getLengthh(), f.isRequired(), f.isCollection());
|
}
|
|
}
|
}
|