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/viewmodel/JsonStructureViewModel.java |  177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 177 insertions(+), 0 deletions(-)

diff --git a/fdx_convert/src/main/java/com/megatim/fdxconvert/viewmodel/JsonStructureViewModel.java b/fdx_convert/src/main/java/com/megatim/fdxconvert/viewmodel/JsonStructureViewModel.java
new file mode 100644
index 0000000..65ad037
--- /dev/null
+++ b/fdx_convert/src/main/java/com/megatim/fdxconvert/viewmodel/JsonStructureViewModel.java
@@ -0,0 +1,177 @@
+package com.megatim.fdxconvert.viewmodel;
+
+import com.megatim.dynamicjsonparser.enums.TypeDonnee;
+import com.megatim.fdxconvert.pojo.Delimiteur;
+import com.megatim.fdxconvert.views.jsonstructure.DefaultNestedJsonStructure;
+import com.megatim.fdxconvert.views.jsonstructure.NestedJsonStructure;
+import javafx.beans.Observable;
+import javafx.beans.binding.Bindings;
+import javafx.beans.property.*;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+
+import java.util.UUID;
+
+public class JsonStructureViewModel {
+
+    private final String id;
+    private final boolean root;
+    private final int level;
+
+    private final StringProperty name = new SimpleStringProperty();
+    private final ObjectProperty<TypeDonnee> type = new SimpleObjectProperty(TypeDonnee.ALPHANUMERIQUE);
+    private final StringProperty format = new SimpleStringProperty();
+    private final ObjectProperty<Delimiteur> delimitor = new SimpleObjectProperty<>(null);
+    private final IntegerProperty taille = new SimpleIntegerProperty(1);
+    private final BooleanProperty required = new SimpleBooleanProperty(false);
+    private final BooleanProperty collection = new SimpleBooleanProperty(false);
+
+    private final BooleanProperty valid = new SimpleBooleanProperty(false);
+    private final BooleanProperty validName = new SimpleBooleanProperty(false);
+    private final BooleanProperty validType = new SimpleBooleanProperty(false);
+    private final BooleanProperty validFormat = new SimpleBooleanProperty(false);
+    private final BooleanProperty validDelimitor = new SimpleBooleanProperty(false);
+    private final BooleanProperty validTaille = new SimpleBooleanProperty(false);
+
+    private final BooleanProperty hasChild = new SimpleBooleanProperty(false);
+    private final BooleanProperty hasDateType = new SimpleBooleanProperty(false);
+    private final BooleanProperty hasSquareBracket = new SimpleBooleanProperty(false);
+    private final BooleanProperty hasObjectSquareBracket = new SimpleBooleanProperty(false);
+
+    private final ObservableList<JsonStructureViewModel> children = FXCollections.observableArrayList(vm -> new Observable[]{vm.validProperty()});
+
+    public JsonStructureViewModel(boolean root, int level, NestedJsonStructure nestedJsonStructure) {
+
+        this.root = root;
+        this.level = level;
+        id = UUID.randomUUID().toString();
+
+        if (nestedJsonStructure != null) {
+
+            name.set(nestedJsonStructure.name());
+            type.set(nestedJsonStructure.typeDonnee());
+            format.set(nestedJsonStructure.format());
+            delimitor.set(nestedJsonStructure.delimiteur());
+            taille.set(nestedJsonStructure.taille());
+            required.set(nestedJsonStructure.isRequired());
+            collection.set(nestedJsonStructure.isCollection());
+
+            nestedJsonStructure.children().forEach(nS -> {
+                children.add(new JsonStructureViewModel(false, level + 1, nS));
+            });
+        }
+    }
+
+    public void init() {
+
+        hasChild.bind(Bindings.createBooleanBinding(() -> isObjectType(), type));
+        hasDateType.bind(Bindings.createBooleanBinding(() -> isDateType(), type));
+        hasSquareBracket.bind(Bindings.createBooleanBinding(() -> !isObjectType() && collection.get(), type, collection));
+        hasObjectSquareBracket.bind(Bindings.createBooleanBinding(() -> isObjectType() && collection.get(), type, collection));
+        if (root) {
+            this.required.set(true);
+            this.collection.set(true);
+            this.type.set(TypeDonnee.OBJET);
+        }
+
+        validName.bind(Bindings.createBooleanBinding(() -> name.get() != null && name.get().length() > 0, name));
+        validType.bind(Bindings.createBooleanBinding(() -> type.get() != null && (!root || type.get().equals(TypeDonnee.OBJET)), type));
+        validFormat.bind(Bindings.createBooleanBinding(() -> !TypeDonnee.DATE.equals(type.get()) || (format.get() != null && format.get().length() > 0), type, format));
+        validDelimitor.bind(Bindings.createBooleanBinding(() -> !TypeDonnee.DATE.equals(type.get()) || (delimitor.get() != null), type, delimitor));
+        validTaille.bind(Bindings.createBooleanBinding(() -> TypeDonnee.OBJET.equals(type.get()) || taille.get() > 0, type, taille));
+
+        valid.bind(Bindings.createBooleanBinding(() -> (validName.get() && validType.get() && validFormat.get() && validDelimitor.get() && validTaille.get()
+                        && (!TypeDonnee.OBJET.equals(type.get()) || (!children.isEmpty() && children.stream().map(c -> c.validProperty()).allMatch(c -> c.get())))),
+                validName, validType, validFormat, validDelimitor, validTaille, type, children)
+        );
+    }
+
+    public NestedJsonStructure nestedJsonStructure() {
+        return new DefaultNestedJsonStructure(this);
+    }
+
+    public void addNewChild() {
+        JsonStructureViewModel newChild = new JsonStructureViewModel(false, level + 1, null);
+        children.add(newChild);
+    }
+
+    public void removeChild(String id) {
+        children.removeIf(item -> item.id == id);
+    }
+
+    public void removeAllChild() {
+        children.removeIf(item -> true);
+    }
+
+    public ObservableList<JsonStructureViewModel> getChildren() {
+        return children;
+    }
+
+    public StringProperty nameProperty() {
+        return name;
+    }
+
+    public ObjectProperty<TypeDonnee> typeProperty() {
+        return type;
+    }
+
+    public IntegerProperty tailleProperty() {
+        return taille;
+    }
+
+    public StringProperty formatProperty() {
+        return format;
+    }
+
+    public ObjectProperty<Delimiteur> delimitorProperty() {
+        return delimitor;
+    }
+
+    public BooleanProperty requiredProperty() {
+        return required;
+    }
+
+    public BooleanProperty collectionProperty() {
+        return collection;
+    }
+
+    public BooleanProperty hasChildProperty() {
+        return hasChild;
+    }
+
+    public BooleanProperty hasDateTypeProperty() {
+        return hasDateType;
+    }
+
+    public BooleanProperty hasSquareBracketProperty() {
+        return hasSquareBracket;
+    }
+
+    public BooleanProperty hasObjectSquareBracketProperty() {
+        return hasObjectSquareBracket;
+    }
+
+    public BooleanProperty validProperty() {
+        return valid;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public boolean isRoot() {
+        return root;
+    }
+
+    public int getLevel() {
+        return level;
+    }
+
+    private boolean isDateType() {
+        return type.get() != null && type.get() == TypeDonnee.DATE;
+    }
+
+    private boolean isObjectType() {
+        return type.get() != null && type.get() == TypeDonnee.OBJET;
+    }
+}

--
Gitblit v1.10.0