Added Logging class.
This commit is contained in:
parent
fc7052b95c
commit
16b47f7e40
|
@ -1,3 +1,4 @@
|
||||||
.idea/*
|
.idea/*
|
||||||
target/*
|
target/*
|
||||||
*.iml
|
*.iml
|
||||||
|
log/*
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package nl.andrewlalis;
|
package nl.andrewlalis;
|
||||||
|
|
||||||
import nl.andrewlalis.model.Team;
|
import nl.andrewlalis.model.Team;
|
||||||
|
import nl.andrewlalis.util.Logging;
|
||||||
import nl.andrewlalis.util.TeamGenerator;
|
import nl.andrewlalis.util.TeamGenerator;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import nl.andrewlalis.util.CommandLine;
|
import nl.andrewlalis.util.CommandLine;
|
||||||
|
|
||||||
|
@ -14,18 +16,27 @@ import nl.andrewlalis.util.CommandLine;
|
||||||
*/
|
*/
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
|
private static final Logger logger = Logger.getGlobal();
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
|
|
||||||
System.out.println("Initializer for Github Repositories in Educational Organizations.");
|
// Parsed command line arguments.
|
||||||
|
|
||||||
Map<String, String> userOptions = CommandLine.parseArgs(args);
|
Map<String, String> userOptions = CommandLine.parseArgs(args);
|
||||||
|
|
||||||
|
// Initialize logger.
|
||||||
|
try {
|
||||||
|
Logging.setup(true); // TODO: Replace true with command line arg.
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.severe("Unable to save log to file.");
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("Initializer for Github Repositories in Educational Organizations.");
|
||||||
|
|
||||||
List<Team> teams = TeamGenerator.generateFromCSV(
|
List<Team> teams = TeamGenerator.generateFromCSV(
|
||||||
userOptions.get("input"),
|
userOptions.get("input"),
|
||||||
Integer.parseInt(userOptions.get("teamsize"))
|
Integer.parseInt(userOptions.get("teamsize"))
|
||||||
);
|
);
|
||||||
System.out.println(teams);
|
logger.info("Teams created: " + teams);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package nl.andrewlalis.util;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.logging.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Responsible for creating logs to standard output and writing to files.
|
||||||
|
*/
|
||||||
|
public class Logging {
|
||||||
|
|
||||||
|
private static FileHandler outputFile;
|
||||||
|
private static SimpleFormatter formatter;
|
||||||
|
|
||||||
|
public static void setup(boolean verbose) throws IOException {
|
||||||
|
Logger logger = Logger.getGlobal();
|
||||||
|
|
||||||
|
if (verbose) {
|
||||||
|
logger.setLevel(Level.FINEST);
|
||||||
|
} else {
|
||||||
|
logger.setLevel(Level.INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
outputFile = new FileHandler("log/latest.txt");
|
||||||
|
formatter = new SimpleFormatter();
|
||||||
|
|
||||||
|
outputFile.setFormatter(formatter);
|
||||||
|
logger.addHandler(outputFile);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -8,14 +8,43 @@ import org.apache.commons.csv.CSVRecord;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
public class TeamGenerator {
|
public class TeamGenerator {
|
||||||
|
|
||||||
public static List<Team> generateFromCSV(String filename, int teamSize) throws IOException {
|
private static final Logger logger = Logger.getLogger(TeamGenerator.class.getName());
|
||||||
System.out.println("Generating teams of size " + teamSize);
|
static {
|
||||||
|
logger.setParent(Logger.getGlobal());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a list of teams by reading a CSV file of a certain format. The format for each column is as follows:
|
||||||
|
* 1. Timestamp - The date and time the record was entered.
|
||||||
|
* 2. Username - The email address.
|
||||||
|
* 3. Name - The student's name.
|
||||||
|
* 4. Student Number
|
||||||
|
* 5. Github Username
|
||||||
|
* 6. I have chosen a partner. (Yes / No) If yes:
|
||||||
|
* 7. Your Partner's Student Number
|
||||||
|
* @param filename The CSV file to load from.
|
||||||
|
* @param teamSize The preferred teamsize used in creating teams.
|
||||||
|
* @return A list of teams.
|
||||||
|
* @throws IOException If the file is unable to be read.
|
||||||
|
* @throws IllegalArgumentException If an invalid teamsize is given.
|
||||||
|
*/
|
||||||
|
public static List<Team> generateFromCSV(String filename, int teamSize) throws IOException, IllegalArgumentException {
|
||||||
|
logger.info("Generating teams of size " + teamSize);
|
||||||
|
if (teamSize < 1) {
|
||||||
|
logger.severe("Invalid team size.");
|
||||||
|
throw new IllegalArgumentException("Team size must be greater than or equal to 1. Got " + teamSize);
|
||||||
|
}
|
||||||
|
logger.finest("Parsing CSV file.");
|
||||||
Iterable<CSVRecord> records = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(new FileReader(filename));
|
Iterable<CSVRecord> records = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(new FileReader(filename));
|
||||||
|
|
||||||
|
logger.finest("Reading all records into map.");
|
||||||
Map<Integer, Student> studentMap = readAllStudents(records, teamSize);
|
Map<Integer, Student> studentMap = readAllStudents(records, teamSize);
|
||||||
|
|
||||||
|
logger.finest("Generating all valid teams from student map.");
|
||||||
return generateAllValidTeams(studentMap, teamSize);
|
return generateAllValidTeams(studentMap, teamSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue