diff --git a/pom.xml b/pom.xml index 4a5aec5a6868b0edcc268530ca77dbfc4e65452b..e7cabd65d60aaaf204dbea338ecb244c04a3f1fc 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ <github.account>emmanuelbruno</github.account> <!-- utln login for nexus (maven and docker ) repository on lsis --> <lsisnexus.login>emmanuel.bruno@univ-tln.fr</lsisnexus.login> - <app.main.class>fr.univtln.bruno.d14.simpleihm.App</app.main.class> + <app.main.class>fr.univtln.bruno.coursjava.librarymanager.simplegui.App</app.main.class> </properties> <repositories> @@ -46,7 +46,7 @@ <dependency> <groupId>fr.univtln.bruno.coursjava.librarymanager</groupId> <artifactId>librarymanager-observablelibrary</artifactId> - <version>1.0.0-dev-2</version> + <version>1.0.0-dev-3</version> </dependency> <dependency> diff --git a/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/AdherentListModel.java b/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/AdherentListModel.java new file mode 100644 index 0000000000000000000000000000000000000000..c08004ac95f8784102b6e6b4ee31eedd2abcb8d6 --- /dev/null +++ b/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/AdherentListModel.java @@ -0,0 +1,39 @@ +package fr.univtln.bruno.coursjava.librarymanager.simplegui; + + +import fr.univtln.bruno.coursjava.librarymanager.IBibliotheque; + +import javax.swing.*; +import java.util.List; +import java.util.Observable; +import java.util.Observer; + +/** + * Created by bruno on 03/10/14. + */ +public class AdherentListModel extends DefaultComboBoxModel<IBibliotheque.Adhérent> implements Observer { + private final List<IBibliotheque.Adhérent> adhérents; + + public AdherentListModel(List<IBibliotheque.Adhérent> adhérents) { + this.adhérents = adhérents; + } + + @Override + public void update(Observable o, Object arg) { + //si l'adhérent selectionné n'est plus dans la liste on déselectionne. + if (!adhérents.contains(getSelectedItem())) + setSelectedItem(null); + else System.out.println(getSelectedItem() + " in " + adhérents); + fireContentsChanged(this, 0, adhérents.size() - 1); + } + + @Override + public int getSize() { + return adhérents.size(); + } + + @Override + public IBibliotheque.Adhérent getElementAt(int index) { + return adhérents.get(index); + } +} diff --git a/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/App.java b/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/App.java new file mode 100644 index 0000000000000000000000000000000000000000..3cfc51c125d1cef0adf83c6714e36e7fa8d15235 --- /dev/null +++ b/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/App.java @@ -0,0 +1,25 @@ +package fr.univtln.bruno.coursjava.librarymanager.simplegui; + +import fr.univtln.bruno.coursjava.librarymanager.Bibliotheque; +import fr.univtln.bruno.coursjava.librarymanager.BibliothequeModele; +import fr.univtln.bruno.coursjava.librarymanager.IBibliotheque; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Hello world! + */ +public class App { + + public static void main(String[] args) { + Logger logger = Logger.getAnonymousLogger(); + logger.setLevel(Level.FINEST); + + BibliothequeModele bibliotheque = null; + bibliotheque = new BibliothequeModele<Bibliotheque>("Ma Bibliothèque"); + new VueBibliotheque(bibliotheque); + bibliotheque.addAdhérent("jean.martin@test.fr", "Jean", "Martin", IBibliotheque.Adhérent.Statut.ENSEIGNANT); + bibliotheque.addAdhérent("mdurand@labas.com", "Marie", "Durand", IBibliotheque.Adhérent.Statut.ETUDIANT); + } +} diff --git a/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/ControleurBibliotheque.java b/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/ControleurBibliotheque.java new file mode 100644 index 0000000000000000000000000000000000000000..36c986b802c26dc1c81d896c260aeabe2b8d37ff --- /dev/null +++ b/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/ControleurBibliotheque.java @@ -0,0 +1,102 @@ +package fr.univtln.bruno.coursjava.librarymanager.simplegui; + +import fr.univtln.bruno.coursjava.librarymanager.BibliothequeModele; +import fr.univtln.bruno.coursjava.librarymanager.IBibliotheque; + +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.PlainDocument; +import java.util.Collection; +import java.util.regex.Pattern; + +/** + * Created by bruno on 03/10/14. + */ +public class ControleurBibliotheque { + public static final Pattern VALID_EMAIL_ADDRESS_REGEX = + Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE); + private VueBibliotheque vueBibliotheque; + private BibliothequeModele modeleBibliotheque; + private Document emailNouvelAdherentModel = new PlainDocument(); + private Document nomNouvelAdherentModel = new PlainDocument(); + private Document prenomNouvelAdherentModel = new PlainDocument(); + + + public ControleurBibliotheque(final VueBibliotheque vueBibliotheque, BibliothequeModele modeleBibliotheque) { + this.vueBibliotheque = vueBibliotheque; + this.modeleBibliotheque = modeleBibliotheque; + + DocumentListener ecouteurChangementTexte = new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + changedUpdate(e); + } + + @Override + public void removeUpdate(DocumentEvent e) { + changedUpdate(e); + } + + @Override + public void changedUpdate(DocumentEvent e) { + try { + if ((emailNouvelAdherentModel.getLength() == 0 + || !(VALID_EMAIL_ADDRESS_REGEX.matcher(emailNouvelAdherentModel.getText(0, emailNouvelAdherentModel.getLength())).find()) + || nomNouvelAdherentModel.getLength() == 0 || prenomNouvelAdherentModel.getLength() == 0)) + vueBibliotheque.setCreationAdherentOk(false); + else + vueBibliotheque.setCreationAdherentOk(true); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + } + }; + emailNouvelAdherentModel.addDocumentListener(ecouteurChangementTexte); + nomNouvelAdherentModel.addDocumentListener(ecouteurChangementTexte); + prenomNouvelAdherentModel.addDocumentListener(ecouteurChangementTexte); + + } + + public Document getEmailNouvelAdherentModel() { + return emailNouvelAdherentModel; + } + + public Document getNomNouvelAdherentModel() { + return nomNouvelAdherentModel; + } + + public Document getPrenomNouvelAdherentModel() { + return prenomNouvelAdherentModel; + } + + public void ajouterAdherent() { + try { + modeleBibliotheque.addAdhérent( + emailNouvelAdherentModel.getText(0, emailNouvelAdherentModel.getLength()), prenomNouvelAdherentModel.getText(0, prenomNouvelAdherentModel.getLength()), + nomNouvelAdherentModel.getText(0, nomNouvelAdherentModel.getLength()), IBibliotheque.Adhérent.Statut.ENSEIGNANT); + } catch (BadLocationException e) { + e.printStackTrace(); + } + clearAdherent(); + } + + public void clearAdherent() { + try { + emailNouvelAdherentModel.remove(0, emailNouvelAdherentModel.getLength()); + nomNouvelAdherentModel.remove(0, nomNouvelAdherentModel.getLength()); + prenomNouvelAdherentModel.remove(0, prenomNouvelAdherentModel.getLength()); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + + public void removeAdherent(IBibliotheque.Adhérent adhérent) { + modeleBibliotheque.remove(adhérent); + } + + public Collection<IBibliotheque.Adhérent> getAdherents() { + return modeleBibliotheque.getAdhérents(); + } +} diff --git a/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/VueBibliotheque.java b/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/VueBibliotheque.java new file mode 100644 index 0000000000000000000000000000000000000000..4bab999f76f488fc7cf3c6b561bb7a9bbea8daeb --- /dev/null +++ b/src/main/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/VueBibliotheque.java @@ -0,0 +1,277 @@ +package fr.univtln.bruno.coursjava.librarymanager.simplegui; + +import fr.univtln.bruno.coursjava.librarymanager.Bibliotheque; +import fr.univtln.bruno.coursjava.librarymanager.BibliothequeModele; +import fr.univtln.bruno.coursjava.librarymanager.IBibliotheque; + +import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; +import java.util.List; +import java.util.Observable; +import java.util.Observer; + +/** + * Created by bruno on 03/10/14. + */ +public class VueBibliotheque extends JFrame { + private final BibliothequeModele<Bibliotheque> modeleBibliotheque; + private final ControleurBibliotheque controleurBibliotheque; + + private final AdherentListModel adherentListModel; + + private final JPanel adherentsSuppressionPanel = new JPanel(new GridBagLayout()); + private final JPanel adherentDetailPanel = new JPanel(new GridBagLayout()); + private final JPanel adherentAjoutPanel = new JPanel(new GridBagLayout()); + + private final JList<IBibliotheque.Adhérent> adhérentJList; + private final JButton supprimerAdherentJButton = new JButton("Supprimer Adhérent"); + + private final JComboBox<IBibliotheque.Adhérent> adhérentJComboBox; + private final JTextField emailAdherentAjoutjTextField; + private final JTextField nomAdherentAjoutjTextField; + private final JTextField prenomAdherentAjoutjTextField; + private final JLabel emailAdherentJLabel = new JLabel("Email"); + private final JLabel nomAdherentJLabel = new JLabel("Nom"); + private final JLabel prenomAdherentJLabel = new JLabel("Prénom"); + private final JButton annulerAdherentJButton = new JButton("Annuler"); + private final JButton ajouterAdherentJButton = new JButton("Ajouter Adhérent"); + + private final JTextField idAdherentDetailjTextField = new JTextField(); + private final JTextField prenomAherentDetailjTextField = new JTextField(); + private final JTextField nomAherentDetailjTextField = new JTextField(); + + public VueBibliotheque(BibliothequeModele modeleBibliotheque) { + + super("Bibliotheque"); + setSize(800, 600); + + this.modeleBibliotheque = modeleBibliotheque; + this.controleurBibliotheque = new ControleurBibliotheque(this, modeleBibliotheque); + this.adherentListModel = new AdherentListModel(new ArrayList(this.modeleBibliotheque.getAdhérents())); + + modeleBibliotheque.addObserver(adherentListModel); + + adhérentJList = new JList<>(adherentListModel); + adhérentJList.setCellRenderer(new AdherentRenderer()); + adhérentJList.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + setSuppressionAdherentOk(adhérentJList.getSelectedValue() != null); + } + }); + + adhérentJComboBox = new JComboBox<IBibliotheque.Adhérent>(adherentListModel); + adhérentJComboBox.setRenderer(new AdherentRenderer()); + adhérentJComboBox.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + switch (e.getStateChange()) { + case ItemEvent.DESELECTED: + montrerDetail(null); + break; + case ItemEvent.SELECTED: + montrerDetail(adhérentJComboBox.getItemAt(adhérentJComboBox.getSelectedIndex())); + break; + } + + } + }); + + supprimerAdherentJButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + for (IBibliotheque.Adhérent adhérent : adhérentJList.getSelectedValuesList()) + controleurBibliotheque.removeAdherent(adhérent); + } + }); + + ajouterAdherentJButton.setEnabled(false); + ajouterAdherentJButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + controleurBibliotheque.ajouterAdherent(); + } + }); + + supprimerAdherentJButton.setEnabled(false); + + annulerAdherentJButton.setEnabled(false); + annulerAdherentJButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + controleurBibliotheque.clearAdherent(); + } + }); + + emailAdherentAjoutjTextField = new JTextField(controleurBibliotheque.getEmailNouvelAdherentModel(), "", 10); + nomAdherentAjoutjTextField = new JTextField(controleurBibliotheque.getNomNouvelAdherentModel(), "", 10); + prenomAdherentAjoutjTextField = new JTextField(controleurBibliotheque.getPrenomNouvelAdherentModel(), "", 10); + + idAdherentDetailjTextField.setEditable(false); + prenomAherentDetailjTextField.setEditable(false); + nomAherentDetailjTextField.setEditable(false); + + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + GridBagConstraints c = new GridBagConstraints(); + + // Suppression d'un adherent + adherentsSuppressionPanel.setBorder(BorderFactory.createTitledBorder("Suppression")); + c.fill = GridBagConstraints.BOTH; + c.anchor = GridBagConstraints.NORTHEAST; + c.insets = new Insets(2, 2, 2, 2); + c.weighty = 0.8; + c.gridx = 0; + c.gridy = 0; + adherentsSuppressionPanel.add(adhérentJList, c); + + c.fill = GridBagConstraints.HORIZONTAL; + c.gridheight = 1; + c.weighty = 0.2; + c.gridx = 0; + c.gridy = 1; + adherentsSuppressionPanel.add(supprimerAdherentJButton, c); + + //Le détail d'un adherent + adherentDetailPanel.setBorder(BorderFactory.createTitledBorder("Détails")); + c.gridx = 0; + c.gridy = 0; + c.gridwidth = 1; + adherentDetailPanel.add(adhérentJComboBox, c); + c.gridx = 0; + c.gridy = 1; + adherentDetailPanel.add(idAdherentDetailjTextField, c); + c.gridx = 0; + c.gridy = 2; + adherentDetailPanel.add(nomAherentDetailjTextField, c); + c.gridx = 0; + c.gridy = 3; + adherentDetailPanel.add(prenomAherentDetailjTextField, c); + + + //L'ajout d'un adherent + adherentAjoutPanel.setBorder(BorderFactory.createTitledBorder("Ajout")); + c.gridx = 0; + c.gridy = 0; + c.gridwidth = 1; + adherentAjoutPanel.add(emailAdherentJLabel, c); + c.gridx = 1; + c.gridy = 0; + adherentAjoutPanel.add(emailAdherentAjoutjTextField, c); + + c.gridx = 0; + c.gridy = 1; + c.gridwidth = 1; + adherentAjoutPanel.add(nomAdherentJLabel, c); + c.gridx = 1; + c.gridy = 1; + adherentAjoutPanel.add(nomAdherentAjoutjTextField, c); + + c.gridx = 0; + c.gridy = 2; + adherentAjoutPanel.add(prenomAdherentJLabel, c); + c.gridx = 1; + c.gridy = 2; + adherentAjoutPanel.add(prenomAdherentAjoutjTextField, c); + + c.gridx = 0; + c.gridy = 3; + adherentAjoutPanel.add(annulerAdherentJButton, c); + + c.gridx = 1; + c.gridy = 3; + adherentAjoutPanel.add(ajouterAdherentJButton, c); + + //Ajout des panel de suppression, d'ajout et de detail + getContentPane().setLayout(new GridBagLayout()); + c.fill = GridBagConstraints.HORIZONTAL; + c.gridx = 0; + c.gridy = 0; + getContentPane().add(adherentDetailPanel, c); + + c.fill = GridBagConstraints.BOTH; + c.gridx = 1; + c.gridy = 0; + getContentPane().add(adherentsSuppressionPanel, c); + + c.fill = GridBagConstraints.HORIZONTAL; + c.gridx = 2; + c.gridy = 0; + getContentPane().add(adherentAjoutPanel, c); + //pack(); + + setVisible(true); + } + + private void setSuppressionAdherentOk(boolean b) { + supprimerAdherentJButton.setEnabled(b); + } + + public void setCreationAdherentOk(boolean creationAdherentOk) { + ajouterAdherentJButton.setEnabled(creationAdherentOk); + annulerAdherentJButton.setEnabled(creationAdherentOk); + } + + public void montrerDetail(IBibliotheque.Adhérent adhérent) { + if (adhérent == null) { + idAdherentDetailjTextField.setText(""); + prenomAherentDetailjTextField.setText(""); + nomAherentDetailjTextField.setText(""); + } else { + idAdherentDetailjTextField.setText(String.valueOf(adhérent.getId())); + prenomAherentDetailjTextField.setText(adhérent.getPrenom()); + nomAherentDetailjTextField.setText(adhérent.getNom()); + } + } + + private class AdherentListModel extends DefaultComboBoxModel<IBibliotheque.Adhérent> implements Observer { + private final java.util.List<IBibliotheque.Adhérent> adhérents; + + public AdherentListModel(List<IBibliotheque.Adhérent> adhérents) { + this.adhérents = adhérents; + } + + @Override + public void update(Observable o, Object arg) { + //On raffraichit la liste + this.adhérents.clear(); + this.adhérents.addAll(controleurBibliotheque.getAdherents()); + + //si l'adhérent selectionné n'est plus dans la liste on déselectionne. + if (!adhérents.contains(getSelectedItem())) + setSelectedItem(null); + fireContentsChanged(this, 0, adhérents.size() - 1); + } + + @Override + public int getSize() { + return adhérents.size(); + } + + @Override + public IBibliotheque.Adhérent getElementAt(int index) { + return adhérents.get(index); + } + } + + class AdherentRenderer implements ListCellRenderer { + protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer(); + + public Component getListCellRendererComponent(JList list, Object value, int index, + boolean isSelected, boolean cellHasFocus) { + JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, + isSelected, cellHasFocus); + if (value instanceof IBibliotheque.Adhérent) { + IBibliotheque.Adhérent adherent = (IBibliotheque.Adhérent) value; + renderer.setText(adherent.getNom() + ", " + adherent.getPrenom()); + } + return renderer; + } + } +} diff --git a/src/main/java/fr/univtln/bruno/d14/simpleihm/App.java b/src/main/java/fr/univtln/bruno/d14/simpleihm/App.java deleted file mode 100644 index 953a665e13f4ccb30124590263e7edd668e0f8f1..0000000000000000000000000000000000000000 --- a/src/main/java/fr/univtln/bruno/d14/simpleihm/App.java +++ /dev/null @@ -1,14 +0,0 @@ -package fr.univtln.bruno.d14.simpleihm; - -/** - * Hello world! - */ -public class App { - public static void main(String[] args) { - ModeleBibliotheque bibliotheque = new ModeleBibliotheque(); - new VueBibliotheque(bibliotheque); - - bibliotheque.ajouterAuteur(new Auteur.AuteurBuilder().setPrenom("Jean").setNom("Martin").createAuteur()); - bibliotheque.ajouterAuteur(new Auteur.AuteurBuilder().setPrenom("Marie").setNom("Durand").createAuteur()); - } -} diff --git a/src/main/java/fr/univtln/bruno/d14/simpleihm/Auteur.java b/src/main/java/fr/univtln/bruno/d14/simpleihm/Auteur.java deleted file mode 100644 index 30c57bfff5723ecfb6fa5b38f6ea1dd9a619674a..0000000000000000000000000000000000000000 --- a/src/main/java/fr/univtln/bruno/d14/simpleihm/Auteur.java +++ /dev/null @@ -1,91 +0,0 @@ -package fr.univtln.bruno.d14.simpleihm; - -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import java.io.Serializable; - -/** - * Created by bruno on 03/10/14. - */ -//Cette annotation sert à la serialisation en XML et en JSON -@XmlRootElement -public class Auteur implements Serializable { - public static int nbAuteur = 0; - public int ID; - @XmlElement - private String nom; - @XmlElement - private String prenom; - @XmlElement - private String biographie; - - //Le constructeur sans paramètre est obligatoire pour la sérialisation en JSON/XML - public Auteur() { - } - - public static class AuteurBuilder { - private String nom; - private String prenom; - private String biographie = null; - - public AuteurBuilder setNom(String nom) { - this.nom = nom; - return this; - } - - public AuteurBuilder setPrenom(String prenom) { - this.prenom = prenom; - return this; - } - - public AuteurBuilder setBiographie(String biographie) { - this.biographie = biographie; - return this; - } - - public Auteur createAuteur() { - return new Auteur(nbAuteur++, nom, prenom, biographie); - } - } - - public String getBiographie() { - return biographie; - } - - private Auteur(int id, String nom, String prenom, String biographie) { - this.ID = id; - this.nom = nom; - this.prenom = prenom; - this.biographie = biographie; - } - - public String getNom() { - return nom; - } - - public String getPrenom() { - return prenom; - } - - @Override - public String toString() { - return nom + ", " + prenom; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Auteur auteur = (Auteur) o; - - if (ID != auteur.ID) return false; - - return true; - } - - @Override - public int hashCode() { - return ID; - } -} diff --git a/src/main/java/fr/univtln/bruno/d14/simpleihm/AuteurListModel.java b/src/main/java/fr/univtln/bruno/d14/simpleihm/AuteurListModel.java deleted file mode 100644 index 40f7a6aa36e84e63723c4f5d66b6e2fde9daba2d..0000000000000000000000000000000000000000 --- a/src/main/java/fr/univtln/bruno/d14/simpleihm/AuteurListModel.java +++ /dev/null @@ -1,36 +0,0 @@ -package fr.univtln.bruno.d14.simpleihm; - -import javax.swing.*; -import java.util.List; -import java.util.Observable; -import java.util.Observer; - -/** - * Created by bruno on 03/10/14. - */ -public class AuteurListModel extends DefaultComboBoxModel<Auteur> implements Observer { - private final List<Auteur> auteurs; - - public AuteurListModel(List<Auteur> auteurs) { - this.auteurs = auteurs; - } - - @Override - public void update(Observable o, Object arg) { - //si l'auteur selectionné n'est plus dans la liste on déselectionne. - if (!auteurs.contains(getSelectedItem())) - setSelectedItem(null); - else System.out.println(getSelectedItem()+" in "+auteurs); - fireContentsChanged(this, 0, auteurs.size() - 1); - } - - @Override - public int getSize() { - return auteurs.size(); - } - - @Override - public Auteur getElementAt(int index) { - return auteurs.get(index); - } -} diff --git a/src/main/java/fr/univtln/bruno/d14/simpleihm/ControleurBibliotheque.java b/src/main/java/fr/univtln/bruno/d14/simpleihm/ControleurBibliotheque.java deleted file mode 100644 index 43dd6efbeab0a02560f2c073b48da3adbd7cf412..0000000000000000000000000000000000000000 --- a/src/main/java/fr/univtln/bruno/d14/simpleihm/ControleurBibliotheque.java +++ /dev/null @@ -1,82 +0,0 @@ -package fr.univtln.bruno.d14.simpleihm; - -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.text.BadLocationException; -import javax.swing.text.Document; -import javax.swing.text.PlainDocument; - -/** - * Created by bruno on 03/10/14. - */ -public class ControleurBibliotheque { - private VueBibliotheque vueBibliotheque; - private ModeleBibliotheque modeleBibliotheque; - - private Document nomNouvelAuteurModel = new PlainDocument(); - private Document prenomNouvelAuteurModel = new PlainDocument(); - - public Document getNomNouvelAuteurModel() { - return nomNouvelAuteurModel; - } - - public Document getPrenomNouvelAuteurModel() { - return prenomNouvelAuteurModel; - } - - public ControleurBibliotheque(final VueBibliotheque vueBibliotheque, ModeleBibliotheque modeleBibliotheque) { - this.vueBibliotheque = vueBibliotheque; - this.modeleBibliotheque = modeleBibliotheque; - - DocumentListener ecouteurChangementTexte = new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - changedUpdate(e); - } - - @Override - public void removeUpdate(DocumentEvent e) { - changedUpdate(e); - } - - @Override - public void changedUpdate(DocumentEvent e) { - if ((nomNouvelAuteurModel.getLength() == 0 || prenomNouvelAuteurModel.getLength() == 0)) - vueBibliotheque.setCreationAuteurOk(false); - else - vueBibliotheque.setCreationAuteurOk(true); - } - }; - nomNouvelAuteurModel.addDocumentListener(ecouteurChangementTexte); - prenomNouvelAuteurModel.addDocumentListener(ecouteurChangementTexte); - - } - - public void ajouterAuteur() { - try { - modeleBibliotheque.ajouterAuteur( - prenomNouvelAuteurModel.getText(0, prenomNouvelAuteurModel.getLength()), - nomNouvelAuteurModel.getText(0, nomNouvelAuteurModel.getLength())); - } catch (BadLocationException e) { - e.printStackTrace(); - } - clearAuteur(); - } - - public void supprimerAuteur(final int ID) { - modeleBibliotheque.supprimerAuteur(ID); - } - - public void supprimerAuteur(Auteur auteur) { - modeleBibliotheque.supprimerAuteur(auteur); - } - - public void clearAuteur() { - try { - nomNouvelAuteurModel.remove(0, nomNouvelAuteurModel.getLength()); - prenomNouvelAuteurModel.remove(0, prenomNouvelAuteurModel.getLength()); - } catch (BadLocationException e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/fr/univtln/bruno/d14/simpleihm/ModeleBibliotheque.java b/src/main/java/fr/univtln/bruno/d14/simpleihm/ModeleBibliotheque.java deleted file mode 100644 index 55d391ba488317e8e9a21905e1920f66fd3c4b55..0000000000000000000000000000000000000000 --- a/src/main/java/fr/univtln/bruno/d14/simpleihm/ModeleBibliotheque.java +++ /dev/null @@ -1,46 +0,0 @@ -package fr.univtln.bruno.d14.simpleihm; - -import java.util.ArrayList; -import java.util.List; -import java.util.Observable; - -/** - * Created by bruno on 03/10/14. - */ -public class ModeleBibliotheque extends Observable { - final List<Auteur> auteurs = new ArrayList(); - - public enum ModeleBibliothequeEvent {AUTEUR, DOCUMENT, MATERIEL} - - public Auteur getAuteur(final int ID) { - for (Auteur auteur : auteurs) - if (auteur.ID == ID) return auteur; - return null; - } - - public void ajouterAuteur(String prenom, String nom) { - ajouterAuteur(new Auteur.AuteurBuilder().setPrenom(prenom).setNom(nom).createAuteur()); - } - - public void ajouterAuteur(Auteur auteur) { - auteurs.add(auteur); - //On previent les observateurs du changement - setChanged(); - notifyObservers(ModeleBibliothequeEvent.AUTEUR); - } - - public void supprimerAuteur(final int ID) { - supprimerAuteur(getAuteur(ID)); - } - - public void supprimerAuteur(Auteur auteur) { - auteurs.remove(auteur); - //On previent les observateurs du changement - setChanged(); - notifyObservers(ModeleBibliothequeEvent.AUTEUR); - } - - public List<Auteur> getAuteurs() { - return auteurs; - } -} diff --git a/src/main/java/fr/univtln/bruno/d14/simpleihm/VueBibliotheque.java b/src/main/java/fr/univtln/bruno/d14/simpleihm/VueBibliotheque.java deleted file mode 100644 index d2fd81ace4c6d079394efaec9564d1254fa1a3ad..0000000000000000000000000000000000000000 --- a/src/main/java/fr/univtln/bruno/d14/simpleihm/VueBibliotheque.java +++ /dev/null @@ -1,215 +0,0 @@ -package fr.univtln.bruno.d14.simpleihm; - -import javax.swing.*; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; - -/** - * Created by bruno on 03/10/14. - */ -public class VueBibliotheque extends JFrame { - private final ModeleBibliotheque modeleBibliotheque; - private final ControleurBibliotheque controleurBibliotheque; - - private final AuteurListModel auteurListModel; - - private final JPanel auteursSuppressionPanel = new JPanel(new GridBagLayout()); - private final JPanel auteurDetailPanel = new JPanel(new GridBagLayout()); - private final JPanel auteurAjoutPanel = new JPanel(new GridBagLayout()); - - private final JList<Auteur> auteurSuppressionJList; - private final JButton supprimerAuteurJButton = new JButton("Supprimer Auteur"); - - private final JComboBox<Auteur> auteurDetailJComboBox; - private final JTextField nomAuteurAjoutjTextField; - private final JTextField prenomAuteurAjoutjTextField; - private final JLabel nomAuteurJLabel = new JLabel("Nom"); - private final JLabel prenomAuteurJLabel = new JLabel("Prénom"); - private final JButton annulerAuteurJButton = new JButton("Annuler"); - private final JButton ajouterAuteurJButton = new JButton("Ajouter Auteur"); - - private final JTextField idAuteurDetailjTextField = new JTextField(); - private final JTextField prenomAuteurDetailjTextField = new JTextField(); - private final JTextField nomAuteurDetailjTextField = new JTextField(); - - public VueBibliotheque(ModeleBibliotheque modeleBibliotheque) { - super("Bibliotheque"); - setSize(800, 600); - - this.modeleBibliotheque = modeleBibliotheque; - this.controleurBibliotheque = new ControleurBibliotheque(this, modeleBibliotheque); - this.auteurListModel = new AuteurListModel(this.modeleBibliotheque.getAuteurs()); - - modeleBibliotheque.addObserver(auteurListModel); - - auteurSuppressionJList = new JList<>(auteurListModel); - auteurSuppressionJList.addListSelectionListener(new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent e) { - setSuppressionAuteurOk(auteurSuppressionJList.getSelectedValue() != null); - } - }); - - auteurDetailJComboBox = new JComboBox<Auteur>(auteurListModel); - auteurDetailJComboBox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - switch (e.getStateChange()) { - case ItemEvent.DESELECTED: - montrerDetail(null); - break; - case ItemEvent.SELECTED: - montrerDetail(auteurDetailJComboBox.getItemAt(auteurDetailJComboBox.getSelectedIndex())); - break; - } - - } - }); - - supprimerAuteurJButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - for (Auteur auteur : auteurSuppressionJList.getSelectedValuesList()) - controleurBibliotheque.supprimerAuteur(auteur); - } - }); - - ajouterAuteurJButton.setEnabled(false); - ajouterAuteurJButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - controleurBibliotheque.ajouterAuteur(); - } - }); - - supprimerAuteurJButton.setEnabled(false); - - annulerAuteurJButton.setEnabled(false); - annulerAuteurJButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - controleurBibliotheque.clearAuteur(); - } - }); - - nomAuteurAjoutjTextField = new JTextField(controleurBibliotheque.getNomNouvelAuteurModel(), "", 10); - prenomAuteurAjoutjTextField = new JTextField(controleurBibliotheque.getPrenomNouvelAuteurModel(), "", 10); - - idAuteurDetailjTextField.setEditable(false); - prenomAuteurDetailjTextField.setEditable(false); - nomAuteurDetailjTextField.setEditable(false); - - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - GridBagConstraints c = new GridBagConstraints(); - - // Suppression d'un auteur - auteursSuppressionPanel.setBorder(BorderFactory.createTitledBorder("Suppression")); - c.fill = GridBagConstraints.BOTH; - c.anchor = GridBagConstraints.NORTHEAST; - c.insets = new Insets(2, 2, 2, 2); - c.weighty = 0.8; - c.gridx = 0; - c.gridy = 0; - auteursSuppressionPanel.add(auteurSuppressionJList, c); - - c.fill = GridBagConstraints.HORIZONTAL; - c.gridheight = 1; - c.weighty = 0.2; - c.gridx = 0; - c.gridy = 1; - auteursSuppressionPanel.add(supprimerAuteurJButton, c); - - //Le détail d'un auteur - auteurDetailPanel.setBorder(BorderFactory.createTitledBorder("Détails")); - c.gridx = 0; - c.gridy = 0; - c.gridwidth = 1; - auteurDetailPanel.add(auteurDetailJComboBox, c); - c.gridx = 0; - c.gridy = 1; - auteurDetailPanel.add(idAuteurDetailjTextField, c); - c.gridx = 0; - c.gridy = 2; - auteurDetailPanel.add(nomAuteurDetailjTextField, c); - c.gridx = 0; - c.gridy = 3; - auteurDetailPanel.add(prenomAuteurDetailjTextField, c); - - - //L'ajout d'un auteur - auteurAjoutPanel.setBorder(BorderFactory.createTitledBorder("Ajout")); - c.gridx = 0; - c.gridy = 0; - c.gridwidth = 1; - auteurAjoutPanel.add(nomAuteurJLabel, c); - - c.gridx = 1; - c.gridy = 0; - auteurAjoutPanel.add(nomAuteurAjoutjTextField, c); - - c.gridx = 0; - c.gridy = 1; - auteurAjoutPanel.add(prenomAuteurJLabel, c); - - c.gridx = 1; - c.gridy = 1; - auteurAjoutPanel.add(prenomAuteurAjoutjTextField, c); - - c.gridx = 0; - c.gridy = 2; - auteurAjoutPanel.add(annulerAuteurJButton, c); - - c.gridx = 1; - c.gridy = 2; - auteurAjoutPanel.add(ajouterAuteurJButton, c); - - //Ajout des panel de suppression, d'ajout et de detail - getContentPane().setLayout(new GridBagLayout()); - c.fill = GridBagConstraints.HORIZONTAL; - c.gridx = 0; - c.gridy = 0; - getContentPane().add(auteurDetailPanel, c); - - c.fill = GridBagConstraints.BOTH; - c.gridx = 1; - c.gridy = 0; - getContentPane().add(auteursSuppressionPanel, c); - - c.fill = GridBagConstraints.HORIZONTAL; - c.gridx = 2; - c.gridy = 0; - getContentPane().add(auteurAjoutPanel, c); - //pack(); - - setVisible(true); - } - - private void setSuppressionAuteurOk(boolean b) { - supprimerAuteurJButton.setEnabled(b); - } - - public void setCreationAuteurOk(boolean creationAuteurOk) { - ajouterAuteurJButton.setEnabled(creationAuteurOk); - annulerAuteurJButton.setEnabled(creationAuteurOk); - } - - public void montrerDetail(Auteur auteur) { - if (auteur==null) { - idAuteurDetailjTextField.setText(""); - prenomAuteurDetailjTextField.setText(""); - nomAuteurDetailjTextField.setText(""); - } - else{ - idAuteurDetailjTextField.setText(String.valueOf(auteur.ID)); - prenomAuteurDetailjTextField.setText(auteur.getPrenom()); - nomAuteurDetailjTextField.setText(auteur.getNom()); - } - } - -} diff --git a/src/test/java/fr/univtln/bruno/d14/AppTest.java b/src/test/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/AppTest.java similarity index 91% rename from src/test/java/fr/univtln/bruno/d14/AppTest.java rename to src/test/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/AppTest.java index 49feb4cbcd4dd0043d770263c7657906e6e4cf17..816e75e5412dc41d27539439e3cf7c96bbc19f06 100644 --- a/src/test/java/fr/univtln/bruno/d14/AppTest.java +++ b/src/test/java/fr/univtln/bruno/coursjava/librarymanager/simplegui/AppTest.java @@ -1,4 +1,4 @@ -package fr.univtln.bruno.d14; +package fr.univtln.bruno.coursjava.librarymanager.simplegui; import junit.framework.Test; import junit.framework.TestCase;