M332-PT-NGCC/src/csv/GenerateCSV.java
2019-10-11 11:32:01 +02:00

161 lines
3.3 KiB
Java

package csv;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Map;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class GenerateCSV {
Map<String, String> etudiants;
int nLength;
double mType;
String path = "export";
Logger logger = LogManager.getLogger(GenerateCSV.class);
public GenerateCSV(Map<String, String> map, String numLength,String markType, String pth) {
this.etudiants = map;
this.nLength = Integer.parseInt(numLength);
this.mType = Integer.parseInt(markType);
this.path = path + "/" + pth;
}
// Teste validité du numero etudiant (selon param de la config passé :
// numLength)
public boolean isNumValid(String s) {
int i = 0;
logger.debug("Checking string validity");
if (s.length() == this.nLength) {
while (i < s.length()) {
int nb = Character.getNumericValue(s.charAt(i));
if (nb < 0 || nb > 9) {
logger.fatal("Student id's characters are not recognized");
return false;
} else {
i++;
}
}
logger.debug("String validity ok");
return true;
} else if (s.length()==0 || s==null){
logger.fatal("Id not recognized");
return false;
} else {
logger.fatal("Student id's length is not correct");
return false;
}
}
public boolean isMarkValid(String s) {
logger.debug("Checking mark validity");
if(s.contains(",")) {
s = s.replace(",",".");
System.out.println(s);
}
double nb = Double.parseDouble(s);
if (nb>= 0 && nb <=this.mType) {
logger.debug("Mark format ok");
return true;
}
else {
logger.fatal("Mark format is not correct");
return false;
}
}
public boolean alreadyExists(String etd) {
int count = 0;
for(String etud : etudiants.keySet()) {
if (etud.contentEquals(etd)) {
count++;
}
}
if(count >= 2) {
logger.info("Student's id "+etd+" already checked");
return true;
}
else {
return false;
}
}
public void createFile() {
try (PrintWriter writer = new PrintWriter(new File(this.path))) {
logger.info("Creating csv file");
StringBuilder sb = new StringBuilder();
sb.append("Student number");
sb.append(';');
sb.append("Grade");
sb.append(System.getProperty("line.separator"));
writer.write(sb.toString());
//Si l'id n'est pas vide
if (!etudiants.isEmpty()) {
for (String etud : this.etudiants.keySet()) {
// Si etudiant HashMap est null, pas ecrit
if (etud != null) {
// Si n'existe pas deja (pas de double)
if(!alreadyExists(etud)) {
if (this.isNumValid(etud) && this.isMarkValid(etudiants.get(etud))) {
writer.write(etud + ";" + etudiants.get(etud) + System.getProperty("line.separator"));
logger.debug("Added "+etud+" to csv");
}
else {
logger.debug("Invalid pair for "+etud+" and "+etudiants.get(etud)+" not added to csv");
}
}
else {
logger.debug("Already existing id not added to csv");
}
}
else {
logger.debug("Null id not added to csv");
}
}
logger.info("File creation succeed");
} else {
logger.fatal("Students list for csv generation is empty");
}
} catch (FileNotFoundException e) {
logger.fatal(e.getMessage());
}
}
}