From e8ee1eb2a2c41ada42bbe2bcd10f1f7e4c4b7cd0 Mon Sep 17 00:00:00 2001 From: Mysaa Date: Mon, 24 May 2021 16:18:45 +0200 Subject: [PATCH] =?UTF-8?q?Restructuration=20du=20projet,=20tout=20bien=20?= =?UTF-8?q?s=C3=A9par=C3=A9s=20dans=20des=20paquets=20MVC.=20Ajout=20du=20?= =?UTF-8?q?document=20de=20pr=C3=A9sentation=20du=20projet.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 14 +- kholloscopinator.pdf | Bin 0 -> 236345 bytes kholloscopinator.tex | 235 +++++++ settings.gradle | 2 +- .../java/com/bernard/kholle/KholloMain.java | 15 - .../java/com/bernard/kholle/model/Eleve.java | 7 - .../com/bernard/kholle/model/Horaire.java | 12 - .../java/com/bernard/kholle/model/KGroup.java | 8 - .../java/com/bernard/kholle/model/Kholle.java | 61 -- .../bernard/kholle/process/KholloMaker.java | 19 - .../kholle/process/KholloscopeProcessor.java | 102 --- .../com/bernard/kholloscopinator/Util.java | 35 + .../controlleur/FileParser.java | 5 + .../controlleur/FileWriter.java | 606 ++++++++++++++++++ .../controlleur/KholloscopeMaker.java | 211 ++++++ .../controlleur/OfficeController.java | 147 +++++ .../bernard/kholloscopinator/model/Eleve.java | 70 ++ .../kholloscopinator/model/Groupe.java | 64 ++ .../kholloscopinator/model/Horaire.java | 63 ++ .../kholloscopinator/model/KConfig.java | 299 +++++++++ .../kholloscopinator/model/Kholle.java | 67 ++ .../kholloscopinator/model/Kholleur.java | 54 ++ .../kholloscopinator/model/Kholloscope.java | 59 ++ .../kholloscopinator/model/Semaine.java | 64 ++ .../kholloscopinator/vue/MainFrame.java | 406 ++++++++++++ .../vue/TitledCheckableBorder.java | 99 +++ 26 files changed, 2491 insertions(+), 233 deletions(-) create mode 100644 kholloscopinator.pdf create mode 100644 kholloscopinator.tex delete mode 100644 src/main/java/com/bernard/kholle/KholloMain.java delete mode 100644 src/main/java/com/bernard/kholle/model/Eleve.java delete mode 100644 src/main/java/com/bernard/kholle/model/Horaire.java delete mode 100644 src/main/java/com/bernard/kholle/model/KGroup.java delete mode 100644 src/main/java/com/bernard/kholle/model/Kholle.java delete mode 100644 src/main/java/com/bernard/kholle/process/KholloMaker.java delete mode 100644 src/main/java/com/bernard/kholle/process/KholloscopeProcessor.java create mode 100644 src/main/java/com/bernard/kholloscopinator/Util.java create mode 100644 src/main/java/com/bernard/kholloscopinator/controlleur/FileParser.java create mode 100644 src/main/java/com/bernard/kholloscopinator/controlleur/FileWriter.java create mode 100644 src/main/java/com/bernard/kholloscopinator/controlleur/KholloscopeMaker.java create mode 100644 src/main/java/com/bernard/kholloscopinator/controlleur/OfficeController.java create mode 100644 src/main/java/com/bernard/kholloscopinator/model/Eleve.java create mode 100644 src/main/java/com/bernard/kholloscopinator/model/Groupe.java create mode 100644 src/main/java/com/bernard/kholloscopinator/model/Horaire.java create mode 100644 src/main/java/com/bernard/kholloscopinator/model/KConfig.java create mode 100644 src/main/java/com/bernard/kholloscopinator/model/Kholle.java create mode 100644 src/main/java/com/bernard/kholloscopinator/model/Kholleur.java create mode 100644 src/main/java/com/bernard/kholloscopinator/model/Kholloscope.java create mode 100644 src/main/java/com/bernard/kholloscopinator/model/Semaine.java create mode 100644 src/main/java/com/bernard/kholloscopinator/vue/MainFrame.java create mode 100644 src/main/java/com/bernard/kholloscopinator/vue/TitledCheckableBorder.java diff --git a/build.gradle b/build.gradle index 756f194..7c475c2 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ * * This generated file contains a sample Java Library project to get you started. * For more details take a look at the Java Libraries chapter in the Gradle - * user guide available at https://docs.gradle.org/4.10.2/userguide/java_library_plugin.html + * user guide available at https://docs.gradle.org/4.8.1/userguide/java_library_plugin.html */ plugins { @@ -21,13 +21,11 @@ dependencies { // Use JUnit test framework testImplementation 'junit:junit:4.12' - // https://mvnrepository.com/artifact/mysql/mysql-connector-java - compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.13' - - // https://mvnrepository.com/artifact/org.jopendocument/jOpenDocument - compile group: 'org.jopendocument', name: 'jOpenDocument', version: '1.3' - - + compile "org.libreoffice:juh:6.2.3" + compile "org.libreoffice:ridl:6.2.3" + compile "org.libreoffice:unoil:6.2.3" + compile "org.libreoffice:jurt:6.2.3" + compile "org.libreoffice:officebean:6.2.3" } // In this section you declare where to find the dependencies of your project diff --git a/kholloscopinator.pdf b/kholloscopinator.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eb55691fa6438a22cdc7c1e0e5aeac7176c59935 GIT binary patch literal 236345 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%0Dtw@Rp6=qUTQ*seAD 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

|Up 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, >=latex] + \tikzstyle{action} = [midway,right,text width=150,anchor=west,align=right] + + \node[debut] (start) at (0,7) {Démarrage}; + \node[file] (template) at (0,4) {Les fichiers 'Template' générés}; + \node[file] (rempli) at (0,2) {Les fichiers d'entrée remplis}; + \node[file] (donnees) at (0,0) {Les fichiers contenant les données du khôlloscope}; + \node[draw=none] (xl) at (6,7) {}; + \node[draw=none] (xr) at (-6,7) {}; + + \draw[actionA] (start)--(template) node[action] {L'utilisateur demande au programme un template}; + \draw[actionA] (template)--(rempli) node[action] {L'utilisateur remplis les données}; + \draw[actionA] (rempli)--(donnees) node[action] {L'utilisateur lance le programme}; + + \end{tikzpicture} + + \caption{Le cycle de création du khôlloscope} + \end{figure} + + + Au départ, l'utilisateur lance le programme avec les paramètres de son futur khôlloscope: calendrier, inclusion de la génération des groupes ou non, etc ... (Voir les Entrées en \ref{inputs}) + + Une fois que le programme a généré ces fichiers vides, l'utilisateur va pouvoir les remplir (voire les faire remplir) convenablement : Horaires de disponibilités pour les khôlleurs, pour les élèves, les spécificités des élèves (LV2,PSI ...), les groupes si ils ne sont pas à générer, etc... + + Ensuite, l'utilisateur pourra relancer le programme dans le même dossier, ce dernier s'occupera d'acquérir ces données et de générer un khôlloscope convenant aux besoins de l'utilisateur, qui sautera de joie et embrassera l'ordinateur de joie (pensez à vérifier l'étanchéité des machines) + + \subsection{Entrées}\label{inputs} + + Cette partie va donc lister les entrées nécessaires ou facultatives, pour qu'un khôlloscope puisse être généré et quelles restrictions ces dernieres doivent avoir. + + + \setlist[description]{style=nextline} + \begin{description} + \item[Calendrier de l'année/semestre] Rentrer les jours féries, les horaires bloqués (repas de noël), les vacances, les semaines 1 ou 2 ... + + \item[Liste des Khôlleurs] Le nom, la matière, des informations complémentaires + + \item[Liste des Élèves] Nom, prénom, les différents groupes auxquels l'élève appartient (desquels découlerons ses contraintes dans l'emploi du temps) par exemple (A,INFO2,PSI) + + \item[Disponibilités Khôlleurs] Deux types de fichiers différent : + \begin{itemize}[label=\textbullet] + \item Un fichier général où l'utilisateur fourni les disponibilités de tous les khôlleurs. À utiliser lorsque l'utilisateur a une seule disponibilité à rajouter ou à enlever + \item Un dossier de fichiers, avec un fichier par khôlleur . L'utilisateur pourrai envoyer ces fichiers à remplir aux différents khôlleurs, pour les faire remplir. + \end{itemize} + Le programme va ensuite synthétiser les deux types de fichiers pour référencer les disponibilités des khôlleurs. + + \item[EDT élèves] Séparer les semaines 1 des semaines 2, possibilité d'organiser des semaines spéciales (à l'emploi du temps unique dans l'année). Ces dernières seront gérées comme des semaines d'un autre type (par exemple S3,S4 ou plus) et seront à préciser dans le calendrier. + + Dans cet emploi du temps, préciser les groupes concernés par les horaire (un raccourci, le groupe X représentera tous les élèves). Échantillonnage élémentaire temporel : l'heure ou bien plus petit + \end{description} + + \subsection{Sorties} + Cette partie va (je vous le donne en mille) lister les différents formes que pourra prendre le khôlloscope généré. Bien sur, tous ces différents types pourrons être générés en même temps, il s'agit là d'un changement de style d'affichage du khôlloscope, pas de génération (qui elle, sera discutée en partie \ref{khgen}) + + \begin{description} + \item[Khôlloscope condensé] Un khôlloscope basé sur celui donné l'année 2018-2019: un gros condensé des khôlles de tous les élèves, visible sur une seule page (typiquement le khôlloscope a imprimer en A3 pour afficher au fond de la salle) + + \item[Khôlloscope par élève] Un dossiers de khôlloscopes présentés sous la forme d'une liste d'instants (date+heure) durant lesquels l'élève à une khôlle, en indiquant la matière, la salle et le professeur. De tels khôlloscopes serons similaires au sein d'un même groupe de khôlle, c'est pourquoi le programme proposera de générer les fichiers assignés aux élèves (plus simple à distribuer mais des doublons), ou alors de générer un fichier par groupe (à mettre en ligne, par exemple). + + \item[Les fichiers \og fat\fg] Ces fichiers ne serons que des versions concaténées des fichiers précédents (un fichier contenant touts les khôlloscope par élève). Cela permettra d'imprimer la grande masse de papier plus facilement (au lieu d'imprimer chaque document une fois, imprimer une seule fois un gros document) + + \item[Khôlloscope condensé par professeur] Il s'agit d'un khôlloscope avec le même affichage que le khôlloscope condensé, mais contenant seulement les lignes concernant le professeur en question. + + \item[Khôlloscope liste par professeur] Une liste des khôlles à effectuer, présentées dans l'ordre chronologique. Seront précisés les jours/heures, les groupes à khôller et éventuellement les salles de khôlle (ou du moins un emplacement vide \og à compéter \fg) + + \item[Khôlloscope calendrier par professeur] Il s'agit là d'une vue d'ensemble, des khôlles organisées sous la forme d'un calendrier où ne serons affichées que les heures auxquelles le khôlleur khôlle. Cela peux être imprimé en petit et collé à l'arrière de son casier. + + \item[Khôlloscope pour élèves, mode liste] Un l'instar du khôlloscope liste pour les professeurs, ce khôlloscope présente les khôlles du semestre sous la forme d'une liste d'horaires (normalement deux par semaine). Ce document est facile à imprimer et contient toutes les informations nécessaires : date, heure, khôlleur, matière, salle (ou une case à compléter) + + \item[Khôlloscope pour élèves, mode calendrier] Il s'agit d'un calendrier du semestre (sous la forme habituelle, mois-colonnes et lignes-jours). Dedans seront indiqué les noms des khôlleurs et les horaires. Là aussi, il ne contient pas beaucoup d'informations, et est plus destiné à satisfaire les rapides coups d’œil \og Tiens, ai-je khôlle aujourd'hui ? \fg ou encore \og \censor{Merde} ! À quelle heure ai-je khôlle aujourd'hui ? \fg + + \item[Le récapitulatif des groupes] Un simple tableau référençant les groupes, affichant par ligne les nom des trois membres, leur numéro de groupe et leurs \og contraintes \fg (voir \ref{contraintes_def}) + + + \end{description} + +\section{Conventions} + Je vais définir ici les éléments logiques de la création du khôlloscope. + \begin{description} + \item[Contraintes] \label{contraintes_def}Appliquées à un élève ou a un groupe de khôlle, il s'agit de l'ensemble des groupes auxquels appartient l'élève ou le groupe. Dans le cas du groupe, il s'agit de l'union des contraintes des élèves (exemple: un groupe formé d'un élève dans les groupes (A,I1,ALL) et d'un élève dans les groupes (A,I2) aura les contraintes (A,I1,I2,ALL) + + \item[Horaire] Il s'agit d'une heure dans la semaine, contenant l'information (Jour de la semaine, heure de début). Par exemple, l'horaire (Mer,15h) correspond à l'heure s'écoulant de 15h à 16h les mercredis + + \end{description} + +\section{Algorithmie / Informatique} + + Le programme suivra le pattern MVC (Model View Controller) qui sépare le code en trois parties distinctes : + \begin{itemize} + \item\textbf{Le Modèle (Model)} encodant les données utilisées et transférées (par exemple, les classes représentant les Khôlles, les Horaires, etc ... décrites en partie \ref{model}) + + \item\textbf{La Vue (View)} Régissant les flux d'entrées sortie avec l'utilisateur et les fichiers. Il va s'agir principalement de la fenêtre graphique, dans laquelle l'utilisateur rentrera ses options de génération et aura un retour du travail fait par l'algorithme + + \item\textbf{Le Contrôlleur (Controller)} La partie qui va effectuer les travaux demandés par la partie Vue à travers des objets du Modèle. C'est dans cette partie que se fera tout le travail de génération, d'écriture des fichiers (tout la partie \textit{active}, en fait) + \end{itemize} + + \subsection{Modèle}\label{model} + \subsubsection{Informatisations des données} + \og \textit{Donnez moi des bits, je vous encoderai le monde} \fg + + Pour pouvoir rendre le programme le plus adaptable possible et sans descendre dans une complexité de classe trop hautes, certaines données basiques seront enregistrées sous la forme d'un type de base (int,string,etc...). Voici donc la liste de ces \og désobjetifications\fg des variables. + + \begin{description} + \item[Appartenances] Les groupes auxquels appartiennent un élève seront représentés par une chaîne de caractères. Ces groupes sont les "Groupes d'informatique", les "groupes A \& B", etc\ldots. Les chaînes de caractères représenterons chaque groupe. Par exemple "I1" ou "A", mais on pourrait tout aussi bien mettre n'importe quelle autre chaîne, comme "\verb|le_meilleur_des_groupes|" voire "\verb|#@~&§!%£|" (l'utilité de la chose reste néanmoins à prouver). + + \item[Matières] Les matières scolaires seront décrites comme des chaînes de caractères, en majuscules, possiblement abrégées. La convention de nommage doit bien entendu rester la même tout le long de la génération du khôlloscope. On aura ainsi les matières "\verb|MATHS|","\verb|PHYSIQUE|" ou encore "\verb|ANG|" + + \end{description} + + + + \subsubsection{Les Classes} + Afin d'obtenir un code lisible et \og beau \fg, de nombreuses classes aux rôles bien spécifiques devront être crées, leurs sens et leurs attributs vont être présentés ici. + + À noter que un vocabulaire lié au POO (Programmation orientée objet) va être utilisée dans cette partie. Si vous ne connaissez pas les termes objet, classe, instance ou attribut, sauter cette partie peut être une bonne idée. + \begin{description} + \item[Élève] Une instance de cette classe représente un élève, et ce de manière unique. Il contient le nom, prénom et toutes les autres informations personnelles, ainsi que les contraintes de l'élève (voir partie \ref{contraintes_def} pour les définitions) + + \item[Groupe] Une instance de cette classe représente un groupe d'élèves dans un khôlloscope. C'est à dire, que si plusieurs khôlloscopes existent en même temps, même si ils possèdent des groupes constitués identiquement, ils contiendrons leur propre de \textit{Groupe}), sauf si les groupes sont donnés par l'utilisateur, auquel cas, tous les khôlloscopes partagerons les mêmes instances de groupe. Les groupes n'auront comme attribut que la liste des élèves membres, ainsi que la liste des contraintes associées au groupe. + + \item[Khôlleur] À l'instar de celle des élèves, les instances de cette classe représenteront un khôlleur de manière unique. Elles contiendrons les informations tel que le Nom, la matière enseignée, ainsi que d'autres informations personnelles + \end{description} + + + + \subsection{Génération du khôlloscope} + \label{khgen} + + Voici la partie la plus délicate (et bien évidemment le cœur du programme). + La génération se fera en plusieurs étapes, présentées ci-dessous. + + \subsubsection{Étape 1 : Analyse des possibles et impossibles} + Cette première étape est plutôt simple et rapide. Son rôle est de supprimer tout horaire ou date impossible à satisfaire (par exemple, un khôlleur ayant un horaire libre pendant que tous les élèves auront cours : cet horaire ne pourra jamais être utilisé et sera donc supprimé) réduisant ainsi la taille et la quantité des données d'entrée à traiter, et donc le temps d’exécution + + \subsubsection{Étape 2 : Taggage} + L'étape de taggage (en anglais, to tag = coller une étiquette) permettra au programme d'être plus simple à coder. En effet, les horaires, élèves, khôlleurs, etc... se verront accolés de nombreux tags, par exemple pour indiquer que les élèves d'un certain groupe ne pourrons jamais rencontrer un khôlleur, ou que certaines khôlles bien qu'à des horaires déconseillés (voir \ref{crit_kh}) devront être effectuées pour respecter la contrainte de diversité des khôlleurs. Ces \og tags \fg seront utilisés durant les générations des khôlloscopes pour éviter d'en générer de trop pourris (c'est à dire ne respectant que peu les contraintes) qui seraient tout de suite invalidés. (À noter que le caractère aléatoire de la génération rendra toujours possible la génération fortuite d'un khôlloscope pourri, mais qui sera sous-classé face à d'autres khôlloscopes, meilleurs). + + \subsubsection{Étape 3 : Créations des khôlloscopes} + + Viens la section la plus complexe : des khôlloscopes seront générés semaine par semaine jusqu'à ce qu'une impossibilité arrive (c'est probable). Les conditions initiales seront tirées au hasard, mais avec un hasard pondéré, de manière à vérifier avec une plus forte probabilité les critères de Khôlloscope. Le programme va ainsi lancer plusieurs générations de Khôlloscope. Pour des raisons pratiques, chaque génération sera lancée dans des \textit{threads} (processus) parallèles. Les semaines se remplirons de Khôlles jusqu'à ce que tout soit rempli ou jusqu'à ce qu'une impossibilité survienne (par exemple, nécessite mais impossibilité de placer une khôlle d'anglais) + + \subsubsection{Étape 4 : Qui est le meilleur} + + Pour cette étape, il suffit d'affecter un score à chaque khôlloscope complètement généré, afin de n'afficher que les meilleurs. Les critères et leur importance pour le calcul du score seront vues en \ref{score_kh}. Un algorithme génétique serait une idée, mais le jeu de nombre aléatoires n'évoluant pas de manière continue, nous ne pourrons faire converger les khôlloscopes vers un objet stable. + + + \subsection{Qu'es-ce qu'un khôlloscope ?} + + Mais comment doit faire le programme pour déterminer si un khôlloscope est bon ou non ? + + \subsubsection{Critères de génération} + \label{crit_kh} + Je vais ici lister les critères que devrons respecter les khôlloscopes. Cela se présentera sous la forme d'un tableau listant: + \begin{description} + \item[Importance] Cette valeur permet de classer les critères, les plus basses valeurs étant les plus \og dispensables\fg + \item[Decription] Une description du critère + \item[Fallback] Que faire si le critère ne peut être satisfait (exemple : avoir tous les khôlleurs alors que c'est impossible à cause de l'emploi du temps) + \end{description} + + \begin{tabularx}{\textwidth}{|c|X|X|} + \hline + Importance & Description & Fallback \\\hline + $\infty$ & Tous les élèves doivent avoir les khôlles demandées par semaine & Les repousser dans les deux semaines avant ou après, les annuler sinon \\\hline + $\infty$ & Les élèves doivent voir tous les khôlleurs, et les khôlleurs doivent être le mieux répartis (Éviter qu'un groupe n'ai principalement qu'un khôlleur) & Ne pas considérer les khôlleurs \og impossibles \fg mais essayer tout de même de respecter la diversité \\\hline + $\infty$ & Les élèves doivent pouvoir manger & Non négociable, invalidation du khôlloscope si non satisfait \\\hline + $\infty$ & Les groupes de khôlle doivent être de la bonne taille (par exemple, pas de groupe de un mais plutôt deux groupes de deux) & Invalidation du khôlloscope \\\hline + $\infty$ & Les professeurs ayant demandant un créneau repas doivent y avoir accès & Invalidation du khôlloscope, les professeurs sont aussi des humains \\\hline + $15$ & Éviter deux khôlles par jour & \\\hline + $11$ & Éviter les khôlles lors des grosses journées (par exemple, préférer les journées avec cours de sport, avec TD ...) & \\\hline + $10$ & Séparer les khôlleurs temporellement (éviter d'avoir un certain professeur trois fois de suite ...) & \\\hline + $9$ & Droit à la justice pour les élèves : tous les groupes de khôlle sont égaux :un même groupe ne doit pas se prendre, par exemple, un horaire de khôlle dérangeant cinq fois d'affilée & \\\hline + \end{tabularx} + + Ce critères ont une valeur indicative, chacun correspondra à un module algorithmique indépendant, ce qui permettra de rajouter ou d'enlever des critères simplement. Ceci ne sont pas fixés et peuvent être modifiés, supprimés ou ajoutés. + + + \subsubsection{Score des Khôlloscopes} + \label{score_kh} + + Le score des khôlloscope se basera principalement sur les critères dispensables. Si ils sont respectés, le khôlloscope sera bien noté. Leur importance dans le calcul (coefficients) sera jugée par rapport à leur \og Importance\fg donnée dans le tableau ci-dessus. Bien sur, d'autres mesures du score pourront être ajoutées au tableau suivant : + + \begin{tabularx}{\textwidth}{|c|X|X|} + \hline + Importance & Description \\\hline + $10$ & Critère du dodo : les khôlles les moins tard seront à privilégier \\\hline + \end{tabularx} + + +\end{document} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index b08f25b..6d193ea 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,7 +4,7 @@ * The settings file is used to specify which projects to include in your build. * * Detailed information about configuring a multi-project build in Gradle can be found - * in the user guide at https://docs.gradle.org/4.10.2/userguide/multi_project_builds.html + * in the user guide at https://docs.gradle.org/4.8.1/userguide/multi_project_builds.html */ rootProject.name = 'Kholloscopinator' diff --git a/src/main/java/com/bernard/kholle/KholloMain.java b/src/main/java/com/bernard/kholle/KholloMain.java deleted file mode 100644 index 3a78bf5..0000000 --- a/src/main/java/com/bernard/kholle/KholloMain.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.bernard.kholle; - -import java.io.File; - -import com.bernard.kholle.process.KholloscopeProcessor; - -public class KholloMain { - - public static void main(String[] args) { - System.out.println("Wiouw"); - System.out.println(new File(".").getAbsolutePath()); - KholloscopeProcessor.khollize(new File("./kholloscope2018_1.ods")); - } - -} diff --git a/src/main/java/com/bernard/kholle/model/Eleve.java b/src/main/java/com/bernard/kholle/model/Eleve.java deleted file mode 100644 index f09c874..0000000 --- a/src/main/java/com/bernard/kholle/model/Eleve.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.bernard.kholle.model; - -public class Eleve { - String nom; - String prenom; - int[] groups;// 1(ALL) , 7(INFO2) ,... -} diff --git a/src/main/java/com/bernard/kholle/model/Horaire.java b/src/main/java/com/bernard/kholle/model/Horaire.java deleted file mode 100644 index 7557720..0000000 --- a/src/main/java/com/bernard/kholle/model/Horaire.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.bernard.kholle.model; - -public class Horaire { - - String day;//Lun, Mar, Mer ... - String hour;//12-13,13-14,15-16, ... - byte[] place;// 1(S1), 2(S2) - byte[] tags;// 1(M , midi), 2(S, soir) - String[] profs;// LEVAUX, PRINCIAUX, LAMARTINE, ... - int[] groups;// 1(ALL) , 7(INFO2) ,... - -} diff --git a/src/main/java/com/bernard/kholle/model/KGroup.java b/src/main/java/com/bernard/kholle/model/KGroup.java deleted file mode 100644 index 7760a24..0000000 --- a/src/main/java/com/bernard/kholle/model/KGroup.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.bernard.kholle.model; - -public class KGroup { - - Eleve[] élèves; - int[] constrains;// 1(ALL) , 7(INFO2) ,... - -} diff --git a/src/main/java/com/bernard/kholle/model/Kholle.java b/src/main/java/com/bernard/kholle/model/Kholle.java deleted file mode 100644 index da32e35..0000000 --- a/src/main/java/com/bernard/kholle/model/Kholle.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.bernard.kholle.model; - -public class Kholle { - - String tag,hour; - String semaine; - String prof; - int kGroup; - String salle; - - - public Kholle(String tag, String hour, String semaine, String prof, int kGroup, String salle) { - super(); - this.tag = tag; - this.hour = hour; - this.semaine = semaine; - this.prof = prof; - this.kGroup = kGroup; - this.salle = salle; - } - - - @Override - public String toString() { - return "Kholle [tag=" + tag + ", hour=" + hour + ", semaine=" + semaine + ", prof=" + prof + ", kGroup=" - + kGroup + ", salle=" + salle + "]"; - } - - - public String getTag() { - return tag; - } - - - public String getHour() { - return hour; - } - - - public String getSemaine() { - return semaine; - } - - - public String getProf() { - return prof; - } - - - public int getkGroup() { - return kGroup; - } - - - public String getSalle() { - return salle; - } - - - -} diff --git a/src/main/java/com/bernard/kholle/process/KholloMaker.java b/src/main/java/com/bernard/kholle/process/KholloMaker.java deleted file mode 100644 index 7a2c8ce..0000000 --- a/src/main/java/com/bernard/kholle/process/KholloMaker.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.bernard.kholle.process; - -import java.util.Map; - -import com.bernard.kholle.model.Eleve; -import com.bernard.kholle.model.Horaire; -import com.bernard.kholle.model.Kholle; - -public class KholloMaker { - - public static final Kholle[] findBestKholloscope(Eleve[] eleves, Horaire[] horaires, Map profs /* {PRINCIAUX,Math},{BOUSSAGEON,Physique}*/) { - - - - return null; - } - - -} diff --git a/src/main/java/com/bernard/kholle/process/KholloscopeProcessor.java b/src/main/java/com/bernard/kholle/process/KholloscopeProcessor.java deleted file mode 100644 index 78d6bed..0000000 --- a/src/main/java/com/bernard/kholle/process/KholloscopeProcessor.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.bernard.kholle.process; - -import java.io.File; -import java.io.IOException; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - -import org.jopendocument.dom.spreadsheet.Sheet; -import org.jopendocument.dom.spreadsheet.SpreadSheet; - -import com.bernard.kholle.model.Kholle; - -public class KholloscopeProcessor { - - public static List khollize(File f){ - List kholles = new ArrayList<>(); - - try { - SpreadSheet sheet = SpreadSheet.createFromFile(f); - Sheet khollesSheet = sheet.getFirstSheet(); - - parseCell(4, 19, 7, 21, khollesSheet, kholles); - parseCell(4, 19, 23, 35, khollesSheet, kholles); - parseCell(4, 19, 37, 46, khollesSheet, kholles); - - - System.out.println(kholles); - System.out.println(kholles.size()); - - - - - - } catch (IOException e) { - e.printStackTrace(); - } - - return kholles; - } - - public static void parseCell(int x0,int x1,int y0,int y1,Sheet khollesSheet,List kholles) { - for(int i = y0;i sqlize(List kholles,Connection c){ - List statements = new ArrayList<>(); - - final String STATEMENT = "INSERT INTO kholles (ID,tag,hour,semaine,prof,kGroup,salle) VALUES (NULL,?,?,?,?,?,?)"; - for(Kholle k : kholles) { - - try { - PreparedStatement st = c.prepareStatement(STATEMENT); - st.setString(1, k.getTag()); - st.setString(2, k.getHour()); - st.setString(3, k.getSemaine()); - st.setString(4, k.getProf()); - st.setInt(5, k.getkGroup()); - st.setString(6, k.getSalle()); - - try { - Class stmt1 = st.getClass(); - java.lang.reflect.Field mem = stmt1.getField("sql"); - String value = (String)mem.get(st); - System.out.println(value); - } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); - } - - st.execute(); - - } catch (SQLException e) { - e.printStackTrace(); - } - - } - - - - - return statements; - } - -} diff --git a/src/main/java/com/bernard/kholloscopinator/Util.java b/src/main/java/com/bernard/kholloscopinator/Util.java new file mode 100644 index 0000000..3a56ddd --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/Util.java @@ -0,0 +1,35 @@ +package com.bernard.kholloscopinator; + +import java.awt.Color; +import java.util.List; +import java.util.Random; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class Util { + + public static List colors(int count) { + return colors(count,new Random()); + } + + public static List colors(int count,Random r) { + float startAngle = r.nextFloat(); + return IntStream.range(0, count) + .mapToDouble(i->startAngle+i/((float)count)) + .mapToObj(h->Color.getHSBColor((float)h, 1.f, 1.f)) + .collect(Collectors.toList()); + } + + public static Color complementaire(Color c) { + return new Color(0xFFFFFF - c.getRGB()&0xFFFFFF); + } + + public static Integer toInt(Color c) { + int value = 0xFF0000 & c.getBlue()*0x010000 + + 0xFF00 & c.getGreen()*0x0100 + + 0xFF & c.getRed()*0x01; + System.out.println(Integer.toHexString(value)); + return Integer.valueOf(value^0xFFFFFF); + } + +} diff --git a/src/main/java/com/bernard/kholloscopinator/controlleur/FileParser.java b/src/main/java/com/bernard/kholloscopinator/controlleur/FileParser.java new file mode 100644 index 0000000..e424c28 --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/controlleur/FileParser.java @@ -0,0 +1,5 @@ +package com.bernard.kholloscopinator.controlleur; + +public class FileParser { + +} diff --git a/src/main/java/com/bernard/kholloscopinator/controlleur/FileWriter.java b/src/main/java/com/bernard/kholloscopinator/controlleur/FileWriter.java new file mode 100644 index 0000000..19202bd --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/controlleur/FileWriter.java @@ -0,0 +1,606 @@ +package com.bernard.kholloscopinator.controlleur; + +import static com.sun.star.uno.UnoRuntime.queryInterface; + +import java.awt.Color; +import java.io.File; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import com.bernard.kholloscopinator.Util; +import com.bernard.kholloscopinator.model.KConfig; +import com.bernard.kholloscopinator.model.Kholleur; +import com.bernard.kholloscopinator.model.Kholloscope; +import com.bernard.kholloscopinator.model.Semaine; +import com.sun.star.awt.Rectangle; +import com.sun.star.beans.PropertyState; +import com.sun.star.beans.PropertyValue; +import com.sun.star.beans.PropertyVetoException; +import com.sun.star.beans.UnknownPropertyException; +import com.sun.star.beans.XPropertySet; +import com.sun.star.chart.XChartDocument; +import com.sun.star.chart.XDiagram; +import com.sun.star.container.NoSuchElementException; +import com.sun.star.container.XIndexAccess; +import com.sun.star.container.XNameAccess; +import com.sun.star.container.XNameContainer; +import com.sun.star.document.XEmbeddedObjectSupplier; +import com.sun.star.frame.XComponentLoader; +import com.sun.star.frame.XStorable; +import com.sun.star.io.IOException; +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.lang.IndexOutOfBoundsException; +import com.sun.star.lang.WrappedTargetException; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.sheet.ConditionEntryType; +import com.sun.star.sheet.ConditionFormatOperator; +import com.sun.star.sheet.XCellRangeAddressable; +import com.sun.star.sheet.XCellRangesQuery; +import com.sun.star.sheet.XConditionEntry; +import com.sun.star.sheet.XConditionalFormat; +import com.sun.star.sheet.XConditionalFormats; +import com.sun.star.sheet.XSheetCellRanges; +import com.sun.star.sheet.XSpreadsheet; +import com.sun.star.sheet.XSpreadsheetDocument; +import com.sun.star.sheet.XSpreadsheets; +import com.sun.star.style.XStyle; +import com.sun.star.style.XStyleFamiliesSupplier; +import com.sun.star.table.CellHoriJustify; +import com.sun.star.table.CellRangeAddress; +import com.sun.star.table.XCell; +import com.sun.star.table.XCellRange; +import com.sun.star.table.XTableChart; +import com.sun.star.table.XTableCharts; +import com.sun.star.table.XTableChartsSupplier; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; +import com.sun.star.uno.XInterface; +import com.sun.star.util.XMergeable; + +public class FileWriter { + + public static final String[] MONTHES = { "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", + "Septembre", "Octobre", "Novembre", "Décembre" }; + public static final String[] DAYS = { "Dim", "Lun", "'Mar", "Mer", "Jeu", "Ven", "Sam" }; + + public static final boolean writeKholloscope(Kholloscope kholloscope, Set kholleurs, + List calendrier, KConfig config) { + // TODO + + // oooooooooooooooooooooooooooStep 2oooooooooooooooooooooooooooooooooooooooooo + // open an empty document. In this case it's a calc document. + // For this purpose an instance of com.sun.star.frame.Desktop + // is created. The desktop provides the XComponentLoader interface, + // which is used to open the document via loadComponentFromURL + + System.out.println("Opening an empty Calc document"); + XSpreadsheetDocument myDoc = openCalc(OfficeController.xContext, null); + + // oooooooooooooooooooooooooooStep 3oooooooooooooooooooooooooooooooooooooooooo + // create cell styles. + // For this purpose get the StyleFamiliesSupplier and the family + // CellStyle. Create an instance of com.sun.star.style.CellStyle and + // add it to the family. Now change some properties + + try { + XStyleFamiliesSupplier xSFS = UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, myDoc); + XNameAccess xSF = xSFS.getStyleFamilies(); + XNameAccess xCS = UnoRuntime.queryInterface(XNameAccess.class, xSF.getByName("CellStyles")); + XMultiServiceFactory oDocMSF = UnoRuntime.queryInterface(XMultiServiceFactory.class, myDoc); + XNameContainer oStyleFamilyNameContainer = UnoRuntime.queryInterface(XNameContainer.class, xCS); + XInterface oInt1 = (XInterface) oDocMSF.createInstance("com.sun.star.style.CellStyle"); + oStyleFamilyNameContainer.insertByName("StyleS1", oInt1); + XPropertySet oCPS1 = UnoRuntime.queryInterface(XPropertySet.class, oInt1); + oCPS1.setPropertyValue("IsCellBackgroundTransparent", Boolean.FALSE); + oCPS1.setPropertyValue("CellBackColor", Integer.valueOf(6710932)); + oCPS1.setPropertyValue("CharColor", Integer.valueOf(16777215)); + XInterface oInt2 = (XInterface) oDocMSF.createInstance("com.sun.star.style.CellStyle"); + oStyleFamilyNameContainer.insertByName("My Style2", oInt2); + XPropertySet oCPS2 = UnoRuntime.queryInterface(XPropertySet.class, oInt2); + oCPS2.setPropertyValue("IsCellBackgroundTransparent", Boolean.FALSE); + oCPS2.setPropertyValue("CellBackColor", Integer.valueOf(13421823)); + } catch (Exception e) { + e.printStackTrace(System.err); + } + + // oooooooooooooooooooooooooooStep 4oooooooooooooooooooooooooooooooooooooooooo + // get the sheet an insert some data. + // Get the sheets from the document and then the first from this container. + // Now some data can be inserted. For this purpose get a Cell via + // getCellByPosition and insert into this cell via setValue() (for floats) + // or setFormula() for formulas and Strings + + XSpreadsheet xSheet = null; + + try { + System.out.println("Getting spreadsheet"); + XSpreadsheets xSheets = myDoc.getSheets(); + XIndexAccess oIndexSheets = UnoRuntime.queryInterface(XIndexAccess.class, xSheets); + xSheet = UnoRuntime.queryInterface(XSpreadsheet.class, oIndexSheets.getByIndex(0)); + + } catch (Exception e) { + System.out.println("Couldn't get Sheet " + e); + e.printStackTrace(System.err); + } + + System.out.println("Creating the Header"); + + insertIntoCell(1, 0, "JAN", xSheet, ""); + insertIntoCell(2, 0, "FEB", xSheet, ""); + insertIntoCell(3, 0, "MAR", xSheet, ""); + insertIntoCell(4, 0, "APR", xSheet, ""); + insertIntoCell(5, 0, "MAI", xSheet, ""); + insertIntoCell(6, 0, "JUN", xSheet, ""); + insertIntoCell(7, 0, "JUL", xSheet, ""); + insertIntoCell(8, 0, "AUG", xSheet, ""); + insertIntoCell(9, 0, "SEP", xSheet, ""); + insertIntoCell(10, 0, "OCT", xSheet, ""); + insertIntoCell(11, 0, "NOV", xSheet, ""); + insertIntoCell(12, 0, "DEC", xSheet, ""); + insertIntoCell(13, 0, "SUM", xSheet, ""); + + System.out.println("Fill the lines"); + + insertIntoCell(0, 1, "Smith", xSheet, ""); + insertIntoCell(1, 1, "42", xSheet, "V"); + insertIntoCell(2, 1, "58.9", xSheet, "V"); + insertIntoCell(3, 1, "-66.5", xSheet, "V"); + insertIntoCell(4, 1, "43.4", xSheet, "V"); + insertIntoCell(5, 1, "44.5", xSheet, "V"); + insertIntoCell(6, 1, "45.3", xSheet, "V"); + insertIntoCell(7, 1, "-67.3", xSheet, "V"); + insertIntoCell(8, 1, "30.5", xSheet, "V"); + insertIntoCell(9, 1, "23.2", xSheet, "V"); + insertIntoCell(10, 1, "-97.3", xSheet, "V"); + insertIntoCell(11, 1, "22.4", xSheet, "V"); + insertIntoCell(12, 1, "23.5", xSheet, "V"); + insertIntoCell(13, 1, "=SUM(B2:M2)", xSheet, ""); + + insertIntoCell(0, 2, "Jones", xSheet, ""); + insertIntoCell(1, 2, "21", xSheet, "V"); + insertIntoCell(2, 2, "40.9", xSheet, "V"); + insertIntoCell(3, 2, "-57.5", xSheet, "V"); + insertIntoCell(4, 2, "-23.4", xSheet, "V"); + insertIntoCell(5, 2, "34.5", xSheet, "V"); + insertIntoCell(6, 2, "59.3", xSheet, "V"); + insertIntoCell(7, 2, "27.3", xSheet, "V"); + insertIntoCell(8, 2, "-38.5", xSheet, "V"); + insertIntoCell(9, 2, "43.2", xSheet, "V"); + insertIntoCell(10, 2, "57.3", xSheet, "V"); + insertIntoCell(11, 2, "25.4", xSheet, "V"); + insertIntoCell(12, 2, "28.5", xSheet, "V"); + insertIntoCell(13, 2, "=SUM(B3:M3)", xSheet, ""); + + insertIntoCell(0, 3, "Brown", xSheet, ""); + insertIntoCell(1, 3, "31.45", xSheet, "V"); + insertIntoCell(2, 3, "-20.9", xSheet, "V"); + insertIntoCell(3, 3, "-117.5", xSheet, "V"); + insertIntoCell(4, 3, "23.4", xSheet, "V"); + insertIntoCell(5, 3, "-114.5", xSheet, "V"); + insertIntoCell(6, 3, "115.3", xSheet, "V"); + insertIntoCell(7, 3, "-171.3", xSheet, "V"); + insertIntoCell(8, 3, "89.5", xSheet, "V"); + insertIntoCell(9, 3, "41.2", xSheet, "V"); + insertIntoCell(10, 3, "71.3", xSheet, "V"); + insertIntoCell(11, 3, "25.4", xSheet, "V"); + insertIntoCell(12, 3, "38.5", xSheet, "V"); + insertIntoCell(13, 3, "=SUM(A4:L4)", xSheet, ""); + + // oooooooooooooooooooooooooooStep 5oooooooooooooooooooooooooooooooooooooooooo + // apply the created cell style. + // For this purpose get the PropertySet of the Cell and change the + // property CellStyle to the appropriate value. + + // change backcolor + chgbColor(1, 0, 13, 0, "My Style", xSheet); + chgbColor(0, 1, 0, 3, "My Style", xSheet); + chgbColor(1, 1, 13, 3, "My Style2", xSheet); + + // oooooooooooooooooooooooooooStep 6oooooooooooooooooooooooooooooooooooooooooo + // insert a 3D chart. + // get the CellRange which holds the data for the chart and its RangeAddress + // get the TableChartSupplier from the sheet and then the TableCharts from it. + // add a new chart based on the data to the TableCharts. + // get the ChartDocument, which provide the Diagramm. Change the properties + // Dim3D (3 dimension) and String (the title) of the diagramm. + + // insert a chart + + Rectangle oRect = new Rectangle(); + oRect.X = 500; + oRect.Y = 3000; + oRect.Width = 25000; + oRect.Height = 11000; + + XCellRange oRange = UnoRuntime.queryInterface(XCellRange.class, xSheet); + XCellRange myRange = oRange.getCellRangeByName("A1:N4"); + XCellRangeAddressable oRangeAddr = UnoRuntime.queryInterface(XCellRangeAddressable.class, myRange); + CellRangeAddress myAddr = oRangeAddr.getRangeAddress(); + + CellRangeAddress[] oAddr = new CellRangeAddress[1]; + oAddr[0] = myAddr; + XTableChartsSupplier oSupp = UnoRuntime.queryInterface(XTableChartsSupplier.class, xSheet); + + XTableChart oChart = null; + + System.out.println("Insert Chart"); + + XTableCharts oCharts = oSupp.getCharts(); + oCharts.addNewByName("Example", oRect, oAddr, true, true); + + // get the diagramm and Change some of the properties + + try { + oChart = (UnoRuntime.queryInterface(XTableChart.class, + UnoRuntime.queryInterface(XNameAccess.class, oCharts).getByName("Example"))); + XEmbeddedObjectSupplier oEOS = UnoRuntime.queryInterface(XEmbeddedObjectSupplier.class, oChart); + XInterface oInt = oEOS.getEmbeddedObject(); + XChartDocument xChart = UnoRuntime.queryInterface(XChartDocument.class, oInt); + XDiagram oDiag = xChart.getDiagram(); + System.out.println("Change Diagramm to 3D"); + XPropertySet oCPS = UnoRuntime.queryInterface(XPropertySet.class, oDiag); + oCPS.setPropertyValue("Dim3D", Boolean.TRUE); + System.out.println("Change the title"); + Thread.sleep(200); + XPropertySet oTPS = UnoRuntime.queryInterface(XPropertySet.class, xChart.getTitle()); + oTPS.setPropertyValue("String", "The new title"); + } catch (Exception e) { + System.err.println("Changing Properties failed " + e); + e.printStackTrace(System.err); + } + try { + + File dest = new File("./test.ods"); + PropertyValue v = new PropertyValue("FilterName", -1, "", PropertyState.DEFAULT_VALUE); + + XStorable store = UnoRuntime.queryInterface(XStorable.class, myDoc); + store.storeToURL(dest.toURI().toString(), new PropertyValue[] { v }); + } catch (IOException e) { + e.printStackTrace(); + } + + System.out.println("done"); + // System.exit(0); + return false; + } + + public static XSpreadsheetDocument openCalc(XComponentContext xContext, File in) { + // define variables + XMultiComponentFactory xMCF = null; + XComponentLoader xCLoader; + XSpreadsheetDocument xSpreadSheetDoc = null; + XComponent xComp = null; + + try { + // get the servie manager rom the office + xMCF = xContext.getServiceManager(); + + // create a new instance of the desktop + Object oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", xContext); + + // query the desktop object for the XComponentLoader + xCLoader = UnoRuntime.queryInterface(XComponentLoader.class, oDesktop); + + PropertyValue[] szArgs = new PropertyValue[] { new PropertyValue() }; + szArgs[0].Name = "Hidden"; + szArgs[0].Value = true; + String strDoc = (in == null) ? "private:factory/scalc" : in.toURI().toString(); + + xComp = xCLoader.loadComponentFromURL(strDoc, "_blank", 0, szArgs); + xSpreadSheetDoc = UnoRuntime.queryInterface(XSpreadsheetDocument.class, xComp); + + } catch (Exception e) { + System.err.println("Impossible de créer le document"); + e.printStackTrace(); + } + + return xSpreadSheetDoc; + } + + public static void insertIntoCell(int CellX, int CellY, String theValue, XSpreadsheet TT1, String flag) { + XCell xCell = null; + + try { + xCell = TT1.getCellByPosition(CellX, CellY); + } catch (com.sun.star.lang.IndexOutOfBoundsException ex) { + System.err.println("Could not get Cell"); + ex.printStackTrace(System.err); + } + + if (flag.equals("V")) { + xCell.setValue((Float.valueOf(theValue)).floatValue()); + } else { + xCell.setFormula(theValue); + } + + } + + public static void chgbColor(int x1, int y1, int x2, int y2, String template, XSpreadsheet TT) { + XCellRange xCR = null; + try { + xCR = TT.getCellRangeByPosition(x1, y1, x2, y2); + } catch (com.sun.star.lang.IndexOutOfBoundsException ex) { + System.err.println("Could not get CellRange"); + ex.printStackTrace(System.err); + } + + XPropertySet xCPS = UnoRuntime.queryInterface(XPropertySet.class, xCR); + + try { + xCPS.setPropertyValue("CellStyle", template); + } catch (Exception e) { + System.err.println("Can't change colors chgbColor" + e); + e.printStackTrace(System.err); + } + } + + public static List readCalendar(File entree) { + /// Ouverture d'un nouveau document /// + XSpreadsheetDocument myDoc = openCalc(OfficeController.xContext, entree); + + try { + + /// Création des styles pour la coloration automatique /// + XStyleFamiliesSupplier styleFamiliesSupplier = UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, + myDoc); + XNameAccess styleFamilies = styleFamiliesSupplier.getStyleFamilies(); + XNameAccess cellStyles = UnoRuntime.queryInterface(XNameAccess.class, + styleFamilies.getByName("CellStyles")); + XNameContainer cellStylesContainer = UnoRuntime.queryInterface(XNameContainer.class, cellStyles); + + XStyle styleAnnee; + styleAnnee = queryInterface(XStyle.class, cellStylesContainer.getByName("StyleAnnee")); + XPropertySet styleAnneeProprietes = UnoRuntime.queryInterface(XPropertySet.class, styleAnnee); + + System.out.println(Arrays.stream(styleAnneeProprietes.getPropertySetInfo().getProperties()).map(p -> { + try { + return p.Name + "->" + styleAnneeProprietes.getPropertyValue(p.Name); + } catch (UnknownPropertyException | WrappedTargetException e) { + e.printStackTrace(); + } + return ""; + }).sorted().collect(Collectors.joining("\n"))); + + } catch (NoSuchElementException | WrappedTargetException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + return null; + } + + public static boolean genCalendar(Date startMonth, Date endMonth, int semTypes, File destination) { + if (!startMonth.before(endMonth)) { + System.err.println("La date de fin est avant la date de début"); + return false; + } + Calendar startC = Calendar.getInstance(Locale.FRANCE); + startC.setTime(startMonth); + startC.set(Calendar.DAY_OF_MONTH, 1); + + Calendar endC = Calendar.getInstance(Locale.FRANCE); + endC.setTime(endMonth); + endC.set(Calendar.DAY_OF_MONTH, -1); + + int startYear = startC.get(Calendar.YEAR); + int yearDiff = endC.get(Calendar.YEAR) - startYear; + Map> monthes = new HashMap<>(); + if (yearDiff == 0) { + monthes.put(startC.get(Calendar.YEAR), + IntStream.range(startC.get(Calendar.MONTH), endC.get(Calendar.MONTH) + 1).mapToObj(x -> x) + .collect(Collectors.toList())); + } else { + monthes.put(startC.get(Calendar.YEAR), + IntStream.range(startC.get(Calendar.MONTH), 12 + 1).mapToObj(x -> x).collect(Collectors.toList())); + monthes.put(endC.get(Calendar.YEAR), + IntStream.range(1, endC.get(Calendar.MONTH) + 1).mapToObj(x -> x).collect(Collectors.toList())); + } + for (yearDiff--; yearDiff > 0; yearDiff--) + monthes.put(startC.get(Calendar.YEAR) + yearDiff, + IntStream.range(1, 12 + 1).mapToObj(x -> x).collect(Collectors.toList())); + yearDiff = endC.get(Calendar.YEAR) - startYear; + + try { + + /// Ouverture d'un nouveau document /// + XSpreadsheetDocument myDoc = openCalc(OfficeController.xContext, null); + + /// Création des styles pour la coloration automatique /// + XMultiServiceFactory multiServiceFactory = UnoRuntime.queryInterface(XMultiServiceFactory.class, myDoc); + XStyleFamiliesSupplier styleFamiliesSupplier = UnoRuntime.queryInterface(XStyleFamiliesSupplier.class, + myDoc); + XNameAccess styleFamilies = styleFamiliesSupplier.getStyleFamilies(); + XNameAccess cellStyles = UnoRuntime.queryInterface(XNameAccess.class, + styleFamilies.getByName("CellStyles")); + XNameContainer cellStylesContainer = UnoRuntime.queryInterface(XNameContainer.class, cellStyles); + + List couleurs = Util.colors(semTypes + 10); + Collections.shuffle(couleurs); + for (int i = 0; i < semTypes + 10; i++) { + XStyle styleSemaine = queryInterface(XStyle.class, + multiServiceFactory.createInstance("com.sun.star.style.CellStyle")); + cellStylesContainer.insertByName("StyleS" + i, styleSemaine); + XPropertySet oCPS1 = UnoRuntime.queryInterface(XPropertySet.class, styleSemaine); + colorCell(oCPS1, couleurs.get(i)); + } + + XStyle styleAnnee = queryInterface(XStyle.class, + multiServiceFactory.createInstance("com.sun.star.style.CellStyle")); + cellStylesContainer.insertByName("StyleAnnee", styleAnnee); + XPropertySet styleAnneeProprietes = UnoRuntime.queryInterface(XPropertySet.class, styleAnnee); + styleAnneeProprietes.setPropertyValue("HoriJustify", CellHoriJustify.CENTER); + colorCell(styleAnneeProprietes, Color.ORANGE); + + XStyle styleSVacances = queryInterface(XStyle.class, + multiServiceFactory.createInstance("com.sun.star.style.CellStyle")); + cellStylesContainer.insertByName("StyleSVacances", styleSVacances); + XPropertySet styleSVacancesProprietes = UnoRuntime.queryInterface(XPropertySet.class, styleSVacances); + styleSVacancesProprietes.setPropertyValue("HoriJustify", CellHoriJustify.CENTER); + colorCell(styleSVacancesProprietes, Color.DARK_GRAY); + + XInterface styleMois = (XInterface) multiServiceFactory.createInstance("com.sun.star.style.CellStyle"); + cellStylesContainer.insertByName("StyleMois", styleMois); + XPropertySet styleMoisProprietes = UnoRuntime.queryInterface(XPropertySet.class, styleMois); + styleMoisProprietes.setPropertyValue("HoriJustify", CellHoriJustify.CENTER); + colorCell(styleMoisProprietes, Color.YELLOW); + + XInterface styleJour1 = (XInterface) multiServiceFactory.createInstance("com.sun.star.style.CellStyle"); + cellStylesContainer.insertByName("StyleJour1", styleJour1); + XPropertySet styleJour1Propriétés = UnoRuntime.queryInterface(XPropertySet.class, styleJour1); + colorCell(styleJour1Propriétés, Color.WHITE); + + XInterface styleJour2 = (XInterface) multiServiceFactory.createInstance("com.sun.star.style.CellStyle"); + cellStylesContainer.insertByName("StyleJour2", styleJour2); + XPropertySet styleJour2Propriétés = UnoRuntime.queryInterface(XPropertySet.class, styleJour2); + colorCell(styleJour2Propriétés, Color.decode("0xdddddd")); + + /// Récupération de la feuille /// + System.out.println("Getting spreadsheet"); + XSpreadsheets xSheets = myDoc.getSheets(); + XIndexAccess oIndexSheets = UnoRuntime.queryInterface(XIndexAccess.class, xSheets); + XSpreadsheet xSheet = UnoRuntime.queryInterface(XSpreadsheet.class, oIndexSheets.getByIndex(0)); + + /// Dessin du calendrier /// + int lastPosition = 0; + int weekTypeIndex = 0; + for (int i = 0; i < monthes.size(); i++) { + int year = startYear + i; + int newPosition = lastPosition + 2 * monthes.get(startYear + i).size(); + mergeAndSet(xSheet.getCellRangeByPosition(lastPosition, 0, newPosition - 1, 0), Integer.toString(year), + "StyleAnnee"); + + for (int j = 0; j < monthes.get(year).size(); j++) { + int month = monthes.get(year).get(j) - 1; + int monthPos = lastPosition + 2 * j; + mergeAndSet(xSheet.getCellRangeByPosition(monthPos, 1, monthPos + 1, 1), MONTHES[month], + "StyleMois"); + Calendar c = Calendar.getInstance(Locale.FRANCE); + c.setFirstDayOfWeek(Calendar.MONDAY); + c.setMinimalDaysInFirstWeek(1); + c.set(year, month, 1); + int monthLength = c.getActualMaximum(Calendar.DAY_OF_MONTH); + boolean toggleStyle = true; + for (int day = 1; day < monthLength + 1; day++) { + XCell cell = xSheet.getCellByPosition(monthPos, 1 + day); + c.set(year, month, day); + int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); + setValue(cell, + DAYS[dayOfWeek - 1] + " " + Integer.toString(day) + " " + c.get(Calendar.WEEK_OF_MONTH), + "StyleJour" + (toggleStyle ? "1" : "2")); + toggleStyle = !toggleStyle; + } + c.set(year, month, 1); + int firstDay = 1; + while (firstDay <= monthLength) { + c.set(Calendar.DAY_OF_MONTH, firstDay); + int weekLength = 8 - realDayOfWeek(c.get(Calendar.DAY_OF_WEEK)); + XCellRange range; + if (firstDay + weekLength <= monthLength) { + range = xSheet.getCellRangeByPosition(monthPos + 1, 1 + firstDay, monthPos + 1, + 1 + firstDay + weekLength - 1); + weekTypeIndex = (weekTypeIndex + 1) % semTypes; + range.getCellByPosition(0, 0).setFormula("S" + (weekTypeIndex + 1)); + } else { + range = xSheet.getCellRangeByPosition(monthPos + 1, 1 + firstDay, monthPos + 1, + 1 + monthLength); + range.getCellByPosition(0, 0).setFormula("S" + (weekTypeIndex)); + } + merge(range); + firstDay += weekLength; + } + + } + lastPosition = newPosition; + } + + XPropertySet sheetProperties = queryInterface(XPropertySet.class, xSheet); + XConditionalFormats conditionalFormats = queryInterface(XConditionalFormats.class, + sheetProperties.getPropertyValue("ConditionalFormats")); + // XIndexAccess conditionalFormatsAccess = queryInterface(XIndexAccess.class, + // conditionalFormats); + XCellRangesQuery querier = queryInterface(XCellRangesQuery.class, xSheet); + XSheetCellRanges ranges = querier.queryEmptyCells(); + + int id = conditionalFormats.createByRange(ranges); + System.out.println("Coucou" + conditionalFormats.getConditionalFormats().length); + XConditionalFormat format = conditionalFormats.getConditionalFormats()[0];// queryInterface(XConditionalFormat.class, + // conditionalFormatsAccess.getByIndex(id)); + + for (int s = 0; s < semTypes + 10; s++) { + + format.createEntry(ConditionEntryType.CONDITION, s); + + XConditionEntry entry = queryInterface(XConditionEntry.class, format.getByIndex(s)); + + XPropertySet entryProps = queryInterface(XPropertySet.class, entry); + + entryProps.setPropertyValue("Operator", ConditionFormatOperator.EQUAL); + entryProps.setPropertyValue("Formula1", "\"cc\""); + //entryProps.setPropertyValue("Formula1", "'S" + Integer.toString(s + 1)); + entryProps.setPropertyValue("StyleName", "StyleS" + (s + 1)); + + } + + // XSheetCondition conditionS = ; + // XSheetConditionalEntries entries = ; + // entries.addNew(arg0); + // XSheetConditionalEntry entry = ; + // entry.setStyleName("StyleS"); + + PropertyValue vType = new PropertyValue("FilterName", -1, "", PropertyState.DEFAULT_VALUE); + PropertyValue vOw = new PropertyValue("Overwrite", -1, true, PropertyState.DEFAULT_VALUE); + + XStorable store = UnoRuntime.queryInterface(XStorable.class, myDoc); + store.storeToURL(destination.toURI().toString(), new PropertyValue[] { vType, vOw }); + + } catch (Exception e) { + e.printStackTrace(System.err); + return false; + } + + return true; + } + + public static int realDayOfWeek(int day) { + if (day == Calendar.SUNDAY) + return 7; + return day - 1; + } + + public static void colorCell(XPropertySet cell, Color backColor) + throws IllegalArgumentException, UnknownPropertyException, PropertyVetoException, WrappedTargetException { + cell.setPropertyValue("CellBackColor", Integer.valueOf(backColor.getRGB() & 0xFFFFFF)); + cell.setPropertyValue("CharColor", Integer.valueOf(Util.complementaire(backColor).getRGB() & 0xFFFFFF)); + cell.setPropertyValue("IsCellBackgroundTransparent", Boolean.FALSE); + } + + public static void merge(XCellRange range) { + XMergeable merger = queryInterface(XMergeable.class, range); + merger.merge(true); + } + + public static void mergeAndSet(XCellRange range, String formula, String style) throws IndexOutOfBoundsException, + IllegalArgumentException, UnknownPropertyException, PropertyVetoException, WrappedTargetException { + merge(range); + setValue(range.getCellByPosition(0, 0), formula, style); + } + + public static void setValue(XCell cell, String formula, String style) throws IndexOutOfBoundsException, + IllegalArgumentException, UnknownPropertyException, PropertyVetoException, WrappedTargetException { + cell.setFormula(formula); + XPropertySet props = queryInterface(XPropertySet.class, cell); + props.setPropertyValue("CellStyle", style); + } + +} diff --git a/src/main/java/com/bernard/kholloscopinator/controlleur/KholloscopeMaker.java b/src/main/java/com/bernard/kholloscopinator/controlleur/KholloscopeMaker.java new file mode 100644 index 0000000..3037dac --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/controlleur/KholloscopeMaker.java @@ -0,0 +1,211 @@ +package com.bernard.kholloscopinator.controlleur; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Queue; +import java.util.Random; +import java.util.Set; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.function.Function; +import java.util.stream.Collectors; + +import com.bernard.kholloscopinator.model.*; + +import static java.lang.Math.*; + +public class KholloscopeMaker { + + public static int selectionSize = 10; + public static int maxSelectionTries = 100; + + public static final Kholloscope genRandKholloscope(Random r,KConfig config, Set eleves, Set kholleurs,Set preGroupes, List calendrier, Map>> disponibilites, Map>> disponibilitesKholleurs,Map>> khPrevues) { + + khMake: while(true) { + + if(config.isShouldGenGrps()) { + // Crée les groupes + preGroupes = new HashSet<>(); + Queue sizes = new LinkedBlockingQueue<>(); + sizes.addAll(Collections.nCopies(eleves.size()/3-2, 3)); + switch(eleves.size()%3) { + case 0: + sizes.add(3); + sizes.add(3); + break; + case 1: + sizes.add(2); + sizes.add(2); + break; + case 2: + sizes.add(3); + sizes.add(2); + break; + } + Queue contraintes = eleves.stream().map(e->e.getContraintes()).flatMap(Set::stream).distinct().collect(Collectors.toCollection(LinkedBlockingQueue::new)); + Map,List> tries = eleves.stream().collect(Collectors.groupingBy(Eleve::getContraintes)); + while(sizes.isEmpty()) { + tries.values().stream().forEach(l->{ + while(l.size()>=sizes.peek()) { + Set elevesDuGroupe = new HashSet<>(); + for (int i = 0; i < sizes.peek(); i++) { + elevesDuGroupe.add(l.get(0)); + l.remove(0); + } + sizes.poll(); + } + }); + + + + String contrainte = contraintes.poll(); + tries = tries.entrySet().stream() + .collect(Collectors.groupingBy(e->e.getKey() + .stream() + .filter(ct->!ct.equals(contrainte)) + .collect(Collectors.toSet()))) + .entrySet().stream() + .collect(Collectors.toMap(e->e.getKey(), e->e.getValue().stream() + .map(Entry::getValue) + .flatMap(List::stream) + .collect(Collectors.toList()))); + + } + + } + + Set groupes = preGroupes; + + + Map> kholles = new HashMap<>(); + + + // Taggage + + + //Track + Map>> kiDejaEu = new HashMap>>(); + + for(Semaine semaine : calendrier) { + + int semIndex = calendrier.indexOf(semaine); + + Map> disposKH = disponibilitesKholleurs.get(semaine.getType()); + Map> dispoEL = disponibilites.get(semaine.getType()); + + + Map> khollesPossibles = new HashMap<>(); + for(Groupe gr : groupes) { + + // Calcul du score + + + Function getKScore = new Function() { + @Override + public Double apply(Kholle kh) { + double score = 0; + score += exp(-0.0005*pow(kiDejaEu.get(kh.getKholleur()) + .get(kh.getGroupe()).stream() + .mapToDouble(x-> exp(-0.0005*pow(semIndex-x,4))) + .sum(),4)); + score *= ((double)kiDejaEu.get(kh.getKholleur()) + .get(kh.getGroupe()).size())/(semIndex+1); + return score; + } + }; + + + // Les kholles possibles et leur score + List khAFaire = khPrevues.get(semaine).get(gr); + Set dispoGrp = gr.getContraintes().stream().map(dispoEL::get).map(HashSet::new).reduce(new HashSet(), (h1,h2)->{h1.retainAll(h2);return h1;}); + Map scores = dispoGrp.stream() // Pour chaque horaire du groupe + .map(h -> disposKH.keySet().stream() // Associer la liste des dispos du kholleur + .filter(kholleur -> disposKH.get(kholleur).contains(h)) // Inter celles du groupe + .filter(k -> khAFaire.contains(k.getMatière()))// Enlever les kholleurs de mauvaise matière + .map(k -> new Kholle(k, gr, h)) // Puis créer les objets kholles correspondant + .collect(Collectors.toSet())) + .reduce(new HashSet(), (h1,h2)->{h1.addAll(h2);return h1;}).stream() + .collect(Collectors.toMap(Function.identity(),getKScore)); + + khollesPossibles.put(gr, scores); + + } + + //Sélection des kholles + + Map>,Double> selection = new HashMap<>(); + + dstr:for(int iter=0;selection.size() shuffledList = groupes.stream().collect(Collectors.toList()); + Collections.shuffle(shuffledList, r); + + Map> distribution = new HashMap<>(); + double score = 0; + for(Groupe gr : shuffledList) { + //Sélectionner la kholle + Map kPossibles = khollesPossibles + .get(gr) + .entrySet() + .stream() + .filter(e->!distribution.values().stream().anyMatch(l->l.stream().anyMatch(k->k.getHoraire().equals(e.getKey().getHoraire()) && k.getKholleur().equals(e.getKey().getKholleur())))) + .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); + List sel = new ArrayList<>(); + for (String matiere : khPrevues.get(semaine).get(gr)) { + Kholle ptSel = weightedSelection(kPossibles.entrySet().stream().filter(e->e.getKey().getKholleur().getMatière().equals(matiere)).collect(Collectors.toMap(Entry::getKey, Entry::getValue)), r); + if(ptSel==null)continue dstr; + sel.add(ptSel); + kPossibles.remove(ptSel); + } + distribution.put(gr, sel); + score += sel.stream().map(kPossibles::get).mapToDouble(x->x).sum(); + } + + selection.put(distribution, score); + } + if(selection.size()==0) { + continue khMake; // Refaire un nouveau kholloscope + } + + //Sélection de la meilleure distribution + double maxScore = selection.values().stream().mapToDouble(x->x).max().getAsDouble(); + Map> selectionne = selection.entrySet().stream().filter(e->e.getValue()==maxScore).map(Entry::getKey).findAny().get(); + kholles.put(semaine,selectionne.values().stream().flatMap(List::stream).collect(Collectors.toSet())); + + //update tracking maps + + kholleurs.stream().forEach(k-> groupes.stream().filter(g->selectionne.get(g).stream().anyMatch(kh->kh.getKholleur().equals(k))).forEach(g->kiDejaEu.get(k).get(g).add(semIndex)) ); + } + return new Kholloscope(groupes.stream().collect(Collectors.toList()), kholles); + } + } + + public static E weightedSelection(Map values,Random r){ + + double sum = values.values().stream().mapToDouble(x->x).sum(); + double rand = r.nextDouble() * sum; + double temp = 0; + E selected = null; + for(E e : values.keySet()) { + if(temp > rand)break; + temp += values.get(e); + selected = e; + } + return selected; + } + + public static long hashSetOfStrings(Set toHash) { + return toHash.stream().sorted().collect(Collectors.joining(";")).hashCode(); + } + + + public static final class KholleDisponible{ + + Kholleur kholleur; + Horaire horaire; + + } +} diff --git a/src/main/java/com/bernard/kholloscopinator/controlleur/OfficeController.java b/src/main/java/com/bernard/kholloscopinator/controlleur/OfficeController.java new file mode 100644 index 0000000..fff059b --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/controlleur/OfficeController.java @@ -0,0 +1,147 @@ +package com.bernard.kholloscopinator.controlleur; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PrintStream; +import java.io.UnsupportedEncodingException; +import java.util.Map; +import java.util.Random; + +import com.sun.star.bridge.UnoUrlResolver; +import com.sun.star.bridge.XUnoUrlResolver; +import com.sun.star.comp.helper.Bootstrap; +import com.sun.star.comp.helper.BootstrapException; +import com.sun.star.lang.XMultiComponentFactory; +import com.sun.star.lib.util.NativeLibraryLoader; +import com.sun.star.uno.UnoRuntime; +import com.sun.star.uno.XComponentContext; + +public class OfficeController { + public static Process soffice = null; + public static XComponentContext xContext; + + static { + try { + bootstrap(Bootstrap.getDefaultOptions()); + System.out.println("Connécté à office"); + } catch (BootstrapException e) { + e.printStackTrace(); + System.exit(42); + } + } + + public static final void bootstrap( String[] argArray ) + throws BootstrapException { + + XComponentContext xContext = null; + + try { + // create default local component context + XComponentContext xLocalContext = + Bootstrap.createInitialComponentContext( (Map) null ); + if ( xLocalContext == null ) + throw new BootstrapException( "no local component context!" ); + + // find office executable relative to this class's class loader + String sOffice = + System.getProperty( "os.name" ).startsWith( "Windows" ) ? + "soffice.exe" : "soffice"; + File fOffice = NativeLibraryLoader.getResource( + Bootstrap.class.getClassLoader(), sOffice ); + if ( fOffice == null ) + throw new BootstrapException( "no office executable found!" ); + + // create random pipe name + String sPipeName = "uno" + + Long.toString(new Random().nextLong() & 0x7fffffffffffffffL); + + // create call with arguments + String[] cmdArray = new String[ argArray.length + 2 ]; + cmdArray[0] = fOffice.getPath(); + cmdArray[1] = ( "--accept=pipe,name=" + sPipeName + ";urp;" ); + + System.arraycopy( argArray, 0, cmdArray, 2, argArray.length ); + + // start office process + Process p = Runtime.getRuntime().exec( cmdArray ); + pipe( p.getInputStream(), System.out, "CO> " ); + pipe( p.getErrorStream(), System.err, "CE> " ); + + // initial service manager + XMultiComponentFactory xLocalServiceManager = + xLocalContext.getServiceManager(); + if ( xLocalServiceManager == null ) + throw new BootstrapException( "no initial service manager!" ); + + // create a URL resolver + XUnoUrlResolver xUrlResolver = + UnoUrlResolver.create( xLocalContext ); + + // connection string + String sConnect = "uno:pipe,name=" + sPipeName + + ";urp;StarOffice.ComponentContext"; + + // wait until office is started + for (int i = 0;; ++i) { + try { + // try to connect to office + Object context = xUrlResolver.resolve( sConnect ); + xContext = UnoRuntime.queryInterface( + XComponentContext.class, context); + if ( xContext == null ) + throw new BootstrapException( "no component context!" ); + break; + } catch ( com.sun.star.connection.NoConnectException ex ) { + // Wait 500 ms, then try to connect again, but do not wait + // longer than 5 min (= 600 * 500 ms) total: + if (i == 600) { + throw new BootstrapException(ex); + } + Thread.sleep( 500 ); + } + } + + OfficeController.soffice=p; + OfficeController.xContext=xContext; + } catch ( BootstrapException e ) { + throw e; + } catch ( java.lang.RuntimeException e ) { + throw e; + } catch ( java.lang.Exception e ) { + throw new BootstrapException( e ); + } + } + private static void pipe( + final InputStream in, final PrintStream out, final String prefix ) { + + new Thread( "Pipe: " + prefix) { + @Override + public void run() { + try { + BufferedReader r = new BufferedReader( + new InputStreamReader(in, "UTF-8") ); + + for ( ; ; ) { + String s = r.readLine(); + if ( s == null ) { + break; + } + out.println( prefix + s ); + } + } catch ( UnsupportedEncodingException e ) { + e.printStackTrace( System.err ); + } catch ( java.io.IOException e ) { + e.printStackTrace( System.err ); + } + } + }.start(); + } + + public static void closeOffice() { + OfficeController.soffice.destroy(); + } + + +} diff --git a/src/main/java/com/bernard/kholloscopinator/model/Eleve.java b/src/main/java/com/bernard/kholloscopinator/model/Eleve.java new file mode 100644 index 0000000..e0263bb --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/model/Eleve.java @@ -0,0 +1,70 @@ +package com.bernard.kholloscopinator.model; + +import java.util.Set; + +public class Eleve { + + private String nom; + private String prenom; + private String regime; + private Set contraintes; + + public Eleve(String nom, String prenom, String regime, Set contraintes) { + super(); + this.nom = nom; + this.prenom = prenom; + this.regime = regime; + this.contraintes = contraintes; + } + + public String getNom() { + return nom; + } + + public String getPrenom() { + return prenom; + } + + public String getRegime() { + return regime; + } + + public Set getContraintes() { + return contraintes; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((nom == null) ? 0 : nom.hashCode()); + result = prime * result + ((prenom == null) ? 0 : prenom.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Eleve other = (Eleve) obj; + if (nom == null) { + if (other.nom != null) + return false; + } else if (!nom.equals(other.nom)) + return false; + if (prenom == null) { + if (other.prenom != null) + return false; + } else if (!prenom.equals(other.prenom)) + return false; + return true; + } + + + + +} diff --git a/src/main/java/com/bernard/kholloscopinator/model/Groupe.java b/src/main/java/com/bernard/kholloscopinator/model/Groupe.java new file mode 100644 index 0000000..ab08a4e --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/model/Groupe.java @@ -0,0 +1,64 @@ +package com.bernard.kholloscopinator.model; + +import java.util.HashSet; +import java.util.Set; + +public class Groupe { + + private Set eleves; + private volatile Set contraintes; + + public Groupe(Set eleves) { + this.eleves = eleves; + updateContraintes(); + } + + private void updateContraintes() { + Set contraintes = new HashSet(); + for(Eleve e : eleves) { + contraintes.addAll(e.getContraintes()); + } + } + + public Set getEleves() { + return eleves; + } + + public Set getContraintes() { + return contraintes; + } + + /** + * Ne tiens compte que des élèves du groupe, les contraintes n'étant pas supposées être discriminantes + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((eleves == null) ? 0 : eleves.hashCode()); + return result; + } + + /** + * Ne tiens compte que des élèves du groupe, les contraintes n'étant pas supposées être discriminantes + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Groupe other = (Groupe) obj; + if (eleves == null) { + if (other.eleves != null) + return false; + } else if (!eleves.equals(other.eleves)) + return false; + return true; + } + + + +} diff --git a/src/main/java/com/bernard/kholloscopinator/model/Horaire.java b/src/main/java/com/bernard/kholloscopinator/model/Horaire.java new file mode 100644 index 0000000..300a442 --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/model/Horaire.java @@ -0,0 +1,63 @@ +package com.bernard.kholloscopinator.model; + +import java.util.Set; + +public class Horaire { + + String jour; // Ex: "Mon" + String heure; // Ex: "9h" ou "12h30-14h45" + Set tags; // Ex : {"S","M"} + + public Horaire(String jour, String heure, Set tags) { + super(); + this.jour = jour; + this.heure = heure; + this.tags = tags; + } + + public String getJour() { + return jour; + } + + public String getHeure() { + return heure; + } + + public Set getTags() { + return tags; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((heure == null) ? 0 : heure.hashCode()); + result = prime * result + ((jour == null) ? 0 : jour.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Horaire other = (Horaire) obj; + if (heure == null) { + if (other.heure != null) + return false; + } else if (!heure.equals(other.heure)) + return false; + if (jour == null) { + if (other.jour != null) + return false; + } else if (!jour.equals(other.jour)) + return false; + return true; + } + + + +} diff --git a/src/main/java/com/bernard/kholloscopinator/model/KConfig.java b/src/main/java/com/bernard/kholloscopinator/model/KConfig.java new file mode 100644 index 0000000..ba71453 --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/model/KConfig.java @@ -0,0 +1,299 @@ +package com.bernard.kholloscopinator.model; + +public class KConfig { + + private boolean shouldGenGrps; + private char genMethod; // 'n' par nombre, 't' pour temps + private Long genTimeTime; + private Integer genNumberNumber; + private String outputFileName, inputFileName; + private boolean genKCondense,genKParEleve,genKParEleveFat,genKParGroupe,genKParGroupeFat,genKCondenseParProf,genKCondenseParProfFat,genKListeParProf,genKListeParProfFat,genKCalendrierParProf,genKCalendrierParProfFat,genKPourEleveCalendrier,genKPourEleveCalendrierFat,genKPourGroupeCalendrier,genKPourGroupeCalendrierFat,genListeGroupes; + + + /** + * @param shouldGenGrps + * @param genMethod + * @param genTimeTime + * @param genNumberNumber + * @param outputFileName + * @param inputFileName + * @param genKCondense + * @param genKParEleve + * @param genKParEleveFat + * @param genKParGroupe + * @param genKParGroupeFat + * @param genKCondenseParProf + * @param genKCondenseParProfFat + * @param genKListeParProf + * @param genKListeParProfFat + * @param genKCalendrierParProf + * @param genKCalendrierParProfFat + * @param genKPourEleveCalendrier + * @param genKPourEleveCalendrierFat + * @param genKPourGroupeCalendrier + * @param genKPourGroupeCalendrierFat + * @param genListeGroupes + */ + public KConfig(boolean shouldGenGrps, char genMethod, Long genTimeTime, Integer genNumberNumber, + String outputFileName, String inputFileName, boolean genKCondense, boolean genKParEleve, + boolean genKParEleveFat, boolean genKParGroupe, boolean genKParGroupeFat, boolean genKCondenseParProf, + boolean genKCondenseParProfFat, boolean genKListeParProf, boolean genKListeParProfFat, + boolean genKCalendrierParProf, boolean genKCalendrierParProfFat, boolean genKPourEleveCalendrier, + boolean genKPourEleveCalendrierFat, boolean genKPourGroupeCalendrier, boolean genKPourGroupeCalendrierFat, + boolean genListeGroupes) { + this.shouldGenGrps = shouldGenGrps; + this.genMethod = genMethod; + this.genTimeTime = genTimeTime; + this.genNumberNumber = genNumberNumber; + this.outputFileName = outputFileName; + this.inputFileName = inputFileName; + this.genKCondense = genKCondense; + this.genKParEleve = genKParEleve; + this.genKParEleveFat = genKParEleveFat; + this.genKParGroupe = genKParGroupe; + this.genKParGroupeFat = genKParGroupeFat; + this.genKCondenseParProf = genKCondenseParProf; + this.genKCondenseParProfFat = genKCondenseParProfFat; + this.genKListeParProf = genKListeParProf; + this.genKListeParProfFat = genKListeParProfFat; + this.genKCalendrierParProf = genKCalendrierParProf; + this.genKCalendrierParProfFat = genKCalendrierParProfFat; + this.genKPourEleveCalendrier = genKPourEleveCalendrier; + this.genKPourEleveCalendrierFat = genKPourEleveCalendrierFat; + this.genKPourGroupeCalendrier = genKPourGroupeCalendrier; + this.genKPourGroupeCalendrierFat = genKPourGroupeCalendrierFat; + this.genListeGroupes = genListeGroupes; + } + + public static KConfig getDefaultConfig() { + return new KConfig(true, 't', 600L, 42, "/kholloscope.kou", "/kholloscope.kin", true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true); + } + + + public boolean isShouldGenGrps() { + return shouldGenGrps; + } + + + public char getGenMethod() { + return genMethod; + } + + + public Long getGenTimeTime() { + return genTimeTime; + } + + + public Integer getGenNumberNumber() { + return genNumberNumber; + } + + + public String getOutputFileName() { + return outputFileName; + } + + + public String getInputFileName() { + return inputFileName; + } + + + public boolean isGenKCondense() { + return genKCondense; + } + + + public boolean isGenKParEleve() { + return genKParEleve; + } + + + public boolean isGenKParEleveFat() { + return genKParEleveFat; + } + + + public boolean isGenKParGroupe() { + return genKParGroupe; + } + + + public boolean isGenKParGroupeFat() { + return genKParGroupeFat; + } + + + public boolean isGenKCondenseParProf() { + return genKCondenseParProf; + } + + + public boolean isGenKCondenseParProfFat() { + return genKCondenseParProfFat; + } + + + public boolean isGenKListeParProf() { + return genKListeParProf; + } + + + public boolean isGenKListeParProfFat() { + return genKListeParProfFat; + } + + + public boolean isGenKCalendrierParProf() { + return genKCalendrierParProf; + } + + + public boolean isGenKCalendrierParProfFat() { + return genKCalendrierParProfFat; + } + + + public boolean isGenKPourEleveCalendrier() { + return genKPourEleveCalendrier; + } + + + public boolean isGenKPourEleveCalendrierFat() { + return genKPourEleveCalendrierFat; + } + + + public boolean isGenKPourGroupeCalendrier() { + return genKPourGroupeCalendrier; + } + + + public boolean isGenKPourGroupeCalendrierFat() { + return genKPourGroupeCalendrierFat; + } + + + public boolean isGenListeGroupes() { + return genListeGroupes; + } + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (genKCalendrierParProf ? 1231 : 1237); + result = prime * result + (genKCalendrierParProfFat ? 1231 : 1237); + result = prime * result + (genKCondense ? 1231 : 1237); + result = prime * result + (genKCondenseParProf ? 1231 : 1237); + result = prime * result + (genKCondenseParProfFat ? 1231 : 1237); + result = prime * result + (genKListeParProf ? 1231 : 1237); + result = prime * result + (genKListeParProfFat ? 1231 : 1237); + result = prime * result + (genKParEleve ? 1231 : 1237); + result = prime * result + (genKParEleveFat ? 1231 : 1237); + result = prime * result + (genKParGroupe ? 1231 : 1237); + result = prime * result + (genKParGroupeFat ? 1231 : 1237); + result = prime * result + (genKPourEleveCalendrier ? 1231 : 1237); + result = prime * result + (genKPourEleveCalendrierFat ? 1231 : 1237); + result = prime * result + (genKPourGroupeCalendrier ? 1231 : 1237); + result = prime * result + (genKPourGroupeCalendrierFat ? 1231 : 1237); + result = prime * result + (genListeGroupes ? 1231 : 1237); + result = prime * result + genMethod; + result = prime * result + ((genNumberNumber == null) ? 0 : genNumberNumber.hashCode()); + result = prime * result + ((genTimeTime == null) ? 0 : genTimeTime.hashCode()); + result = prime * result + ((inputFileName == null) ? 0 : inputFileName.hashCode()); + result = prime * result + ((outputFileName == null) ? 0 : outputFileName.hashCode()); + result = prime * result + (shouldGenGrps ? 1231 : 1237); + return result; + } + + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + KConfig other = (KConfig) obj; + if (genKCalendrierParProf != other.genKCalendrierParProf) + return false; + if (genKCalendrierParProfFat != other.genKCalendrierParProfFat) + return false; + if (genKCondense != other.genKCondense) + return false; + if (genKCondenseParProf != other.genKCondenseParProf) + return false; + if (genKCondenseParProfFat != other.genKCondenseParProfFat) + return false; + if (genKListeParProf != other.genKListeParProf) + return false; + if (genKListeParProfFat != other.genKListeParProfFat) + return false; + if (genKParEleve != other.genKParEleve) + return false; + if (genKParEleveFat != other.genKParEleveFat) + return false; + if (genKParGroupe != other.genKParGroupe) + return false; + if (genKParGroupeFat != other.genKParGroupeFat) + return false; + if (genKPourEleveCalendrier != other.genKPourEleveCalendrier) + return false; + if (genKPourEleveCalendrierFat != other.genKPourEleveCalendrierFat) + return false; + if (genKPourGroupeCalendrier != other.genKPourGroupeCalendrier) + return false; + if (genKPourGroupeCalendrierFat != other.genKPourGroupeCalendrierFat) + return false; + if (genListeGroupes != other.genListeGroupes) + return false; + if (genMethod != other.genMethod) + return false; + if (genNumberNumber == null) { + if (other.genNumberNumber != null) + return false; + } else if (!genNumberNumber.equals(other.genNumberNumber)) + return false; + if (genTimeTime == null) { + if (other.genTimeTime != null) + return false; + } else if (!genTimeTime.equals(other.genTimeTime)) + return false; + if (inputFileName == null) { + if (other.inputFileName != null) + return false; + } else if (!inputFileName.equals(other.inputFileName)) + return false; + if (outputFileName == null) { + if (other.outputFileName != null) + return false; + } else if (!outputFileName.equals(other.outputFileName)) + return false; + if (shouldGenGrps != other.shouldGenGrps) + return false; + return true; + } + + + @Override + public String toString() { + return "KConfig [shouldGenGrps=" + shouldGenGrps + ", genMethod=" + genMethod + ", genTimeTime=" + genTimeTime + + ", genNumberNumber=" + genNumberNumber + ", outputFileName=" + outputFileName + ", inputFileName=" + + inputFileName + ", genKCondense=" + genKCondense + ", genKParEleve=" + genKParEleve + + ", genKParEleveFat=" + genKParEleveFat + ", genKParGroupe=" + genKParGroupe + ", genKParGroupeFat=" + + genKParGroupeFat + ", genKCondenseParProf=" + genKCondenseParProf + ", genKCondenseParProfFat=" + + genKCondenseParProfFat + ", genKListeParProf=" + genKListeParProf + ", genKListeParProfFat=" + + genKListeParProfFat + ", genKCalendrierParProf=" + genKCalendrierParProf + + ", genKCalendrierParProfFat=" + genKCalendrierParProfFat + ", genKPourEleveCalendrier=" + + genKPourEleveCalendrier + ", genKPourEleveCalendrierFat=" + genKPourEleveCalendrierFat + + ", genKPourGroupeCalendrier=" + genKPourGroupeCalendrier + ", genKPourGroupeCalendrierFat=" + + genKPourGroupeCalendrierFat + ", genListeGroupes=" + genListeGroupes + "]"; + } + + + +} diff --git a/src/main/java/com/bernard/kholloscopinator/model/Kholle.java b/src/main/java/com/bernard/kholloscopinator/model/Kholle.java new file mode 100644 index 0000000..037eebd --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/model/Kholle.java @@ -0,0 +1,67 @@ +package com.bernard.kholloscopinator.model; + +public class Kholle { + + Kholleur kholleur; + Groupe groupe; + Horaire horaire; + + public Kholle(Kholleur kholleur, Groupe groupe, Horaire horaire) { + super(); + this.kholleur = kholleur; + this.groupe = groupe; + this.horaire = horaire; + } + + public Kholleur getKholleur() { + return kholleur; + } + + public Groupe getGroupe() { + return groupe; + } + + public Horaire getHoraire() { + return horaire; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((groupe == null) ? 0 : groupe.hashCode()); + result = prime * result + ((horaire == null) ? 0 : horaire.hashCode()); + result = prime * result + ((kholleur == null) ? 0 : kholleur.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Kholle other = (Kholle) obj; + if (groupe == null) { + if (other.groupe != null) + return false; + } else if (!groupe.equals(other.groupe)) + return false; + if (horaire == null) { + if (other.horaire != null) + return false; + } else if (!horaire.equals(other.horaire)) + return false; + if (kholleur == null) { + if (other.kholleur != null) + return false; + } else if (!kholleur.equals(other.kholleur)) + return false; + return true; + } + + + +} diff --git a/src/main/java/com/bernard/kholloscopinator/model/Kholleur.java b/src/main/java/com/bernard/kholloscopinator/model/Kholleur.java new file mode 100644 index 0000000..74b588d --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/model/Kholleur.java @@ -0,0 +1,54 @@ +package com.bernard.kholloscopinator.model; + +public class Kholleur { + + private String nom; + private String matière; + + public Kholleur(String nom, String matière) { + this.nom = nom; + this.matière = matière; + } + + public String getNom() { + return nom; + } + + public String getMatière() { + return matière; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((matière == null) ? 0 : matière.hashCode()); + result = prime * result + ((nom == null) ? 0 : nom.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Kholleur other = (Kholleur) obj; + if (matière == null) { + if (other.matière != null) + return false; + } else if (!matière.equals(other.matière)) + return false; + if (nom == null) { + if (other.nom != null) + return false; + } else if (!nom.equals(other.nom)) + return false; + return true; + } + + + +} diff --git a/src/main/java/com/bernard/kholloscopinator/model/Kholloscope.java b/src/main/java/com/bernard/kholloscopinator/model/Kholloscope.java new file mode 100644 index 0000000..770d703 --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/model/Kholloscope.java @@ -0,0 +1,59 @@ +package com.bernard.kholloscopinator.model; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class Kholloscope { + + List groupes; + Map> kholles; + + public Kholloscope(List groupes, Map> kholles) { + super(); + this.groupes = groupes; + this.kholles = kholles; + } + + public List getGroupes() { + return groupes; + } + + public Map> getKholles() { + return kholles; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((groupes == null) ? 0 : groupes.hashCode()); + result = prime * result + ((kholles == null) ? 0 : kholles.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Kholloscope other = (Kholloscope) obj; + if (groupes == null) { + if (other.groupes != null) + return false; + } else if (!groupes.equals(other.groupes)) + return false; + if (kholles == null) { + if (other.kholles != null) + return false; + } else if (!kholles.equals(other.kholles)) + return false; + return true; + } + + + +} diff --git a/src/main/java/com/bernard/kholloscopinator/model/Semaine.java b/src/main/java/com/bernard/kholloscopinator/model/Semaine.java new file mode 100644 index 0000000..119620f --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/model/Semaine.java @@ -0,0 +1,64 @@ +package com.bernard.kholloscopinator.model; + +import java.util.List; + +/** + * Definit une semaine du calendrier, indépendant du lycée, des élèves ou de quoi que ce soit, si c n'est la planète de l'utilisateur. + * @author mysaa + * + */ +public class Semaine { + + int numero; + List contenu; + String type; + + public Semaine(int numero, List contenu, String type) { + this.numero = numero; + this.contenu = contenu; + this.type = type; + } + + public int getNumero() { + return numero; + } + + public List getContenu() { + return contenu; + } + + public String getType() { + return type; + } + + /** + * Le seul discriminant de l'objet est le numéro de la semaine. les autres contenus ne sont en aucun cas testés + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + numero; + return result; + } + + /** + * Le seul discriminant de l'objet est le numéro de la semaine. les autres contenus ne sont en aucun cas testés + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Semaine other = (Semaine) obj; + if (numero != other.numero) + return false; + return true; + } + + + +} diff --git a/src/main/java/com/bernard/kholloscopinator/vue/MainFrame.java b/src/main/java/com/bernard/kholloscopinator/vue/MainFrame.java new file mode 100644 index 0000000..fbd8cc2 --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/vue/MainFrame.java @@ -0,0 +1,406 @@ +package com.bernard.kholloscopinator.vue; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.io.File; +import java.text.DateFormat; +import java.text.ParseException; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.HashSet; +import java.util.Locale; +import java.util.Set; +import java.util.TimeZone; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.RegEx; +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.ButtonGroup; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextField; + +import com.bernard.kholloscopinator.controlleur.FileWriter; +import com.bernard.kholloscopinator.controlleur.OfficeController; +import com.bernard.kholloscopinator.model.KConfig; + +public class MainFrame extends JFrame { + + private static final long serialVersionUID = -4586310718545109704L; + + public MainFrame() { + this.setTitle("Kholloscopinator"); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + this.initView(); + this.addActionListeners(); + this.ecrireConfig(KConfig.getDefaultConfig()); + + this.setSize(900, 600); + this.setLocationRelativeTo(null);//Centre + this.setVisible(true); + } + + private JButton dFileShooser,templateLauncher,inputLauncher,go,outputLauncher,allInOneLauncher; + private JCheckBox shouldGenGrps; + private JRadioButton genTimeButton, genNumberButton; + private JTextField genTimeTime, genNumberNumber; + private JTextField outputFileName, inputFileName; + private JCheckBox genKCondense,genKParEleve,genKParEleveFat,genKParGroupe,genKParGroupeFat,genKCondenseParProf,genKCondenseParProfFat,genKListeParProf,genKListeParProfFat,genKCalendrierParProf,genKCalendrierParProfFat,genKPourEleveCalendrier,genKPourEleveCalendrierFat,genKPourGroupeCalendrier,genKPourGroupeCalendrierFat,genListeGroupes; + private JButton checkConfig; + + private void initView() { + JPanel globalPan = new JPanel(); + + JPanel directoryPan = new JPanel(); + directoryPan.setLayout(new BorderLayout()); + + JTextField directoryField = new JTextField(System.getProperty("user.home")+"/kholloscopinator/"); + JLabel dLabel = new JLabel("Destination : "); + dFileShooser = new JButton("Parcourir"); + directoryPan.add(dLabel,BorderLayout.WEST); + directoryPan.add(directoryField, BorderLayout.CENTER); + directoryPan.add(dFileShooser,BorderLayout.EAST); + + + JTabbedPane configPan = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT); + + + JPanel kPan = new JPanel(); + + JPanel shouldGenPan = new JPanel(new BorderLayout()); + JLabel shouldGenLabel = new JLabel("Dois-je générer les groupes ?"); + shouldGenGrps = new JCheckBox(); + shouldGenPan.add(shouldGenGrps, BorderLayout.WEST); + shouldGenPan.add(shouldGenLabel,BorderLayout.CENTER); + + kPan.setLayout(new FlowLayout()); + kPan.add(shouldGenPan); + JScrollPane kPanPan = new JScrollPane(kPan); + + + JPanel genPan = new JPanel(); + Set borders = new HashSet<>(); + + JPanel timePan = new JPanel(new BorderLayout()); + TitledCheckableBorder timeBorder = new TitledCheckableBorder("Temps", true,borders,genPan); + timePan.setBorder(timeBorder); + genTimeButton = timeBorder.getCheckBox(); + JLabel timeText = new JLabel("Temps de recherche :"); + genTimeTime = new JTextField("10:00"); + timePan.add(timeText, BorderLayout.WEST); + timePan.add(genTimeTime, BorderLayout.CENTER); + + JPanel nombrePan = new JPanel(new BorderLayout()); + TitledCheckableBorder nombreBorder = new TitledCheckableBorder("Nombre", false,borders,genPan); + nombrePan.setBorder(nombreBorder); + genNumberButton = nombreBorder.getCheckBox(); + JLabel numberText1 = new JLabel("Génerer "); + JLabel numberText2 = new JLabel(" kholloscopes."); + genNumberNumber = new JTextField("42"); + nombrePan.add(numberText1, BorderLayout.WEST); + nombrePan.add(genNumberNumber, BorderLayout.CENTER); + nombrePan.add(numberText2, BorderLayout.EAST); + + ButtonGroup genButtonsGroup = new ButtonGroup(); + genButtonsGroup.add(genTimeButton); + genButtonsGroup.add(genNumberButton); + + genPan.setLayout(new BoxLayout(genPan, BoxLayout.Y_AXIS)); + genPan.add(timePan); + genPan.add(nombrePan); + JPanel genPanPanPan = new JPanel(new BorderLayout()); + genPanPanPan.add(genPan,BorderLayout.NORTH); + JScrollPane genPanPan = new JScrollPane(genPanPanPan); + + + JPanel filesPan = new JPanel(); + filesPan.setLayout(new BoxLayout(filesPan, BoxLayout.Y_AXIS)); + JPanel filesNamePan = new JPanel(); + filesNamePan.setLayout(new GridBagLayout()); + GridBagConstraints fGBC = new GridBagConstraints(); + JLabel outputFileLabel = new JLabel("Nom de la sortie"); + JLabel inputFileLabel = new JLabel("Nom de l'entrée"); + outputFileName = new JTextField("/kholloscope.kou"); + inputFileName = new JTextField("/kholloscope.kin"); + checkConfig = new JButton("Tester la config"); + + fGBC.weightx = 0.2; + fGBC.gridx = 0; + fGBC.gridy = 0; + fGBC.fill = GridBagConstraints.HORIZONTAL; + filesNamePan.add(outputFileLabel, fGBC); + fGBC.weightx = 0.8; + fGBC.gridx = 1; + fGBC.gridy = 0; + fGBC.fill = GridBagConstraints.HORIZONTAL; + filesNamePan.add(outputFileName, fGBC); + fGBC.weightx = .2; + fGBC.gridx = 0; + fGBC.gridy = 1; + fGBC.fill = GridBagConstraints.HORIZONTAL; + filesNamePan.add(inputFileLabel, fGBC); + fGBC.weightx = .8; + fGBC.gridx = 1; + fGBC.gridy = 1; + fGBC.fill = GridBagConstraints.HORIZONTAL; + filesNamePan.add(inputFileName, fGBC); + fGBC.weightx = 1.0; + fGBC.gridx = 0; + fGBC.gridy = 2; + fGBC.gridwidth = 2; + fGBC.fill = GridBagConstraints.HORIZONTAL; + filesNamePan.add(checkConfig, fGBC); + + + JPanel whatFilesPan = new JPanel(); + whatFilesPan.setLayout(new GridBagLayout()); + whatFilesPan.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.lightGray, 1), "Que génerer")); + + GridBagConstraints wGBC = new GridBagConstraints(); + wGBC.fill = GridBagConstraints.HORIZONTAL; + genKCondense = new JCheckBox("Génerer le kholloscope condensé"); + int theY = wGBC.gridx = wGBC.gridy = 0; + wGBC.weightx = 1.0; + whatFilesPan.add(genKCondense,wGBC); + genKParEleve = new JCheckBox("Génerer le kholloscope par élève"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKParEleve,wGBC); + genKParEleveFat = new JCheckBox("Génerer le kholloscope par élève (fat)"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKParEleveFat,wGBC); + genKParGroupe = new JCheckBox("Génerer le kholloscope par groupe"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKParGroupe,wGBC); + genKParGroupeFat = new JCheckBox("Génerer le kholloscope par groupe (fat)"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKParGroupeFat,wGBC); + genKCondenseParProf = new JCheckBox("Génerer le kholloscope condensé par professeur"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKCondenseParProf,wGBC); + genKCondenseParProfFat = new JCheckBox("Génerer le kholloscope condensé par professeur (fat)"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKCondenseParProfFat,wGBC); + genKListeParProf = new JCheckBox("Génerer le kholloscope en liste par professeur"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKListeParProf,wGBC); + genKListeParProfFat = new JCheckBox("Génerer le kholloscope en liste par professeur (fat)"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKListeParProfFat,wGBC); + genKCalendrierParProf = new JCheckBox("Génerer le kholloscope en calendrier par professeur"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKCalendrierParProf,wGBC); + genKCalendrierParProfFat = new JCheckBox("Génerer le kholloscope en calendrier par professeur (fat)"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKCalendrierParProfFat,wGBC); + genKPourEleveCalendrier = new JCheckBox("Génerer le kholloscope en calendrier par élève"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKPourEleveCalendrier,wGBC); + genKPourEleveCalendrierFat = new JCheckBox("Génerer le kholloscope en calendrier par élève (fat)"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKPourEleveCalendrierFat,wGBC); + genKPourGroupeCalendrier = new JCheckBox("Génerer le kholloscope en calendrier par groupe"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKPourGroupeCalendrier,wGBC); + genKPourGroupeCalendrierFat = new JCheckBox("Génerer le kholloscope en calendrier par groupe (fat)"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genKPourGroupeCalendrierFat,wGBC); + genListeGroupes = new JCheckBox("Génerer la liste des groupes"); + wGBC.gridx = 0; + wGBC.gridy = theY++; + whatFilesPan.add(genListeGroupes,wGBC); + + + + filesPan.add(filesNamePan); + filesPan.add(whatFilesPan); + JPanel filesPanPan = new JPanel(new BorderLayout()); + filesPanPan.add(filesPan,BorderLayout.NORTH); + JScrollPane files = new JScrollPane(filesPanPan); + + + JPanel launcherPan = new JPanel(); + GridBagLayout launcherGBL = new GridBagLayout(); + launcherPan.setLayout(launcherGBL); + GridBagConstraints lGBC = new GridBagConstraints(); + + templateLauncher = new JButton("Template"); + inputLauncher = new JButton("Lire"); + go = new JButton("Génerer"); + outputLauncher = new JButton("Écrire"); + allInOneLauncher = new JButton("All in one"); + lGBC.insets = new Insets(3, 3, 3, 3); + lGBC.weightx = 1.0; + lGBC.gridx = lGBC.gridy = 0; + lGBC.fill = GridBagConstraints.BOTH; + lGBC.gridheight = 2; + launcherPan.add(templateLauncher,lGBC); + lGBC.gridx=1; + lGBC.gridheight = 1; + launcherPan.add(inputLauncher,lGBC); + lGBC.gridx=2; + launcherPan.add(go,lGBC); + lGBC.gridx=3; + launcherPan.add(outputLauncher,lGBC); + lGBC.gridx=1; + lGBC.gridy=1; + lGBC.gridwidth=3; + launcherPan.add(allInOneLauncher,lGBC); + + configPan.add(kPanPan, "Kholloscope"); + configPan.add(genPanPan, "Géneraton"); + configPan.add(files, "Fichiers"); + + // Lire les données d'un dossier et y compiler dans un fichier .khi (KHolloscope Input) + + // Rechercher un kholloscope, l'algorithme !!! + + // Transformer les fichiers .kho en plein de fichiers de toutes les couleurs (KHOlloscope) + + globalPan.setLayout(new BorderLayout()); + globalPan.add(directoryPan,BorderLayout.NORTH); + globalPan.add(configPan,BorderLayout.CENTER); + globalPan.add(launcherPan,BorderLayout.SOUTH); + + this.setContentPane(globalPan); + } + + public void addActionListeners() { + checkConfig.addActionListener(e -> { + try { + System.out.println(lireConfig()); + JOptionPane.showMessageDialog(this, "La configuration que vous m'avez donnée me semble tout à fait corecte !", "Config : OK", JOptionPane.INFORMATION_MESSAGE); + } catch (ParseException e1) { + e1.printStackTrace(); + } + }); + } + + + public void ecrireConfig(KConfig c) { + switch (c.getGenMethod()) { + case 'n': + this.genNumberButton.setSelected(true); + this.genNumberNumber.setText(Integer.toString(c.getGenNumberNumber())); + break; + case 't': + this.genTimeButton.setSelected(true); + this.genTimeTime.setText(getFromLongTime(c.getGenTimeTime())); + break; + } + + this.outputFileName.setText(c.getOutputFileName()); + this.inputFileName.setText(c.getInputFileName()); + + this.shouldGenGrps.setSelected(true); + + genKCondense.setSelected(c.isGenKCondense()); + genKParEleve.setSelected(c.isGenKParEleve()); + genKParEleveFat.setSelected(c.isGenKParEleveFat()); + genKParGroupe.setSelected(c.isGenKParGroupe()); + genKParGroupeFat.setSelected(c.isGenKParGroupeFat()); + genKCondenseParProf.setSelected(c.isGenKCondenseParProf()); + genKCondenseParProfFat.setSelected(c.isGenKCondenseParProfFat()); + genKListeParProf.setSelected(c.isGenKListeParProf()); + genKListeParProfFat.setSelected(c.isGenKListeParProfFat()); + genKCalendrierParProf.setSelected(c.isGenKCalendrierParProf()); + genKCalendrierParProfFat.setSelected(c.isGenKCalendrierParProfFat()); + genKPourEleveCalendrier.setSelected(c.isGenKPourEleveCalendrier()); + genKPourEleveCalendrierFat.setSelected(c.isGenKPourEleveCalendrierFat()); + genKPourGroupeCalendrier.setSelected(c.isGenKPourGroupeCalendrier()); + genKPourGroupeCalendrierFat.setSelected(c.isGenKPourGroupeCalendrierFat()); + genListeGroupes.setSelected(c.isGenListeGroupes()); + + } + + public static final String getFromLongTime(Long time) { + if(time < 60) + return Long.toString(time); + else if(time < 3600) + return String.format("%02d:%02d", time/60,time%60); + else + return String.format("%d:%02d:%02d", time/3600,(time%3600)/60,time%60); + + } + + public KConfig lireConfig() throws ParseException { + Long genTimeTime = null; + Character genMethod = null; + if(genTimeButton.isSelected()) { + genMethod = 't'; + String genTimeT = this.genTimeTime.getText(); + @RegEx + String timeRecognizer = "((([0-9]+)[huHU:])?([0-9]+)[mM:])?([0-9]+)[sS]?"; + Matcher timeM = Pattern.compile(timeRecognizer).matcher(genTimeT); + if(!timeM.matches()) { + JOptionPane.showMessageDialog(this,"Le temps indiqué dans l'onglet 'Génération' n'est pas un temps valide","Erreur de lecture des données", JOptionPane.ERROR_MESSAGE); + throw new ParseException("Temps de generation",0); + } + System.out.println(IntStream.range(0, timeM.groupCount()+1).mapToObj(i->i+":"+timeM.group(i)+"\n").collect(Collectors.joining())); + genTimeTime = ((timeM.group(3)!=null)?Long.parseLong(timeM.group(3))*3600L:0L) + ((timeM.group(4)!=null)?Long.parseLong(timeM.group(4))*60L:0L) + Long.parseLong(timeM.group(5)); + } + + Integer genNumNum = null;; + if(genNumberButton.isSelected()) { + genMethod = 'n'; + try { + genNumNum = Integer.parseInt(genNumberNumber.getText()); + }catch(NumberFormatException e) { + JOptionPane.showMessageDialog(this,"Le nombre de kholloscopes indiqué dans l'onglet 'Génération' n'est pas un nombre valide","Erreur de lecture des données", JOptionPane.ERROR_MESSAGE); + throw new ParseException("Nombre de K de generation",0); + } + } + + //TODO check inputfilename and outputfilename validity + + return new KConfig(shouldGenGrps.isSelected(), genMethod, genTimeTime, genNumNum, outputFileName.getText(), inputFileName.getText(), genKCondense.isSelected(), genKParEleve.isSelected(), genKParEleveFat.isSelected(), genKParGroupe.isSelected(), genKParGroupeFat.isSelected(), genKCondenseParProf.isSelected(), genKCondenseParProfFat.isSelected(), genKListeParProf.isSelected(), genKListeParProfFat.isSelected(), genKCalendrierParProf.isSelected(), genKCalendrierParProfFat.isSelected(), genKPourEleveCalendrier.isSelected(), genKPourEleveCalendrierFat.isSelected(), genKPourGroupeCalendrier.isSelected(), genKPourGroupeCalendrierFat.isSelected(), genListeGroupes.isSelected()); + } + + + + + + + + public static MainFrame INSTANCE; + public static void main(String[] args) { + Locale.setDefault(new Locale("fr","FR")); + //MainFrame.INSTANCE = new MainFrame(); + //System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_WEEK)); + //System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_WEEK_IN_MONTH)); + FileWriter.genCalendar(new GregorianCalendar(2019, 9, 1).getTime(), new GregorianCalendar(2021, 6, 5).getTime(), 2, new File("./test.ods")); + //FileWriter.readCalendar(new File("./test.ods")); + System.out.println("Fermeture d'office"); + OfficeController.closeOffice(); + System.out.println("C'est fermé !"); + } +} diff --git a/src/main/java/com/bernard/kholloscopinator/vue/TitledCheckableBorder.java b/src/main/java/com/bernard/kholloscopinator/vue/TitledCheckableBorder.java new file mode 100644 index 0000000..a9f1104 --- /dev/null +++ b/src/main/java/com/bernard/kholloscopinator/vue/TitledCheckableBorder.java @@ -0,0 +1,99 @@ +package com.bernard.kholloscopinator.vue; + +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Insets; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Set; + +import javax.swing.BorderFactory; +import javax.swing.JRadioButton; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.border.AbstractBorder; +import javax.swing.border.TitledBorder; + +public class TitledCheckableBorder extends AbstractBorder { + + private static final long serialVersionUID = -510721123390206757L; + private final TitledBorder parent; + private final JRadioButton checkBox; + private final Set grp; + private final Container theParent; + + public TitledCheckableBorder(String title, boolean selected,Set grp,Container theParent) { + parent = BorderFactory.createTitledBorder(title); + this.grp = grp; + grp.add(this); + checkBox = new JRadioButton(title, selected); + checkBox.setHorizontalTextPosition(SwingConstants.LEFT); + this.theParent = theParent; + } + + public boolean isSelected() { + return checkBox.isSelected(); + } + + public void addActionListener(ActionListener listener) { + checkBox.addActionListener(listener); + } + + @Override + public boolean isBorderOpaque() { + return true; + } + + @Override + public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + Insets borderInsets = parent.getBorderInsets(c); + Insets insets = getBorderInsets(c); + int temp = (insets.top - borderInsets.top) / 2; + parent.paintBorder(c, g, x, y + temp, width, height - temp); + Dimension size = checkBox.getPreferredSize(); + final Rectangle rectangle = new Rectangle(5, 0, size.width, size.height); + + final Container container = (Container) c; + container.addMouseListener(new MouseAdapter() { + private void dispatchEvent(MouseEvent me) { + if (rectangle.contains(me.getX(), me.getY())) { + Point pt = me.getPoint(); + pt.translate(-5, 0); + checkBox.setBounds(rectangle); + checkBox.dispatchEvent(new MouseEvent(checkBox, me.getID(), me.getWhen(), me.getModifiersEx(), pt.x, + pt.y, me.getClickCount(), me.isPopupTrigger(), me.getButton())); + for(TitledCheckableBorder bm : grp) + if(!bm.getCheckBox().isValid()) { + theParent.repaint(); + break; + } + } + } + + public void mousePressed(MouseEvent me) { + dispatchEvent(me); + } + + public void mouseReleased(MouseEvent me) { + dispatchEvent(me); + } + }); + SwingUtilities.paintComponent(g, checkBox, container, rectangle); + } + + @Override + public Insets getBorderInsets(Component c) { + Insets insets = parent.getBorderInsets(c); + insets.top = Math.max(insets.top, checkBox.getPreferredSize().height); + return insets; + } + + public JRadioButton getCheckBox() { + return checkBox; + } +}