/* * 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 columns() { List 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 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 columns(List fields, String initialName) { List 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; } }