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