package com.megatim.fdxgenerator.controller; import com.megatimfx.common.abstracts.AbstractEditDialogController; import com.megatimfx.common.customdialogs.LoadinIndicatorDialogUtil; import com.megatimfx.common.dialogs.NotificationDialog; import com.megatimfx.common.dialogs.NotificationType; import com.megatimfx.common.enums.TypeOperation; import com.megatimfx.common.utils.ViewLoaderUtil; import com.megatim.fdxgenerator.App; import com.megatim.fdxgenerator.enums.DataType; import com.megatim.fdxgenerator.forms.StructureLigneEditFormController; import com.megatim.fdxgenerator.forms.ValidateurFichierEditFormController; import com.megatim.fdxgenerator.model.StructureLigne; import com.megatim.fdxgenerator.model.ValidateurFichier; import com.megatim.fdxgenerator.pojo.Delimiteur; import com.megatim.fdxgenerator.service.ValidateurFichierService; import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; import javafx.collections.ListChangeListener; import javafx.event.ActionEvent; import javafx.scene.Node; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class ValidateurFichierEditDialogController extends AbstractEditDialogController { private ValidateurFichierEditFormController validateurFichierEditFormController; private StructureLigneEditDialogController structureLigneEditDialogController; private ValidateurFichierService validateurFichierService = ValidateurFichierService.getInstance(); @Override public void initialize(URL url, ResourceBundle rb) { validateurFichierEditFormController = new ValidateurFichierEditFormController(); structureLigneEditDialogController = new StructureLigneEditDialogController(); structureLigneEditDialogController.setStructureLigneEditFormController(new StructureLigneEditFormController()); super.initialize(url, rb); } @Override public String getTitle() { return "Edition d'un validateur de fichier"; } @Override public Pane getContentFormPane() throws IOException { return ViewLoaderUtil.getPaneFromFxmlFile( validateurFichierEditFormController.getClass().getResource("ValidateurFichierEditForm.fxml"), validateurFichierEditFormController ); } @Override public Object getContentFormController() { return validateurFichierEditFormController; } @Override protected void beforeBindFormFieldWithCurrentObject(ValidateurFichier bindObject, Object formController, TypeOperation typeOperation) { if (formController instanceof ValidateurFichierEditFormController) { ValidateurFichierEditFormController controller = (ValidateurFichierEditFormController) formController; if (typeOperation.equals(TypeOperation.VIEW) || typeOperation.equals(TypeOperation.UPDATE)) { if (bindObject.getCodeDelimiteurColonne() != null) { bindObject.setDelimiteurColonne(App.DELIMITEURS_COLONNE.get(bindObject.getCodeDelimiteurColonne())); } if (bindObject.getCodeDelimiteurLigne() != null) { bindObject.setDelimiteurLigne(App.DELIMITEURS_LIGNE.get(bindObject.getCodeDelimiteurLigne())); } } if (typeOperation.equals(TypeOperation.ADD) || typeOperation.equals(TypeOperation.UPDATE)) { controller.getDelimiteurColonne().disableProperty() .bind(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNull() .or(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNotEqualTo(DataType.CSV)) ); controller.getDelimiteurLigne().disableProperty() .bind(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNull() .or(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNotEqualTo(DataType.CSV)) ); controller.getHeaderPresentCheckbox().disableProperty().bind(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isNull() .or(controller.getDataTypeComboBox().getSelectionModel().selectedItemProperty().isEqualTo(DataType.TXT)) ); } } } @Override protected void afterBindFormFieldWithCurrentObject(ValidateurFichier bindObject, Object formController, TypeOperation typeOperation ) { if (formController instanceof ValidateurFichierEditFormController) { ValidateurFichierEditFormController controller = (ValidateurFichierEditFormController) formController; controller.getStructureLigneAbstractTable().setController(structureLigneEditDialogController); controller.getStructureLigneAbstractTable().getElementObservableList().sort((o1, o2) -> { return Integer.valueOf(o1.getPosition()).compareTo(o2.getPosition()); }); structureLigneEditDialogController.setSelectedStructureLignes(controller.getStructureLigneAbstractTable().getElementObservableList()); switch (typeOperation) { case ADD: controller.getSaisieStructureLigneChecBox().setOnAction(event -> { if (controller.getSaisieStructureLigneChecBox().isSelected()) { int numberOfPosition = Integer.parseInt(controller.getNombrePositionTextField().getText()); structureLigneEditDialogController.getStructureLigneEditFormController().populatePositionComboBox(numberOfPosition); } }); controller.getTypeFichierAbstractSelectItem().selectedElementProperty().addListener((observable, oldValue, newValue) -> { if (newValue != null) { structureLigneEditDialogController.setTypeFichier(newValue); } }); break; case UPDATE: structureLigneEditDialogController.setTypeFichier(controller.getTypeFichierAbstractSelectItem().getSelectedElement()); controller.getSaisieStructureLigneChecBox().setSelected(true); controller.getSaisieStructureLigneChecBox().setDisable(true); break; default: controller.getSaisieStructureLigneChecBox().setSelected(true); controller.getSaisieStructureLigneChecBox().setDisable(true); break; } controller.getStructureLigneAbstractTable().getElementObservableList().addListener((ListChangeListener.Change c) -> { while (c.next()) { if (c.wasAdded()) { int start = c.getFrom(); int end = c.getTo(); for (int i = start; i < end; i++) { StructureLigne structLigne = c.getList().get(i); structLigne.setValidateurFichier(getCurrentObject()); structureLigneEditDialogController.getStructureLigneEditFormController().getList().remove(new Integer(structLigne.getPosition())); structureLigneEditDialogController.getStructureLigneEditFormController().getList().sort((o1, o2) -> { return o1.compareTo(o2); }); } } else if (c.wasRemoved()) { for (StructureLigne structLigne : c.getRemoved()) { structureLigneEditDialogController.getStructureLigneEditFormController().getList().add(structLigne.getPosition()); structureLigneEditDialogController.getStructureLigneEditFormController().getList().sort((o1, o2) -> { return o1.compareTo(o2); }); } } } }); } } @Override protected void afterBindCurrentObjectWithFormField(ValidateurFichier bindObject, Object formController, TypeOperation typeOperation ) { ValidateurFichierEditFormController controller = (ValidateurFichierEditFormController) formController; controller.getStructureLigneAbstractTable().setController(structureLigneEditDialogController); if (typeOperation.equals(TypeOperation.ADD)) { if (bindObject.getTypeFichier() != null) { bindObject.setId(bindObject.getTypeFichier().getCode()); } } } @Override public boolean beforeSave(ActionEvent event) { Boolean proceed = super.beforeSave(event); Delimiteur delimiteurColonne = getCurrentObject().getDelimiteurColonne(); Delimiteur delimiteurLigne = getCurrentObject().getDelimiteurLigne(); if (delimiteurColonne != null) { getCurrentObject().setCodeDelimiteurColonne(delimiteurColonne.getCode()); } if (delimiteurLigne != null) { getCurrentObject().setCodeDelimiteurLigne(delimiteurLigne.getCode()); } if (proceed) { if (getTypeOperation().equals(TypeOperation.ADD) || getTypeOperation().equals(TypeOperation.UPDATE)) { LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show(); proceed = getCurrentObject().getNombrePosition() == getCurrentObject().getStructureLignes().size(); if (!proceed) { LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide(); Node source = (Node) event.getSource(); Stage parentStage = (Stage) source.getScene().getWindow(); NotificationDialog notificationDialog = new NotificationDialog( "Vous devez remplir la structure de toutes les positions", NotificationType.ERROR, parentStage ); notificationDialog.showNotification(); } else { proceed = validateurFichierService.find(getCurrentObject()) != null; if (!proceed) { LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide(); Node source = (Node) event.getSource(); Stage parentStage = (Stage) source.getScene().getWindow(); NotificationDialog notificationDialog = new NotificationDialog( "Il existe déjà un validateur de fichier associé à ce type de fichier", NotificationType.ERROR, parentStage ); notificationDialog.showNotification(); } } LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide(); } } return proceed; } }