/*
|
* 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<DataFileToJson> {
|
|
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<Validateur> validateurs = ValidateurService.getInstance().getAll(Arrays.asList(validateurCriterion(getCurrentObject().getTypeFichier().getCode())));
|
boolean proceed = !validateurs.isEmpty() || getCurrentObject().getValidateurPath() != null;
|
Task<Void> task = new Task<Void>() {
|
|
@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<ColumnDefinition> 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<ColumnDefinition> 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é");
|
}
|
}
|
|
}
|