package com.constellio.sdk.dev.tools.com.constellio.sdk.dev.tools;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.LocalTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class SplitGitCommentsMain {
private static File gitLog = new File("/Users/francisbaril/Workspaces/rsde/log.csv");
private static File gitLogSplittedFolder = new File("/Users/francisbaril/Workspaces/rsde/splitted/");
private static List<Sprint> sprints = new ArrayList<>();
private static DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss Z");
static {
sprints.add(new Sprint("Sprint 1-22", new LocalDate(2014, 1, 1), new LocalDate(2015, 1, 31)));
sprints.add(new Sprint("Sprint 23", new LocalDate(2015, 2, 1), new LocalDate(2015, 2, 14)));
sprints.add(new Sprint("Sprint 24", new LocalDate(2015, 2, 15), new LocalDate(2015, 2, 28)));
sprints.add(new Sprint("Sprint 25", new LocalDate(2015, 3, 1), new LocalDate(2015, 3, 14)));
sprints.add(new Sprint("Sprint 26", new LocalDate(2015, 3, 15), new LocalDate(2015, 3, 28)));
sprints.add(new Sprint("Sprint 5.0.2", new LocalDate(2015, 3, 29), new LocalDate(2015, 4, 18)));
sprints.add(new Sprint("Sprint 5.0.3", new LocalDate(2015, 4, 19), new LocalDate(2015, 5, 2)));
sprints.add(new Sprint("Sprint 5.0.4", new LocalDate(2015, 5, 3), new LocalDate(2015, 5, 30)));
sprints.add(new Sprint("Sprint 5.0.5", new LocalDate(2015, 5, 31), new LocalDate(2015, 6, 13)));
sprints.add(new Sprint("Sprint 5.0.6", new LocalDate(2015, 6, 14), new LocalDate(2015, 6, 27)));
sprints.add(new Sprint("Sprint 5.0.7 partie 1", new LocalDate(2015, 6, 28), new LocalDate(2015, 7, 11)));
sprints.add(new Sprint("Sprint 5.0.7 partie 2", new LocalDate(2015, 7, 12), new LocalDate(2015, 7, 25)));
sprints.add(new Sprint("Sprint 5.0.7 partie 3", new LocalDate(2015, 7, 26), new LocalDate(2015, 8, 8)));
sprints.add(new Sprint("Sprint 5.0.7 partie 4", new LocalDate(2015, 8, 9), new LocalDate(2015, 8, 22)));
sprints.add(new Sprint("Sprint 5.1", new LocalDate(2015, 8, 23), new LocalDate(2015, 8, 29)));
sprints.add(new Sprint("Sprint 5.1.1", new LocalDate(2015, 8, 30), new LocalDate(2015, 9, 12)));
sprints.add(new Sprint("Sprint 5.1.2", new LocalDate(2015, 9, 13), new LocalDate(2015, 10, 17)));
sprints.add(new Sprint("Sprint 5.1.3", new LocalDate(2015, 10, 18), new LocalDate(2015, 10, 31)));
sprints.add(new Sprint("Sprint 5.1.4", new LocalDate(2015, 11, 1), new LocalDate(2015, 11, 14)));
sprints.add(new Sprint("Sprint 5.1.5", new LocalDate(2015, 11, 15), new LocalDate(2015, 11, 28)));
sprints.add(new Sprint("Sprint 5.1.6", new LocalDate(2015, 11, 29), new LocalDate(2015, 12, 7)));
sprints.add(new Sprint("Sprint 5.1.7", new LocalDate(2015, 12, 8), new LocalDate(2015, 12, 12)));
sprints.add(new Sprint("Sprint 5.1.8", new LocalDate(2015, 12, 13), new LocalDate(2016, 1, 2)));
}
public static void main(String argv[])
throws Exception {
Iterator<String> iterator = FileUtils.lineIterator(gitLog);
FileUtils.deleteDirectory(gitLogSplittedFolder);
gitLogSplittedFolder.mkdirs();
while (iterator.hasNext()) {
String line = iterator.next();
String sprintName = detectSprintOfLine(line);
String author = detectAuthorOfLine(line);
File authorFile = new File(gitLogSplittedFolder, author + ".csv");
File sprintDir = new File(gitLogSplittedFolder, sprintName);
sprintDir.mkdirs();
File all = new File(sprintDir, "all.csv");
File authorInSprintFile = new File(sprintDir, author + ".csv");
FileUtils.write(all, line + "\n", true);
FileUtils.write(authorFile, line.replace(author, sprintName) + "\n", true);
FileUtils.write(authorInSprintFile, line + "\n", true);
}
}
private static String detectSprintOfLine(String line) {
String dateTimeStr = line.split("\",\"")[2].replace("\"", "");
LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, formatter);
for (Sprint sprint : sprints) {
if (sprint.beginDate.isBefore(dateTime) && sprint.endDate.isAfter(dateTime)) {
return sprint.name;
}
}
throw new RuntimeException("Cannot detect sprint of '" + line + "'");
}
private static String detectAuthorOfLine(String line) {
String author = line.split(",")[1].replace("\"", "");
if ("Maxime Cote".equals(author)) {
author = "Maxime Côté";
}
return author;
}
private static class Sprint {
String name;
LocalDateTime beginDate;
LocalDateTime endDate;
public Sprint(String name, LocalDate beginDate, LocalDate endDate) {
this.name = name;
this.beginDate = beginDate.toLocalDateTime(LocalTime.MIDNIGHT);
this.endDate = endDate.toLocalDateTime(LocalTime.MIDNIGHT).plusDays(1);
}
}
private static LocalDate from(int year, int month, int day) {
return new LocalDate(year, month, day);
}
private static LocalDate to(int year, int month, int day) {
return new LocalDate(year, month, day);
}
}