diff --git a/bd.properties b/bd.properties new file mode 100644 index 0000000..24b39d4 --- /dev/null +++ b/bd.properties @@ -0,0 +1,4 @@ +#HSQL Database Engine 2.3.0 +#Wed Dec 04 11:32:45 CET 2013 +version=2.3.0 +modified=no diff --git a/bd.script b/bd.script new file mode 100644 index 0000000..88cd784 --- /dev/null +++ b/bd.script @@ -0,0 +1,60 @@ +SET DATABASE UNIQUE NAME HSQLDB42BD230C27 +SET DATABASE GC 0 +SET DATABASE DEFAULT RESULT MEMORY ROWS 0 +SET DATABASE EVENT LOG LEVEL 0 +SET DATABASE SQL NAMES FALSE +SET DATABASE SQL REFERENCES FALSE +SET DATABASE SQL SIZE TRUE +SET DATABASE SQL TYPES FALSE +SET DATABASE SQL TDC DELETE TRUE +SET DATABASE SQL TDC UPDATE TRUE +SET DATABASE SQL TRANSLATE TTI TYPES TRUE +SET DATABASE SQL CONCAT NULLS TRUE +SET DATABASE SQL UNIQUE NULLS TRUE +SET DATABASE SQL CONVERT TRUNCATE TRUE +SET DATABASE SQL AVG SCALE 0 +SET DATABASE SQL DOUBLE NAN TRUE +SET DATABASE TRANSACTION CONTROL LOCKS +SET DATABASE DEFAULT ISOLATION LEVEL READ COMMITTED +SET DATABASE TRANSACTION ROLLBACK ON CONFLICT TRUE +SET DATABASE TEXT TABLE DEFAULTS '' +SET FILES WRITE DELAY 500 MILLIS +SET FILES BACKUP INCREMENT TRUE +SET FILES CACHE SIZE 10000 +SET FILES CACHE ROWS 50000 +SET FILES SCALE 32 +SET FILES LOB SCALE 32 +SET FILES DEFRAG 0 +SET FILES NIO TRUE +SET FILES NIO SIZE 256 +SET FILES LOG TRUE +SET FILES LOG SIZE 50 +CREATE USER SA PASSWORD DIGEST 'd41d8cd98f00b204e9800998ecf8427e' +ALTER USER SA SET LOCAL TRUE +CREATE SCHEMA PUBLIC AUTHORIZATION DBA +SET SCHEMA PUBLIC +CREATE MEMORY TABLE PUBLIC.MEMBRES(IDMEMBRE INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,NOM VARCHAR(20),PRENOM VARCHAR(20),ADRESSE VARCHAR(50),DTN DATE,NUMTEL VARCHAR(20),DROIT INTEGER,DATEADHESION DATE,PASSWORD VARCHAR(20)) +ALTER TABLE PUBLIC.MEMBRES ALTER COLUMN IDMEMBRE RESTART WITH 0 +CREATE MEMORY TABLE PUBLIC.EVENEMENTS(IDEVENEMENT INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,TYPE INTEGER,DATEE DATE,LIEU VARCHAR(20)) +ALTER TABLE PUBLIC.EVENEMENTS ALTER COLUMN IDEVENEMENT RESTART WITH 8 +CREATE MEMORY TABLE PUBLIC.PARTICIPER(IDEVENEMENT INTEGER,IDMEMBRE INTEGER,ROLE INTEGER,PRIMARY KEY(IDMEMBRE,IDEVENEMENT),FOREIGN KEY(IDMEMBRE) REFERENCES PUBLIC.MEMBRES(IDMEMBRE),FOREIGN KEY(IDEVENEMENT) REFERENCES PUBLIC.EVENEMENTS(IDEVENEMENT)) +CREATE MEMORY TABLE PUBLIC.DISCIPLINES(NOMDISIPLINE VARCHAR(20) PRIMARY KEY,IDEVENEMENT INTEGER,FOREIGN KEY(IDEVENEMENT) REFERENCES PUBLIC.EVENEMENTS(IDEVENEMENT)) +ALTER SEQUENCE SYSTEM_LOBS.LOB_ID RESTART WITH 1 +SET DATABASE DEFAULT INITIAL SCHEMA PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.SQL_IDENTIFIER TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.YES_OR_NO TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.TIME_STAMP TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CARDINAL_NUMBER TO PUBLIC +GRANT USAGE ON DOMAIN INFORMATION_SCHEMA.CHARACTER_DATA TO PUBLIC +GRANT DBA TO SA +SET SCHEMA SYSTEM_LOBS +INSERT INTO BLOCKS VALUES(0,2147483647,0) +SET SCHEMA PUBLIC +INSERT INTO EVENEMENTS VALUES(0,0,'2013-10-12','lol') +INSERT INTO EVENEMENTS VALUES(1,0,'2013-10-12','lol') +INSERT INTO EVENEMENTS VALUES(2,0,'2013-10-12','lol') +INSERT INTO EVENEMENTS VALUES(3,0,'2013-10-12','lol') +INSERT INTO EVENEMENTS VALUES(4,1,'2012-11-20','toulouse') +INSERT INTO EVENEMENTS VALUES(5,0,'2013-10-12','lol') +INSERT INTO EVENEMENTS VALUES(6,1,'2012-11-20','toulouse') +INSERT INTO EVENEMENTS VALUES(7,1,'2012-11-20','toulouse') diff --git a/bin/CtrlAccesListe.class b/bin/CtrlAccesListe.class new file mode 100644 index 0000000..2593013 Binary files /dev/null and b/bin/CtrlAccesListe.class differ diff --git a/bin/CtrlLogin.class b/bin/CtrlLogin.class new file mode 100644 index 0000000..48b3965 Binary files /dev/null and b/bin/CtrlLogin.class differ diff --git a/bin/modele/Disciplines.class b/bin/modele/Disciplines.class new file mode 100644 index 0000000..a60cb7b Binary files /dev/null and b/bin/modele/Disciplines.class differ diff --git a/bin/modele/Evenements.class b/bin/modele/Evenements.class new file mode 100644 index 0000000..8a4c6b8 Binary files /dev/null and b/bin/modele/Evenements.class differ diff --git a/bin/modele/Membres.class b/bin/modele/Membres.class new file mode 100644 index 0000000..c221538 Binary files /dev/null and b/bin/modele/Membres.class differ diff --git a/bin/modele/Participer.class b/bin/modele/Participer.class new file mode 100644 index 0000000..f45b1b3 Binary files /dev/null and b/bin/modele/Participer.class differ diff --git a/bin/test.class b/bin/test.class new file mode 100644 index 0000000..8e7a504 Binary files /dev/null and b/bin/test.class differ diff --git a/bin/vue/Planning$1.class b/bin/vue/Planning$1.class new file mode 100644 index 0000000..03d1efb Binary files /dev/null and b/bin/vue/Planning$1.class differ diff --git a/bin/vue/Planning$2.class b/bin/vue/Planning$2.class new file mode 100644 index 0000000..48eb8b9 Binary files /dev/null and b/bin/vue/Planning$2.class differ diff --git a/bin/vue/Planning$3.class b/bin/vue/Planning$3.class new file mode 100644 index 0000000..3015127 Binary files /dev/null and b/bin/vue/Planning$3.class differ diff --git a/bin/vue/Planning.class b/bin/vue/Planning.class new file mode 100644 index 0000000..fb64412 Binary files /dev/null and b/bin/vue/Planning.class differ diff --git a/lib/hsqldb.jar b/lib/hsqldb.jar new file mode 100644 index 0000000..3b1e6bd Binary files /dev/null and b/lib/hsqldb.jar differ diff --git a/lib/servlet-2_3-fcs-classfiles.zip b/lib/servlet-2_3-fcs-classfiles.zip new file mode 100644 index 0000000..c450772 Binary files /dev/null and b/lib/servlet-2_3-fcs-classfiles.zip differ diff --git a/lib/sqltool.jar b/lib/sqltool.jar new file mode 100644 index 0000000..a905c54 Binary files /dev/null and b/lib/sqltool.jar differ diff --git a/src/CtrlAccesListe.java b/src/CtrlAccesListe.java new file mode 100644 index 0000000..cebccf1 --- /dev/null +++ b/src/CtrlAccesListe.java @@ -0,0 +1,62 @@ +import java.awt.Container; +import java.awt.FlowLayout; +import java.sql.ResultSet; +import java.sql.SQLException; + +import javax.swing.JFrame; + +import vue.Planning; + +import modele.Evenements; + + +public class CtrlAccesListe { + + public static void main(String[] args) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException{ + Evenements e; + ResultSet r; + + JFrame f_planning ; + Planning p ; + + f_planning = new JFrame("Planning") ; + p = new Planning() ; + + Container c = f_planning.getContentPane(); + c.setLayout(new FlowLayout()); + + + + + + // cr�e le planning � la date actuelle + c.add(p); + /* + // c.add(new Planning(2012, 4, 20)) ; + p.color_date(11) ; + p.color_date(20) ;*/ + + f_planning.pack(); + // f_planning.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f_planning.setVisible(true); + f_planning.setResizable(false) ; + + + e = new Evenements(); + + e.setEvenement("2012-11-20", 1, "toulouse"); + r = e.getEvenement(-1); + + while(r.next()) + { + String str[]=r.getString("dateE").split("-"); + + p.color_date(Integer.decode( str[2])); + + } + + + + } + +} diff --git a/src/CtrlLogin.java b/src/CtrlLogin.java new file mode 100644 index 0000000..4ce58ab --- /dev/null +++ b/src/CtrlLogin.java @@ -0,0 +1,10 @@ + +public class CtrlLogin { + //attributs + + //Constructeurs + + //méthodes + + +} diff --git a/src/modele/Disciplines.java b/src/modele/Disciplines.java new file mode 100644 index 0000000..b83a56a --- /dev/null +++ b/src/modele/Disciplines.java @@ -0,0 +1,80 @@ +package modele; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class Disciplines { + //attributs + + //constructueurs + public Disciplines(){} + + //methodes + /** + * permet de saisir une discipline pour un entrainement donné + * @param pIdEntrainement + * @param pNomDiscipline + * @throws InstantiationException + * @throws IllegalAccessException + * @throws ClassNotFoundException + * @throws SQLException + */ + public void setDiscipline(int pIdEntrainement, String pNomDiscipline) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //insertion nouveau membres + Statement statement = connexion.createStatement() ; + statement.executeUpdate("INSERT INTO Disciplines (nomDiscipline, idEntrainement)" + + "VALUES ('"+ pIdEntrainement +"', '"+ pIdEntrainement ); + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + connexion.close(); + } + + /** + * permet d'obtenir la discipline pour un entrainement donnée + * @param pIdEntrainement + * @return + * @throws InstantiationException + * @throws IllegalAccessException + * @throws ClassNotFoundException + * @throws SQLException + */ + + public String getDiscipline (int pIdEntrainement) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + Statement statement; + ResultSet resultat; + + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //récupération infos dans la bases + + statement = connexion.createStatement(); + resultat = statement.executeQuery("SELECT nomDiscipline FROM membres WHERE" + + "idEvenement =" + pIdEntrainement); + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + return resultat.getString("nomDiscipline"); + + } + +} diff --git a/src/modele/Evenements.java b/src/modele/Evenements.java new file mode 100644 index 0000000..90dc8be --- /dev/null +++ b/src/modele/Evenements.java @@ -0,0 +1,76 @@ +package modele; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class Evenements { + + //attributs + + + //Constuctueurs + public Evenements(){}; + + //méthodes + public void setEvenement(String pDate, int pType, String pLieu) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //insertion nouveau membres + Statement statement = connexion.createStatement() ; + statement.executeUpdate("INSERT INTO Evenements (type, dateE, lieu)" + + "VALUES ('"+ pType +"', '"+ pDate +"', '"+ pLieu +"')" ); + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + connexion.close(); + } + + /** + * + * @param pIdEvenement + * @return un resultSet contenant le ou les infos evenements + * @throws InstantiationException + * @throws IllegalAccessException + * @throws ClassNotFoundException + * @throws SQLException + */ + public ResultSet getEvenement(int pIdEvenement) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + Statement statement; + ResultSet resultat; + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //récupération infos dans la bases + if(pIdEvenement == -1) + { + statement = connexion.createStatement(); + resultat = statement.executeQuery("SELECT * FROM evenements "); + + } + else + { + statement = connexion.createStatement(); + resultat = statement.executeQuery("SELECT * FROM evenements WHERE idEvenement =" + pIdEvenement); + } + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + return resultat; + } +} diff --git a/src/modele/Membres.java b/src/modele/Membres.java new file mode 100644 index 0000000..eedde7b --- /dev/null +++ b/src/modele/Membres.java @@ -0,0 +1,126 @@ +package modele; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + + + +public class Membres { + + //attributs +/* private String nom; + private String prenom; + private String adresse; + private String dtn; + private String numTel; + private String droit; + private String dateAdhesion; + private String password;*/ + + //Constructeurs + public Membres() {} + + //méthode + /** + * Insere dans la base un nouveau membres + * @param pNom + * @param pPrenom + * @param pDtn + * @param pNumTel + * @param pAdresse + * @param pDroit + * @param pDateAdhesion + * @param pPassword + * @throws InstantiationException + * @throws IllegalAccessException + * @throws ClassNotFoundException + * @throws SQLException + */ + public void setInfo(String pNom, String pPrenom, String pDtn, String pNumTel, String pAdresse, + int pDroit, String pDateAdhesion,String pPassword) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //insertion nouveau membres + Statement statement = connexion.createStatement() ; + statement.executeUpdate("INSERT INTO membres (nom, prenom, adresse," + +" numTel, droit, password, dtn, dateAdhesion )" + + "VALUES ('"+ pNom +"', '"+ pPrenom +"', '"+ pAdresse +"'," + +"'"+ pNumTel +"', '"+ pDroit +"', '"+ pPassword +"', " + +"'"+ pDtn +"', '"+ pDateAdhesion +"')"); + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + connexion.close(); + } + + /** + * idMembres les infos du membre ou si -1 alors retourne les infos de tout les membres + * @param pIdMembres + * @return un resultSet contenant le ou les infos membres + * @throws InstantiationException + * @throws IllegalAccessException + * @throws ClassNotFoundException + * @throws SQLException + */ + public ResultSet getInfo(int pIdMembre) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + Statement statement; + ResultSet resultat; + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //récupération infos dans la bases + if(pIdMembre == -1) + { + statement = connexion.createStatement(); + resultat = statement.executeQuery("SELECT * FROM membres "); + + } + else + { + statement = connexion.createStatement(); + resultat = statement.executeQuery("SELECT * FROM membres WHERE idMembre =" + pIdMembre); + } + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + return resultat; + } + + public void supprimer(int pIdMembre) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + Statement statement; + + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //récupération infos dans la bases + + statement = connexion.createStatement(); + statement.executeUpdate("DROP * WHERE idMembre= " + pIdMembre) ; + + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + } +} diff --git a/src/modele/Participer.java b/src/modele/Participer.java new file mode 100644 index 0000000..93e9fac --- /dev/null +++ b/src/modele/Participer.java @@ -0,0 +1,163 @@ +package modele; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class Participer { + //attributs + + //constructeurs + public Participer(){}; + + + //méthodes + /** + * permet de saisir le role d'un membre lors d'un evenement + * @param pIdEvenement + * @param pIdMembre + * @param role + * @throws InstantiationException + * @throws IllegalAccessException + * @throws ClassNotFoundException + * @throws SQLException + */ + public void setRole(int pIdEvenement, int pIdMembre, int role ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //insertion nouveau membres + Statement statement = connexion.createStatement() ; + statement.executeUpdate("INSERT INTO participer (idEvenement, idMembre, role)" + + "VALUES ('"+ pIdEvenement +"', '"+ pIdMembre +"', '"+ role +"')" ); + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + connexion.close(); + } + + + /** + * permet d'avoir le role d'un membre lors d'un evenement + * @param pIdEvenement + * @param pIdMembre + * @return + * @throws InstantiationException + * @throws IllegalAccessException + * @throws ClassNotFoundException + * @throws SQLException + */ + + public int getRole(int pIdEvenement, int pIdMembre) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + Statement statement; + ResultSet resultat; + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //récupération infos dans la bases + + statement = connexion.createStatement(); + resultat = statement.executeQuery("SELECT role FROM evenements WHERE idEvenement = " + + pIdEvenement + " AND idMembre = " + pIdMembre); + + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + return resultat.getInt("role"); + } + + /** + * permet de se désincrire un membre d'un evenelement + * @param pIdEvenement + * @param pIdMembre + * @throws InstantiationException + * @throws IllegalAccessException + * @throws ClassNotFoundException + * @throws SQLException + */ + public void setAnnuler(int pIdEvenement, int pIdMembre) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + Statement statement; + + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //récupération infos dans la bases + + statement = connexion.createStatement(); + statement.executeUpdate("DROP * WHERE idEvenement = " + + pIdEvenement + " AND idMembre = " + pIdMembre); + + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + } + + public ResultSet getListeParticipants(int pIdEvenement) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + Statement statement; + ResultSet resultat; + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //récupération infos dans la bases + + statement = connexion.createStatement(); + resultat = statement.executeQuery("SELECT idMembre FROM evenements WHERE idEvenement = " + + pIdEvenement ); + + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + return resultat; + } + + public ResultSet getListeParticipation (int pIdMembre) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException + { + Statement statement; + ResultSet resultat; + //connexion à la base + Connection connexion = null; + Class.forName("org.hsqldb.jdbcDriver" ).newInstance(); + connexion = DriverManager.getConnection("jdbc:hsqldb:file:bd", "sa", "" ); + + //récupération infos dans la bases + + statement = connexion.createStatement(); + resultat = statement.executeQuery("SELECT idEvenement FROM evenements WHERE idMembre = " + + pIdMembre ); + + + //fermeture base + statement = connexion.createStatement(); + statement.executeQuery("SHUTDOWN"); + statement.close(); + + return resultat; + } + +} diff --git a/src/test.java b/src/test.java new file mode 100644 index 0000000..7b0a5c5 --- /dev/null +++ b/src/test.java @@ -0,0 +1,42 @@ + +import java.sql.ResultSet; +import java.sql.SQLException; + + +import modele.Evenements; +import modele.Membres; + +public class test { + + + public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException { + + Membres m; + Evenements e; + ResultSet r; + + m = new Membres(); + e = new Evenements(); + + e.setEvenement("2013-10-12", 0, "lol"); + + //m.setInfo("g", "lo", "2000-05-08", "0568025855", "lol", 1, "2013-05-20", "pp"); + r = e.getEvenement(-1); + + + while(r.next()) + { + String str[]=r.getString("dateE").split("-"); + System.out.println(str[0]); + System.out.println(str[1]); + System.out.println(str[2]); + System.out.println(r.getDate("dateE")); + } + System.out.println("fin"); + } + + + +} + + diff --git a/src/vue/Planning.java b/src/vue/Planning.java new file mode 100644 index 0000000..94e9a61 --- /dev/null +++ b/src/vue/Planning.java @@ -0,0 +1,296 @@ +package vue; + + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.FlowLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Calendar; +import java.util.GregorianCalendar; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JPanel; + + +public class Planning extends JPanel { + + protected int yy; + protected int mm, dd; + protected JButton labs[][]; + protected int leadGap = 0; + + Calendar calendar = new GregorianCalendar(); + + + protected final int thisYear = calendar.get(Calendar.YEAR); + protected final int thisMonth = calendar.get(Calendar.MONTH); + private JButton b0; + + private JComboBox monthChoice; + private JComboBox yearChoice; + + private JButton b_inscrire ; + private JButton b_desinscrire ; + private JPanel p_button, p_grille, p_south ; + + + /** + * Construit un calendrier commencant � la date actuelle + */ + public Planning() { + super(); + setYYMMDD(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), + calendar.get(Calendar.DAY_OF_MONTH)); + buildGUI(); + recompute(); + print_button() ; + } + + /** + * Construit un calendrier, en donnant le jour, mois, ann�e + * + * @exception IllegalArgumentException + * Si l'ann�e n'est pas correcte + */ + public Planning(int year, int month, int today) { + super(); + setYYMMDD(year, month, today); + buildGUI(); + recompute(); + print_button() ; + } + + private void setYYMMDD(int year, int month, int today) { + yy = year; + mm = month; + dd = today; + } + + String[] months = { "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", + "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre" }; + + /** Build the GUI. Assumes that setYYMMDD has been called. */ + private void buildGUI() { + getAccessibleContext().setAccessibleDescription( + "Calendrier non disponible, desole"); + setBorder(BorderFactory.createEtchedBorder()); + + setLayout(new BorderLayout()); + + JPanel tp = new JPanel(); + tp.add(monthChoice = new JComboBox()); + + for (int i = 0; i < months.length; i++) + monthChoice.addItem(months[i]); + + monthChoice.setSelectedItem(months[mm]) ; + + monthChoice.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ae) { + int i = monthChoice.getSelectedIndex(); + if (i >= 0) { + mm = i; + recompute(); + } + } + }); + + monthChoice.getAccessibleContext().setAccessibleName("Mois"); + monthChoice.getAccessibleContext().setAccessibleDescription( + "Choisir mois"); + + tp.add(yearChoice = new JComboBox()); + yearChoice.setEditable(true); + + for (int i = yy - 5; i < yy + 5; i++) + yearChoice.addItem(Integer.toString(i)); + + yearChoice.setSelectedItem(Integer.toString(yy)); + + yearChoice.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent ae) { + int i = yearChoice.getSelectedIndex(); + if (i >= 0) { + yy = Integer.parseInt(yearChoice.getSelectedItem() + .toString()); + recompute(); + } + } + }); + add(BorderLayout.NORTH, tp); + + JPanel bp = new JPanel(); + bp.setLayout(new GridLayout(7, 7)); + labs = new JButton[6][7]; + + bp.add(b0 = new JButton("Dimanche")); + bp.add(new JButton("Lundi")); + bp.add(new JButton("Mardi")); + bp.add(new JButton("Mercredi")); + bp.add(new JButton("Jeudi")); + bp.add(new JButton("Vendredi")); + bp.add(new JButton("Samedi")); + + ActionListener dateSetter = new ActionListener() { + public void actionPerformed(ActionEvent e) { + String num = e.getActionCommand(); + + if (!num.equals("")) { + // met le jour actuel d'une couleur + setDayActive(Integer.parseInt(num)); + } + } + }; + + + // Ajout des boutons + for (int i = 0; i < 6; i++) + for (int j = 0; j < 7; j++) { + bp.add(labs[i][j] = new JButton("")); + labs[i][j].addActionListener(dateSetter); + } + + add(BorderLayout.CENTER, bp); + } + + public final static int dom[] = { 31, 28, 31, 30, /* jan fev mar avr */ + 31, 30, 31, 31, /* mai juin juil aout */ + 30, 31, 30, 31 /* sep oct nov dec */ + }; + + /** Compute which days to put where, in the Cal panel */ + protected void recompute() { + if (mm < 0 || mm > 11) + throw new IllegalArgumentException("Mois " + mm + + " bad, must be 0-11"); + clearDayActive(); + calendar = new GregorianCalendar(yy, mm, dd); + + leadGap = new GregorianCalendar(yy, mm, 1).get(Calendar.DAY_OF_WEEK) - 1; + + int daysInMonth = dom[mm]; + if (isLeap(calendar.get(Calendar.YEAR)) && mm == 1) + ++daysInMonth; + + // R�initialise le label + for (int i = 0; i < leadGap; i++) { + labs[0][i].setText(""); + } + + for (int i = 1; i <= daysInMonth; i++) { + JButton b = labs[(leadGap + i - 1) / 7][(leadGap + i - 1) % 7]; + b.setText(Integer.toString(i)); + } + + for (int i = leadGap + 1 + daysInMonth; i < 6 * 7; i++) { + labs[(i) / 7][(i) % 7].setText(""); + } + + // Shade current day, only if current month + if (thisYear == yy && mm == thisMonth) + setDayActive(dd); + + // Recharge l'�cran + repaint(); + } + + /** + * isLeap() returns true if the given year is a Leap Year. + * + * "a year is a leap year if it is divisible by 4 but not by 100, except + * that years divisible by 400 *are* leap years." -- Kernighan & Ritchie, + * _The C Programming Language_, p 37. + */ + public boolean isLeap(int year) { + if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) + return true; + return false; + } + + /** Set l'ann�e, le mois et le jour */ + public void setDate(int yy, int mm, int dd) { + this.yy = yy; + this.mm = mm; // starts at 0, like Date + this.dd = dd; + recompute(); + } + + /** Met � jour le jour actuel */ + private void clearDayActive() { + JButton b; + + if (activeDay > 0) { + b = labs[(leadGap + activeDay - 1) / 7][(leadGap + activeDay - 1) % 7]; + b.setBackground(b0.getBackground()); + b.repaint(); + activeDay = -1; + } + } + + private int activeDay = -1; + + /** Set just the day, on the current month */ + public void setDayActive(int newDay) { + + clearDayActive(); + + // Entre le nouveau + if (newDay <= 0) + dd = new GregorianCalendar().get(Calendar.DAY_OF_MONTH); + else + dd = newDay; + + Component square = labs[(leadGap + newDay - 1) / 7][(leadGap + newDay - 1) % 7]; + square.setBackground(Color.red); + square.repaint(); + activeDay = newDay; + + } + + public void setTaskDay(int newDay){ + + Component square = labs[(leadGap + newDay - 1) / 7][(leadGap + newDay - 1) % 7]; + + square.setBackground(Color.yellow); + square.repaint(); +} + + + private void print_button() { + // rajouter bouton inscrire / d�sinscrire, si jour dispo ou non + + this.b_inscrire = new JButton("S'inscrire") ; + this.b_desinscrire = new JButton("Se desinscrire") ; + + b_inscrire.setEnabled(true) ; + b_desinscrire.setEnabled(false) ; + + this.p_grille = new JPanel() ; + this.p_button = new JPanel() ; + this.p_south = new JPanel() ; + + p_button.setLayout(new FlowLayout()) ; + p_grille.setLayout(new GridLayout(1, 2)); + + p_button.add(p_grille) ; + p_grille.add(b_inscrire); + p_grille.add(b_desinscrire) ; + + p_south.add(p_button) ; + this.add(p_south, BorderLayout.SOUTH) ; + } + + public void color_date(int day) { + setTaskDay(day) ; + } + + + +}