From 5848c58d2106b417ac37f680c559966eba1a9a18 Mon Sep 17 00:00:00 2001
From: Matias Mennecart <matias.mennecart.etu@univ-lille.fr>
Date: Fri, 18 Oct 2024 10:27:07 +0200
Subject: [PATCH] Ajouts des methodes de ClassificationModel

---
 pom.xml                                       |  2 +-
 .../fr/univlille/sae/classification/Main.java |  3 --
 .../model/ClassificationModel.java            | 36 +++++++++++++------
 .../sae/classification/model/DataType.java    |  7 ++++
 .../classification/model/LoadableData.java    | 13 ++++---
 .../classification/model/PointFactory.java    | 21 +++++++++++
 6 files changed, 64 insertions(+), 18 deletions(-)
 create mode 100644 src/main/java/fr/univlille/sae/classification/model/DataType.java
 create mode 100644 src/main/java/fr/univlille/sae/classification/model/PointFactory.java

diff --git a/pom.xml b/pom.xml
index 73ba586..fcff1e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
                 <artifactId>javafx-maven-plugin</artifactId>
                 <version>0.0.4</version>
                 <configuration>
-                    <mainClass>fr.univlille.sae.classification.view.MainStage</mainClass>
+                    <mainClass>fr.univlille.sae.classification.Main</mainClass>
                 </configuration>
             </plugin>
         </plugins>
diff --git a/src/main/java/fr/univlille/sae/classification/Main.java b/src/main/java/fr/univlille/sae/classification/Main.java
index 77fa80b..e3ee041 100644
--- a/src/main/java/fr/univlille/sae/classification/Main.java
+++ b/src/main/java/fr/univlille/sae/classification/Main.java
@@ -3,12 +3,9 @@ package fr.univlille.sae.classification;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.view.MainStageView;
 import javafx.application.Application;
-import javafx.fxml.FXMLLoader;
 import javafx.stage.Stage;
 
-import java.io.File;
 import java.io.IOException;
-import java.net.URL;
 
 public class Main extends Application {
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
index 2cdac80..b01a2d2 100644
--- a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
+++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
@@ -3,14 +3,12 @@ package fr.univlille.sae.classification.model;
 import com.opencsv.bean.CsvToBeanBuilder;
 import fr.univlille.sae.classification.utils.Observable;
 
+import javax.xml.crypto.Data;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
+import java.util.*;
 
 public class ClassificationModel extends Observable {
 
@@ -18,18 +16,28 @@ public class ClassificationModel extends Observable {
     private List<LoadableData> datas;
     private List<LoadableData> dataToClass;
 
+    private DataType type;
+
     public ClassificationModel() {
-        this.datas = new ArrayList<>();
+        this(DataType.IRIS);
+    }
 
+    public ClassificationModel(DataType type) {
+        this.datas = new ArrayList<>();
+        this.dataToClass = new ArrayList<>();
+        this.type = type;
     }
 
+
     /**
-     * TODO
-     * @param x
-     * @param y
+     * Ajoute un point au nuage de points avec toutes les données de ce point
+     * @param coords toutes les données du points
+     * @throws IllegalArgumentException Exception levée si le nombre de parametres est insuffisant pour creer un point du type du model
      */
-    private void ajouterDonnee(double x, double y) {
-
+    private void ajouterDonnee(double... coords) {
+        LoadableData newData = PointFactory.createPoint(type, coords);
+        this.dataToClass.add(newData);
+        notifyObservers(newData);
     }
 
 
@@ -42,6 +50,13 @@ public class ClassificationModel extends Observable {
                 .withSeparator(',')
                 .withType(Iris.class)
                 .build().parse();
+        Set<String> types = new HashSet<>();
+        for (LoadableData d : datas) {
+            types.add(d.getClassification());
+        }
+
+        LoadableData.setClassificationTypes(types);
+        notifyObservers();
     }
 
     /**
@@ -53,6 +68,7 @@ public class ClassificationModel extends Observable {
         List<String> classes = new ArrayList<>(data.getClassificationTypes());
         Random rdm = new Random();
         data.setClassification(classes.get(rdm.nextInt(classes.size())));
+        notifyObservers(data);
 
     }
 }
diff --git a/src/main/java/fr/univlille/sae/classification/model/DataType.java b/src/main/java/fr/univlille/sae/classification/model/DataType.java
new file mode 100644
index 0000000..1f775b4
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/model/DataType.java
@@ -0,0 +1,7 @@
+package fr.univlille.sae.classification.model;
+
+public enum DataType {
+
+    IRIS;
+
+}
diff --git a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
index 4de0abe..27678aa 100644
--- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
+++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
@@ -2,23 +2,28 @@ package fr.univlille.sae.classification.model;
 
 import java.util.Set;
 
-public class LoadableData {
+public abstract class LoadableData {
 
     private static Set<String> classificationTypes;
 
     private String classification;
 
 
-    public LoadableData() {
+    protected LoadableData() {
 
     }
     public String getClassification() {
         return this.classification;
     }
-    Set<String> getClassificationTypes() {
+    public static Set<String> getClassificationTypes() {
         return classificationTypes;
     }
-    void setClassification(String classification) {
+
+    public static void setClassificationTypes(Set<String> classificationTypes) {
+        LoadableData.classificationTypes = classificationTypes;
+    }
+
+    public void setClassification(String classification) {
         this.classification = classification;
     }
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/PointFactory.java b/src/main/java/fr/univlille/sae/classification/model/PointFactory.java
new file mode 100644
index 0000000..7ee05ec
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/model/PointFactory.java
@@ -0,0 +1,21 @@
+package fr.univlille.sae.classification.model;
+
+public class PointFactory {
+
+
+    public static LoadableData createPoint(DataType type, double[] coords)  {
+
+        int size = coords.length;
+        LoadableData data;
+        switch (type) {
+            case IRIS:
+                if(size != 4) throw new IllegalArgumentException();
+                data = new Iris(coords[0],coords[1],coords[2],coords[3]);
+                break;
+            default:
+                throw new IllegalArgumentException();
+        }
+
+        return data;
+    }
+}
-- 
GitLab