diff --git a/res/stages/data-view-stage.fxml b/res/stages/data-view-stage.fxml index 7adaf2e98d4a5a148fa0e36cdce53bb08f9e63ca..6ad4174e2246a0cc5d9f52d375431df8d5f87762 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 acc017fdecae5194a5efd858edf264166d7723df..0000000000000000000000000000000000000000 --- 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 ea7510eb725f6d9df947505259c4bba0f4c68d32..f2b44f3f9084fdd4c70e470e6218c77585849586 100644 --- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java +++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java @@ -3,7 +3,8 @@ package fr.univlille.sae.classification.controller; import fr.univlille.sae.classification.model.ClassificationModel; 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; @@ -16,9 +17,6 @@ public class AddDataController { @FXML private Stage stage; - @FXML - private Button confirmAdd; - @FXML private Spinner<Double> sepalLengthSpinner; @@ -41,6 +39,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)); @@ -61,11 +60,10 @@ public class AddDataController { public void setMainStageView(MainStageView mainStageView) { this.mainStageView = mainStageView; } - /** * Validation des données à ajouter */ - 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 c04f311d882ce64c4894ffce206ef565a7c9fccd..88b726cd126eba3e81c11d587905bfb035586b91 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; @@ -20,8 +19,6 @@ public class AxesSettingsController{ @FXML ChoiceBox selectAbs; - @FXML - Button confirmAxes; /** * DataVisualizationView associé au controlleur 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 926b167a478fe71ead37aaab5e91df1e82e400f8..acc6a45394c82e88bba20c100a3ee967a80a620c 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; @@ -18,9 +17,6 @@ public class DataStageController { @FXML Stage stage; - @FXML - Button classifyData; - @FXML ScatterChart scatterChart; @@ -34,6 +30,7 @@ public class DataStageController { /** * Ouvrir les paramètres des axes de la vue + * @throws IOException */ public void openAxesSetting()throws IOException { AxesSettingsView axesSettingsView = new AxesSettingsView(ClassificationModel.getClassificationModel(), stage, dataStageView); @@ -49,11 +46,6 @@ public class DataStageController { } - public void classifyDatas() { - ClassificationModel.getClassificationModel().classifierDonnees(); - classifyData.setDisable(true); - } - /** * Renvoie la grille associé à la classe * @return grille de la classe 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 203a5ae46369368f57485f3db4a120b7c69517cd..0000000000000000000000000000000000000000 --- 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 8ca5ee8a174d784f074ca2af58dbd5f818469b30..b0009cecf85c5c2900d539b11ffe04ba4a64ff6e 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; @@ -51,7 +45,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); @@ -60,8 +54,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 4013b83d1e65bbc29004d92aee1c452da56409f0..9b468c2296dce5d90765c04ea35bc34f9119532d 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 8e5f9f110d98f6a657aa882db786ec2ad320cfac..86d57ff5db5742371bf80d64c7955af3ec48c46f 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 f71fe890c7154f3d7fae2ecffbc335d13db71fe6..4e6686907b00d59aacd2c232d209980bf514fe6a 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 83c23f00cc9202da68c9fe9f12b9037f1f46c77b..28b6b9d4675bf85498238dbfd63924f2528b65df 100644 --- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java +++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java @@ -12,10 +12,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/DataStageView.java b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java index 57b5e6d351ad34b71bbc61145522ad2df340029f..1d3c3f1109e9f79afd466a1a4e7cdac5902d0d7f 100644 --- a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java +++ b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java @@ -7,12 +7,14 @@ 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 fr.univlille.sae.classification.utils.ViewUtil; import javafx.fxml.FXMLLoader; -import javafx.scene.chart.ScatterChart; import javafx.scene.chart.XYChart; import javafx.scene.shape.Circle; import javafx.scene.shape.Rectangle; +import javafx.scene.shape.Shape; +import javafx.scene.shape.Rectangle; import javafx.stage.Stage; import java.io.File; @@ -25,10 +27,22 @@ 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); } @@ -38,19 +52,26 @@ public class DataStageView extends DataVisualizationView implements Observer { try { URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "data-view-stage.fxml").toURI().toURL(); - if (fxmlFileUrl == null) { - System.out.println("Impossible de charger le fichier fxml"); - System.exit(-1); - } - loader.setLocation(fxmlFileUrl); - root = loader.load(); - root.setResizable(false); - root.setTitle("SAE3.3 - Logiciel de classification"); - root.show(); - controller = loader.getController(); - controller.setDataStageView(this); - scatterChart = controller.getScatterChart(); - controller.setAxesSelected("Aucun fichier sélectionné"); + if (fxmlFileUrl == null) { + System.out.println("Impossible de charger le fichier fxml"); + System.exit(-1); + } + loader.setLocation(fxmlFileUrl); + root = loader.load(); + root.setResizable(false); + root.setTitle("SAE3.3 - Logiciel de classification"); + root.show(); + loader.getController(); + 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()) { update(model); @@ -70,51 +91,61 @@ public class DataStageView extends DataVisualizationView implements Observer { // On vide le nuage pour s'assurer qu'il est bien vide scatterChart.getData().clear(); - // Jalon 1: on vérifie que le type de donnée est bien IRIS - if (model.getType() == DataType.IRIS) { - XYChart.Series<Double, Double> series1 = new XYChart.Series<>(); - XYChart.Series<Double, Double> series2 = new XYChart.Series<>(); - XYChart.Series<Double, Double> series3 = new XYChart.Series<>(); - if (actualX == null && actualY == null) { - controller.setAxesSelected("Aucuns axes sélectionnés"); - } else { - controller.setAxesSelected(""); - // On récupère les données du modèle - List<LoadableData> points = new ArrayList<>(model.getDatas()); - points.addAll(model.getDataToClass()); - // On ajoute chaque point à la série - for (LoadableData i : points) { - Iris iris = (Iris) i; - XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>( - iris.getDataType(actualX), - iris.getDataType(actualY) - ); + + + //Jalon 1: on verifie que le type de donnée est bien IRIS + if(model.getType() == DataType.IRIS) { + if(actualX==null && actualY==null){ + controller.setAxesSelected("Aucuns axes sélectionnés"); + } + else{ + controller.setAxesSelected(""); + + //On recupere les données du model + List<LoadableData> points = new ArrayList<>(model.getDatas()); + points.addAll(model.getDataToClass()); + // on ajoute chaque point a la serie + for(LoadableData i : points) { + + Iris iris = (Iris)i; + XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(iris.getDataType(actualX), + iris.getDataType(actualY)); dataPoint.setNode(ViewUtil.getForm(iris, new Circle(5), root)); - switch (iris.getClassification()) { - case "Setosa": - series1.getData().add(dataPoint); - break; - case "Versicolor": - series2.getData().add(dataPoint); - break; - case "Virginica": - series3.getData().add(dataPoint); - break; - } + 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"); scatterChart.getData().addAll(series1, series2, series3); } } + + } } catch (Exception e) { System.err.println("Erreur de mise à jour : " + e.getMessage()); } + + + } @Override @@ -135,12 +166,11 @@ public class DataStageView extends DataVisualizationView implements Observer { iris.getDataType(actualY) ); - dataPoint.setNode(ViewUtil.getForm(iris, new Rectangle(10, 10), root)); - if (!scatterChart.getData().isEmpty()) { - XYChart.Series<Double, Double> series = (XYChart.Series<Double, Double>) scatterChart.getData().get(0); - series.getData().add(dataPoint); - } + dataPoint.setNode(ViewUtil.getForm(iris, new Rectangle(10, 10))); + if (!scatterChart.getData().isEmpty()) { + series4.getData().add(dataPoint); } + } } catch (Exception e) { System.err.println("Erreur de mise à jour : " + e.getMessage()); } 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 a429e235d6cc6f2e5cb3ca6926aa58f3959436e3..daf7d8cf99b39d8e13dd69d4de808745ff20bd5a 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; @@ -10,13 +9,14 @@ import fr.univlille.sae.classification.utils.Observable; import fr.univlille.sae.classification.utils.Observer; import fr.univlille.sae.classification.utils.ViewUtil; import javafx.application.Application; +import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; -import javafx.scene.chart.ScatterChart; import javafx.scene.chart.XYChart; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; -import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Rectangle; import javafx.scene.shape.Shape; @@ -25,7 +25,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 { @@ -34,7 +36,18 @@ public class MainStageView extends DataVisualizationView implements Observer { private Stage root; + private XYChart.Series series1 ; + private XYChart.Series series2 ; + private XYChart.Series series3; + private XYChart.Series series4 ; + public MainStageView(ClassificationModel model) { + super(); + this.series1 = new XYChart.Series(); + this.series2 = new XYChart.Series(); + this.series3 = new XYChart.Series(); + this.series4 = new XYChart.Series(); + this.model = model; model.attach(this); } @@ -46,20 +59,37 @@ public class MainStageView extends DataVisualizationView implements Observer { try { URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "main-stage.fxml").toURI().toURL(); - if (fxmlFileUrl == null) { - System.out.println("Impossible de charger le fichier fxml"); - System.exit(-1); + if (fxmlFileUrl == null) { + System.out.println("Impossible de charger le fichier fxml"); + System.exit(-1); + } + loader.setLocation(fxmlFileUrl); + root = loader.load(); + root.setResizable(false); + root.setTitle("SAE3.3 - Logiciel de classification"); + root.show(); + root.setOnCloseRequest(event -> { + Alert alert = new Alert(Alert.AlertType.CONFIRMATION); + alert.setTitle("Confirmation"); + alert.setHeaderText("Voulez vous quitter l'application ?"); + alert.setContentText("Aucunes modifications ne sera sauvegardé ! Les points qui ont été ajoutés ne seront pas sauvegardés"); + Optional<ButtonType> optionalButtonType = alert.showAndWait(); + if(optionalButtonType.isPresent() && optionalButtonType.get() == ButtonType.OK) { + System.exit(0); + }else { + event.consume(); } - loader.setLocation(fxmlFileUrl); - root = loader.load(); - root.setResizable(false); - root.setTitle("SAE3.3 - Logiciel de classification"); - root.show(); - loader.getController(); - controller = loader.getController(); - controller.setMainStageView(this); - scatterChart = controller.getScatterChart(); - controller.setAxesSelected("Aucun fichier sélectionné"); + + }); + loader.getController(); + controller = loader.getController(); + controller.setMainStageView(this); + + scatterChart = controller.getScatterChart(); + scatterChart.getData().addAll(series1, series2, series3); + + System.out.println("DataStageView scatter chart: " +scatterChart ); + controller.setAxesSelected("Aucun fichier sélectionné"); } catch (IOException e) { System.err.println("Erreur lors du chargement du fichier FXML : " + e.getMessage()); @@ -75,17 +105,21 @@ public class MainStageView extends DataVisualizationView implements Observer { System.err.println("Erreur de mise à jour."); return; } - scatterChart.getData().clear(); - - //Jalon 1: on verifie que le type de donnée est bien IRIS - if (model.getType() == DataType.IRIS) { - XYChart.Series series1 = new XYChart.Series(); - XYChart.Series series2 = new XYChart.Series(); - XYChart.Series series3 = new XYChart.Series(); - if (actualX == null && actualY == null) { - controller.setAxesSelected("Aucuns axes sélectionnés"); - } else { - controller.setAxesSelected(""); + + ObservableList<XYChart.Series> series = scatterChart.getData(); + for(XYChart.Series serie : series) {serie.getData().clear();} + + + + //Jalon 1: on verifie que le type de donnée est bien IRIS + if(model.getType() == DataType.IRIS) { + + + if(actualX==null && actualY==null){ + controller.setAxesSelected("Aucuns axes sélectionnés"); + } + else{ + controller.setAxesSelected(""); List<LoadableData> points = new ArrayList<>(model.getDatas()); points.addAll(model.getDataToClass()); @@ -97,27 +131,37 @@ public class MainStageView extends DataVisualizationView implements Observer { dataPoint.setNode(ViewUtil.getForm(iris, new Circle(5), root)); - if (iris.getClassification().equals("Setosa")) { + switch (iris.getClassification()) { + case "Setosa": series1.getData().add(dataPoint); - } else if (iris.getClassification().equals("Versicolor")) { + break; + case "Versicolor": series2.getData().add(dataPoint); - } else if (iris.getClassification().equals("Virginica")) { + break; + case "Virginica": series3.getData().add(dataPoint); - } + break; + default: + series4.getData().add(dataPoint); + break; } - series1.setName("Setosa"); - series2.setName("Versicolor"); - series3.setName("Virginica"); - - scatterChart.getData().addAll(series1, series2, series3); } - } + + series1.setName("Setosa"); + series2.setName("Versicolor"); + series3.setName("Virginica"); + series4.setName("undefinied"); + + } + } }catch (Exception e) { System.err.println("Erreur de mise à jour : " + e.getMessage()); } } + + @Override public void update(Observable observable, Object data) { try {