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

102 lines
2.2 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 numLength;
String path = "export";
Logger logger = LogManager.getLogger(GenerateCSV.class);
public GenerateCSV(Map<String, String> map, String length, String pth) {
this.etudiants = map;
this.numLength = Integer.parseInt(length);
this.path = path + "/" + pth;
}
// Teste validité du numero etudiant (selon param de la config passé :
// numLength)
public boolean isValid(String s) {
int i = 0;
logger.debug("Checking string validity");
if (s.length() == this.numLength) {
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 {
logger.fatal("Student id's length is not correct");
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());
if (!etudiants.isEmpty()) {
for (String etud : this.etudiants.keySet()) {
// Si etudiant HashMap est null, pas ecrit
if (etud != null) {
if (this.isValid(etud)) {
writer.write(etud + ";" + etudiants.get(etud) + System.getProperty("line.separator"));
logger.debug("Added "+etud+" to csv");
}
else {
logger.debug("Invalid id for "+etud+" 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());
}
}
}