From 7d221e900fba3e3d0a8e1e5c646793c0757207f4 Mon Sep 17 00:00:00 2001
From: Matias Mennecart <matias.mennecart.etu@univ-lille.fr>
Date: Fri, 25 Oct 2024 11:10:20 +0200
Subject: [PATCH] Optimisations et fix de bugs

---
 res/stages/data-view-stage.fxml               | 33 ++++-----
 res/stages/display-settings-stage.fxml        | 25 -------
 .../controller/AddDataController.java         | 13 ++--
 .../controller/AxesSettingsController.java    |  3 -
 .../controller/DataStageController.java       | 36 +---------
 .../controller/DisplaySettingsController.java | 19 -----
 .../controller/LoadDataController.java        | 10 +--
 .../controller/MainStageController.java       | 20 +-----
 .../model/ClassificationModel.java            |  5 +-
 .../sae/classification/model/Iris.java        |  7 +-
 .../classification/model/LoadableData.java    |  4 --
 .../sae/classification/view/AddDataView.java  |  1 -
 .../classification/view/AxesSettingsView.java |  3 -
 .../classification/view/DataStageView.java    | 70 ++++++++++++++-----
 .../classification/view/MainStageView.java    | 42 +++++++----
 15 files changed, 110 insertions(+), 181 deletions(-)
 delete mode 100644 res/stages/display-settings-stage.fxml
 delete mode 100644 src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java

diff --git a/res/stages/data-view-stage.fxml b/res/stages/data-view-stage.fxml
index 7adaf2e..6ad4174 100644
--- a/res/stages/data-view-stage.fxml
+++ b/res/stages/data-view-stage.fxml
@@ -1,20 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<?import javafx.geometry.*?>
-<?import javafx.scene.*?>
-<?import javafx.scene.chart.*?>
-<?import javafx.scene.control.*?>
-<?import javafx.scene.image.*?>
-<?import javafx.scene.layout.*?>
-<?import javafx.scene.text.*?>
-<?import javafx.stage.*?>
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.Scene?>
+<?import javafx.scene.chart.NumberAxis?>
+<?import javafx.scene.chart.ScatterChart?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.image.Image?>
+<?import javafx.scene.image.ImageView?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.Region?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.scene.text.Font?>
+<?import javafx.stage.Stage?>
 
-<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DataStageController">
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DataStageController">
     <scene>
         <Scene>
-            <AnchorPane prefHeight="487.0" prefWidth="692.0">
+            <AnchorPane prefHeight="380.0" prefWidth="692.0">
             <children>
-               <VBox prefHeight="488.0" prefWidth="691.0">
+               <VBox prefHeight="399.0" prefWidth="691.0">
                   <children>
                      <HBox alignment="TOP_CENTER" prefHeight="356.0" prefWidth="691.0" spacing="5.0">
                         <children>
@@ -52,11 +58,6 @@
                             </Button>
                         </children>
                      </HBox>
-                     <HBox alignment="CENTER" prefHeight="169.0" prefWidth="691.0" spacing="50.0">
-                        <children>
-                           <Button fx:id="classifyData" disable="true" mnemonicParsing="false" onAction="#classifyDatas" prefHeight="26.0" prefWidth="157.0" text="Classifier les données" />
-                        </children>
-                     </HBox>
                   </children>
                </VBox>
             </children></AnchorPane>
diff --git a/res/stages/display-settings-stage.fxml b/res/stages/display-settings-stage.fxml
deleted file mode 100644
index acc017f..0000000
--- a/res/stages/display-settings-stage.fxml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<?import javafx.scene.*?>
-<?import javafx.scene.control.*?>
-<?import javafx.scene.layout.*?>
-<?import javafx.stage.*?>
-
-<Stage  fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DisplaySettingsController">
-    <scene>
-        <Scene>
-            <AnchorPane prefHeight="200" prefWidth="200">
-            <children>
-               <VBox alignment="CENTER" layoutY="1.0" prefHeight="292.0" prefWidth="438.0" spacing="30.0">
-                  <children>
-                     <HBox alignment="CENTER" prefHeight="58.0" prefWidth="294.0" spacing="20.0">
-                        <children>
-                           <Label text="Nouvel ajout" />
-                           <ColorPicker fx:id="addColor" editable="true" />
-                        </children></HBox>
-                     <Button fx:id="confirmSettings" mnemonicParsing="false" text="Valider" />
-                  </children></VBox>
-            </children></AnchorPane>
-        </Scene>
-    </scene>
-</Stage>
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
index 1a690a0..1780525 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
@@ -1,25 +1,19 @@
 package fr.univlille.sae.classification.controller;
 
 import fr.univlille.sae.classification.model.ClassificationModel;
-import fr.univlille.sae.classification.model.Iris;
-import fr.univlille.sae.classification.view.DataVisualizationView;
 import fr.univlille.sae.classification.view.MainStageView;
 import javafx.fxml.FXML;
-import javafx.scene.control.*;
+import javafx.scene.control.Spinner;
+import javafx.scene.control.SpinnerValueFactory;
 import javafx.stage.Stage;
 
 import java.io.IOException;
-import java.text.ParseException;
-import java.util.function.UnaryOperator;
 
 public class AddDataController {
 
     @FXML
     private Stage stage;
 
-    @FXML
-    private Button confirmAdd;
-
     @FXML
     private Spinner<Double> sepalLengthSpinner;
 
@@ -36,6 +30,7 @@ public class AddDataController {
 
     @FXML
     public void initialize() {
+
         sepalLengthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0,0.1));
         sepalWidthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0, 0.1));
         petalLengthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0, 0.1));
@@ -53,7 +48,7 @@ public class AddDataController {
         this.mainStageView = mainStageView;
     }
 
-    public void validate() throws IOException {
+    public void validate() {
         System.out.println("validé");
         mainStageView.getController().getClassifyData().setDisable(false);
 
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
index 16c52b1..ccb845d 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
@@ -1,6 +1,5 @@
 package fr.univlille.sae.classification.controller;
 
-import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.view.DataVisualizationView;
 import javafx.fxml.FXML;
 import javafx.scene.control.Button;
@@ -18,8 +17,6 @@ public class AxesSettingsController{
     @FXML
     ChoiceBox selectAbs;
 
-    @FXML
-    Button confirmAxes;
 
     DataVisualizationView dataVisualizationView;
 
diff --git a/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
index 2c561a9..2de3bff 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
@@ -1,11 +1,10 @@
 package fr.univlille.sae.classification.controller;
 
 import fr.univlille.sae.classification.model.ClassificationModel;
-import fr.univlille.sae.classification.view.*;
+import fr.univlille.sae.classification.view.AxesSettingsView;
+import fr.univlille.sae.classification.view.DataStageView;
 import javafx.fxml.FXML;
-import javafx.scene.chart.NumberAxis;
 import javafx.scene.chart.ScatterChart;
-import javafx.scene.control.Button;
 import javafx.scene.control.Label;
 import javafx.stage.Stage;
 
@@ -16,38 +15,14 @@ public class DataStageController {
     @FXML
     Stage stage;
 
-    @FXML
-    NumberAxis absAxe;
-
-    @FXML
-    NumberAxis ordAxe;
-
-    @FXML
-    Button settings;
-
-    @FXML
-    Button loadData;
-
-    @FXML
-    Button classifyData;
-
     @FXML
     ScatterChart scatterChart;
 
     @FXML
     Label AxesSelected;
 
-    Stage loadStage;
     private DataStageView dataStageView;
 
-    /**
-     * Ouvre l'interface de chargement des données.
-     * @throws IOException
-     */
-    public void openLoadData() throws IOException {
-        LoadDataView loadDataView = new LoadDataView(ClassificationModel.getClassificationModel(), stage);
-        loadDataView.show();
-    }
 
     public void openAxesSetting()throws IOException {
         AxesSettingsView axesSettingsView = new AxesSettingsView(ClassificationModel.getClassificationModel(), stage, dataStageView);
@@ -58,10 +33,6 @@ public class DataStageController {
         this.dataStageView = dataStageView;
     }
 
-    public void classifyDatas() {
-        ClassificationModel.getClassificationModel().classifierDonnees();
-        classifyData.setDisable(true);
-    }
 
 
     public ScatterChart getScatterChart() {
@@ -72,7 +43,4 @@ public class DataStageController {
         this.AxesSelected.setText(texte);
     }
 
-    public Button getClassifyData() {
-        return this.classifyData;
-    }
 }
diff --git a/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java
deleted file mode 100644
index 203a5ae..0000000
--- a/src/main/java/fr/univlille/sae/classification/controller/DisplaySettingsController.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package fr.univlille.sae.classification.controller;
-
-import javafx.fxml.FXML;
-import javafx.scene.control.Button;
-import javafx.scene.control.ColorPicker;
-import javafx.stage.Stage;
-
-public class DisplaySettingsController {
-    @FXML
-    Stage stage;
-
-    @FXML
-    Button confirmSettings;
-
-    @FXML
-    ColorPicker addColor;
-
-
-}
diff --git a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
index 902fb93..934ab41 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
@@ -4,7 +4,6 @@ import fr.univlille.sae.classification.model.ClassificationModel;
 import javafx.fxml.FXML;
 import javafx.scene.control.Alert;
 import javafx.scene.control.Button;
-import javafx.scene.control.Label;
 import javafx.scene.control.TextField;
 import javafx.stage.FileChooser;
 import javafx.stage.Stage;
@@ -18,11 +17,6 @@ public class LoadDataController {
     @FXML
     Stage stage;
 
-    @FXML
-    Button browseFile;
-
-    @FXML
-    Button confirmDataSelection;
 
     @FXML
     TextField filePath;
@@ -45,7 +39,7 @@ public class LoadDataController {
 
     public void validate() throws IOException {
 
-        if (file == null) {
+        if (file == null || file.isDirectory() || !file.exists()) {
             Alert alert = new Alert(Alert.AlertType.ERROR);
             alert.setTitle("Erreur de chargement du fichier");
             alert.setHeaderText(null);
@@ -54,8 +48,8 @@ public class LoadDataController {
             alert.showAndWait();
             openFileChooser();
             return;
-            //throw exception
         }
+
         ClassificationModel.getClassificationModel().loadData(file);
         stage.close();
     }
diff --git a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
index bf8ab81..d7d3d6d 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
@@ -3,12 +3,10 @@ package fr.univlille.sae.classification.controller;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.view.*;
 import javafx.fxml.FXML;
-
-import javafx.scene.chart.*;
+import javafx.scene.chart.ScatterChart;
 import javafx.scene.control.Button;
 import javafx.scene.control.Label;
-import javafx.stage.*;
-
+import javafx.stage.Stage;
 
 import java.io.IOException;
 
@@ -19,20 +17,7 @@ public class MainStageController {
     @FXML
     Stage stage;
 
-    @FXML
-    NumberAxis absAxe;
-
-    @FXML
-    NumberAxis ordAxe;
-
-    @FXML
-    Button settings;
 
-    @FXML
-    Button loadData;
-
-    @FXML
-    Button addData;
 
     @FXML
     Button classifyData;
@@ -44,7 +29,6 @@ public class MainStageController {
     Label AxesSelected;
 
 
-    Stage loadStage;
     private MainStageView mainStageView;
 
     /**
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 8e5f9f1..86d57ff 100644
--- a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
+++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
@@ -3,13 +3,10 @@ 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.*;
-import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 
@@ -88,7 +85,7 @@ public class ClassificationModel extends Observable {
      */
     private void classifierDonnee(LoadableData data) {
 
-        List<String> classes = new ArrayList<>(data.getClassificationTypes());
+        List<String> classes = new ArrayList<>(LoadableData.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/Iris.java b/src/main/java/fr/univlille/sae/classification/model/Iris.java
index f71fe89..4e66869 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Iris.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java
@@ -1,10 +1,8 @@
 package fr.univlille.sae.classification.model;
 
-import com.opencsv.bean.*;
+import com.opencsv.bean.CsvBindByName;
 import javafx.scene.paint.Color;
 
-import java.util.Random;
-
 public class Iris extends LoadableData{
 
 
@@ -91,13 +89,12 @@ public class Iris extends LoadableData{
     }
 
     public String[] getAttributesName() {
-        String[] names = new String[]{
+        return new String[]{
                 "sepalLength",
                 "sepalWidth",
                 "petalLength",
                 "petalWidth"
         };
-        return names;
     }
 
     @Override
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 033890f..745e009 100644
--- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
+++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
@@ -13,10 +13,6 @@ public abstract class LoadableData {
 
     }
 
-    public void addClassification(String classificationType) {
-        this.classificationTypes.add(classificationType);
-    }
-
     public abstract String getClassification() ;
 
     public static Set<String> getClassificationTypes() {
diff --git a/src/main/java/fr/univlille/sae/classification/view/AddDataView.java b/src/main/java/fr/univlille/sae/classification/view/AddDataView.java
index 8b404aa..a840505 100644
--- a/src/main/java/fr/univlille/sae/classification/view/AddDataView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/AddDataView.java
@@ -1,7 +1,6 @@
 package fr.univlille.sae.classification.view;
 
 import fr.univlille.sae.classification.controller.AddDataController;
-import fr.univlille.sae.classification.controller.AxesSettingsController;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.control.Alert;
diff --git a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
index 2a1f234..31d9fa2 100644
--- a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
@@ -1,8 +1,6 @@
 package fr.univlille.sae.classification.view;
 
 import fr.univlille.sae.classification.controller.AxesSettingsController;
-import fr.univlille.sae.classification.controller.DataStageController;
-import fr.univlille.sae.classification.controller.MainStageController;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.LoadableData;
 import javafx.fxml.FXMLLoader;
@@ -10,7 +8,6 @@ import javafx.scene.control.Alert;
 import javafx.stage.Modality;
 import javafx.stage.Stage;
 
-import javax.xml.crypto.Data;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
diff --git a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
index 2cf2f84..1bf77d5 100644
--- a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
@@ -1,19 +1,20 @@
 package fr.univlille.sae.classification.view;
 
 import fr.univlille.sae.classification.controller.DataStageController;
-import fr.univlille.sae.classification.controller.MainStageController;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.DataType;
 import fr.univlille.sae.classification.model.Iris;
 import fr.univlille.sae.classification.model.LoadableData;
 import fr.univlille.sae.classification.utils.Observable;
 import fr.univlille.sae.classification.utils.Observer;
+import javafx.collections.ObservableList;
 import javafx.fxml.FXMLLoader;
-import javafx.scene.chart.ScatterChart;
 import javafx.scene.chart.XYChart;
 import javafx.scene.control.ContextMenu;
 import javafx.scene.control.MenuItem;
 import javafx.scene.shape.Circle;
+import javafx.scene.shape.Rectangle;
+import javafx.scene.shape.Shape;
 import javafx.stage.Stage;
 
 import java.io.File;
@@ -27,10 +28,21 @@ public class DataStageView extends DataVisualizationView implements Observer {
     private ClassificationModel model;
     private DataStageController controller;
 
+
+    private XYChart.Series series1 ;
+    private XYChart.Series series2 ;
+    private XYChart.Series series3 ;
+    private XYChart.Series series4 ;
+
     private Stage root;
 
     public DataStageView(ClassificationModel model) {
+        super();
         this.model = model;
+        this.series1 = new XYChart.Series();
+        this.series2 = new XYChart.Series();
+        this.series3 = new XYChart.Series();
+        this.series4 = new XYChart.Series();
         model.attach(this);
     }
 
@@ -52,6 +64,12 @@ public class DataStageView extends DataVisualizationView implements Observer {
         controller = loader.getController();
         controller.setDataStageView(this);
         scatterChart = controller.getScatterChart();
+
+        scatterChart.getData().addAll(series4, series1, series2, series3 );
+
+
+
+        System.out.println("DataStageView scatter chart: " +scatterChart);
         controller.setAxesSelected("Aucun fichier sélectionné");
 
         if (!model.getDatas().isEmpty()) {
@@ -64,10 +82,10 @@ public class DataStageView extends DataVisualizationView implements Observer {
         if(scatterChart == null) throw new IllegalStateException();
         if(!(observable instanceof ClassificationModel)) throw new IllegalStateException();
         //on vide le nuage pour s'assurer que celui-ci est bien vide
-        scatterChart.getData().clear();
+        ObservableList<XYChart.Series> series = scatterChart.getData();
+        for(XYChart.Series serie: series) {serie.getData().clear();}
+
 
-        XYChart.Series series1 = new XYChart.Series();
-        series1.setName("Iris");
 
         //Jalon 1: on verifie que le type de donnée est bien IRIS
         if(model.getType() == DataType.IRIS) {
@@ -76,8 +94,6 @@ public class DataStageView extends DataVisualizationView implements Observer {
             }
             else{
                 controller.setAxesSelected("");
-                // On ajoute la serie au nuage
-                scatterChart.getData().add(series1);
 
                 //On recupere les données du model
                 List<LoadableData> points = new ArrayList<>(model.getDatas());
@@ -89,9 +105,29 @@ public class DataStageView extends DataVisualizationView implements Observer {
                     XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(iris.getDataType(actualX),
                             iris.getDataType(actualY));
 
-                    dataPoint.setNode(getCircle(iris));
-
-                    series1.getData().add(dataPoint);
+                    dataPoint.setNode(getForm(iris, new Circle(5)));
+
+                    switch (iris.getClassification()) {
+                        case "Setosa":
+                            series1.getData().add(dataPoint);
+                            break;
+                        case "Versicolor":
+                            series2.getData().add(dataPoint);
+                            break;
+                        case "Virginica":
+                            series3.getData().add(dataPoint);
+                            break;
+                        default:
+                            dataPoint.setNode(getForm(iris, new Rectangle(10, 10)));
+                            series4.getData().add(dataPoint);
+                            break;
+                    }
+
+
+                    series1.setName("Setosa");
+                    series2.setName("Versicolor");
+                    series3.setName("Virginica");
+                    series4.setName("undefinied");
 
                 }
             }
@@ -99,10 +135,9 @@ public class DataStageView extends DataVisualizationView implements Observer {
     }
 
 
-    private Circle getCircle(Iris iris) {
-        Circle circle = new Circle(5);
-        circle.setFill(iris.getColor());
-        circle.setOnMouseClicked(e -> {
+    private Shape getForm(Iris iris, Shape form) {
+        form.setFill(iris.getColor());
+        form.setOnMouseClicked(e -> {
             ContextMenu contextMenu = new ContextMenu();
             for(String attributes : iris.getAttributesName()) {
                 contextMenu.getItems().add(new MenuItem(attributes + " : " + iris.getDataType(attributes)));
@@ -110,7 +145,7 @@ public class DataStageView extends DataVisualizationView implements Observer {
             contextMenu.show(root, e.getScreenX(), e.getScreenY());
         });
 
-        return  circle;
+        return form;
     }
 
 
@@ -130,10 +165,9 @@ public class DataStageView extends DataVisualizationView implements Observer {
                     iris.getDataType(actualY)
             );
 
-            dataPoint.setNode(getCircle(iris));
+            dataPoint.setNode(getForm(iris, new Rectangle(10, 10)));
             if (!scatterChart.getData().isEmpty()) {
-                XYChart.Series series = (XYChart.Series) scatterChart.getData().get(0);
-                series.getData().add(dataPoint);
+                series4.getData().add(dataPoint);
             }
         }
     }
diff --git a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
index 11a4f6a..1eb8794 100644
--- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
@@ -1,6 +1,5 @@
 package fr.univlille.sae.classification.view;
 
-import fr.univlille.sae.classification.controller.LoadDataController;
 import fr.univlille.sae.classification.controller.MainStageController;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.DataType;
@@ -8,13 +7,12 @@ import fr.univlille.sae.classification.model.Iris;
 import fr.univlille.sae.classification.model.LoadableData;
 import fr.univlille.sae.classification.utils.Observable;
 import fr.univlille.sae.classification.utils.Observer;
-import javafx.application.Application;
-import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
-import javafx.scene.chart.ScatterChart;
 import javafx.scene.chart.XYChart;
-import javafx.scene.control.*;
-import javafx.scene.paint.Color;
+import javafx.scene.control.Alert;
+import javafx.scene.control.ButtonType;
+import javafx.scene.control.ContextMenu;
+import javafx.scene.control.MenuItem;
 import javafx.scene.shape.Circle;
 import javafx.scene.shape.Rectangle;
 import javafx.scene.shape.Shape;
@@ -23,7 +21,9 @@ import javafx.stage.Stage;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
 
 public class MainStageView extends DataVisualizationView implements Observer {
 
@@ -32,7 +32,9 @@ public class MainStageView extends DataVisualizationView implements Observer {
 
     private Stage root;
 
+
     public MainStageView(ClassificationModel model) {
+        super();
         this.model = model;
         model.attach(this);
     }
@@ -68,7 +70,10 @@ public class MainStageView extends DataVisualizationView implements Observer {
         loader.getController();
         controller = loader.getController();
         controller.setMainStageView(this);
+
         scatterChart = controller.getScatterChart();
+
+        System.out.println("DataStageView scatter chart: " +scatterChart );
         controller.setAxesSelected("Aucun fichier sélectionné");
 
     }
@@ -83,6 +88,7 @@ public class MainStageView extends DataVisualizationView implements Observer {
         XYChart.Series series1 = new XYChart.Series();
         XYChart.Series series2 = new XYChart.Series();
         XYChart.Series series3 = new XYChart.Series();
+        XYChart.Series series4 = new XYChart.Series();
 
 
 
@@ -106,12 +112,19 @@ public class MainStageView extends DataVisualizationView implements Observer {
 
                     dataPoint.setNode(getForm(iris, new Circle(5)));
 
-                    if(iris.getClassification().equals("Setosa")){
-                        series1.getData().add(dataPoint);
-                    }else if(iris.getClassification().equals("Versicolor")){
-                        series2.getData().add(dataPoint);
-                    }else if(iris.getClassification().equals("Virginica")){
-                        series3.getData().add(dataPoint);
+                    switch (iris.getClassification()) {
+                        case "Setosa":
+                            series1.getData().add(dataPoint);
+                            break;
+                        case "Versicolor":
+                            series2.getData().add(dataPoint);
+                            break;
+                        case "Virginica":
+                            series3.getData().add(dataPoint);
+                            break;
+                        default:
+                            series4.getData().add(dataPoint);
+                            break;
                     }
 
                 }
@@ -119,8 +132,9 @@ public class MainStageView extends DataVisualizationView implements Observer {
                 series1.setName("Setosa");
                 series2.setName("Versicolor");
                 series3.setName("Virginica");
+                series4.setName("undefinied");
 
-                scatterChart.getData().addAll(series1, series2, series3);
+                scatterChart.getData().addAll(series1, series2, series3, series4);
             }
         }
     }
-- 
GitLab