diff --git a/Makefile b/Makefile index 5d699bc..2636d5a 100644 --- a/Makefile +++ b/Makefile @@ -1,75 +1,56 @@ +# === Configuration === +SRC_DIR := src/fr/iutfbleau/papillon +BUILD_DIR := build +DOC_DIR := doc +LIB_DIR := lib +LIB := $(LIB_DIR)/mariadb +MAIN_CLASS := fr.iutfbleau.papillon.Start - ==== Paramètres du projet ==== -APP_NAME := papillon -MAIN_CLASS := fr.iutfbleau.papillon.Start # <-- change si ton main est ailleurs +# === Commandes principales === -SRC_DIR := src -BUILD_DIR:= build -DIST_DIR := dist -RES_DIR := res -LIB_DIR := lib +# Compilation du projet +compile: + @echo === Compilation du projet === + javac -encoding UTF-8 -cp "$(LIB)" -d $(BUILD_DIR) $(SRC_DIR)/*.java + @echo Compilation terminee ! -Driver MariaDB -DRIVER_JAR := $(LIB_DIR)/mariadb - -Séparateur de classpath selon OS -ifeq ($(OS),Windows_NT) - SEP := ; -else - SEP := : -endif - -Liste des sources et classes correspondantes -SOURCES := $(shell find $(SRC_DIR) -name ".java") -CLASSES := $(SOURCES:$(SRC_DIR)/%.java=$(BUILD_DIR)/%.class) - -==== Règles ==== -.PHONY: all compile jar run run-jar clean rebuild - -all: compile - -$(BUILD_DIR): - @mkdir -p $(BUILD_DIR) - -$(DIST_DIR): - @mkdir -p $(DIST_DIR) - -Compilation de chaque .java vers build/ en respectant les packages -$(BUILD_DIR)/%.class: $(SRC_DIR)/%.java | $(BUILD_DIR) - @mkdir -p $(dir $@) - javac -classpath "$(DRIVER_JAR)" -d $(BUILD_DIR) $< - -Compile tout + copie des ressources si dossier res/ existe -compile: $(CLASSES) - @if [ -d "$(RES_DIR)" ]; then \ - echo "Copie des ressources..."; \ - cp -r $(RES_DIR)/ $(BUILD_DIR)/; \ - fi - @echo "==> Compilation OK" - -MANIFEST avec Main-Class et Class-Path (référence le driver) -MANIFEST.MF: - @echo "Manifest-Version: 1.0" > MANIFEST.MF - @echo "Main-Class: $(MAIN_CLASS)" >> MANIFEST.MF - @echo "Class-Path: ../$(DRIVER_JAR)" >> MANIFEST.MF - -Construction du JAR -jar: compile MANIFEST.MF | $(DIST_DIR) - jar cfm $(DIST_DIR)/$(APP_NAME).jar MANIFEST.MF -C $(BUILD_DIR) . - @echo "==> JAR créé: $(DIST_DIR)/$(APP_NAME).jar" - -Exécution directe depuis build/ + driver sur le classpath +# Exécution du programme run: compile - java -classpath "$(BUILD_DIR)$(SEP)$(DRIVER_JAR)" $(MAIN_CLASS) - -Exécution du .jar (le MANIFEST référence le driver dans lib/) -run-jar: jar - java -jar "$(DIST_DIR)/$(APP_NAME).jar" - -clean: - rm -rf $(BUILD_DIR) $(DIST_DIR) MANIFEST.MF - -rebuild: clean all + @echo === Execution du programme === + java -cp "$(BUILD_DIR);$(LIB)" $(MAIN_CLASS) +# Génération de la documentation Javadoc doc: - javadoc -d doc/ src/*.java \ No newline at end of file + @echo === Generation de la documentation Javadoc === + javadoc -d $(DOC_DIR) -encoding UTF-8 -cp "$(LIB)" $(SRC_DIR)/*.java + @echo Documentation generee dans le dossier $(DOC_DIR) + +# === Création du JAR === +jar: compile + @echo === Creation du fichier JAR === + echo Main-Class: $(MAIN_CLASS) > manifest.txt + jar cfm $(JAR_FILE) manifest.txt -C $(BUILD_DIR) . + @echo Archive JAR creee : $(JAR_FILE) + @del manifest.txt 2>nul || true + +# === Exécution du JAR === +run-jar: jar + @echo === Execution du JAR === + java -cp "$(JAR_FILE);$(LIB)" -jar $(JAR_FILE) + +# Nettoyage du dossier build +clean: + @echo === Nettoyage des fichiers compiles === + @rmdir /s /q $(BUILD_DIR) 2>nul || true + @mkdir $(BUILD_DIR) + @echo Build nettoye. + +# Nettoyage complet (build + doc) +reset: clean + @echo === Suppression de la documentation === + @rmdir /s /q $(DOC_DIR) 2>nul || true + @mkdir $(DOC_DIR) + @echo Tout a ete nettoye. + +# Compilation + exécution directe +all: compile run diff --git a/logo.png b/logo.png new file mode 100644 index 0000000..60280aa Binary files /dev/null and b/logo.png differ diff --git a/src/fr/iutfbleau/papillon/BaseDeDonnees.java b/src/fr/iutfbleau/papillon/BaseDeDonnees.java index bf2e499..3f96a0d 100644 --- a/src/fr/iutfbleau/papillon/BaseDeDonnees.java +++ b/src/fr/iutfbleau/papillon/BaseDeDonnees.java @@ -1,3 +1,5 @@ +package fr.iutfbleau.papillon; + import java.sql.*; /** diff --git a/src/fr/iutfbleau/papillon/BtnAjouter.java b/src/fr/iutfbleau/papillon/BtnAjouter.java index 5a0a2b2..cfcb7ac 100644 --- a/src/fr/iutfbleau/papillon/BtnAjouter.java +++ b/src/fr/iutfbleau/papillon/BtnAjouter.java @@ -1,6 +1,5 @@ package fr.iutfbleau.papillon; -import java.util.ArrayList; import javax.swing.*; import java.awt.event.*; import java.awt.*; diff --git a/src/fr/iutfbleau/papillon/FenetreRappel.java b/src/fr/iutfbleau/papillon/FenetreRappel.java index 95bddea..05e1a2d 100644 --- a/src/fr/iutfbleau/papillon/FenetreRappel.java +++ b/src/fr/iutfbleau/papillon/FenetreRappel.java @@ -1,6 +1,5 @@ package fr.iutfbleau.papillon; -import javax.swing.event.*; import java.awt.event.*; import javax.swing.*; import java.awt.*; diff --git a/src/fr/iutfbleau/papillon/FichierDemarrage.java b/src/fr/iutfbleau/papillon/FichierDemarrage.java deleted file mode 100644 index 33e8bce..0000000 --- a/src/fr/iutfbleau/papillon/FichierDemarrage.java +++ /dev/null @@ -1,32 +0,0 @@ -public class FichierDemarrage { - public static void main(String[] args) { - try { - String cle = UserKey.lireOuCreerCle(); - int userId = UtilisateurBD.getOrCreateUserId(cle, "local_user"); - - // Démo rapide - Rappel r = new Rappel("Faire le TD", "chapitre JDBC", "Travail", 2); - int idNew = RappelBD.ajouterPourUtilisateur(userId, r); - - for (Rappel x : RappelBD.listerParUtilisateur(userId)) { - System.out.println(" - " + x.toString()); - } - - r.setTitre("Faire le TD (MAJ)"); - RappelBD.modifierPourUtilisateur(userId, r.getId(), r); - - for (Rappel x : RappelBD.listerParUtilisateur(userId)) { - System.out.println(" * " + x.toString()); - } - - RappelBD.supprimerPourUtilisateur(userId, r.getId()); - - for (Rappel x : RappelBD.listerParUtilisateur(userId)) { - System.out.println(" # " + x.toString()); - } - - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/fr/iutfbleau/papillon/GestionModif.java b/src/fr/iutfbleau/papillon/GestionModif.java index c71baa1..aa9747a 100644 --- a/src/fr/iutfbleau/papillon/GestionModif.java +++ b/src/fr/iutfbleau/papillon/GestionModif.java @@ -2,7 +2,6 @@ package fr.iutfbleau.papillon; import java.util.ArrayList; import javax.swing.*; -import java.awt.*; import java.awt.event.*; diff --git a/src/fr/iutfbleau/papillon/PanelRappel.java b/src/fr/iutfbleau/papillon/PanelRappel.java index dc28efb..5995a72 100644 --- a/src/fr/iutfbleau/papillon/PanelRappel.java +++ b/src/fr/iutfbleau/papillon/PanelRappel.java @@ -1,41 +1,84 @@ +package fr.iutfbleau.papillon; + import javax.swing.*; import java.awt.*; import java.awt.event.*; +/** + * La classe PanelRappel représente l’affichage graphique + * d’un rappel dans l’application Papillon. + *

+ * Chaque panneau contient le titre, un aperçu du contenu, ainsi qu’une + * couleur correspondant au thème du rappel. + * L’utilisateur peut interagir avec ce panneau (sélection, clic droit, etc.). + *

+ * + * @version 1.0 + * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL + */ public class PanelRappel extends JPanel implements ActionListener, MouseListener { + + /** Indique si le rappel est actuellement sélectionné. */ private boolean estSelectionne = false; + /** Label affichant le titre du rappel. */ private JLabel lbtitre; + + /** Label affichant un aperçu du contenu du rappel. */ private JLabel lbcontenu; + + /** Référence vers le rappel associé à ce panneau. */ private Rappel r; + /** Menu contextuel (clic droit). */ private JPopupMenu menu; + + /** Élément du menu permettant d’ouvrir le rappel. */ private JMenuItem itemOuvrir; + + /** Référence à la fenêtre principale. */ private Main main; + /** Liste des couleurs disponibles pour les thèmes. */ private static CouleurList couleur = new CouleurList(); + /** + * Constructeur du panneau associé à un rappel et à la fenêtre principale. + * + * @param r le rappel à afficher + * @param main la fenêtre principale + */ public PanelRappel(Rappel r, Main main) { super(new BorderLayout(2, 0)); this.main = main; createPanel(r); } + /** + * Constructeur du panneau associé à un rappel sans référence à la fenêtre principale. + * + * @param r le rappel à afficher + */ public PanelRappel(Rappel r) { super(new BorderLayout(2, 0)); createPanel(r); } + /** + * Initialise et configure le panneau pour afficher les informations du rappel. + * + * @param r le rappel à afficher + */ public void createPanel(Rappel r){ this.r = r; - // --- Titre et contenu raccourci --- + // Titre et contenu raccourci lbtitre = new JLabel("[" + r.getRang() + "] " + r.getTitre()); lbcontenu = new JLabel( "" + (r.getContenu().length() > 40 ? r.getContenu().substring(0, 40) + "..." : r.getContenu()) + "" ); - // --- Apparence de base --- + // - Apparence de base this.setPreferredSize(new Dimension(70, 50)); this.setBackground(couleur.couleurDe(r.getTheme())); this.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 2)); @@ -44,44 +87,69 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener GridBagConstraints c = new GridBagConstraints(); c.anchor = GridBagConstraints.NORTHWEST; - // --- Position du titre --- + // - Position du titre c.gridx = 0; c.gridy = 0; c.weightx = 1; c.fill = GridBagConstraints.NONE; add(lbtitre, c); - // --- Position du contenu --- + // -Position du contenu c.gridx = 0; c.gridy = 1; c.weightx = 1; c.fill = GridBagConstraints.NONE; add(lbcontenu, c); - // --- Menu contextuel (clic droit) --- + // - Menu contextuel (clic droit) menu = new JPopupMenu(); itemOuvrir = new JMenuItem("Ouvrir"); itemOuvrir.addActionListener(this); menu.add(itemOuvrir); - // --- Activation des clics --- + // - Activation des clics addMouseListener(this); } - // === GETTERS === + // GETTERS + + + /** + * Indique si le panneau est actuellement sélectionné. + * + * @return true si le panneau est sélectionné, false sinon + */ public boolean getSelection() { return estSelectionne; } + /** + * Renvoie l’identifiant du rappel affiché. + * + * @return l’identifiant unique du rappel + */ public int getId() { return r.getId(); } + /** + * Renvoie le rappel associé à ce panneau. + * + * @return le rappel affiché dans ce panneau + */ public Rappel getRappel() { return r; } - // === ACTIONS === + + /** + * Gère les actions déclenchées par les éléments du menu contextuel. + *

+ * Si l’utilisateur clique sur "Ouvrir", la fenêtre détaillée du rappel est affichée. + *

+ * + * @param e l’événement d’action déclenché + */ @Override public void actionPerformed(ActionEvent e) { Object src = e.getSource(); @@ -92,7 +160,15 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener } } - // === GESTION DES CLICS SOURIS === + /** + * Gère les clics de souris sur le panneau. + *

+ * Un clic gauche sélectionne/désélectionne le panneau, + * tandis qu’un clic droit affiche le menu contextuel. + *

+ * + * @param e l’événement de souris détecté + */ @Override public void mousePressed(MouseEvent e) { if (e.isPopupTrigger()) { @@ -104,6 +180,15 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener } } + + /** + * Gère la libération du clic de souris. + *

+ * Si le clic est un clic droit, le menu contextuel s’affiche. + *

+ * + * @param e l’événement de souris + */ @Override public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) { @@ -111,6 +196,15 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener } } + + /** + * Gère les clics simples ou doubles sur le panneau. + *

+ * Un double clic gauche ouvre la fenêtre de rappel complète. + *

+ * + * @param e l’événement de souris + */ @Override public void mouseClicked(MouseEvent e) { // === Double clic pour ouvrir la vue complète === @@ -120,17 +214,35 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener } } + /** + * Change l’apparence du panneau lorsque la souris entre dans sa zone. + * + * @param e l’événement de souris + */ @Override public void mouseEntered(MouseEvent e) { setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); } + /** + * Restaure la bordure du panneau lorsque la souris quitte sa zone. + * + * @param e l’événement de souris + */ @Override public void mouseExited(MouseEvent e) { setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1)); } + /** + * Met à jour l’apparence du panneau en fonction de son état de sélection. + *

+ * Si le panneau est sélectionné, son fond devient gris clair + * et une bordure noire est appliquée. + * Sinon, la couleur de fond correspond au thème du rappel. + *

+ */ private void majApparence() { if (estSelectionne) { setBackground(Color.LIGHT_GRAY); diff --git a/src/fr/iutfbleau/papillon/Rappel.java b/src/fr/iutfbleau/papillon/Rappel.java index 46e6fb7..6b018ba 100644 --- a/src/fr/iutfbleau/papillon/Rappel.java +++ b/src/fr/iutfbleau/papillon/Rappel.java @@ -1,9 +1,11 @@ +package fr.iutfbleau.papillon; + /** * La classe Rappel représente un rappel utilisateur, * avec un titre, un contenu, un thème et un rang de priorité. * * @version 1.0 - * @author Seri-khane Yolou, Aylane SEHL, Jenson VAL + * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL */ public class Rappel { diff --git a/src/fr/iutfbleau/papillon/Utilisateur.java b/src/fr/iutfbleau/papillon/Utilisateur.java index 5e28f6f..86f1eca 100644 --- a/src/fr/iutfbleau/papillon/Utilisateur.java +++ b/src/fr/iutfbleau/papillon/Utilisateur.java @@ -49,4 +49,4 @@ public class Utilisateur { public String toString() { return "Utilisateur [id=" + id + ", cle=" + cle + "]"; } -} \ No newline at end of file +} diff --git a/src/fr/iutfbleau/papillon/UtilisateurBD.java b/src/fr/iutfbleau/papillon/UtilisateurBD.java index aab4000..fbf621b 100644 --- a/src/fr/iutfbleau/papillon/UtilisateurBD.java +++ b/src/fr/iutfbleau/papillon/UtilisateurBD.java @@ -1,3 +1,5 @@ +package fr.iutfbleau.papillon; + import java.sql.*; /** @@ -7,7 +9,7 @@ import java.sql.*; * et de lire un utilisateur complet via sa clé.

* * @version 1.0 - * @author Junior + * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL */ public class UtilisateurBD { diff --git a/src/fr/iutfbleau/papillon/logo.png b/src/fr/iutfbleau/papillon/logo.png new file mode 100644 index 0000000..60280aa Binary files /dev/null and b/src/fr/iutfbleau/papillon/logo.png differ