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/views/jsonstructure/JsonStructureController.java |  277 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 277 insertions(+), 0 deletions(-)

diff --git a/fdx_convert/src/main/java/com/megatim/fdxconvert/views/jsonstructure/JsonStructureController.java b/fdx_convert/src/main/java/com/megatim/fdxconvert/views/jsonstructure/JsonStructureController.java
new file mode 100644
index 0000000..2ea01d0
--- /dev/null
+++ b/fdx_convert/src/main/java/com/megatim/fdxconvert/views/jsonstructure/JsonStructureController.java
@@ -0,0 +1,277 @@
+package com.megatim.fdxconvert.views.jsonstructure;
+
+import com.megatim.dynamicjsonparser.enums.TypeDonnee;
+import com.megatim.fdxconvert.App;
+import com.megatim.fdxconvert.pojo.Delimiteur;
+import com.megatim.fdxconvert.viewmodel.JsonStructureViewModel;
+import javafx.application.Platform;
+import javafx.beans.property.BooleanProperty;
+import javafx.collections.FXCollections;
+import javafx.collections.ListChangeListener;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
+import javafx.fxml.Initializable;
+import javafx.geometry.Pos;
+import javafx.scene.Parent;
+import javafx.scene.control.*;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
+import javafx.util.converter.NumberStringConverter;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.List;
+import java.util.ResourceBundle;
+import java.util.stream.Collectors;
+
+public class JsonStructureController implements Initializable {
+
+    @FXML
+    private VBox mainContainer;
+
+    @FXML
+    private HBox fieldContainer;
+
+    @FXML
+    private HBox formatFieldContainer;
+
+    @FXML
+    private HBox delimitorFieldContainer;
+
+    @FXML
+    private TextField nameField;
+
+    @FXML
+    private ComboBox<TypeDonnee> typeField;
+
+    @FXML
+    private ComboBox<String> formatField;
+
+    @FXML
+    private ComboBox<Delimiteur> delimitorField;
+
+    @FXML
+    private CheckBox requiredField;
+
+    @FXML
+    private CheckBox collectionField;
+
+    @FXML
+    private TextField tailleField;
+
+    @FXML
+    private Button removeBtn;
+
+    @FXML
+    private VBox objectContainer;
+
+    @FXML
+    private HBox objectContainerleft;
+
+    @FXML
+    private HBox objectContainerRight;
+
+    @FXML
+    private Label objectSquareBracketLeft;
+
+    @FXML
+    private Label objectSquareBracketRight;
+
+    @FXML
+    private HBox formFieldContainer;
+
+    @FXML
+    private Label squareBracketLeft;
+
+    @FXML
+    private Label squareBracketRight;
+
+    @FXML
+    private Button addButton;
+
+    @FXML
+    private VBox nestedContainer;
+
+    private final JsonStructureViewModel viewModel;
+
+    public JsonStructureController(JsonStructureViewModel viewModel) {
+        this.viewModel = viewModel;
+    }
+
+    @Override
+    public void initialize(URL location, ResourceBundle resources) {
+
+        viewModel.init();
+
+        typeField.setItems(FXCollections.observableArrayList(TypeDonnee.values()));
+
+        tailleField.textProperty().addListener((observable, oldValue, newValue) -> {
+            if (!newValue.matches("\\d*")) {
+                tailleField.setText(newValue.replaceAll("[^\\d]", ""));
+            }
+        });
+
+        formatField.setPromptText("Sélectionnez le format de la date");
+        formatField.setItems(FXCollections.observableArrayList(App.FORMATS_DATE));
+
+        delimitorField.setPromptText("Sélectionnez le délimiteur de la date");
+        delimitorField.setItems(FXCollections.observableArrayList(App.SEPARATEURS_DATE.values()));
+
+        nameField.textProperty().bindBidirectional(viewModel.nameProperty());
+        typeField.valueProperty().bindBidirectional(viewModel.typeProperty());
+        formatField.valueProperty().bindBidirectional(viewModel.formatProperty());
+        delimitorField.valueProperty().bindBidirectional(viewModel.delimitorProperty());
+        requiredField.selectedProperty().bindBidirectional(viewModel.requiredProperty());
+        collectionField.selectedProperty().bindBidirectional(viewModel.collectionProperty());
+        tailleField.textProperty().bindBidirectional(viewModel.tailleProperty(), new NumberStringConverter());
+
+        nameField.setDisable(viewModel.isRoot());
+        tailleField.setDisable(viewModel.isRoot());
+        collectionField.setDisable(viewModel.isRoot());
+        requiredField.setDisable(viewModel.isRoot());
+        typeField.setDisable(viewModel.isRoot());
+
+        tailleField.disableProperty().bind(viewModel.hasChildProperty());
+
+        toggleObjectContainer(viewModel.hasChildProperty().get());
+        viewModel.hasChildProperty().addListener((observable, oldValue, newValue) -> {
+            toggleObjectContainer(newValue);
+        });
+
+        toggleDateFieldContainers(viewModel.hasDateTypeProperty().get());
+        viewModel.hasDateTypeProperty().addListener((observable, oldValue, newValue) -> {
+            toggleDateFieldContainers(newValue);
+        });
+
+        toggleSquareBrackets(viewModel.hasSquareBracketProperty().get());
+        viewModel.hasSquareBracketProperty().addListener((observable, oldValue, newValue) -> {
+            toggleSquareBrackets(newValue);
+        });
+
+        toggleObjectSquareBrackets(viewModel.hasObjectSquareBracketProperty().get());
+        viewModel.hasObjectSquareBracketProperty().addListener((observable, oldValue, newValue) -> {
+            toggleObjectSquareBrackets(newValue);
+        });
+
+        addButton.setOnAction(event -> {
+            viewModel.addNewChild();
+        });
+
+        addChildrenViews(viewModel.getChildren());
+        viewModel.getChildren().addListener((ListChangeListener<JsonStructureViewModel>) c -> {
+            while (c.next()) {
+                if (c.wasAdded()) {
+                    Platform.runLater(() -> {
+                        addChildrenViews(c.getAddedSubList().stream().collect(Collectors.toList()));
+                    });
+                }
+                if (c.wasRemoved()) {
+                    Platform.runLater(() -> {
+                        for (JsonStructureViewModel child : c.getRemoved()) {
+                            nestedContainer.getChildren().removeIf(node -> node.getId().equals(child.getId()));
+                        }
+                    });
+                }
+            }
+        });
+
+    }
+
+    public BooleanProperty validProperty() {
+        return viewModel.validProperty();
+    }
+
+    public NestedJsonStructure nestedJsonStructure() {
+        return viewModel.nestedJsonStructure();
+    }
+
+    public void setRootStructureName(String name) {
+        if (viewModel.isRoot()) {
+            viewModel.nameProperty().setValue(name);
+        }
+    }
+
+    private void addChildrenViews(List<JsonStructureViewModel> children) {
+        for (JsonStructureViewModel child : children) {
+            addChildView(child);
+        }
+    }
+
+    private void addChildView(JsonStructureViewModel child) {
+
+        try {
+
+            FXMLLoader loader = new FXMLLoader(JsonStructureController.class.getResource("JsonStructureView.fxml"));
+            loader.setController(new JsonStructureController(child));
+            Parent root = loader.load();
+
+            Button removeButton = new Button("-");
+            HBox hbox = new HBox(removeButton, root);
+            hbox.setId(child.getId());
+            hbox.setSpacing(15);
+            hbox.setAlignment(Pos.TOP_LEFT);
+
+            nestedContainer.getChildren().add(hbox);
+            removeButton.setOnAction(event1 -> viewModel.removeChild(child.getId()));
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    private void toggleObjectContainer(Boolean hasChild) {
+        if (hasChild) {
+            if (!mainContainer.getChildren().contains(objectContainer)) {
+                mainContainer.getChildren().add(objectContainer);
+            }
+        } else {
+            viewModel.removeAllChild();
+            mainContainer.getChildren().remove(objectContainer);
+        }
+    }
+
+    private void toggleDateFieldContainers(Boolean hasDateType) {
+        if (hasDateType) {
+            if (!fieldContainer.getChildren().contains(formatFieldContainer)) {
+                fieldContainer.getChildren().add(2, formatFieldContainer);
+            }
+            if (!fieldContainer.getChildren().contains(delimitorFieldContainer)) {
+                fieldContainer.getChildren().add(3, delimitorFieldContainer);
+            }
+        } else {
+            fieldContainer.getChildren().remove(formatFieldContainer);
+            fieldContainer.getChildren().remove(delimitorFieldContainer);
+        }
+    }
+
+    private void toggleSquareBrackets(Boolean hasSquareBracket) {
+        if (hasSquareBracket) {
+            if (!formFieldContainer.getChildren().contains(squareBracketLeft)) {
+                formFieldContainer.getChildren().add(0, squareBracketLeft);
+            }
+            if (!formFieldContainer.getChildren().contains(squareBracketRight)) {
+                formFieldContainer.getChildren().add(squareBracketRight);
+            }
+        } else {
+            formFieldContainer.getChildren().remove(squareBracketLeft);
+            formFieldContainer.getChildren().remove(squareBracketRight);
+        }
+    }
+
+    private void toggleObjectSquareBrackets(Boolean hasObjectSquareBracket) {
+        if (hasObjectSquareBracket) {
+            if (!objectContainerleft.getChildren().contains(objectSquareBracketLeft)) {
+                objectContainerleft.getChildren().add(0, objectSquareBracketLeft);
+            }
+            if (!objectContainerRight.getChildren().contains(objectSquareBracketRight)) {
+                objectContainerRight.getChildren().add(objectSquareBracketRight);
+            }
+        } else {
+            objectContainerleft.getChildren().remove(objectSquareBracketLeft);
+            objectContainerRight.getChildren().remove(objectSquareBracketRight);
+        }
+    }
+
+
+}

--
Gitblit v1.10.0