/* * 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.forms; import com.megatimfx.common.annontations.Champ; import com.megatimfx.common.customcontrols.AbstractNestedEntityTable; import com.megatimfx.common.customcontrols.AbstractSelectionItem; import com.megatimfx.components.customdialogs.AlertMessageUtil; import com.megatimfx.components.customdialogs.LoadinIndicatorDialogUtil; import com.megatimfx.common.abstracts.AbstractEditDialogController; import com.megatimfx.common.abstracts.context.AbstractViewContext; import com.megatimfx.common.enums.TypeOperation; import com.megatim.fdxconvert.controller.MainController; import com.megatim.fdxconvert.controller.SubObjectEditDialogController; import com.megatim.fdxconvert.controller.table.StructureChampJsonTable; import com.megatim.fdxconvert.controller.table.TypeFichierTable; import com.megatim.fdxconvert.model.ModeleJson; import com.megatim.fdxconvert.model.StructureChampJson; import com.megatim.fdxconvert.model.SubObject; import com.megatim.fdxconvert.model.TypeFichier; import com.megatim.fdxconvert.service.TypeFichierService; import java.io.IOException; import java.net.URL; import java.util.Arrays; import java.util.HashSet; import java.util.ResourceBundle; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.concurrent.Task; import javafx.event.Event; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableRow; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; import javafx.stage.Modality; import javafx.stage.Stage; import javafx.stage.StageStyle; import javafx.util.Pair; /** * * @author ASUS */ public class ModeleJsonEditFormController implements Initializable { @FXML @Champ(mappedBy = "typeFichier", type = TypeFichier.class, update = false) private AbstractSelectionItem typeFichierAbstractSelectItem; @FXML @Champ(mappedBy = "objectName", type = String.class, update = false) private TextField objectNameTextField; @FXML @Champ(mappedBy = "listeStructureJson", type = StructureChampJson.class, update = true) private AbstractNestedEntityTable structureChampAbstractTable; @FXML private Button subTypeAddButton; @FXML private Button subTypeUpdateButton; @FXML private Button subTypeDeleteButton; @FXML private TableView subObjetsTableView; @FXML private TableColumn subObjectTableColumn; private final Set typeFichierSet = new HashSet<>(); private ObservableList subObjectListe = FXCollections.observableArrayList(); private Property> subModeleJsonListeProperty = new SimpleObjectProperty<>(subObjectListe); @Override public void initialize(URL url, ResourceBundle rb) { initSubObjetsTableView(); objectNameTextField.setText(""); typeFichierAbstractSelectItem.setTitle("Choix du type de fichier"); typeFichierAbstractSelectItem.setColumns(Arrays.asList( TypeFichierTable.codeColumn(), TypeFichierTable.libelleColumn() )); typeFichierAbstractSelectItem.setSearchFieldPairs(Arrays.asList( new Pair<>("code", "Code"), new Pair<>("libelle", "Libellé") )); structureChampAbstractTable.setClazz(StructureChampJson.class); structureChampAbstractTable.setParentFieldName("modeleJson"); structureChampAbstractTable.setColums(Arrays.asList( StructureChampJsonTable.codeColumn(), StructureChampJsonTable.typeDonneeColumn(), StructureChampJsonTable.simpleOrListeColumn() )); subTypeAddButton.setOnAction(event -> { openSubObjectDialog(event, new SubObject(), TypeOperation.ADD); }); subTypeUpdateButton.setOnMouseClicked(event -> { updateSubObject(event); }); subObjetsTableView.setRowFactory(rf -> { TableRow row = new TableRow<>(); row.setOnMouseClicked(event -> { if (event.getClickCount() == 2 && (!row.isEmpty())) { SubObject rowData = row.getItem(); openSubObjectDialog(event, rowData, TypeOperation.VIEW); } }); return row; }); initElements(); } public AbstractSelectionItem getTypeFichierAbstractSelectItem() { return typeFichierAbstractSelectItem; } public TextField getObjectNameTextField() { return objectNameTextField; } public AbstractNestedEntityTable getStructureChampAbstractTable() { return structureChampAbstractTable; } public ObservableList getSubObjectListe() { return subObjectListe; } public Button getSubTypeAddButton() { return subTypeAddButton; } public Button getSubTypeUpdateButton() { return subTypeUpdateButton; } public Button getSubTypeDeleteButton() { return subTypeDeleteButton; } public TableView getSubObjetsTableView() { return subObjetsTableView; } private void initElements() { Task task = new Task() { @Override protected Object call() throws Exception { typeFichierSet.clear(); typeFichierSet.addAll(TypeFichierService.getInstance().getAll()); return null; } }; task.setOnRunning(e -> LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().show()); task.setOnSucceeded(e -> { typeFichierAbstractSelectItem.setElements(typeFichierSet); LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide(); }); task.setOnFailed(e -> { LoadinIndicatorDialogUtil.getLoadingIndicatorDialog().hide(); AlertMessageUtil.showAlertException(task.getException(), "Une exception s'est produite pendant le traitement", "Erreur"); }); Thread thread = new Thread(task); thread.setDaemon(true); thread.start(); } private void initSubObjetsTableView() { subObjetsTableView.itemsProperty().bind(subModeleJsonListeProperty); subObjectTableColumn.setCellValueFactory(new PropertyValueFactory("subObjectName")); } private void openSubObjectDialog(Event event, SubObject subObject, TypeOperation typeOperation) { try { FXMLLoader loader = new FXMLLoader( (AbstractViewContext.getInstance().getAbstractEditDialogControllerURL() == null) ? AbstractEditDialogController.class.getResource("AbstractEditDialog.fxml") : AbstractViewContext.getInstance().getAbstractEditDialogControllerURL() ); SubObjectEditDialogController controller = new SubObjectEditDialogController(); controller.setModeleJsonEditFormController(this); controller.setSubObjectsList(subObjectListe); loader.setControllerFactory(param -> controller); Parent root = loader.load(); Node source = (Node) event.getSource(); Stage parentStage = (Stage) source.getScene().getWindow(); controller.initData(parentStage, typeOperation, subObject, null, subObjectListe, true); setStage(root); } catch (IOException ex) { Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, ex.getMessage(), ex); } } private void updateSubObject(Event event) { Object selectedItem = subObjetsTableView.getSelectionModel().getSelectedItem(); if (selectedItem != null) { SubObject subObjectToBeUpdated = (SubObject) selectedItem; openSubObjectDialog(event, subObjectToBeUpdated, TypeOperation.UPDATE); } } private void setStage(Parent root) { Scene scene = new Scene(root); Stage stage = new Stage(); stage.setScene(scene); stage.initStyle(StageStyle.UNDECORATED); stage.initModality(Modality.APPLICATION_MODAL); stage.show(); } }