From 8cbaa370347e6fc997381cf35d6c295685b90f98 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Fri, 19 Jun 2026 11:29:14 +0000
Subject: [PATCH] move to new repo

---
 dynamicjsonparser/src/main/java/com/megatim/dynamicjsonparser/extender/DataRetrieverAction.java |   79 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/dynamicjsonparser/src/main/java/com/megatim/dynamicjsonparser/extender/DataRetrieverAction.java b/dynamicjsonparser/src/main/java/com/megatim/dynamicjsonparser/extender/DataRetrieverAction.java
new file mode 100644
index 0000000..04093f3
--- /dev/null
+++ b/dynamicjsonparser/src/main/java/com/megatim/dynamicjsonparser/extender/DataRetrieverAction.java
@@ -0,0 +1,79 @@
+/*
+ * 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.dynamicjsonparser.extender;
+
+import com.megatim.dynamicjsonparser.pojo.CustomError;
+import com.megatim.dynamicjsonparser.pojo.JsonField;
+import com.megatim.dynamicjsonparser.pojo.JsonParsedData;
+import com.megatim.dynamicjsonparser.pojo.Node;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Deque;
+import java.util.List;
+import java.util.concurrent.ConcurrentLinkedDeque;
+import java.util.concurrent.ForkJoinTask;
+import java.util.concurrent.RecursiveTask;
+import org.burningwave.core.Virtual;
+
+/**
+ *
+ * @author ASUS
+ */
+public class DataRetrieverAction extends RecursiveTask<JsonParsedData> {
+
+    //Liste des données extraites du fichier json
+    private final List<Virtual> finalVirtuals = Collections.synchronizedList(new ArrayList<>());
+
+    //Liste des erreurs recontrées dans le fichier json
+    private final Deque<CustomError> deque = new ConcurrentLinkedDeque<>();
+
+    private final List<Node> nodes;
+    private final Class classOfEntity;
+    private final List<JsonField> jsonFields;
+    private final String rootClass;
+    private final int nbThreads;
+
+    public DataRetrieverAction(List<Node> nodes, Class classOfEntity, List<JsonField> jsonFields, String rootClass, int nbThreads) {
+        this.nodes = nodes;
+        this.classOfEntity = classOfEntity;
+        this.jsonFields = jsonFields;
+        this.rootClass = rootClass;
+        this.nbThreads = nbThreads;
+    }
+
+    @Override
+    protected JsonParsedData compute() {
+        if (nbThreads > 1) {
+            ForkJoinTask
+                    .invokeAll(createSubtasks())
+                    .stream()
+                    .map(DataRetrieverAction::join)
+                    .forEach(p -> {
+                        deque.addAll(p.getErrors());
+                        finalVirtuals.addAll(p.getVirtuals());
+                    });
+            return new JsonParsedData(finalVirtuals, new ArrayList<>(deque));
+        } else {
+            return new JsonDataProcessor(nodes, classOfEntity, jsonFields, rootClass).iterateThroughNodes();
+        }
+    }
+
+    private List<DataRetrieverAction> createSubtasks() {
+        List<DataRetrieverAction> subtasks = new ArrayList<>();
+        int nbEltsPerTask = nodes.size() / nbThreads;
+        int remainder = nodes.size() % nbThreads;
+
+        for (int i = 0; i < nbThreads; i++) {
+            if (remainder > 0 && i == nbThreads - 1) {
+                subtasks.add(new DataRetrieverAction(nodes.subList(nbEltsPerTask * i, nbEltsPerTask * i + nbEltsPerTask + remainder), classOfEntity, jsonFields, rootClass, 1));
+            } else {
+                subtasks.add(new DataRetrieverAction(nodes.subList(nbEltsPerTask * i, nbEltsPerTask * i + nbEltsPerTask), classOfEntity, jsonFields, rootClass, 1));
+            }
+        }
+
+        return subtasks;
+    }
+
+}

--
Gitblit v1.10.0