From e6ea9421ac507f078f5987830b88dffea9669a37 Mon Sep 17 00:00:00 2001
From: Alexandre <alexandre.perles@gmail.com>
Date: Fri, 9 Jun 2023 09:07:54 +0200
Subject: [PATCH] Change name to AMAS4DC

---
 .idea/.name                                   |  2 +-
 README.md                                     | 28 +++++-----
 build.gradle                                  |  3 +-
 settings.gradle                               |  2 +-
 .../java/fr/irit/smac/amas4dc/AMAS4DC.java    | 26 +++++++++
 .../{clumate => amas4dc}/amas/AMASOption.java |  2 +-
 .../amas/ClusterAgent.java                    | 19 ++++---
 .../amas/DynamicClusteringAMAS.java}          | 12 ++---
 .../amas/DynamicClusteringEnvironment.java}   |  8 +--
 .../amas/MASSettings.java                     | 10 ++--
 .../AMAS4DCCommandAndQueryHandler.java        | 51 ++++++++++++++++++
 .../amas/controller/command/Command.java      |  4 ++
 .../command/NewDataPointCommand.java          |  4 +-
 .../controller/command/ShutdownCommand.java   |  2 +-
 .../amas/controller/command/SolveCommand.java |  4 ++
 .../amas4dc/amas/controller/query/Query.java  |  4 ++
 .../amas/controller/query/Result.java         |  8 +--
 .../query/RetrieveClustersResultQuery.java    |  2 +-
 .../amas/messages/EvaluatedScoreMessage.java  |  2 +-
 .../messages/RequestSimilarityMessage.java    |  4 +-
 .../{clumate => amas4dc}/cluster/Cluster.java |  2 +-
 .../cluster/DataPoint.java                    |  2 +-
 .../cluster/DataPointFuser.java               |  2 +-
 .../cluster/SimilarityScoreMethod.java        |  2 +-
 .../event/NewClusterEvent.java                |  6 +--
 .../event/RemoveClusterEvent.java             |  6 +--
 .../java/fr/irit/smac/clumate/CluMATE.java    | 28 ----------
 .../amas/controller/CluMATEController.java    | 53 -------------------
 .../amas/controller/command/Command.java      |  4 --
 .../amas/controller/command/SolveCommand.java |  4 --
 .../clumate/amas/controller/query/Query.java  |  4 --
 src/test/groovy/SimpleClusteringIT.groovy     | 18 +++----
 .../amas/ClusterAgentTest.groovy              | 21 ++++----
 33 files changed, 170 insertions(+), 179 deletions(-)
 create mode 100644 src/main/java/fr/irit/smac/amas4dc/AMAS4DC.java
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/AMASOption.java (50%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/ClusterAgent.java (94%)
 rename src/main/java/fr/irit/smac/{clumate/amas/ClusterAMAS.java => amas4dc/amas/DynamicClusteringAMAS.java} (77%)
 rename src/main/java/fr/irit/smac/{clumate/amas/ClusterEnvironment.java => amas4dc/amas/DynamicClusteringEnvironment.java} (83%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/MASSettings.java (69%)
 create mode 100644 src/main/java/fr/irit/smac/amas4dc/amas/controller/AMAS4DCCommandAndQueryHandler.java
 create mode 100644 src/main/java/fr/irit/smac/amas4dc/amas/controller/command/Command.java
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/controller/command/NewDataPointCommand.java (55%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/controller/command/ShutdownCommand.java (50%)
 create mode 100644 src/main/java/fr/irit/smac/amas4dc/amas/controller/command/SolveCommand.java
 create mode 100644 src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Query.java
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/controller/query/Result.java (75%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/controller/query/RetrieveClustersResultQuery.java (55%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/messages/EvaluatedScoreMessage.java (89%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/amas/messages/RequestSimilarityMessage.java (77%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/cluster/Cluster.java (92%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/cluster/DataPoint.java (66%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/cluster/DataPointFuser.java (76%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/cluster/SimilarityScoreMethod.java (82%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/event/NewClusterEvent.java (50%)
 rename src/main/java/fr/irit/smac/{clumate => amas4dc}/event/RemoveClusterEvent.java (51%)
 delete mode 100644 src/main/java/fr/irit/smac/clumate/CluMATE.java
 delete mode 100644 src/main/java/fr/irit/smac/clumate/amas/controller/CluMATEController.java
 delete mode 100644 src/main/java/fr/irit/smac/clumate/amas/controller/command/Command.java
 delete mode 100644 src/main/java/fr/irit/smac/clumate/amas/controller/command/SolveCommand.java
 delete mode 100644 src/main/java/fr/irit/smac/clumate/amas/controller/query/Query.java
 rename src/test/groovy/fr/irit/smac/{clumate => amas4dc}/amas/ClusterAgentTest.groovy (69%)

diff --git a/.idea/.name b/.idea/.name
index 64fea47..f1d9be9 100644
--- a/.idea/.name
+++ b/.idea/.name
@@ -1 +1 @@
-CluMATE
\ No newline at end of file
+AMAS4DC
\ No newline at end of file
diff --git a/README.md b/README.md
index 2b02052..9c97207 100644
--- a/README.md
+++ b/README.md
@@ -1,33 +1,35 @@
-# LxPlot
+# AMAS4DC
 
 A library for data clustering using multi-agent system
 
 ## Set up
 
-* Download CluMATE source
+* Download AMAS4DC source
 
-* Rename the extracted folder "clumate"
+* Rename the extracted folder "amas4dc"
 
-* Create a new gradle project in the same directory as CluMATE
+* Create a new gradle project in the same directory as AMAS4DC
 
 * In this new project, open build.gradle
 
-* Add CluMATE to the dependencies
+* Add AMAS4DC to the dependencies
 ```
 dependencies {
 
     // Add the two following lines
-    // CluMATE
-    implementation project(':clumate')
+    // AMAS4DC
+    implementation project(':amas4dc')
     
     ...
 }
 ```
 * Open settings.gradle
 
-* Add link to local CluMATE folder
-include ':clumate'
-project(':clumate').projectDir = new File(settingsDir, '../clumate')
+* Add link to local AMAS4DC folder
+```
+include ':amas4dc'
+project(':amas4dc').projectDir = new File(settingsDir, '../amas4dc')
+```
 
 * Click on the Gradle Refresh button
 
@@ -35,8 +37,8 @@ project(':clumate').projectDir = new File(settingsDir, '../clumate')
 ## Usage example 
 
 ```java
-var clumate = new CluMATE<CustomDataPoint>(new MASSettings(new CustomDataPointSimilarityScoreMethod(), 0.5f, EnumSet.noneOf(AMASOption), new CustomDataPointFuser()))
+var amas4dc = new AMAS4DC<CustomDataPoint>(new MASSettings(new CustomDataPointSimilarityScoreMethod(), 0.5f, EnumSet.noneOf(AMASOption), new CustomDataPointFuser()))
 
-clumate.fit([new CustomDataPoint(1), new CustomDataPoint(2)])
-var results = clumate.retrieveClusters()
+amas4dc.fit([new CustomDataPoint(1), new CustomDataPoint(2)])
+var results = amas4dc.retrieveClusters()
 ```
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 78213ff..d3f92fa 100644
--- a/build.gradle
+++ b/build.gradle
@@ -13,8 +13,7 @@ repositories {
 
 dependencies {
     // AMAK (Only one of the next two lines should be uncommented. Also, settings.gradle file should also be modified)
-     implementation 'com.github.alexandreprl:amak:3.1.0'
-// Uncomment this line to get AMAK from git repository (The last part matches a tag, a commit hash or the last commit of a branch : branchName-SNAPSHOT
+     implementation 'com.github.alexandreprl:amak:3.1.0' // Uncomment this line to get AMAK from git repository (The last part matches a tag, a commit hash or the last commit of a branch : branchName-SNAPSHOT
 //    implementation project(':amak') // Uncomment this line to get AMAK from local
 
     
diff --git a/settings.gradle b/settings.gradle
index 751f796..6252cdb 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,4 +1,4 @@
-rootProject.name = 'CluMATE'
+rootProject.name = 'AMAS4DC'
 
 // Uncomment the two next lines when building amak locally
 //include ':amak'
diff --git a/src/main/java/fr/irit/smac/amas4dc/AMAS4DC.java b/src/main/java/fr/irit/smac/amas4dc/AMAS4DC.java
new file mode 100644
index 0000000..cdbab09
--- /dev/null
+++ b/src/main/java/fr/irit/smac/amas4dc/AMAS4DC.java
@@ -0,0 +1,26 @@
+package fr.irit.smac.amas4dc;
+
+import fr.irit.smac.amas4dc.amas.MASSettings;
+import fr.irit.smac.amas4dc.amas.controller.AMAS4DCCommandAndQueryHandler;
+import fr.irit.smac.amas4dc.amas.controller.command.NewDataPointCommand;
+import fr.irit.smac.amas4dc.amas.controller.command.SolveCommand;
+import fr.irit.smac.amas4dc.amas.controller.query.Result;
+import fr.irit.smac.amas4dc.amas.controller.query.RetrieveClustersResultQuery;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
+
+import java.util.List;
+
+public class AMAS4DC<T extends DataPoint> {
+	private final AMAS4DCCommandAndQueryHandler<T> controller;
+
+	public AMAS4DC(MASSettings<T> masSettings) {
+		this.controller = new AMAS4DCCommandAndQueryHandler<T>(masSettings);
+	}
+	public void fit(List<T> data) {
+		controller.handle(new NewDataPointCommand<T>(data));
+		controller.handle(new SolveCommand());
+	}
+	public Result<T> retrieveClusters() {
+		return controller.handle(new RetrieveClustersResultQuery());
+	}
+}
diff --git a/src/main/java/fr/irit/smac/clumate/amas/AMASOption.java b/src/main/java/fr/irit/smac/amas4dc/amas/AMASOption.java
similarity index 50%
rename from src/main/java/fr/irit/smac/clumate/amas/AMASOption.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/AMASOption.java
index 8d83d0a..5e44aa4 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/AMASOption.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/AMASOption.java
@@ -1,4 +1,4 @@
-package fr.irit.smac.clumate.amas;
+package fr.irit.smac.amas4dc.amas;
 
 public enum AMASOption {
 	Forget
diff --git a/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java b/src/main/java/fr/irit/smac/amas4dc/amas/ClusterAgent.java
similarity index 94%
rename from src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/ClusterAgent.java
index 7255ce5..017ec17 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/ClusterAgent.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/ClusterAgent.java
@@ -1,13 +1,12 @@
-package fr.irit.smac.clumate.amas;
+package fr.irit.smac.amas4dc.amas;
 
 import fr.irit.smac.amak.Agent;
-import fr.irit.smac.amak.event.EventStore;
-import fr.irit.smac.clumate.amas.messages.EvaluatedScoreMessage;
-import fr.irit.smac.clumate.amas.messages.RequestSimilarityMessage;
-import fr.irit.smac.clumate.cluster.Cluster;
-import fr.irit.smac.clumate.cluster.DataPoint;
-import fr.irit.smac.clumate.event.NewClusterEvent;
-import fr.irit.smac.clumate.event.RemoveClusterEvent;
+import fr.irit.smac.amas4dc.amas.messages.EvaluatedScoreMessage;
+import fr.irit.smac.amas4dc.amas.messages.RequestSimilarityMessage;
+import fr.irit.smac.amas4dc.cluster.Cluster;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
+import fr.irit.smac.amas4dc.event.NewClusterEvent;
+import fr.irit.smac.amas4dc.event.RemoveClusterEvent;
 import lombok.Getter;
 
 import java.text.MessageFormat;
@@ -15,7 +14,7 @@ import java.util.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, ClusterEnvironment<T>> {
+public class ClusterAgent<T extends DataPoint> extends Agent<DynamicClusteringAMAS<T>, DynamicClusteringEnvironment<T>> {
 	private static final float FLOAT_COMPARISON_EPSILON = 0.000001f;
 	@Getter
 	private Cluster<T> cluster;
@@ -43,7 +42,7 @@ public class ClusterAgent<T extends DataPoint> extends Agent<ClusterAMAS<T>, Clu
 	private static final Logger logger = Logger.getLogger(ClusterAgent.class.getName());
 	private int amountOfCyclesWithTheSameState;
 
-	protected ClusterAgent(ClusterAMAS amas, T dataPoint) {
+	protected ClusterAgent(DynamicClusteringAMAS amas, T dataPoint) {
 		super(amas);
 		this.setCluster(new Cluster<T>(dataPoint));
 	}
diff --git a/src/main/java/fr/irit/smac/clumate/amas/ClusterAMAS.java b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java
similarity index 77%
rename from src/main/java/fr/irit/smac/clumate/amas/ClusterAMAS.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java
index e127ef6..1ec5d63 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/ClusterAMAS.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringAMAS.java
@@ -1,9 +1,7 @@
-package fr.irit.smac.clumate.amas;
+package fr.irit.smac.amas4dc.amas;
 
 import fr.irit.smac.amak.Amas;
-import fr.irit.smac.amak.event.EventStore;
-import fr.irit.smac.clumate.cluster.Cluster;
-import fr.irit.smac.clumate.cluster.DataPoint;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -11,14 +9,14 @@ import java.util.function.Consumer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-public class ClusterAMAS<T extends DataPoint> extends Amas<ClusterEnvironment<T>> {
-	private static final Logger logger = Logger.getLogger(ClusterAMAS.class.getName());
+public class DynamicClusteringAMAS<T extends DataPoint> extends Amas<DynamicClusteringEnvironment<T>> {
+	private static final Logger logger = Logger.getLogger(DynamicClusteringAMAS.class.getName());
 	@Setter
 	private Consumer<Integer> onCycleEnd;
 	@Getter
 	private final MASSettings<T> masSettings;
 
-	public ClusterAMAS(ClusterEnvironment<T> environment, MASSettings<T> masSettings) {
+	public DynamicClusteringAMAS(DynamicClusteringEnvironment<T> environment, MASSettings<T> masSettings) {
 		super(environment, 1, ExecutionPolicy.TWO_PHASES);
 		this.masSettings = masSettings;
 	}
diff --git a/src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringEnvironment.java
similarity index 83%
rename from src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringEnvironment.java
index 64246ba..e51bcea 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/ClusterEnvironment.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/DynamicClusteringEnvironment.java
@@ -1,7 +1,7 @@
-package fr.irit.smac.clumate.amas;
+package fr.irit.smac.amas4dc.amas;
 
 import fr.irit.smac.amak.Environment;
-import fr.irit.smac.clumate.cluster.DataPoint;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
 import lombok.Getter;
 
 import java.util.*;
@@ -9,10 +9,10 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.logging.Logger;
 
-public class ClusterEnvironment<T extends DataPoint> extends Environment {
+public class DynamicClusteringEnvironment<T extends DataPoint> extends Environment {
 
 	private final Queue<T> pendingAdditionDataPoints = new ConcurrentLinkedQueue<>();
-	private static final Logger logger = Logger.getLogger(ClusterEnvironment.class.getName());
+	private static final Logger logger = Logger.getLogger(DynamicClusteringEnvironment.class.getName());
 	@Getter
 	private T lastPolledPendingDataPoint = null;
 	private final Map<Integer, List<ClusterAgent<T>>> buckets = new ConcurrentHashMap<>();
diff --git a/src/main/java/fr/irit/smac/clumate/amas/MASSettings.java b/src/main/java/fr/irit/smac/amas4dc/amas/MASSettings.java
similarity index 69%
rename from src/main/java/fr/irit/smac/clumate/amas/MASSettings.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/MASSettings.java
index 9adf535..f4a04b8 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/MASSettings.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/MASSettings.java
@@ -1,10 +1,10 @@
-package fr.irit.smac.clumate.amas;
+package fr.irit.smac.amas4dc.amas;
 
 import fr.irit.smac.amak.event.EventStore;
-import fr.irit.smac.clumate.cluster.Cluster;
-import fr.irit.smac.clumate.cluster.DataPoint;
-import fr.irit.smac.clumate.cluster.DataPointFuser;
-import fr.irit.smac.clumate.cluster.SimilarityScoreMethod;
+import fr.irit.smac.amas4dc.cluster.Cluster;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
+import fr.irit.smac.amas4dc.cluster.DataPointFuser;
+import fr.irit.smac.amas4dc.cluster.SimilarityScoreMethod;
 
 import java.util.EnumSet;
 
diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/controller/AMAS4DCCommandAndQueryHandler.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/AMAS4DCCommandAndQueryHandler.java
new file mode 100644
index 0000000..c5a94a8
--- /dev/null
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/AMAS4DCCommandAndQueryHandler.java
@@ -0,0 +1,51 @@
+package fr.irit.smac.amas4dc.amas.controller;
+
+import fr.irit.smac.amak.scheduling.Scheduler;
+import fr.irit.smac.amas4dc.amas.controller.command.NewDataPointCommand;
+import fr.irit.smac.amas4dc.amas.controller.command.ShutdownCommand;
+import fr.irit.smac.amas4dc.amas.controller.command.SolveCommand;
+import fr.irit.smac.amas4dc.amas.controller.query.Result;
+import fr.irit.smac.amas4dc.amas.controller.query.RetrieveClustersResultQuery;
+import fr.irit.smac.amas4dc.amas.DynamicClusteringAMAS;
+import fr.irit.smac.amas4dc.amas.ClusterAgent;
+import fr.irit.smac.amas4dc.amas.DynamicClusteringEnvironment;
+import fr.irit.smac.amas4dc.amas.MASSettings;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
+import lombok.Getter;
+
+import java.util.concurrent.Executors;
+
+public class AMAS4DCCommandAndQueryHandler<T extends DataPoint> {
+	@Getter
+	private final DynamicClusteringEnvironment<T> environment;
+	@Getter
+	private final MASSettings<T> masSettings;
+	@Getter
+	private final DynamicClusteringAMAS<T> amas;
+	@Getter
+	private final Scheduler scheduler;
+
+	public AMAS4DCCommandAndQueryHandler(MASSettings<T> masSettings) {
+		this.masSettings = masSettings;
+		environment = new DynamicClusteringEnvironment<T>();
+		amas = new DynamicClusteringAMAS<T>(environment, masSettings);
+		scheduler = new Scheduler(Executors.newSingleThreadExecutor(), amas, environment);
+	}
+
+	public void handle(NewDataPointCommand<T> newDataPointCommand) {
+		environment.addDataPoints(newDataPointCommand.newDataPoints());
+	}
+
+	public void handle(SolveCommand solveCommand) {
+		scheduler.startWithSleepSync(0);
+	}
+
+	public void handle(ShutdownCommand shutdownCommand) {
+		scheduler.stop();
+	}
+
+	public Result<T> handle(RetrieveClustersResultQuery retrieveClustersResultQuery) {
+		var clusters = amas.getAgents(ClusterAgent.class).stream().map(agent -> ((ClusterAgent<T>) agent).getCluster()).toList();
+		return new Result<T>(clusters, masSettings);
+	}
+}
diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/Command.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/Command.java
new file mode 100644
index 0000000..0a1afa2
--- /dev/null
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/Command.java
@@ -0,0 +1,4 @@
+package fr.irit.smac.amas4dc.amas.controller.command;
+
+public interface Command {
+}
diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/command/NewDataPointCommand.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/NewDataPointCommand.java
similarity index 55%
rename from src/main/java/fr/irit/smac/clumate/amas/controller/command/NewDataPointCommand.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/controller/command/NewDataPointCommand.java
index 1ec497c..70c99e2 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/controller/command/NewDataPointCommand.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/NewDataPointCommand.java
@@ -1,6 +1,6 @@
-package fr.irit.smac.clumate.amas.controller.command;
+package fr.irit.smac.amas4dc.amas.controller.command;
 
-import fr.irit.smac.clumate.cluster.DataPoint;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
 
 import java.util.List;
 
diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/command/ShutdownCommand.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/ShutdownCommand.java
similarity index 50%
rename from src/main/java/fr/irit/smac/clumate/amas/controller/command/ShutdownCommand.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/controller/command/ShutdownCommand.java
index 2345a49..564f115 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/controller/command/ShutdownCommand.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/ShutdownCommand.java
@@ -1,4 +1,4 @@
-package fr.irit.smac.clumate.amas.controller.command;
+package fr.irit.smac.amas4dc.amas.controller.command;
 
 public record ShutdownCommand() implements Command {
 }
diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/SolveCommand.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/SolveCommand.java
new file mode 100644
index 0000000..512d2cd
--- /dev/null
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/command/SolveCommand.java
@@ -0,0 +1,4 @@
+package fr.irit.smac.amas4dc.amas.controller.command;
+
+public record SolveCommand() implements Command {
+}
diff --git a/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Query.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Query.java
new file mode 100644
index 0000000..0c3a75a
--- /dev/null
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Query.java
@@ -0,0 +1,4 @@
+package fr.irit.smac.amas4dc.amas.controller.query;
+
+public interface Query {
+}
diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/query/Result.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Result.java
similarity index 75%
rename from src/main/java/fr/irit/smac/clumate/amas/controller/query/Result.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Result.java
index aa5fba7..500d99e 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/controller/query/Result.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/Result.java
@@ -1,8 +1,8 @@
-package fr.irit.smac.clumate.amas.controller.query;
+package fr.irit.smac.amas4dc.amas.controller.query;
 
-import fr.irit.smac.clumate.amas.MASSettings;
-import fr.irit.smac.clumate.cluster.Cluster;
-import fr.irit.smac.clumate.cluster.DataPoint;
+import fr.irit.smac.amas4dc.amas.MASSettings;
+import fr.irit.smac.amas4dc.cluster.Cluster;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
 
 import java.util.List;
 
diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/query/RetrieveClustersResultQuery.java b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/RetrieveClustersResultQuery.java
similarity index 55%
rename from src/main/java/fr/irit/smac/clumate/amas/controller/query/RetrieveClustersResultQuery.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/controller/query/RetrieveClustersResultQuery.java
index efe797e..72ed58c 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/controller/query/RetrieveClustersResultQuery.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/controller/query/RetrieveClustersResultQuery.java
@@ -1,4 +1,4 @@
-package fr.irit.smac.clumate.amas.controller.query;
+package fr.irit.smac.amas4dc.amas.controller.query;
 
 public record RetrieveClustersResultQuery() implements Query {
 }
diff --git a/src/main/java/fr/irit/smac/clumate/amas/messages/EvaluatedScoreMessage.java b/src/main/java/fr/irit/smac/amas4dc/amas/messages/EvaluatedScoreMessage.java
similarity index 89%
rename from src/main/java/fr/irit/smac/clumate/amas/messages/EvaluatedScoreMessage.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/messages/EvaluatedScoreMessage.java
index 67a311e..f2a381b 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/messages/EvaluatedScoreMessage.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/messages/EvaluatedScoreMessage.java
@@ -1,4 +1,4 @@
-package fr.irit.smac.clumate.amas.messages;
+package fr.irit.smac.amas4dc.amas.messages;
 
 import fr.irit.smac.amak.Agent;
 import fr.irit.smac.amak.messaging.Message;
diff --git a/src/main/java/fr/irit/smac/clumate/amas/messages/RequestSimilarityMessage.java b/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityMessage.java
similarity index 77%
rename from src/main/java/fr/irit/smac/clumate/amas/messages/RequestSimilarityMessage.java
rename to src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityMessage.java
index 4cae77f..f2846dd 100644
--- a/src/main/java/fr/irit/smac/clumate/amas/messages/RequestSimilarityMessage.java
+++ b/src/main/java/fr/irit/smac/amas4dc/amas/messages/RequestSimilarityMessage.java
@@ -1,6 +1,6 @@
-package fr.irit.smac.clumate.amas.messages;
+package fr.irit.smac.amas4dc.amas.messages;
 
-import fr.irit.smac.clumate.cluster.Cluster;
+import fr.irit.smac.amas4dc.cluster.Cluster;
 import fr.irit.smac.amak.Agent;
 import fr.irit.smac.amak.messaging.Message;
 import lombok.Getter;
diff --git a/src/main/java/fr/irit/smac/clumate/cluster/Cluster.java b/src/main/java/fr/irit/smac/amas4dc/cluster/Cluster.java
similarity index 92%
rename from src/main/java/fr/irit/smac/clumate/cluster/Cluster.java
rename to src/main/java/fr/irit/smac/amas4dc/cluster/Cluster.java
index bf5eb79..a17bbc9 100644
--- a/src/main/java/fr/irit/smac/clumate/cluster/Cluster.java
+++ b/src/main/java/fr/irit/smac/amas4dc/cluster/Cluster.java
@@ -1,4 +1,4 @@
-package fr.irit.smac.clumate.cluster;
+package fr.irit.smac.amas4dc.cluster;
 
 import lombok.Getter;
 import lombok.ToString;
diff --git a/src/main/java/fr/irit/smac/clumate/cluster/DataPoint.java b/src/main/java/fr/irit/smac/amas4dc/cluster/DataPoint.java
similarity index 66%
rename from src/main/java/fr/irit/smac/clumate/cluster/DataPoint.java
rename to src/main/java/fr/irit/smac/amas4dc/cluster/DataPoint.java
index 923b8b1..ac62dcb 100644
--- a/src/main/java/fr/irit/smac/clumate/cluster/DataPoint.java
+++ b/src/main/java/fr/irit/smac/amas4dc/cluster/DataPoint.java
@@ -1,4 +1,4 @@
-package fr.irit.smac.clumate.cluster;
+package fr.irit.smac.amas4dc.cluster;
 
 public interface DataPoint {
 	default int getBucketId() {
diff --git a/src/main/java/fr/irit/smac/clumate/cluster/DataPointFuser.java b/src/main/java/fr/irit/smac/amas4dc/cluster/DataPointFuser.java
similarity index 76%
rename from src/main/java/fr/irit/smac/clumate/cluster/DataPointFuser.java
rename to src/main/java/fr/irit/smac/amas4dc/cluster/DataPointFuser.java
index 2a64227..9d833f0 100644
--- a/src/main/java/fr/irit/smac/clumate/cluster/DataPointFuser.java
+++ b/src/main/java/fr/irit/smac/amas4dc/cluster/DataPointFuser.java
@@ -1,4 +1,4 @@
-package fr.irit.smac.clumate.cluster;
+package fr.irit.smac.amas4dc.cluster;
 
 import java.util.function.BiFunction;
 
diff --git a/src/main/java/fr/irit/smac/clumate/cluster/SimilarityScoreMethod.java b/src/main/java/fr/irit/smac/amas4dc/cluster/SimilarityScoreMethod.java
similarity index 82%
rename from src/main/java/fr/irit/smac/clumate/cluster/SimilarityScoreMethod.java
rename to src/main/java/fr/irit/smac/amas4dc/cluster/SimilarityScoreMethod.java
index 59a6410..a6e40d9 100644
--- a/src/main/java/fr/irit/smac/clumate/cluster/SimilarityScoreMethod.java
+++ b/src/main/java/fr/irit/smac/amas4dc/cluster/SimilarityScoreMethod.java
@@ -1,4 +1,4 @@
-package fr.irit.smac.clumate.cluster;
+package fr.irit.smac.amas4dc.cluster;
 
 
 public interface SimilarityScoreMethod<T extends DataPoint> {
diff --git a/src/main/java/fr/irit/smac/clumate/event/NewClusterEvent.java b/src/main/java/fr/irit/smac/amas4dc/event/NewClusterEvent.java
similarity index 50%
rename from src/main/java/fr/irit/smac/clumate/event/NewClusterEvent.java
rename to src/main/java/fr/irit/smac/amas4dc/event/NewClusterEvent.java
index 2ef7580..8c71881 100644
--- a/src/main/java/fr/irit/smac/clumate/event/NewClusterEvent.java
+++ b/src/main/java/fr/irit/smac/amas4dc/event/NewClusterEvent.java
@@ -1,8 +1,8 @@
-package fr.irit.smac.clumate.event;
+package fr.irit.smac.amas4dc.event;
 
 import fr.irit.smac.amak.event.Event;
-import fr.irit.smac.clumate.cluster.Cluster;
-import fr.irit.smac.clumate.cluster.DataPoint;
+import fr.irit.smac.amas4dc.cluster.Cluster;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
 
 public record NewClusterEvent<T extends DataPoint>(Cluster<T> cluster) implements Event {
 }
diff --git a/src/main/java/fr/irit/smac/clumate/event/RemoveClusterEvent.java b/src/main/java/fr/irit/smac/amas4dc/event/RemoveClusterEvent.java
similarity index 51%
rename from src/main/java/fr/irit/smac/clumate/event/RemoveClusterEvent.java
rename to src/main/java/fr/irit/smac/amas4dc/event/RemoveClusterEvent.java
index 6137a81..be840a5 100644
--- a/src/main/java/fr/irit/smac/clumate/event/RemoveClusterEvent.java
+++ b/src/main/java/fr/irit/smac/amas4dc/event/RemoveClusterEvent.java
@@ -1,8 +1,8 @@
-package fr.irit.smac.clumate.event;
+package fr.irit.smac.amas4dc.event;
 
 import fr.irit.smac.amak.event.Event;
-import fr.irit.smac.clumate.cluster.Cluster;
-import fr.irit.smac.clumate.cluster.DataPoint;
+import fr.irit.smac.amas4dc.cluster.Cluster;
+import fr.irit.smac.amas4dc.cluster.DataPoint;
 
 public record RemoveClusterEvent<T extends DataPoint>(Cluster<T> cluster) implements Event {
 }
diff --git a/src/main/java/fr/irit/smac/clumate/CluMATE.java b/src/main/java/fr/irit/smac/clumate/CluMATE.java
deleted file mode 100644
index 8dfbabf..0000000
--- a/src/main/java/fr/irit/smac/clumate/CluMATE.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package fr.irit.smac.clumate;
-
-import fr.irit.smac.amak.event.EventStore;
-import fr.irit.smac.clumate.amas.MASSettings;
-import fr.irit.smac.clumate.amas.controller.CluMATEController;
-import fr.irit.smac.clumate.amas.controller.command.NewDataPointCommand;
-import fr.irit.smac.clumate.amas.controller.command.SolveCommand;
-import fr.irit.smac.clumate.amas.controller.query.Result;
-import fr.irit.smac.clumate.amas.controller.query.RetrieveClustersResultQuery;
-import fr.irit.smac.clumate.cluster.Cluster;
-import fr.irit.smac.clumate.cluster.DataPoint;
-
-import java.util.List;
-
-public class CluMATE<T extends DataPoint> {
-	private final CluMATEController<T> controller;
-
-	public CluMATE(MASSettings<T> masSettings) {
-		this.controller = new CluMATEController<T>(masSettings);
-	}
-	public void fit(List<T> data) {
-		controller.handle(new NewDataPointCommand<T>(data));
-		controller.handle(new SolveCommand());
-	}
-	public Result<T> retrieveClusters() {
-		return controller.handle(new RetrieveClustersResultQuery());
-	}
-}
diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/CluMATEController.java b/src/main/java/fr/irit/smac/clumate/amas/controller/CluMATEController.java
deleted file mode 100644
index 7f14015..0000000
--- a/src/main/java/fr/irit/smac/clumate/amas/controller/CluMATEController.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package fr.irit.smac.clumate.amas.controller;
-
-import fr.irit.smac.amak.event.EventStore;
-import fr.irit.smac.amak.scheduling.Scheduler;
-import fr.irit.smac.clumate.amas.controller.command.NewDataPointCommand;
-import fr.irit.smac.clumate.amas.controller.command.ShutdownCommand;
-import fr.irit.smac.clumate.amas.controller.command.SolveCommand;
-import fr.irit.smac.clumate.amas.controller.query.Result;
-import fr.irit.smac.clumate.amas.controller.query.RetrieveClustersResultQuery;
-import fr.irit.smac.clumate.amas.ClusterAMAS;
-import fr.irit.smac.clumate.amas.ClusterAgent;
-import fr.irit.smac.clumate.amas.ClusterEnvironment;
-import fr.irit.smac.clumate.amas.MASSettings;
-import fr.irit.smac.clumate.cluster.Cluster;
-import fr.irit.smac.clumate.cluster.DataPoint;
-import lombok.Getter;
-
-import java.util.concurrent.Executors;
-
-public class CluMATEController<T extends DataPoint> {
-	@Getter
-	private final ClusterEnvironment<T> environment;
-	@Getter
-	private final MASSettings<T> masSettings;
-	@Getter
-	private final ClusterAMAS<T> amas;
-	@Getter
-	private final Scheduler scheduler;
-
-	public CluMATEController(MASSettings<T> masSettings) {
-		this.masSettings = masSettings;
-		environment = new ClusterEnvironment<T>();
-		amas = new ClusterAMAS<T>(environment, masSettings);
-		scheduler = new Scheduler(Executors.newSingleThreadExecutor(), amas, environment);
-	}
-
-	public void handle(NewDataPointCommand<T> newDataPointCommand) {
-		environment.addDataPoints(newDataPointCommand.newDataPoints());
-	}
-
-	public void handle(SolveCommand solveCommand) {
-		scheduler.startWithSleepSync(0);
-	}
-
-	public void handle(ShutdownCommand shutdownCommand) {
-		scheduler.stop();
-	}
-
-	public Result<T> handle(RetrieveClustersResultQuery retrieveClustersResultQuery) {
-		var clusters = amas.getAgents(ClusterAgent.class).stream().map(agent -> ((ClusterAgent<T>) agent).getCluster()).toList();
-		return new Result<T>(clusters, masSettings);
-	}
-}
diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/command/Command.java b/src/main/java/fr/irit/smac/clumate/amas/controller/command/Command.java
deleted file mode 100644
index ed8e0ad..0000000
--- a/src/main/java/fr/irit/smac/clumate/amas/controller/command/Command.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package fr.irit.smac.clumate.amas.controller.command;
-
-public interface Command {
-}
diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/command/SolveCommand.java b/src/main/java/fr/irit/smac/clumate/amas/controller/command/SolveCommand.java
deleted file mode 100644
index 7af6bdf..0000000
--- a/src/main/java/fr/irit/smac/clumate/amas/controller/command/SolveCommand.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package fr.irit.smac.clumate.amas.controller.command;
-
-public record SolveCommand() implements Command {
-}
diff --git a/src/main/java/fr/irit/smac/clumate/amas/controller/query/Query.java b/src/main/java/fr/irit/smac/clumate/amas/controller/query/Query.java
deleted file mode 100644
index c6ae431..0000000
--- a/src/main/java/fr/irit/smac/clumate/amas/controller/query/Query.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package fr.irit.smac.clumate.amas.controller.query;
-
-public interface Query {
-}
diff --git a/src/test/groovy/SimpleClusteringIT.groovy b/src/test/groovy/SimpleClusteringIT.groovy
index a27cd58..ced6dec 100644
--- a/src/test/groovy/SimpleClusteringIT.groovy
+++ b/src/test/groovy/SimpleClusteringIT.groovy
@@ -1,22 +1,20 @@
-import fr.irit.smac.amak.event.EventStore
-import fr.irit.smac.clumate.CluMATE
-import fr.irit.smac.clumate.amas.AMASOption
-import fr.irit.smac.clumate.amas.MASSettings
-import fr.irit.smac.clumate.cluster.Cluster
-import fr.irit.smac.clumate.cluster.DataPoint
-import fr.irit.smac.clumate.cluster.SimilarityScoreMethod
+import fr.irit.smac.amas4dc.AMAS4DC
+import fr.irit.smac.amas4dc.amas.AMASOption
+import fr.irit.smac.amas4dc.amas.MASSettings
+import fr.irit.smac.amas4dc.cluster.DataPoint
+import fr.irit.smac.amas4dc.cluster.SimilarityScoreMethod
 import spock.lang.Specification
 
 class SimpleClusteringIT extends Specification {
 	def "Clustering of two similar 1D objects"() {
 		given:
-		def clumate = new CluMATE<OneDDataPoint>(new MASSettings(new OneDSimilarityScoreMethod(), 0.5f, EnumSet.noneOf(AMASOption), (OneDDataPoint dp1, OneDDataPoint dp2) -> {
+		def amas4dc = new AMAS4DC<OneDDataPoint>(new MASSettings(new OneDSimilarityScoreMethod(), 0.5f, EnumSet.noneOf(AMASOption), (OneDDataPoint dp1, OneDDataPoint dp2) -> {
 			return new OneDDataPoint(dp1.value + (dp2.value - dp1.value) * 0.1f)
 		}))
 
 		when:
-		clumate.fit([new OneDDataPoint(1), new OneDDataPoint(2)])
-		var results = clumate.retrieveClusters()
+		amas4dc.fit([new OneDDataPoint(1), new OneDDataPoint(2)])
+		var results = amas4dc.retrieveClusters()
 
 		then:
 		results.clusters().size() == 1
diff --git a/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy b/src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy
similarity index 69%
rename from src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy
rename to src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy
index 699e79b..c858fd5 100644
--- a/src/test/groovy/fr/irit/smac/clumate/amas/ClusterAgentTest.groovy
+++ b/src/test/groovy/fr/irit/smac/amas4dc/amas/ClusterAgentTest.groovy
@@ -1,14 +1,13 @@
-package fr.irit.smac.clumate.amas
+package fr.irit.smac.amas4dc.amas
+
 
-import fr.irit.smac.amak.event.EventStore
 import fr.irit.smac.amak.messaging.Mailbox
-import fr.irit.smac.amak.messaging.Message
-import fr.irit.smac.clumate.amas.messages.EvaluatedScoreMessage
-import fr.irit.smac.clumate.amas.messages.RequestSimilarityMessage
-import fr.irit.smac.clumate.cluster.Cluster
-import fr.irit.smac.clumate.cluster.DataPoint
-import fr.irit.smac.clumate.cluster.DataPointFuser
-import fr.irit.smac.clumate.cluster.SimilarityScoreMethod
+import fr.irit.smac.amas4dc.amas.messages.EvaluatedScoreMessage
+import fr.irit.smac.amas4dc.amas.messages.RequestSimilarityMessage
+import fr.irit.smac.amas4dc.cluster.Cluster
+import fr.irit.smac.amas4dc.cluster.DataPoint
+import fr.irit.smac.amas4dc.cluster.DataPointFuser
+import fr.irit.smac.amas4dc.cluster.SimilarityScoreMethod
 import spock.lang.Specification
 import spock.util.concurrent.BlockingVariable
 
@@ -20,9 +19,9 @@ class ClusterAgentTest extends Specification {
 		def similarityScoreMethodMock = Mock(SimilarityScoreMethod)
 		similarityScoreMethodMock.apply(_, _) >> 0.3
 
-		def amasMock = Mock(ClusterAMAS<DataPoint>)
+		def amasMock = Mock(DynamicClusteringAMAS<DataPoint>)
 		amasMock.getMasSettings() >> new MASSettings(similarityScoreMethodMock, 0.5f, EnumSet.noneOf(AMASOption), Mock(DataPointFuser))
-		amasMock.getEnvironment() >> Mock(ClusterEnvironment)
+		amasMock.getEnvironment() >> Mock(DynamicClusteringEnvironment)
 
 		def agent = new ClusterAgent(amasMock, Mock(DataPoint))
 		agent.state = ClusterAgent.State.DORMANT
-- 
GitLab