diff --git a/Boutique/ressources/fxml/MainWindow.fxml b/Boutique/ressources/fxml/MainWindow.fxml
index d849fd9..c49193b 100644
--- a/Boutique/ressources/fxml/MainWindow.fxml
+++ b/Boutique/ressources/fxml/MainWindow.fxml
@@ -18,7 +18,7 @@
-
+
diff --git a/Boutique/ressources/fxml/uc/UC_DetailHabit.fxml b/Boutique/ressources/fxml/uc/UC_DetailHabit.fxml
index 645f6d1..5c28de1 100644
--- a/Boutique/ressources/fxml/uc/UC_DetailHabit.fxml
+++ b/Boutique/ressources/fxml/uc/UC_DetailHabit.fxml
@@ -22,7 +22,7 @@
-
+
diff --git a/Boutique/src/Modele/metier/Boutique.java b/Boutique/src/Modele/metier/Boutique.java
index 49d7d6b..c683989 100644
--- a/Boutique/src/Modele/metier/Boutique.java
+++ b/Boutique/src/Modele/metier/Boutique.java
@@ -2,17 +2,19 @@ package Modele.metier;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-public class Boutique {
+public class Boutique implements Serializable {
private List produits;
- private PropertyChangeSupport support = new PropertyChangeSupport(this);
+ transient private PropertyChangeSupport support = new PropertyChangeSupport(this);
public static final String PROP_AJOUT = "AjoutProduit";
+ public static final String PROP_SUPPRESSION = "SuppressionProduit";
public Boutique(){
produits = new ArrayList<>();
@@ -23,7 +25,7 @@ public class Boutique {
}
public void addListener(PropertyChangeListener listener){
- support.addPropertyChangeListener(listener);
+ getSupport().addPropertyChangeListener(listener);
}
public void ajouterProduit(Produit produit){
@@ -34,17 +36,29 @@ public class Boutique {
Produit produit = new Habit(nom, prix);
produits.add(produit);
int index = produits.size() - 1;
- support.fireIndexedPropertyChange(PROP_AJOUT, index, null, produit);
+ getSupport().fireIndexedPropertyChange(PROP_AJOUT, index, null, produit);
}
public void ajouterParfum(String nom, int prix, List fragrances){
Produit produit = new Parfum(nom, prix, fragrances);
produits.add(produit);
int index = produits.size() - 1;
- support.fireIndexedPropertyChange(PROP_AJOUT, index, null, produit);
+ getSupport().fireIndexedPropertyChange(PROP_AJOUT, index, null, produit);
+ }
+
+ public void supprimerProduit(Produit produit){
+ produits.remove(produit);
+ getSupport().firePropertyChange(PROP_SUPPRESSION, produit, null);
}
public List getProduits() {
return Collections.unmodifiableList(produits);
}
+
+ protected PropertyChangeSupport getSupport() {
+ if(support == null){
+ support = new PropertyChangeSupport(this);
+ }
+ return support;
+ }
}
diff --git a/Boutique/src/Modele/metier/Couleur.java b/Boutique/src/Modele/metier/Couleur.java
index a4ef19d..67d4293 100644
--- a/Boutique/src/Modele/metier/Couleur.java
+++ b/Boutique/src/Modele/metier/Couleur.java
@@ -1,6 +1,8 @@
package Modele.metier;
-public class Couleur {
+import java.io.Serializable;
+
+public class Couleur implements Serializable {
private int vert;
diff --git a/Boutique/src/Modele/metier/Habit.java b/Boutique/src/Modele/metier/Habit.java
index 9603456..31b8d24 100644
--- a/Boutique/src/Modele/metier/Habit.java
+++ b/Boutique/src/Modele/metier/Habit.java
@@ -26,24 +26,24 @@ public class Habit extends Produit{
public void ajouterTaille(Taille taille){
taillesEnStock.add(taille);
int index = taillesEnStock.size() - 1;
- support.fireIndexedPropertyChange(PROP_ADD_TAILLE, index, null, taille);
+ getSupport().fireIndexedPropertyChange(PROP_ADD_TAILLE, index, null, taille);
}
public void ajouterCouleur(int vert, int rouge, int bleue){
Couleur couleur = new Couleur(vert, rouge, bleue);
couleurs.add(couleur);
int index = couleurs.size() - 1;
- support.fireIndexedPropertyChange(PROP_ADD_COULEUR, index, null, couleur);
+ getSupport().fireIndexedPropertyChange(PROP_ADD_COULEUR, index, null, couleur);
}
public void supprimerTaille(Taille taille){
taillesEnStock.remove(taille);
- support.firePropertyChange(PROP_REMOVE_TAILLE, taille, null);
+ getSupport().firePropertyChange(PROP_REMOVE_TAILLE, taille, null);
}
public void supprimerCouleur(Couleur couleur){
couleurs.remove(couleur);
- support.firePropertyChange(PROP_REMOVE_COULEUR, couleur, null);
+ getSupport().firePropertyChange(PROP_REMOVE_COULEUR, couleur, null);
}
public List getTaillesEnStock() {
diff --git a/Boutique/src/Modele/metier/Parfum.java b/Boutique/src/Modele/metier/Parfum.java
index c99f170..bff8289 100644
--- a/Boutique/src/Modele/metier/Parfum.java
+++ b/Boutique/src/Modele/metier/Parfum.java
@@ -25,12 +25,12 @@ public class Parfum extends Produit{
public void ajouterFragrance(String fragrance){
fragrances.add(fragrance);
int index = fragrances.size() - 1;
- support.fireIndexedPropertyChange(PROP_AJOUT_FRAGRANCE, index, null, fragrance);
+ getSupport().fireIndexedPropertyChange(PROP_AJOUT_FRAGRANCE, index, null, fragrance);
}
public void supprimerFragrance(String fragrance){
fragrances.remove(fragrance);
- support.firePropertyChange(PROP_SUPPRESSION_FRAGRANCE, fragrance, null);
+ getSupport().firePropertyChange(PROP_SUPPRESSION_FRAGRANCE, fragrance, null);
}
public List getFragrances(){
diff --git a/Boutique/src/Modele/metier/Produit.java b/Boutique/src/Modele/metier/Produit.java
index 717810f..eae8803 100644
--- a/Boutique/src/Modele/metier/Produit.java
+++ b/Boutique/src/Modele/metier/Produit.java
@@ -2,14 +2,16 @@ package Modele.metier;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import java.io.Serializable;
+import java.util.Objects;
-public abstract class Produit {
+public abstract class Produit implements Serializable {
private String nom;
private int prix;
- protected PropertyChangeSupport support = new PropertyChangeSupport(this);
+ transient protected PropertyChangeSupport support = new PropertyChangeSupport(this);
protected Produit(String nom, int prix){
this.nom = nom;
@@ -17,7 +19,7 @@ public abstract class Produit {
}
public void addListener(PropertyChangeListener listener){
- this.support.addPropertyChangeListener(listener);
+ getSupport().addPropertyChangeListener(listener);
}
public String getNom() {
@@ -35,4 +37,21 @@ public abstract class Produit {
public void setPrix(int prix) {
this.prix = prix;
}
+
+ protected PropertyChangeSupport getSupport() {
+ if(support == null){
+ support = new PropertyChangeSupport(this);
+ }
+ return support;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if(o == null) return false;
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Produit produit = (Produit) o;
+ return prix == produit.prix && nom.equals(produit.nom);
+ }
}
diff --git a/Boutique/src/Modele/metier/Taille.java b/Boutique/src/Modele/metier/Taille.java
index 922170b..fa98f5c 100644
--- a/Boutique/src/Modele/metier/Taille.java
+++ b/Boutique/src/Modele/metier/Taille.java
@@ -1,6 +1,9 @@
package Modele.metier;
-public enum Taille {
+import javax.sql.rowset.serial.SerialJavaObject;
+import java.io.Serializable;
+
+public enum Taille implements Serializable {
XS,
S,
diff --git a/Boutique/src/data/chargement/Chargeur.java b/Boutique/src/data/chargement/Chargeur.java
index 48778e4..9cd7dcf 100644
--- a/Boutique/src/data/chargement/Chargeur.java
+++ b/Boutique/src/data/chargement/Chargeur.java
@@ -1,5 +1,6 @@
package data.chargement;
+import Modele.metier.Boutique;
import Modele.metier.Produit;
import java.io.FileNotFoundException;
@@ -8,5 +9,5 @@ import java.util.List;
public interface Chargeur {
- public List charger(String nomFichier) throws IOException, ClassNotFoundException;
+ public Boutique charger(String nomFichier) throws IOException, ClassNotFoundException;
}
diff --git a/Boutique/src/data/chargement/Sauveur.java b/Boutique/src/data/chargement/Sauveur.java
index 8cc3ca3..1d43618 100644
--- a/Boutique/src/data/chargement/Sauveur.java
+++ b/Boutique/src/data/chargement/Sauveur.java
@@ -1,5 +1,6 @@
package data.chargement;
+import Modele.metier.Boutique;
import Modele.metier.Produit;
import java.io.FileNotFoundException;
@@ -8,5 +9,5 @@ import java.util.List;
public interface Sauveur {
- public void sauver(List produits, String nomFichier) throws IOException;
+ public void sauver(Boutique produits, String nomFichier) throws IOException;
}
diff --git a/Boutique/src/data/chargement/SimpleChargeur.java b/Boutique/src/data/chargement/SimpleChargeur.java
index 961af51..903735d 100644
--- a/Boutique/src/data/chargement/SimpleChargeur.java
+++ b/Boutique/src/data/chargement/SimpleChargeur.java
@@ -1,5 +1,6 @@
package data.chargement;
+import Modele.metier.Boutique;
import Modele.metier.Produit;
import java.io.FileInputStream;
@@ -12,10 +13,10 @@ import java.util.List;
public class SimpleChargeur implements Chargeur{
@Override
- public List charger(String nomFichier) throws IOException, ClassNotFoundException {
- List produits = new ArrayList<>();
- try(ObjectInputStream reader = new ObjectInputStream(new FileInputStream("nomFichier"))){
- produits = (List) reader.readObject();
+ public Boutique charger(String nomFichier) throws IOException, ClassNotFoundException {
+ Boutique produits;
+ try(ObjectInputStream reader = new ObjectInputStream(new FileInputStream(nomFichier))){
+ produits = (Boutique) reader.readObject();
}
return produits;
}
diff --git a/Boutique/src/data/chargement/SimpleSauveur.java b/Boutique/src/data/chargement/SimpleSauveur.java
index c7973d5..5c1c278 100644
--- a/Boutique/src/data/chargement/SimpleSauveur.java
+++ b/Boutique/src/data/chargement/SimpleSauveur.java
@@ -1,5 +1,6 @@
package data.chargement;
+import Modele.metier.Boutique;
import Modele.metier.Produit;
import java.io.FileNotFoundException;
@@ -11,7 +12,7 @@ import java.util.List;
public class SimpleSauveur implements Sauveur{
@Override
- public void sauver(List produits, String nomFichier) throws IOException {
+ public void sauver(Boutique produits, String nomFichier) throws IOException {
try(ObjectOutputStream writer = new ObjectOutputStream(new FileOutputStream(nomFichier))){
writer.writeObject(produits);
}
diff --git a/Boutique/src/data/chargement/Stub.java b/Boutique/src/data/chargement/Stub.java
index 7c10647..96cec36 100644
--- a/Boutique/src/data/chargement/Stub.java
+++ b/Boutique/src/data/chargement/Stub.java
@@ -1,9 +1,6 @@
package data.chargement;
-import Modele.metier.Habit;
-import Modele.metier.Parfum;
-import Modele.metier.Produit;
-import Modele.metier.Taille;
+import Modele.metier.*;
import java.util.ArrayList;
import java.util.List;
@@ -12,8 +9,9 @@ public class Stub implements Chargeur{
@Override
- public List charger(String nomFichier) {
- List produits = new ArrayList<>();
+ public Boutique charger(String nomFichier) {
+ Boutique boutique = new Boutique();
+
Habit p1 = new Habit("Echarpe", 42);
p1.ajouterTaille(Taille.XL);
p1.ajouterTaille(Taille.L);
@@ -50,17 +48,17 @@ public class Stub implements Chargeur{
Parfum p10 = new Parfum("Scandal", 99);
p10.ajouterFragrance("Vache");
- produits.add(p1);
- produits.add(p2);
- produits.add(p3);
- produits.add(p4);
- produits.add(p5);
- produits.add(p6);
- produits.add(p7);
- produits.add(p8);
- produits.add(p9);
- produits.add(p10);
-
- return produits;
+ boutique.ajouterProduit(p1);
+ boutique.ajouterProduit(p2);
+ boutique.ajouterProduit(p3);
+ boutique.ajouterProduit(p4);
+ boutique.ajouterProduit(p5);
+ boutique.ajouterProduit(p6);
+ boutique.ajouterProduit(p7);
+ boutique.ajouterProduit(p8);
+ boutique.ajouterProduit(p9);
+ boutique.ajouterProduit(p10);
+
+ return boutique;
}
}
diff --git a/Boutique/src/launch/Launcher.java b/Boutique/src/launch/Launcher.java
index e373f42..4433a99 100644
--- a/Boutique/src/launch/Launcher.java
+++ b/Boutique/src/launch/Launcher.java
@@ -5,8 +5,12 @@ import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
+import view_modele.BoutiqueVM;
public class Launcher extends Application {
+
+ private static BoutiqueVM boutiqueVM;
+
@Override
public void start(Stage primaryStage) throws Exception {
Parent parent = FXMLLoader.load(getClass().getResource("/fxml/MainWindow.fxml"));
@@ -14,4 +18,17 @@ public class Launcher extends Application {
primaryStage.setScene(scene);
primaryStage.show();
}
+
+ public static BoutiqueVM getBoutiqueVM() {
+ if(boutiqueVM == null){
+ boutiqueVM = new BoutiqueVM();
+ }
+ return boutiqueVM;
+ }
+
+ @Override
+ public void stop() throws Exception {
+ boutiqueVM.sauver();
+ super.stop();
+ }
}
diff --git a/Boutique/src/view/MainWindow.java b/Boutique/src/view/MainWindow.java
index 5ccc4be..55a00ba 100644
--- a/Boutique/src/view/MainWindow.java
+++ b/Boutique/src/view/MainWindow.java
@@ -13,6 +13,7 @@ import javafx.stage.Stage;
import javafx.util.StringConverter;
import javafx.util.converter.IntegerStringConverter;
import javafx.util.converter.NumberStringConverter;
+import launch.Launcher;
import view.cellules.CelluleProduit;
import view.uc.UCDetailHabit;
import view.uc.UCDetailParfum;
@@ -31,14 +32,13 @@ public class MainWindow {
@FXML
private ListView listeProduit;
- private BoutiqueVM boutiqueVM;
+ private BoutiqueVM boutiqueVM = Launcher.getBoutiqueVM();
private UCDetailParfum detailParfum;
private UCDetailHabit detailHabit;
public void initialize(){
- boutiqueVM = new BoutiqueVM();
try {
detailParfum = new UCDetailParfum();
detailParfum.setVisibiliy(false);
@@ -125,4 +125,9 @@ public class MainWindow {
return controlleur;
}
+
+ @FXML
+ private void supprimerSelectionne(){
+ boutiqueVM.supprimerProduit(listeProduit.getSelectionModel().getSelectedItem());
+ }
}
diff --git a/Boutique/src/view_modele/BoutiqueVM.java b/Boutique/src/view_modele/BoutiqueVM.java
index 51709e9..6c32da3 100644
--- a/Boutique/src/view_modele/BoutiqueVM.java
+++ b/Boutique/src/view_modele/BoutiqueVM.java
@@ -4,10 +4,7 @@ import Modele.metier.Boutique;
import Modele.metier.Habit;
import Modele.metier.Parfum;
import Modele.metier.Produit;
-import data.chargement.Chargeur;
-import data.chargement.Sauveur;
-import data.chargement.SimpleChargeur;
-import data.chargement.Stub;
+import data.chargement.*;
import javafx.beans.property.ListProperty;
import javafx.beans.property.ReadOnlyListProperty;
import javafx.beans.property.SimpleListProperty;
@@ -38,10 +35,11 @@ public class BoutiqueVM implements PropertyChangeListener {
public BoutiqueVM(){
chargeur = new SimpleChargeur();
+ sauveur = new SimpleSauveur();
try {
- modele = new Boutique(chargeur.charger(NOMFICHIER));
+ modele = chargeur.charger(NOMFICHIER);
} catch (Exception e) {
- modele = new Boutique(new Stub().charger(NOMFICHIER));
+ modele = new Stub().charger(NOMFICHIER);
}
initialiserListe();
@@ -74,12 +72,24 @@ public class BoutiqueVM implements PropertyChangeListener {
public void ajouterHabit(String nom, int prix){
modele.ajouterHabit(nom, prix);
}
+
+ public void supprimerProduit(ProduitVM produit){
+ modele.supprimerProduit(produit.getModele());
+ }
+
@Override
public void propertyChange(PropertyChangeEvent evt) {
switch (evt.getPropertyName()){
case Boutique.PROP_AJOUT:
produitsObs.add(((IndexedPropertyChangeEvent)evt).getIndex(), creerProduitVM((Produit)evt.getNewValue()));
break;
+ case Boutique.PROP_SUPPRESSION:
+ produitsObs.remove(creerProduitVM((Produit)evt.getNewValue()));
+ break;
}
}
+
+ public void sauver() throws IOException {
+ sauveur.sauver(modele, NOMFICHIER);
+ }
}
diff --git a/Boutique/src/view_modele/HabitVM.java b/Boutique/src/view_modele/HabitVM.java
index 4441cdf..eb504f5 100644
--- a/Boutique/src/view_modele/HabitVM.java
+++ b/Boutique/src/view_modele/HabitVM.java
@@ -39,16 +39,11 @@ public class HabitVM extends ProduitVM {
}
public HabitVM(Habit produit){
- this.modele = produit;
- setNom(modele.getNom());
- setPrix(modele.getPrix());
-
+ super(produit);
for(Couleur c : ((Habit)modele).getCouleurs()){
couleurObs.add(new CouleurVM(c));
}
taillesObs.addAll(TailleVMTailleConverter.toTaillesVM(((Habit) modele).getTaillesEnStock()));
-
- modele.addListener(this);
}
public void ajouterCouleur(int vert, int rouge, int bleue){
@@ -87,4 +82,6 @@ public class HabitVM extends ProduitVM {
return ans;
}
+
+
}
diff --git a/Boutique/src/view_modele/ParfumVM.java b/Boutique/src/view_modele/ParfumVM.java
index 35e1561..76b1f2f 100644
--- a/Boutique/src/view_modele/ParfumVM.java
+++ b/Boutique/src/view_modele/ParfumVM.java
@@ -25,11 +25,7 @@ public class ParfumVM extends ProduitVM {
}
public ParfumVM(Parfum produit){
- this.modele = produit;
- setNom(modele.getNom());
- setPrix(modele.getPrix());
-
- modele.addListener(this);
+ super(produit);
fragrancesObs.addAll(produit.getFragrances());
}
diff --git a/Boutique/src/view_modele/ProduitVM.java b/Boutique/src/view_modele/ProduitVM.java
index 3a4d9c8..1bc1b88 100644
--- a/Boutique/src/view_modele/ProduitVM.java
+++ b/Boutique/src/view_modele/ProduitVM.java
@@ -7,7 +7,6 @@ import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import java.beans.PropertyChangeListener;
-import java.security.ProtectionDomain;
public abstract class ProduitVM implements PropertyChangeListener {
@@ -22,4 +21,29 @@ public abstract class ProduitVM implements PropertyChangeListener {
public int getPrix() { return prix.get(); }
public IntegerProperty prixProperty() { return prix; }
public void setPrix(int prix) { this.prix.set(prix); }
+
+ protected ProduitVM(Produit produit){
+ this.modele = produit;
+ setNom(modele.getNom());
+ setPrix(modele.getPrix());
+
+ nom.addListener(__ -> this.modele.setNom(getNom()));
+ prix.addListener(__ -> this.modele.setPrix(getPrix()));
+
+ this.modele.addListener(this);
+ }
+
+ public Produit getModele() {
+ return modele;
+ }
+
+ @Override
+ public boolean equals(Object obj){
+ if(obj == null) return false;
+ if(this == obj) return true;
+ if(getClass() != obj.getClass()) return false;
+
+ ProduitVM other = (ProduitVM) obj;
+ return modele.equals(other.getModele());
+ }
}