/* * 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.queryadhoc.utils; import com.megatim.queryadhoc.enums.TypeDonnee; import static com.megatim.queryadhoc.enums.TypeDonnee.ALPHANUMERIQUE; import static com.megatim.queryadhoc.enums.TypeDonnee.DATE; import static com.megatim.queryadhoc.enums.TypeDonnee.DECIMAL; import static com.megatim.queryadhoc.enums.TypeDonnee.NUMERIQUE; import com.megatim.queryadhoc.exceptions.ColumnNotFoundException; import com.megatim.queryadhoc.exceptions.IllegalFormatDateException; import com.megatim.queryadhoc.exceptions.NotSupportedTypeDonneeException; import com.megatim.queryadhoc.model.DbColumnDescription; import java.sql.Timestamp; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; /** * * @author ASUS */ public class DataFormatter { private DataFormatter() { } public static String formatDatum(Map datumMap, List columnsDescription, String tableName, boolean shouldTruncate) throws ColumnNotFoundException, NotSupportedTypeDonneeException, IllegalFormatDateException { StringBuilder line = new StringBuilder(); for (DbColumnDescription dbCol : columnsDescription) { if (!datumMap.containsKey(dbCol.getName().toLowerCase())) { throw new ColumnNotFoundException(dbCol.getName(), tableName); } Object datum = datumMap.get(dbCol.getName().toLowerCase()); line.append(normalizeValue(datum, dbCol, shouldTruncate)); } return line.toString(); } private static String normalizeValue(Object value, DbColumnDescription columnDesc, boolean shouldTruncate) throws NotSupportedTypeDonneeException, IllegalFormatDateException { if (columnDesc.getTypeDonnee() == null) { throw new NotSupportedTypeDonneeException(null); } String stringValue = value != null ? value.toString() : ""; if (columnDesc.getTypeDonnee().equals(TypeDonnee.DATE)) { if (stringValue.isEmpty()) { stringValue = generateUnknown(columnDesc.getTaille(), " "); } else { Timestamp timestamp = null; if (value instanceof Timestamp) { timestamp = (Timestamp) value; } else { timestamp = new Timestamp((long) value); } stringValue = formatDateToString(timestamp, columnDesc); } } if (stringValue.length() < columnDesc.getTaille()) { stringValue = formatData(columnDesc.getTypeDonnee(), stringValue, columnDesc.getTaille()); } else if (shouldTruncate && (columnDesc.getTypeDonnee().equals(TypeDonnee.ALPHANUMERIQUE) || columnDesc.getTypeDonnee().equals(TypeDonnee.DATE)) && stringValue.length() > columnDesc.getTaille()) { stringValue = stringValue.substring(0, columnDesc.getTaille()); } return stringValue; } private static String generateUnknown(int nbOfCharacter, String character) { StringBuilder str = new StringBuilder(""); for (int i = 0; i < nbOfCharacter; i++) { str.append(character); } return str.toString(); } private static String formatData(TypeDonnee typeDonnee, String data, int columnSize) { if (typeDonnee != null) { switch (typeDonnee) { case NUMERIQUE: case DECIMAL: return generateUnknown(columnSize - data.length(), "0") + data; case ALPHANUMERIQUE: case DATE: default: return data + generateUnknown(columnSize - data.length(), " "); } } else { throw new IllegalArgumentException(); } } private static String formatDateToString(Object obj, DbColumnDescription columnDesc) throws IllegalFormatDateException { if (obj == null) { return generateUnknown(columnDesc.getTaille(), " "); } Timestamp data = (Timestamp) obj; LocalDateTime localDateTime = data.toLocalDateTime(); if (columnDesc.getFormatDate() == null) { throw new IllegalFormatDateException(); } DateTimeFormatter formatter = DateTimeFormatter.ofPattern(columnDesc.getFormatDate()); if (formatter == null) { return localDateTime.toString().substring(0, columnDesc.getTaille()); } else { return localDateTime.format(formatter); } } }