From b3d0580439b9a00c7eb918085de1694151066004 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Thu, 18 Jun 2026 16:02:49 +0000
Subject: [PATCH] rename packages

---
 fdx_convert/src/main/java/com/megatim/fdxconvert/controller/FileToValidateEditDialogController.java |  447 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 447 insertions(+), 0 deletions(-)

diff --git a/fdx_convert/src/main/java/com/megatim/fdxconvert/controller/FileToValidateEditDialogController.java b/fdx_convert/src/main/java/com/megatim/fdxconvert/controller/FileToValidateEditDialogController.java
new file mode 100644
index 0000000..0801f33
--- /dev/null
+++ b/fdx_convert/src/main/java/com/megatim/fdxconvert/controller/FileToValidateEditDialogController.java
@@ -0,0 +1,447 @@
+package com.megatim.fdxconvert.controller;
+
+import com.megatim.typefichier.validator.Validator;
+import com.megatim.typefichier.validator.model.ConfigJsonValidator;
+import com.megatim.typefichier.validator.model.ConfigStreamValidator;
+import com.megatimfx.common.abstracts.AbstractEditDialogController;
+import com.megatimfx.common.enums.TypeOperation;
+import com.megatimfx.common.utils.ViewLoaderUtil;
+import com.megatimfx.components.customdialogs.AlertMessageUtil;
+import com.megatimfx.components.customdialogs.LoadinIndicatorDialogUtil;
+import com.megatimfx.components.dialogs.NotificationDialog;
+import com.megatimfx.components.dialogs.NotificationType;
+import com.megatim.fdxconvert.dao.TypeFichierJsonDAO;
+import com.megatim.fdxconvert.dao.ValidateurDAO;
+import com.megatim.fdxconvert.enums.DataType;
+import com.megatim.fdxconvert.exceptions.ConfigException;
+import com.megatim.fdxconvert.exceptions.ValidatorException;
+import com.megatim.fdxconvert.forms.MetaAlphaNumeriqueFieldEditFormController;
+import com.megatim.fdxconvert.forms.FileToValidateEditFormController;
+import com.megatim.fdxconvert.model.AlphaNumeriqueField;
+import com.megatim.fdxconvert.model.Configuration;
+import com.megatim.fdxconvert.model.TypeFichierJson;
+import com.megatim.fdxconvert.pojo.FileToValidate;
+import com.megatim.fdxconvert.model.Validateur;
+import com.megatim.fdxconvert.service.ConfigurationService;
+import com.megatim.fdxconvert.util.ImportData;
+import com.megatim.fdxconvert.pojo.FileToValidateDescription;
+import com.megatim.fdxconvert.util.TypeFichierJsonConverter;
+import com.megatim.fdxconvert.util.Utilities;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Paths;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Random;
+import java.util.ResourceBundle;
+import java.util.Set;
+import javafx.concurrent.Task;
+import javafx.event.ActionEvent;
+import javafx.scene.Node;
+import javafx.scene.layout.Pane;
+import javafx.stage.Stage;
+import org.apache.commons.io.IOUtils;
+
+/**
+ *
+ * @author STEPHANIE
+ */
+public class FileToValidateEditDialogController extends AbstractEditDialogController<FileToValidate> {
+
+    org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(FileToValidateEditDialogController.class);
+
+    private FileToValidateEditFormController fileToValidateEditFormController;
+    private MetaAlphaNumeriqueFieldEditDialogController metaAlphaNumeriqueFieldEditDialogController;
+
+    @Override
+    public String getTitle() {
+
+        getEditButton().setText("Valider");
+        return "Conversion manuelle des fichiers";
+
+    }
+
+    @Override
+    public Pane getContentFormPane() throws IOException {
+        return ViewLoaderUtil.getPaneFromFxmlFile(fileToValidateEditFormController.getClass().getResource("FileToValidateEditForm.fxml"), fileToValidateEditFormController);
+    }
+
+    @Override
+    public Object getContentFormController() {
+        return fileToValidateEditFormController;
+    }
+
+    @Override
+    public void initialize(URL url, ResourceBundle rb) {
+        fileToValidateEditFormController = new FileToValidateEditFormController();
+        metaAlphaNumeriqueFieldEditDialogController = new MetaAlphaNumeriqueFieldEditDialogController();
+
+        metaAlphaNumeriqueFieldEditDialogController.setAlphaNumeriqueFieldEditFormController(new MetaAlphaNumeriqueFieldEditFormController());
+
+        super.initialize(url, rb);
+
+    }
+
+    @Override
+    protected void afterBindCurrentObjectWithFormField(FileToValidate bindObject, Object formController, TypeOperation typeOperation) {
+        FileToValidateEditFormController controller = (FileToValidateEditFormController) formController;
+        controller.getMetaAlphaNumeriqueFieldAbstractTable().setController(metaAlphaNumeriqueFieldEditDialogController);
+    }
+
+    @Override
+    protected void afterBindFormFieldWithCurrentObject(FileToValidate bindObject, Object formController, TypeOperation typeOperation) {
+
+        if (formController instanceof FileToValidateEditFormController) {
+            FileToValidateEditFormController controller = (FileToValidateEditFormController) formController;
+            controller.getMetaAlphaNumeriqueFieldAbstractTable().setController(metaAlphaNumeriqueFieldEditDialogController);
+
+            switch (typeOperation) {
+
+                case ADD:
+                    controller.getTypeFichierAbstractSelectItem().selectedElementProperty().addListener((observable, oldValue, newValue) -> {
+
+                        if (newValue != null) {
+                            metaAlphaNumeriqueFieldEditDialogController.getAlphaNumeriqueFieldEditFormController().setTypeFichier(newValue);
+
+                            if (controller.getDataTypeComboBox().getSelectionModel().getSelectedItem() != null && controller.getDataTypeComboBox().getSelectionModel().getSelectedItem().equals(DataType.JSON)) {
+                                controller.getSaisieAlphaNumeriqueFieldChecBox().setDisable(true);
+                            }
+                            controller.getSaisieAlphaNumeriqueFieldChecBox().setDisable(false);
+                        }
+                    });
+                    fileToValidateEditFormController.getSaisieAlphaNumeriqueFieldChecBox().selectedProperty().addListener(listener -> {
+
+                        if (fileToValidateEditFormController.getSaisieAlphaNumeriqueFieldChecBox().isSelected()) {
+                            fileToValidateEditFormController.getMetaAlphaNumeriqueFieldAbstractTable().setDisable(false);
+                        }
+                    });
+                    fileToValidateEditFormController.getStrictValidationCheckbox().selectedProperty().addListener(l -> {
+                        if (fileToValidateEditFormController.getStrictValidationCheckbox().isSelected()) {
+                            fileToValidateEditFormController.getMetaAlphaNumeriqueFieldAbstractTable().setDisable(true);
+                        }
+                    });
+                    break;
+                default:
+                    controller.getSaisieAlphaNumeriqueFieldChecBox().setSelected(true);
+                    controller.getSaisieAlphaNumeriqueFieldChecBox().setDisable(true);
+                    break;
+            }
+        }
+    }
+
+    @Override
+    public void afterSave(ActionEvent event) {
+        Configuration config = ConfigurationService.getInstance().getCurrentConfig();
+
+        if (getCurrentObject().getDataType().equals(DataType.JSON)) {
+            validateJsonFile(config, event);
+        } else {
+            Optional<Validateur> validateur = ValidateurDAO.findByCodeTypeFichier(getCurrentObject().getTypeFichier().getCode());
+
+            if (!validateur.isPresent()) {
+                Node source = (Node) event.getSource();
+                Stage parentStage = (Stage) source.getScene().getWindow();
+                NotificationDialog notificationDialog = new NotificationDialog("Validation impossible. Le type fichier " + getCurrentObject().getTypeFichier().getCode() + " n'a pas de validateur enregistré!",
+                        NotificationType.ERROR,
+                        parentStage);
+                notificationDialog.showNotification();
+            }
+            validateTexteFile(config, validateur.get(), event);
+        }
+
+    }
+
+    private void validateTexteFile(Configuration config, Validateur validateur, ActionEvent event) {
+        Task<Void> task = new Task<Void>() {
+
+            @Override
+            protected Void call() throws Exception {
+
+                if (validateur.isConvertDataBeforeValidation()) {
+
+                    //On converti le fichier à valider en fichier
+                    generateAndParseTxtFile(getCurrentObject(), config, validateur);
+                }
+                return null;
+            }
+        };
+
+        task.setOnRunning(e -> LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show());
+        task.setOnFailed(e -> {
+            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
+            Throwable th = task.getException();
+
+            if ((th instanceof ConfigException) || (th instanceof ValidatorException)) {
+
+                Node source = (Node) event.getSource();
+                Stage parentStage = (Stage) source.getScene().getWindow();
+                NotificationDialog notificationDialog = new NotificationDialog(th.getMessage(), NotificationType.WARNING, parentStage);
+                logger.warn(th.getMessage());
+                notificationDialog.showNotification();
+
+            } else {
+                logger.error(task.getException());
+                AlertMessageUtil.showAlertException(task.getException(), "Une exception s'est produite pendant l'importation des données", "Erreur");
+            }
+        });
+        task.setOnSucceeded(e -> {
+            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
+            validateGeneratedFile(config, validateur, event);
+        });
+        new Thread(task).start();
+    }
+
+    private void validateGeneratedFile(Configuration config, Validateur validateur, ActionEvent event) {
+        Task<Boolean> task = new Task<Boolean>() {
+
+            @Override
+            protected Boolean call() throws Exception {
+                return validate(config, validateur);
+            }
+        };
+        task.setOnRunning(e -> LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show());
+        task.setOnSucceeded(e -> {
+            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
+            Node source = (Node) event.getSource();
+            Stage parentStage = (Stage) source.getScene().getWindow();
+
+            boolean valid = task.getValue();
+            String message;
+            NotificationDialog notificationDialog;
+            String errorFileName = getCurrentObject().getTxtFilePath() != null
+                    ? new File(getCurrentObject().getTxtFilePath()).getName()
+                    : new File(getCurrentObject().getFilePath()).getName();
+
+            if (!valid) {
+                message = "Echec de la validation. Le fichier contient des erreurs, veuillez consulter le répertoire " + config.getErrorDir() + ", puis et ouvrir le fichier d'erreur "
+                        + errorFileName + ".err pour en savoir plus";
+                notificationDialog = new NotificationDialog(message, NotificationType.ERROR, parentStage);
+
+            } else {
+                message = "Validation réussie. Fichier correcte";
+                notificationDialog = new NotificationDialog(message, NotificationType.SUCCESS, parentStage);
+            }
+            logger.error(message);
+            notificationDialog.showNotification();
+
+        });
+
+        task.setOnFailed(e -> {
+            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
+            Throwable th = task.getException();
+
+            if (th instanceof ConfigException || th instanceof ValidatorException) {
+                Node source = (Node) event.getSource();
+                Stage parentStage = (Stage) source.getScene().getWindow();
+                NotificationDialog notificationDialog = new NotificationDialog(th.getMessage(), NotificationType.WARNING, parentStage);
+                logger.warn(th.getMessage());
+                notificationDialog.showNotification();
+
+            } else {
+                logger.error(th);
+                AlertMessageUtil.showAlertException(th, "Une exception s'est produite pendant la validation du fichier", "Erreur");
+            }
+        });
+
+        new Thread(task).start();
+
+    }
+
+    /**
+     * Méthode qui appelle la méthode de validation
+     *
+     * @param val :
+     * @param config
+     * @return
+     * @throws Exception
+     */
+    private boolean validate(Configuration config, Validateur validateur) throws Exception {
+
+        if (config == null) {
+            throw new ConfigException("Validation impossible, les répertoires ne sont pas configurés. Bien vouloir les configurer avant avant d'effectuer cette action");
+        }
+        File originalFile = new File(getCurrentObject().getFilePath());
+        File file = validateur.isConvertDataBeforeValidation() ? new File(getCurrentObject().getTxtFilePath()) : originalFile; //Fichier à valider
+
+        if (!file.exists()) {
+            throw new FileNotFoundException("Le fichier " + file.getAbsolutePath() + " est introuvable");
+        }
+        byte[] targetArray = IOUtils.toByteArray(FileToValidateEditDialogController.class.getClassLoader().getResourceAsStream("predicatelogic-engine.xml"));
+        ConfigStreamValidator configValidator = new ConfigStreamValidator(targetArray, validateur.getContent(), config.getErrorDir(), config.getOutputDir(), file, originalFile);
+        Validator validator = new Validator();
+        return validator.validate(configValidator, Boolean.TRUE, Boolean.TRUE, Utilities.getNbThreads());
+    }
+
+    /**
+     * Méthode qui génère et parse fichier txt à partir d'un fichier de données
+     * csv, txt, ou excel
+     *
+     * @param val : objet contenant
+     * @param config : objet contenant l'ensemeble des repertoires nécessaire à
+     * l'extraction des données
+     * @return : renvoie le chemin vers le fichier crée
+     * @throws Exception
+     */
+    private void generateAndParseTxtFile(FileToValidate fileToValidate, Configuration config, Validateur validateur) throws Exception {
+        if (config == null) {
+            throw new ConfigException("Validation impossible, veuillez configurer les repertoires avant d'effectuer cette action");
+        }
+        String fileName = fileToValidate.getTypeFichier().getCode() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + generateTierce() + ".txt";
+        File outputFile = new File(config.getDatasDir(), fileName);
+
+        if (!outputFile.exists()) {
+
+            //Creation du fichier
+            outputFile.createNewFile();
+        }
+        getCurrentObject().setTxtFilePath(outputFile.getAbsolutePath());
+        Set<AlphaNumeriqueField> alphaNumeriqueToBeTruncated = new HashSet<>();
+
+        fileToValidate.getMetaAlphaNumeriqueFields().forEach(m -> {
+            alphaNumeriqueToBeTruncated.add(m.getAlphaNumeriqueField());
+        });
+
+        switch (fileToValidate.getDataType()) {
+            case TXT:
+                FileToValidateDescription raw = new FileToValidateDescription(new File(fileToValidate.getFilePath()), fileToValidate.getDelimiteurLigne().getCode(), fileToValidate.getDelimiteurColonne().getCode());
+
+                if (fileToValidate.isStrictValidation()) {
+                    ImportData.parseFileByFieldLength(raw, validateur, outputFile, fileToValidate.isHeaderPresent());
+
+                } else {
+                    ImportData.parseFileCharacterByCharacter(raw, validateur, outputFile, fileToValidate.isHeaderPresent(), alphaNumeriqueToBeTruncated);
+                }
+                break;
+            case CSV:
+                raw = new FileToValidateDescription(new File(fileToValidate.getFilePath()), fileToValidate.getDelimiteurLigne().getCode(), fileToValidate.getDelimiteurColonne().getCode());
+                ImportData.parseCsvFile(raw, validateur, outputFile, fileToValidate.isHeaderPresent(), alphaNumeriqueToBeTruncated);
+                break;
+
+            case XLS:
+                ImportData.parseXlsFile(fileToValidate.getFilePath(), fileToValidate.isHeaderPresent(), outputFile, validateur, alphaNumeriqueToBeTruncated);
+                break;
+            case XLSX:
+                ImportData.parseXlsxFile(fileToValidate.getFilePath(), fileToValidate.isHeaderPresent(), outputFile, validateur, alphaNumeriqueToBeTruncated);
+                break;
+            default:
+                break;
+        }
+    }
+
+    private String generateTierce() {
+
+        // Instance of random class
+        Random rand = new Random();
+        int upperbound = 60;
+        int random = rand.nextInt(upperbound);
+
+        return String.format("%02d", random);
+
+    }
+
+    private boolean validateJson(FileToValidate fileToValidate, Configuration config) throws IOException {
+
+        if (config == null) {
+            throw new ConfigException("Validation impossible, les répertoires ne sont pas configurés. Bien vouloir les configurer avant avant d'effectuer cette action");
+        }
+        TypeFichierJson typefichierJson = TypeFichierJsonDAO.getByTypeFichier(fileToValidate.getTypeFichier().getCode());
+
+        if (typefichierJson == null) {
+            throw new ValidatorException("Validation impossible. Le type fichier " + fileToValidate.getTypeFichier().getCode() + " n'a pas de structure JSON enregistré");
+        }
+        Validator validator = new Validator();
+        ConfigJsonValidator configJson = new ConfigJsonValidator(
+                fileToValidate.getErrorFilePath(),
+                config.getOutputDir(),
+                new File(fileToValidate.getFilePath()),
+                new TypeFichierJsonConverter(typefichierJson).convert()
+        );
+
+        return validator.validate(configJson, System.getProperty("user.dir") + "\\src\\main\\java", true, true, Utilities.getNbThreads());
+    }
+
+    private void validateJsonFile(Configuration config, ActionEvent event) {
+        getCurrentObject().setErrorFilePath(Paths.get(config.getErrorDir(),
+                getCurrentObject().getTypeFichier().getCode() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))
+                + generateTierce() + "_JSON.txt").toString());
+
+        Task<Boolean> task = new Task<Boolean>() {
+
+            @Override
+            protected Boolean call() throws Exception {
+
+                return validateJson(getCurrentObject(), config);
+
+            }
+
+        };
+
+        task.setOnRunning(e -> LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show());
+
+        task.setOnSucceeded(e -> {
+
+            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
+            Node source = (Node) event.getSource();
+            Stage parentStage = (Stage) source.getScene().getWindow();
+
+            boolean valid = task.getValue();
+
+            String message;
+            NotificationDialog notificationDialog;
+
+            if (!valid) {
+
+                message = "Echec de la validation. Le fichier contient des erreurs, veuillez consulter le répertoire " + config.getErrorDir() + ", puis ouvrir le fichier d'erreur "
+                        + new File(getCurrentObject().getErrorFilePath()).getName() + ".err pour en savoir plus";
+
+                notificationDialog = new NotificationDialog(message, NotificationType.ERROR, parentStage);
+
+            } else {
+
+                message = "Validation réussie. Fichier correcte";
+
+                notificationDialog = new NotificationDialog(message, NotificationType.SUCCESS, parentStage);
+            }
+
+            logger.error(message);
+
+            notificationDialog.showNotification();
+
+        });
+
+        task.setOnFailed(e -> {
+
+            LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide();
+
+            Throwable th = task.getException();
+
+            if (th instanceof ConfigException || th instanceof ValidatorException) {
+
+                Node source = (Node) event.getSource();
+
+                Stage parentStage = (Stage) source.getScene().getWindow();
+
+                NotificationDialog notificationDialog = new NotificationDialog(th.getMessage(), NotificationType.WARNING, parentStage);
+
+                logger.warn(th.getMessage());
+
+                notificationDialog.showNotification();
+
+            } else {
+
+                logger.error(th);
+
+                AlertMessageUtil.showAlertException(th, "Une exception s'est produite pendant la validation du fichier", "Erreur");
+
+            }
+
+        });
+
+        new Thread(task).start();
+
+    }
+}

--
Gitblit v1.10.0