rajout de comm et reste de readConfig
This commit is contained in:
parent
c9ecefae09
commit
74da80f8bd
@ -4,9 +4,13 @@ import java.io.*;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class Config {
|
public class Config {
|
||||||
private HashMap<String, String> param = new HashMap<String, String>();
|
private HashMap<String, String> param = new HashMap<String, String>(); // Hashmap des parametres de config, Key =
|
||||||
private String source;
|
// nom paramn,
|
||||||
|
private ArrayList<Question> questions = new ArrayList<Question>();
|
||||||
|
|
||||||
|
private String source; // Chemin vers le fichier source
|
||||||
|
|
||||||
|
// Getters et setters
|
||||||
public HashMap<String, String> getParam() {
|
public HashMap<String, String> getParam() {
|
||||||
return param;
|
return param;
|
||||||
}
|
}
|
||||||
@ -15,168 +19,252 @@ public class Config {
|
|||||||
this.param = param;
|
this.param = param;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<Question> getQuestions() {
|
||||||
|
return questions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setQuestions(ArrayList<Question> questions) {
|
||||||
|
this.questions = questions;
|
||||||
|
}
|
||||||
|
|
||||||
public Config(String s) {
|
public Config(String s) {
|
||||||
// Les élements avec des placeholders en valeur sont des élements qui ne servent
|
// Constructeur, prend en parametre le chemin vers le fichier source
|
||||||
// pas pour le moment
|
|
||||||
source = s;
|
source = s;
|
||||||
|
// Initialisation des parametres avec les valeurs par défaut.
|
||||||
|
// Les élements avec des placeholders en valeur sont des élements qui ne servent
|
||||||
|
// pas pour le moment
|
||||||
param.put("PaperSize", "A4"); // A3 A4 A5 letter
|
param.put("PaperSize", "A4"); // A3 A4 A5 letter
|
||||||
param.put("Title", "Placeholder"); // titre de l exam
|
param.put("Title", "Placeholder"); // titre de l exam
|
||||||
param.put("Presentation", "Placeholder"); // texte de consignes
|
param.put("Presentation", "Placeholder"); // texte de consignes
|
||||||
param.put("DocumentModel", "PlaceHolder"); // nom du fichier du modèle
|
param.put("DocumentModel", "PlaceHolder"); // nom du fichier du modèle
|
||||||
param.put("ShuffleQuestions", "1"); // 1 = qt mélangées, 0 = non mél
|
param.put("ShuffleQuestions", "1"); // 1 = qt mélangées, 0 = non mél
|
||||||
param.put("ShuffleAnswers", "1"); // 1= proposition rép mélangées, 0= non
|
param.put("ShuffleAnswers", "1"); // 1= proposition rép mélangées, 0= non
|
||||||
param.put("Code", "8"); // code étudiant = 8 chiffres (entre 1 et 16)
|
param.put("Code", "8"); // code étudiant = 8 chiffres (entre 1 et 16)
|
||||||
param.put("MarkFormat", "20/4"); // expl "20/4" pour des notes entre 0 et 20 notées à 0.25 points
|
param.put("MarkFormat", "20/4"); // expl "20/4" pour des notes entre 0 et 20 notées à 0.25 points
|
||||||
param.put("NameField", "Nom et Prénom"); // remplace le texte
|
param.put("NameField", "Nom et Prénom"); // remplace le texte
|
||||||
param.put("StudentField",
|
param.put("StudentField",
|
||||||
"Veuillez coder votre numéro\r\n d’étudiant ci-contre et écrire votre nom \r\n dans la case ci-dessous");
|
"Veuillez coder votre numéro\r\n d’étudiant ci-contre et écrire votre nom \r\n dans la case ci-dessous");
|
||||||
// sert à remplacer le petit texte qui demande de coder son numéro d’étudiant et
|
// sert à remplacer le petit texte qui demande de coder son numéro d’étudiant et
|
||||||
// inscrire son nom
|
// inscrire son nom
|
||||||
param.put("MarkField", "Veuillez coder le numéro de l'étudiant");
|
param.put("MarkField", "Veuillez coder le numéro de l'étudiant");
|
||||||
param.put("SeparateAnswerSheet", "1"); // si 1 = feuille de réponse séparée.
|
param.put("SeparateAnswerSheet", "1"); // si 1 = feuille de réponse séparée.
|
||||||
param.put("AnswerSheetTitle", "Title"); // titre à inscrire en tete de la feuille de rép
|
param.put("AnswerSheetTitle", "Title"); // titre à inscrire en tete de la feuille de rép
|
||||||
param.put("AnswerSheetPresentation", "Presentation"); // Donne le texte de présentation de la feuille de réponse
|
param.put("AnswerSheetPresentation", "Presentation"); // Donne le texte de présentation de la feuille de réponse
|
||||||
param.put("SingleSided", "Placeholder");// si valeur = 1, aucune page blanche entre feuille de sujet et de
|
param.put("SingleSided", "Placeholder");// si valeur = 1, aucune page blanche entre feuille de sujet et de
|
||||||
// réponse
|
// réponse
|
||||||
|
param.put("DefaultScoringS", "Placeholder");// Donne le barème par défaut pour les questions simples
|
||||||
|
param.put("DefaultScoringM", "Placeholder");// Donne le barème par défaut pour les questions à choix multiple
|
||||||
|
param.put("QuestionBlocks", "Placeholder");// prend 0 pour valeur pour permettre à la boite d'une question boite
|
||||||
|
// d'etre coupé sur plusieurs pages, prend 1 sinon
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void lireConfig() {
|
public void readConfig() {
|
||||||
|
// Methode pour lire le fichier config en chemin dans la variable source
|
||||||
|
// Si une ligne du fichier correspond à un parametre, changer la valeur du
|
||||||
|
// parametre avec celle dans le fichier (si valeur valide)
|
||||||
|
// Gere aussi les questions dans le fichier source et les mets dans une liste de
|
||||||
|
// questions.
|
||||||
|
// Gestion de questions mais actuellement inutile pour le programme
|
||||||
try {
|
try {
|
||||||
Scanner sc = new Scanner(new File(source));
|
Scanner scan = new Scanner(new File(source), "UTF-8");
|
||||||
Scanner ligne;
|
String ligne;
|
||||||
Scanner scan;
|
Question q;
|
||||||
while (sc.hasNextLine()) {
|
ligne = scan.nextLine();
|
||||||
scan = new Scanner(sc.nextLine());
|
// ligne pour gerer le code FEFF en UTF-8 BOM qui peut apparaitre si le fichier
|
||||||
if (scan.nextLine().substring(0, 1).equals("#"))
|
// txt est edité avec windows notepad
|
||||||
;
|
// ce caractere apparait uniquement en debut de fichier
|
||||||
else {
|
if (ligne.startsWith("\uFEFF"))
|
||||||
if (scan.nextLine().substring(0, 1).equals(""))
|
ligne = ligne.substring(1);
|
||||||
;
|
while (ligne.equals("")) // on saute les lignes vides si elles sont au debut du fichier
|
||||||
else {
|
ligne = scan.nextLine();
|
||||||
if (scan.nextLine().substring(0, 1).equals("*")) {
|
while (scan.hasNext()) {
|
||||||
String s = scan.nextLine().substring(0, 1);
|
if (!(ligne.substring(0, 1).equals("#"))) // si ligne commence par un # c'est un commentaire, donc on
|
||||||
} else {
|
// l'ignore
|
||||||
lireParam(scan.nextLine());
|
{
|
||||||
|
if (ligne.substring(0, 1).equals("*")) // si ligne commence par une *, c'est une question
|
||||||
|
{
|
||||||
|
q = makeQuestion(ligne);
|
||||||
|
ligne = scan.nextLine(); // on scan la prochaine ligne
|
||||||
|
while (!ligne.equals("")) // tant que la ligne n'est pas vide, on lit la suite qui est supposé
|
||||||
|
// etre les reponses
|
||||||
|
{
|
||||||
|
q.addReponse(ligne);
|
||||||
|
ligne = scan.nextLine();
|
||||||
|
}
|
||||||
|
questions.add(q);
|
||||||
|
} else // si c'est pas une *, alors c'est un parametre (on ignore les lignes vides)
|
||||||
|
{
|
||||||
|
lireParam(ligne);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ligne = scan.nextLine();
|
||||||
|
while (ligne.equals("")) // on saute les lignes vides avant de recommencer la boucle while
|
||||||
|
ligne = scan.nextLine();
|
||||||
}
|
}
|
||||||
}
|
scan.close();
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// methode pour creer une question
|
||||||
|
// methode utilisée à partir d'un string supposé lu sur un fichier config
|
||||||
|
// TODO : gestion des options telles que coeff et frozenanswer
|
||||||
|
public Question makeQuestion(String ligne) {
|
||||||
|
Question q;
|
||||||
|
String s = ligne.substring(1, 2); // on lit le caractere qui differencie chaque type de question
|
||||||
|
switch (s) {
|
||||||
|
|
||||||
|
case "*":
|
||||||
|
// si c'est une * alors c'est une question à choix multiple
|
||||||
|
q = new Question(ligne.substring(3, ligne.length()), true);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "<":
|
||||||
|
// si c'est une < alors c'est une question de type boite
|
||||||
|
int debut = ligne.indexOf("="); // on cherche la position du =, le caractere apres le = sera le nb de lignes
|
||||||
|
// de la boite
|
||||||
|
int fin = ligne.indexOf(">"); // on cherce la position du >, la suite de ce caractere sera l'intitulé de la
|
||||||
|
// question
|
||||||
|
int nblignes = Integer.parseInt(ligne.substring(debut + 1, fin));
|
||||||
|
q = new QuestionBoite(ligne.substring(fin + 2, ligne.length()), false, nblignes);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// si pas une des conditions citées en haut, alors c'est une question à choix
|
||||||
|
// unique
|
||||||
|
q = new Question(ligne.substring(2, ligne.length()), false);
|
||||||
|
}
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
|
// modification des valeurs du hashmap param
|
||||||
|
// lecture d'un string supposé lu sur un fichier config
|
||||||
public void lireParam(String s) {
|
public void lireParam(String s) {
|
||||||
String spl[] = s.split(": ");
|
int n = s.indexOf(":"); // recherche de position du premier ":" pour pouvoir separer le nom du param de
|
||||||
switch (spl[0]) {
|
// sa valeur
|
||||||
case "PaperSize":
|
String spl[] = { s.substring(0, n), s.substring(n + 1, s.length()) };
|
||||||
|
while (spl[1].substring(0, 1).equals(" "))
|
||||||
|
spl[1] = spl[1].substring(1, spl[1].length());
|
||||||
|
spl[0] = spl[0].toUpperCase(); // pour eviter la casse, on met tout en upper case
|
||||||
|
switch (spl[0]) // chaque case correspond à un parametre, pour le moment on ignore tout
|
||||||
|
// parametre qui n'est pas utile au programme.
|
||||||
|
{
|
||||||
|
case "PAPERSIZE":
|
||||||
setPaperSize(spl[1]);
|
setPaperSize(spl[1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Code":
|
case "CODE":
|
||||||
setCode(spl[1]);
|
setCode(spl[1]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "MarkFormat":
|
case "MARKFORMAT":
|
||||||
setMarkFormat(spl[1]);
|
setMarkFormat(spl[1]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "NameField":
|
case "NAMEFIELD":
|
||||||
setNameField(spl[1]);
|
setNameField(spl[1]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "StudentIdField":
|
case "STUDENTIDFIELD":
|
||||||
setStudentIdField(spl[1]);
|
setStudentIdField(spl[1]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "MarkField":
|
case "MARKFIELD":
|
||||||
setMarkField(spl[1]);
|
setMarkField(spl[1]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "SeparateAnswerSheet":
|
case "SEPARATEANSWERSHEET":
|
||||||
setSeparateAnswerSheet(spl[1]);
|
setSeparateAnswerSheet(spl[1]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "AnswerSheetTitle":
|
case "ANSWERSHEETTITLE":
|
||||||
setAnswerSheetTitle(spl[1]);
|
setAnswerSheetTitle(spl[1]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "AnswerSheetPresentation":
|
case "ANSWERSHEETPRESENTATION":
|
||||||
setAnswerSheetPresentation(spl[1]);
|
setAnswerSheetPresentation(spl[1]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
default: // parametre mal tapé ou non utile (pour le moment) au programme, on l'ignore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// liste des set de chaque valeur de parametre
|
||||||
|
// actuellement, uniquement les parametres de l'étape 1 sont traités
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
// possibilité d'afficher sur la console messages de valeur invalide et valeur
|
||||||
|
// par défaut utilisée en cas d'erreur si verbose
|
||||||
public void setPaperSize(String s) {
|
public void setPaperSize(String s) {
|
||||||
s = s.toUpperCase();
|
s = s.toUpperCase();
|
||||||
if (s == "A3" || s == "A4" || s == "A5" || s == "LETTER") {
|
s = s.trim();
|
||||||
param.put("PaperSize", s);
|
if (s.equals("A3") || s.equals("A4") || s.equals("A5") || s.equals("LETTER")) {
|
||||||
|
param.replace("PaperSize", s);
|
||||||
}
|
}
|
||||||
// else si en verbose afficher valeur invalide et valeur par défaut utilisée
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCode(String s) {
|
public void setCode(String s) {
|
||||||
|
s = s.trim();
|
||||||
int n = Integer.parseInt(s);
|
int n = Integer.parseInt(s);
|
||||||
if (n >= 1 && n <= 16) {
|
if (n >= 1 && n <= 16) {
|
||||||
param.put("Code", s);
|
param.replace("Code", s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMarkFormat(String s) {
|
public void setMarkFormat(String s) {
|
||||||
|
s = s.trim();
|
||||||
if (s.equals("20/4") || s.equals("100")) {
|
if (s.equals("20/4") || s.equals("100")) {
|
||||||
param.put("MarkFormat", s);
|
param.replace("MarkFormat", s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNameField(String s) {
|
public void setNameField(String s) {
|
||||||
if (!s.equals("")) {
|
if (!s.equals("")) {
|
||||||
param.put("NameField", s);
|
param.replace("NameField", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStudentIdField(String s) {
|
public void setStudentIdField(String s) {
|
||||||
if (!s.equals("")) {
|
if (!s.equals("")) {
|
||||||
param.put("StudentIdField", s);
|
param.replace("StudentIdField", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMarkField(String s) {
|
public void setMarkField(String s) {
|
||||||
if (!s.equals("")) {
|
if (!s.equals("")) {
|
||||||
param.put("MarkField", s);
|
param.replace("MarkField", s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSeparateAnswerSheet(String s) {
|
public void setSeparateAnswerSheet(String s) {
|
||||||
|
s = s.trim();
|
||||||
int n = Integer.parseInt(s);
|
int n = Integer.parseInt(s);
|
||||||
if (n == 0 || n == 1) {
|
if (n == 0 || n == 1) {
|
||||||
param.put("SeparateAnswerSheet", s);
|
param.replace("SeparateAnswerSheet", s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAnswerSheetTitle(String s) {
|
public void setAnswerSheetTitle(String s) {
|
||||||
|
|
||||||
if (!s.equals("")) {
|
if (!s.equals("")) {
|
||||||
param.put("AnswerSheetTitle", s);
|
param.replace("AnswerSheetTitle", s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAnswerSheetPresentation(String s) {
|
public void setAnswerSheetPresentation(String s) {
|
||||||
|
|
||||||
if (!s.equals("")) {
|
if (!s.equals("")) {
|
||||||
param.put("AnswerSheetPresentation", s);
|
param.replace("AnswerSheetPresentation", s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user