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