/* * 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.fdxconvert.controller; import com.megatimfx.common.abstracts.AbstractEditDialogController; import com.megatimfx.common.enums.Operateur; import com.megatimfx.common.pojo.SearchCriteria; 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.enums.DataType; import com.megatim.fdxconvert.exceptions.ConfigException; import com.megatim.fdxconvert.exceptions.ValidatorException; import com.megatim.fdxconvert.forms.DataFileToJsonFormController; import com.megatim.fdxconvert.model.Configuration; import com.megatim.fdxconvert.model.Validateur; import com.megatim.fdxconvert.pojo.ColumnDefinition; import com.megatim.fdxconvert.pojo.DataFileToJson; import com.megatim.fdxconvert.service.ConfigurationService; import com.megatim.fdxconvert.util.ExportToJson; import com.megatim.fdxconvert.pojo.FileToValidateDescription; import com.megatim.fdxconvert.service.ValidateurService; import com.megatim.typefichier.validator.utilities.ParserUtils; import com.megatim.fdxconvert.util.ValidateurParser; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.ResourceBundle; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.scene.Node; import javafx.scene.layout.Pane; import javafx.stage.Stage; /** * * @author ASUS */ public class DataFileToJsonEditDialogController extends AbstractEditDialogController { org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(DataFileToJsonEditDialogController.class); private DataFileToJsonFormController txtFileToJsonFormController; @Override public void initialize(URL url, ResourceBundle rb) { txtFileToJsonFormController = new DataFileToJsonFormController(); super.initialize(url, rb); } @Override public String getTitle() { getEditButton().setText("Convertir"); return "Conversion d'un fichier de données en JSON"; } @Override public Pane getContentFormPane() throws IOException { return ViewLoaderUtil.getPaneFromFxmlFile(txtFileToJsonFormController.getClass().getResource("DataFileToJsonEditForm.fxml"), txtFileToJsonFormController); } @Override public Object getContentFormController() { return txtFileToJsonFormController; } @Override public void afterSave(ActionEvent event) { List validateurs = ValidateurService.getInstance().getAll(Arrays.asList(validateurCriterion(getCurrentObject().getTypeFichier().getCode()))); boolean proceed = !validateurs.isEmpty() || getCurrentObject().getValidateurPath() != null; Task task = new Task() { @Override protected Void call() throws Exception { parseFile(); return null; } }; task.setOnRunning(e -> LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show()); task.setOnSucceeded(e -> { LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide(); Node source = (Node) event.getSource(); Stage parentStage = (Stage) source.getScene().getWindow(); NotificationDialog notificationDialog = new NotificationDialog("Conversion en JSON reussie", NotificationType.SUCCESS, parentStage); 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"); } }); if (proceed) { new Thread(task).start(); } else { AlertMessageUtil.showAlertException(new Exception(""), "Validateur de " + getCurrentObject().getTypeFichier().getCode() + " introuvable", "Erreur"); } } private SearchCriteria validateurCriterion(String codeTypeFichier) { SearchCriteria criterion = new SearchCriteria(); criterion.setFieldName("codeTypeFichier"); criterion.setFieldType(String.class); criterion.setFieldValue(codeTypeFichier); criterion.setOperateur(Operateur.EQUALS); return criterion; } private void parseFile() throws Exception { Configuration config = ConfigurationService.getInstance().getCurrentConfig(); List colDefs = new ArrayList<>(); if (getCurrentObject().getValidateurPath()!= null) { colDefs = ValidateurParser.retrieveFieldsFromValidator(new File(getCurrentObject().getValidateurPath()), getCurrentObject().getTypeFichier().getCode()); } else { ParserUtils.getValidateurElements(getCurrentObject().getValidateurBytes()); } parseFile(getCurrentObject(), config, colDefs); } private void parseFile(DataFileToJson txtFileToJson, Configuration config, List colDefs) throws Exception { String fileName = (new File(txtFileToJson.getFileToConvertPath())).getName(); int index = fileName.lastIndexOf("."); fileName = fileName.substring(0, index); File outputFile = new File(config.getDatasDir(), fileName + ".json"); FileToValidateDescription fileDesc = null; if (!txtFileToJson.getDataType().equals(DataType.TXT)) { fileDesc = new FileToValidateDescription(new File(txtFileToJson.getFileToConvertPath()), txtFileToJson.getDelimiteurLigne().getCode(), txtFileToJson.getDelimiteurColonne().getCode()); } switch (txtFileToJson.getDataType()) { case CSV: ExportToJson.parseCsvFile(fileDesc, outputFile, colDefs, txtFileToJson.isHeaderPresent()); break; case TXT: ExportToJson.parseFileByColumnLength( new FileToValidateDescription(new File(txtFileToJson.getFileToConvertPath()), "", ""), outputFile, colDefs); break; case XLS: ExportToJson.parseXlsFile(fileDesc, outputFile, colDefs, txtFileToJson.isHeaderPresent()); break; case XLSX: ExportToJson.parseXlsxFile(fileDesc, outputFile, colDefs, txtFileToJson.isHeaderPresent()); break; default: throw new Exception("Type de données non supporté"); } } }