/*
|
* 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.tables;
|
|
import com.megatim.fdxcommons.model.enumeration.TypeDonnee;
|
import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.ALPHANUMERIQUE;
|
import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DATE;
|
import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.DECIMAL;
|
import static com.megatim.fdxcommons.model.enumeration.TypeDonnee.NUMERIQUE;
|
import com.megatim.fdxcommons.model.integration.json.JsonStructure;
|
import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionIdColumnDefinition;
|
import com.megatim.fdxcommons.tools.database.tables.appcolumns.DataProductionUpdateIdColumnDefinition;
|
import java.sql.JDBCType;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
*
|
* @author ASUS
|
*/
|
public class JsonFdxTableColumns {
|
|
private final JsonStructure jsonStructure;
|
|
public JsonFdxTableColumns(JsonStructure jsonStructure) {
|
this.jsonStructure = jsonStructure;
|
}
|
|
public List<FdxTableColumn> columns() {
|
List<FdxTableColumn> columns = new ArrayList<>();
|
|
for (JsonStructure j : jsonStructure.getFields()) {
|
if (j.getTypeDonnee().equals(TypeDonnee.OBJET)) {
|
columns.addAll(columns(j.getFields(), j.getName()));
|
} else {
|
columns.add(new FdxTableColumn(j.getName(), dataType(jdbcType(j.getTypeDonnee(), j.getLengthh())), 0, j.getLengthh()));
|
}
|
}
|
addAppColumns(columns);
|
return columns;
|
}
|
|
public JsonStructure getJsonStructure() {
|
return jsonStructure;
|
}
|
|
private void addAppColumns(List<FdxTableColumn> columns) {
|
//Add dataProductionId column because it is used in query
|
DataProductionIdColumnDefinition dataProdColumn = new DataProductionIdColumnDefinition();
|
columns.add(new FdxTableColumn(dataProdColumn.name(), dataType(dataProdColumn.type()), 0, 18));
|
|
//Add dataProductionId column because it is used in query
|
DataProductionUpdateIdColumnDefinition dataProdUpdateColumn = new DataProductionUpdateIdColumnDefinition();
|
columns.add(new FdxTableColumn(dataProdUpdateColumn.name(), dataType(dataProdUpdateColumn.type()), 0, 18));
|
}
|
|
private List<FdxTableColumn> columns(List<JsonStructure> fields, String initialName) {
|
List<FdxTableColumn> columns = new ArrayList<>();
|
initialName += ".";
|
|
for (JsonStructure field : fields) {
|
if (field.getTypeDonnee().equals(TypeDonnee.OBJET)) {
|
columns.addAll(columns(field.getFields(), initialName + field.getName()));
|
} else {
|
columns.add(new FdxTableColumn(initialName + field.getName(), dataType(jdbcType(field.getTypeDonnee(), field.getLengthh())), 0, field.getLengthh()));
|
}
|
}
|
return columns;
|
}
|
|
private JDBCType jdbcType(TypeDonnee typeDonnee, int lengthh) {
|
switch (typeDonnee) {
|
case NUMERIQUE:
|
return lengthh < 5 ? JDBCType.SMALLINT : JDBCType.BIGINT;
|
case DECIMAL:
|
return JDBCType.DECIMAL;
|
case DATE:
|
return JDBCType.TIMESTAMP;
|
case ALPHANUMERIQUE:
|
return JDBCType.VARCHAR;
|
}
|
return null;
|
}
|
|
private int dataType(JDBCType jdbcType) {
|
switch (jdbcType) {
|
case SMALLINT:
|
return 5;
|
case BIGINT:
|
return -5;
|
case DECIMAL:
|
return 3;
|
case TIMESTAMP:
|
return 93;
|
}
|
return 0;
|
}
|
|
private int dataType(String jdbcType) {
|
switch (jdbcType) {
|
case "SMALLINT":
|
return 5;
|
case "BIGINT":
|
return -5;
|
case "DECIMAL":
|
return 3;
|
case "TIMESTAMP":
|
return 93;
|
}
|
return 0;
|
}
|
}
|