Taille affiche dans le détail + suppression d'un produit en cours

master
Louis PERRET 3 years ago
parent d959a4d2f0
commit 52c993278b

@ -18,7 +18,7 @@
<ListView fx:id="listeProduit"/>
<Button text="Ajouter habit" onAction="#lancerFenetreAjoutHabit"/>
<Button text="Ajouter parfum" onAction="#lancerFenetreAjoutParfum"/>
<Button text="Supprimer l'objet sélectionné"/>
<Button text="Supprimer l'objet sélectionné" onAction="#supprimerSelectionne"/>
</VBox>
</left>

@ -22,7 +22,7 @@
<Button text="Déselectionner" onAction="#deselectionner"/>
</VBox>
<VBox>
<ListView fx:id="listeTaille"/>
<ListView fx:id="listeTailles"/>
<ComboBox fx:id="comboTaille"/>
<Button text="Ajouter" onAction="#ajouterTaille"/>
<Button text="Supprimer" onAction="#supprimerTaille"/>

@ -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<Produit> 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<String> 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<Produit> getProduits() {
return Collections.unmodifiableList(produits);
}
protected PropertyChangeSupport getSupport() {
if(support == null){
support = new PropertyChangeSupport(this);
}
return support;
}
}

@ -1,6 +1,8 @@
package Modele.metier;
public class Couleur {
import java.io.Serializable;
public class Couleur implements Serializable {
private int vert;

@ -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<Taille> getTaillesEnStock() {

@ -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<String> getFragrances(){

@ -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);
}
}

@ -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,

@ -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<Produit> charger(String nomFichier) throws IOException, ClassNotFoundException;
public Boutique charger(String nomFichier) throws IOException, ClassNotFoundException;
}

@ -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<Produit> produits, String nomFichier) throws IOException;
public void sauver(Boutique produits, String nomFichier) throws IOException;
}

@ -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<Produit> charger(String nomFichier) throws IOException, ClassNotFoundException {
List<Produit> produits = new ArrayList<>();
try(ObjectInputStream reader = new ObjectInputStream(new FileInputStream("nomFichier"))){
produits = (List<Produit>) 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;
}

@ -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<Produit> 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);
}

@ -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<Produit> charger(String nomFichier) {
List<Produit> 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;
}
}

@ -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();
}
}

@ -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<ProduitVM> 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());
}
}

@ -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);
}
}

@ -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;
}
}

@ -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());
}

@ -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());
}
}

Loading…
Cancel
Save