Cleaned up structure.
This commit is contained in:
parent
684e47e00c
commit
e0229e3cf5
|
@ -1,13 +1,10 @@
|
||||||
package nl.andrewlalis.human_task_distributor;
|
package nl.andrewlalis.human_task_distributor;
|
||||||
|
|
||||||
|
import nl.andrewlalis.human_task_distributor.commands.DistributeTasks;
|
||||||
import nl.andrewlalis.human_task_distributor.commands.PrepareTasksList;
|
import nl.andrewlalis.human_task_distributor.commands.PrepareTasksList;
|
||||||
import org.apache.commons.cli.*;
|
import org.apache.commons.cli.*;
|
||||||
import org.apache.commons.csv.CSVFormat;
|
import org.apache.commons.csv.CSVFormat;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class HumanTaskDistributor {
|
public class HumanTaskDistributor {
|
||||||
public static final CSVFormat CSV_FORMAT = CSVFormat.RFC4180;
|
public static final CSVFormat CSV_FORMAT = CSVFormat.RFC4180;
|
||||||
|
|
||||||
|
@ -15,44 +12,15 @@ public class HumanTaskDistributor {
|
||||||
final Options options = getOptions();
|
final Options options = getOptions();
|
||||||
CommandLineParser cmdParser = new DefaultParser();
|
CommandLineParser cmdParser = new DefaultParser();
|
||||||
try {
|
try {
|
||||||
|
|
||||||
FileParser fileParser = new FileParser();
|
|
||||||
FileWriter fileWriter = new FileWriter();
|
|
||||||
CommandLine cmd = cmdParser.parse(options, args);
|
CommandLine cmd = cmdParser.parse(options, args);
|
||||||
if (cmd.hasOption("ptl")) {
|
if (cmd.hasOption("ptl")) {
|
||||||
String[] values = cmd.getOptionValues("ptl");
|
new PrepareTasksList().execute(cmd);
|
||||||
new PrepareTasksList().execute(values);
|
} else if (cmd.hasOption("hl") && cmd.hasOption("tl")) {
|
||||||
return;
|
new DistributeTasks().execute(cmd);
|
||||||
}
|
}
|
||||||
|
throw new IllegalArgumentException("Invalid command.");
|
||||||
if (!cmd.hasOption("hl") || !cmd.hasOption("tl")) {
|
|
||||||
throw new IllegalArgumentException("When not preparing a tasks-list, hl and tl are required.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<Human, Float> nameWeightMap = fileParser.parseHumanList(cmd.getOptionValue("hl"));
|
|
||||||
Set<Task> tasks = fileParser.parseTaskList(cmd.getOptionValue("tl"));
|
|
||||||
String[] previousDistributionPaths = cmd.getOptionValues("prev");
|
|
||||||
if (previousDistributionPaths == null) previousDistributionPaths = new String[0];
|
|
||||||
List<Map<Human, Set<Task>>> previousDistributions = fileParser.parsePreviousTaskDistributions(previousDistributionPaths);
|
|
||||||
|
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
Map<Human, Set<Task>> taskDistributions = new Distributor().generateDistribution(nameWeightMap, tasks, previousDistributions);
|
|
||||||
long durationMillis = System.currentTimeMillis() - start;
|
|
||||||
System.out.printf(
|
|
||||||
"Completed distribution of %d tasks to %d people in %d ms.%n",
|
|
||||||
tasks.size(),
|
|
||||||
taskDistributions.keySet().size(),
|
|
||||||
durationMillis
|
|
||||||
);
|
|
||||||
|
|
||||||
// Write to a file.
|
|
||||||
final String filePath = cmd.hasOption("o") ? cmd.getOptionValue("o") : "distribution.csv";
|
|
||||||
fileWriter.write(taskDistributions, filePath);
|
|
||||||
System.out.println("Wrote task distribution data to " + filePath);
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.err.println("Error: " + e.getMessage());
|
System.err.println("Error: " + e.getMessage());
|
||||||
e.printStackTrace();
|
|
||||||
HelpFormatter hf = new HelpFormatter();
|
HelpFormatter hf = new HelpFormatter();
|
||||||
hf.printHelp("HumanTaskDistributor", options);
|
hf.printHelp("HumanTaskDistributor", options);
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package nl.andrewlalis.human_task_distributor.commands;
|
package nl.andrewlalis.human_task_distributor.commands;
|
||||||
|
|
||||||
|
import org.apache.commons.cli.CommandLine;
|
||||||
|
|
||||||
public interface Command {
|
public interface Command {
|
||||||
|
|
||||||
void execute(String[] args);
|
void execute(CommandLine cmd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
package nl.andrewlalis.human_task_distributor.commands;
|
||||||
|
|
||||||
|
import nl.andrewlalis.human_task_distributor.*;
|
||||||
|
import org.apache.commons.cli.CommandLine;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class DistributeTasks implements Command {
|
||||||
|
@Override
|
||||||
|
public void execute(CommandLine cmd) {
|
||||||
|
final FileParser fileParser = new FileParser();
|
||||||
|
final FileWriter fileWriter = new FileWriter();
|
||||||
|
Map<Human, Float> nameWeightMap = fileParser.parseHumanList(cmd.getOptionValue("hl"));
|
||||||
|
Set<Task> tasks = fileParser.parseTaskList(cmd.getOptionValue("tl"));
|
||||||
|
String[] previousDistributionPaths = cmd.getOptionValues("prev");
|
||||||
|
if (previousDistributionPaths == null) previousDistributionPaths = new String[0];
|
||||||
|
List<Map<Human, Set<Task>>> previousDistributions = fileParser.parsePreviousTaskDistributions(previousDistributionPaths);
|
||||||
|
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
Map<Human, Set<Task>> taskDistributions = new Distributor().generateDistribution(nameWeightMap, tasks, previousDistributions);
|
||||||
|
long durationMillis = System.currentTimeMillis() - start;
|
||||||
|
System.out.printf(
|
||||||
|
"Created distribution of %d tasks to %d people in %d ms.%n",
|
||||||
|
tasks.size(),
|
||||||
|
taskDistributions.keySet().size(),
|
||||||
|
durationMillis
|
||||||
|
);
|
||||||
|
|
||||||
|
// Write to a file.
|
||||||
|
final String filePath = cmd.hasOption("o") ? cmd.getOptionValue("o") : "distribution.csv";
|
||||||
|
try {
|
||||||
|
fileWriter.write(taskDistributions, filePath);
|
||||||
|
System.out.println("Wrote task distribution data to " + filePath);
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("Couldn't write to file: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,18 +3,20 @@ package nl.andrewlalis.human_task_distributor.commands;
|
||||||
import nl.andrewlalis.human_task_distributor.FileParser;
|
import nl.andrewlalis.human_task_distributor.FileParser;
|
||||||
import nl.andrewlalis.human_task_distributor.FileWriter;
|
import nl.andrewlalis.human_task_distributor.FileWriter;
|
||||||
import nl.andrewlalis.human_task_distributor.Task;
|
import nl.andrewlalis.human_task_distributor.Task;
|
||||||
|
import org.apache.commons.cli.CommandLine;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class PrepareTasksList implements Command {
|
public class PrepareTasksList implements Command {
|
||||||
@Override
|
@Override
|
||||||
public void execute(String[] args) {
|
public void execute(CommandLine cmd) {
|
||||||
if (args.length != 2) {
|
String[] values = cmd.getOptionValues("ptl");
|
||||||
|
if (values.length != 2) {
|
||||||
throw new IllegalArgumentException("Expected exactly 2 parameters for ptl arg.");
|
throw new IllegalArgumentException("Expected exactly 2 parameters for ptl arg.");
|
||||||
}
|
}
|
||||||
String filePath = args[0].trim();
|
String filePath = values[0].trim();
|
||||||
String regex = args[1].trim();
|
String regex = values[1].trim();
|
||||||
Set<Task> tasks = new FileParser().parseTaskList(filePath, regex);
|
Set<Task> tasks = new FileParser().parseTaskList(filePath, regex);
|
||||||
System.out.println("Read " + tasks.size() + " tasks from file.");
|
System.out.println("Read " + tasks.size() + " tasks from file.");
|
||||||
String outFilePath = filePath.replaceFirst("\\..*", ".csv");
|
String outFilePath = filePath.replaceFirst("\\..*", ".csv");
|
||||||
|
|
Loading…
Reference in New Issue