diff --git a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutput.java b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutput.java index 4eff9bf..f74db3e 100644 --- a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutput.java +++ b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutput.java @@ -25,7 +25,9 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.file.Files; +import java.nio.file.OpenOption; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.util.Collection; import java.util.List; import java.util.function.Function; @@ -43,19 +45,16 @@ public abstract class RaceOutput { protected final Race race; - protected Path output_directory_path; protected String year; protected String race_name_for_results; protected String race_name_for_filenames; - private String overall_results_filename; - String prizes_filename; - String notes_filename; + private Path output_directory_path; ////////////////////////////////////////////////////////////////////////////////////////////////// protected abstract String getFileSuffix(); protected abstract String getResultsHeader(); - protected abstract String getPrizesSectionHeader(); + protected abstract String getPrizesHeader(); protected abstract String getPrizeCategoryHeader(final PrizeCategory category) ; protected abstract String getPrizeCategoryFooter(); @@ -79,7 +78,7 @@ public abstract class RaceOutput { */ public void printResults() throws IOException { - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(overall_results_filename + getFileSuffix())); + final OutputStream stream = getOutputStream(race_name_for_filenames, "overall", year); try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { @@ -90,17 +89,31 @@ public void printResults() throws IOException { public void printPrizes() throws IOException { - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(prizes_filename + getFileSuffix())); + final OutputStream stream = getOutputStream(race_name_for_filenames, "prizes", year); try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { - writer.append(getPrizesSectionHeader()); + writer.append(getPrizesHeader()); printPrizes(writer); } } ////////////////////////////////////////////////////////////////////////////////////////////////// + protected OutputStream getOutputStream(final String race_name, final String output_type, final String year) throws IOException { + return getOutputStream(race_name, output_type, year, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE); + } + + protected OutputStream getOutputStream(final String race_name, final String output_type, final String year, final OpenOption... options) throws IOException { + return Files.newOutputStream(getOutputFilePath(race_name, output_type, year), options); + } + + Path getOutputFilePath(final String race_name, final String output_type, final String year) { + return output_directory_path.resolve(STR."\{race_name}_\{output_type}_\{year}\{getFileSuffix()}"); + } + + ////////////////////////////////////////////////////////////////////////////////////////////////// + private void configure() { readProperties(); @@ -117,10 +130,6 @@ private void readProperties() { protected void constructFilePaths() { - overall_results_filename = STR."\{race_name_for_filenames}_overall_\{year}"; - prizes_filename = STR."\{race_name_for_filenames}_prizes_\{year}"; - notes_filename = STR."\{race_name_for_filenames}_processing_notes_\{year}"; - output_directory_path = race.getPath("../output"); } diff --git a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputCSV.java b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputCSV.java index 6a58242..bdea8a9 100644 --- a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputCSV.java +++ b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputCSV.java @@ -45,7 +45,7 @@ public String getFileSuffix() { } @Override - public String getPrizesSectionHeader() { + public String getPrizesHeader() { return ""; } diff --git a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputHTML.java b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputHTML.java index bfc94cd..2d4e372 100644 --- a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputHTML.java +++ b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputHTML.java @@ -22,16 +22,13 @@ import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; -import java.nio.file.Files; import java.nio.file.StandardOpenOption; import static org.grahamkirby.race_timing.common.Race.LINE_SEPARATOR; public abstract class RaceOutputHTML extends RaceOutput { - protected static final String SOFTWARE_CREDIT_LINK_TEXT = "

Results generated using race-timing.

"; - - protected String combined_results_filename; + private static final String SOFTWARE_CREDIT_LINK_TEXT = "

Results generated using race-timing.

"; ////////////////////////////////////////////////////////////////////////////////////////////////// @@ -43,7 +40,7 @@ protected RaceOutputHTML(final Race race) { public void printCreditLink() throws IOException { - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(combined_results_filename + getFileSuffix()), StandardOpenOption.APPEND); + final OutputStream stream = getOutputStream(race_name_for_filenames, "combined", year, StandardOpenOption.APPEND); try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { writer.append(SOFTWARE_CREDIT_LINK_TEXT); @@ -52,12 +49,12 @@ public void printCreditLink() throws IOException { public void printCombined() throws IOException { - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(combined_results_filename + getFileSuffix())); + final OutputStream stream = getOutputStream(race_name_for_filenames, "combined", year); try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { writer.append("

Results

").append(LINE_SEPARATOR); - writer.append(getPrizesSectionHeader()); + writer.append(getPrizesHeader()); printPrizes(writer); @@ -68,20 +65,13 @@ public void printCombined() throws IOException { ////////////////////////////////////////////////////////////////////////////////////////////////// - @Override - protected void constructFilePaths() { - - super.constructFilePaths(); - combined_results_filename = STR."\{race_name_for_filenames}_combined_\{year}"; - } - @Override public String getFileSuffix() { return ".html"; } @Override - public String getPrizesSectionHeader() { + public String getPrizesHeader() { return STR."

Prizes

\{LINE_SEPARATOR}"; } diff --git a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputPDF.java b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputPDF.java index c8bd041..44ac979 100644 --- a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputPDF.java +++ b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputPDF.java @@ -48,7 +48,7 @@ protected RaceOutputPDF(final Race race) { @Override public void printPrizes() throws IOException { - final PdfWriter writer = new PdfWriter(output_directory_path.resolve(prizes_filename + getFileSuffix()).toString()); + final PdfWriter writer = new PdfWriter(getOutputFilePath(race_name_for_filenames, "prizes", year).toString()); try (final Document document = new Document(new PdfDocument(writer))) { printPrizes(document); @@ -61,7 +61,7 @@ protected String getFileSuffix() { } @Override - protected String getPrizesSectionHeader() { + protected String getPrizesHeader() { return ""; } diff --git a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputText.java b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputText.java index 6f82d53..70e1969 100644 --- a/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputText.java +++ b/src/main/java/org/grahamkirby/race_timing/common/output/RaceOutputText.java @@ -20,9 +20,7 @@ import org.grahamkirby.race_timing.common.categories.PrizeCategory; import java.io.IOException; -import java.io.OutputStream; import java.io.OutputStreamWriter; -import java.nio.file.Files; import static org.grahamkirby.race_timing.common.Race.LINE_SEPARATOR; @@ -38,7 +36,7 @@ protected String getFileSuffix() { } @Override - protected String getPrizesSectionHeader() { + protected String getPrizesHeader() { return STR.""" \{race_name_for_results} Results \{year} ============================ @@ -74,9 +72,7 @@ public void printNotes() throws IOException { reduce((s1, s2) -> STR."\{s1}, \{s2}"). ifPresent(s -> race.getNotes().append("Converted to title case: ").append(s)); - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(notes_filename + getFileSuffix())); - - try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { + try (final OutputStreamWriter writer = new OutputStreamWriter(getOutputStream(race_name_for_filenames, "processing_notes", year))) { writer.append(race.getNotes().toString()); } } diff --git a/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputCSV.java b/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputCSV.java index 40219fe..706aaec 100644 --- a/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputCSV.java +++ b/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputCSV.java @@ -25,18 +25,13 @@ import org.grahamkirby.race_timing.common.output.ResultPrinterCSV; import java.io.IOException; -import java.io.OutputStream; import java.io.OutputStreamWriter; -import java.nio.file.Files; import java.util.List; import static org.grahamkirby.race_timing.common.Normalisation.format; import static org.grahamkirby.race_timing.common.Race.LINE_SEPARATOR; -import static org.grahamkirby.race_timing.common.Race.SUFFIX_CSV; -public class RelayRaceOutputCSV extends RaceOutputCSV { - - private final String detailed_results_filename = STR."\{race_name_for_filenames}_detailed_\{year}"; +class RelayRaceOutputCSV extends RaceOutputCSV { private static final String OVERALL_RESULTS_HEADER = "Pos,No,Team,Category,"; @@ -63,9 +58,7 @@ protected ResultPrinter getOverallResultPrinter(final OutputStreamWriter writer) void printDetailedResults() throws IOException { - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(detailed_results_filename + SUFFIX_CSV)); - - try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { + try (final OutputStreamWriter writer = new OutputStreamWriter(getOutputStream(race_name_for_filenames, "detailed", year))) { printDetailedResultsHeader(writer); printDetailedResults(writer); @@ -91,11 +84,8 @@ private void printDetailedResults(final OutputStreamWriter writer) throws IOExce final ResultPrinter printer = new DetailedResultPrinter(race, writer); - for (final PrizeCategoryGroup group : race.prize_category_groups) { - - final List results = race.getOverallResults(group.categories()); - printer.print(results); - } + for (final PrizeCategoryGroup group : race.prize_category_groups) + printer.print(race.getOverallResults(group.categories())); } ////////////////////////////////////////////////////////////////////////////////////////////////// @@ -108,9 +98,7 @@ void printLegResults() throws IOException { private void printLegResults(final int leg) throws IOException { - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(STR."\{race_name_for_filenames}_leg_\{leg}_\{year}.csv")); - - try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { + try (final OutputStreamWriter writer = new OutputStreamWriter(getOutputStream(race_name_for_filenames, STR."leg_\{leg}", year))) { printLegResults(writer, leg); } } diff --git a/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputHTML.java b/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputHTML.java index a6ded13..f48ffbf 100644 --- a/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputHTML.java +++ b/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputHTML.java @@ -26,7 +26,6 @@ import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; -import java.nio.file.Files; import java.nio.file.StandardOpenOption; import java.util.List; @@ -49,7 +48,7 @@ public void printCombined() throws IOException { super.printCombined(); - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(combined_results_filename + getFileSuffix()), StandardOpenOption.APPEND); + final OutputStream stream = getOutputStream(race_name_for_filenames, "combined", year, StandardOpenOption.APPEND); try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { @@ -87,7 +86,7 @@ protected ResultPrinter getPrizeResultPrinter(final OutputStreamWriter writer) { void printDetailedResults() throws IOException { - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(detailed_results_filename + getFileSuffix())); + final OutputStream stream = getOutputStream(race_name_for_filenames, "detailed", year); try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { printDetailedResults(writer); @@ -109,7 +108,7 @@ void printLegResults() throws IOException { private void printLegResults(final int leg) throws IOException { - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(STR."\{race_name_for_filenames}_leg_\{leg}_\{year}.html")); + final OutputStream stream = getOutputStream(race_name_for_filenames, STR."leg_\{leg}", year); try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { printLegResults(writer, leg); diff --git a/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputText.java b/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputText.java index e64949d..fde1ccf 100644 --- a/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputText.java +++ b/src/main/java/org/grahamkirby/race_timing/relay_race/RelayRaceOutputText.java @@ -17,15 +17,14 @@ package org.grahamkirby.race_timing.relay_race; import org.grahamkirby.race_timing.common.*; -import org.grahamkirby.race_timing.common.output.ResultPrinterText; import org.grahamkirby.race_timing.common.output.RaceOutputText; import org.grahamkirby.race_timing.common.output.ResultPrinter; +import org.grahamkirby.race_timing.common.output.ResultPrinterText; import org.grahamkirby.race_timing.single_race.SingleRace; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; -import java.nio.file.Files; import java.time.Duration; import java.util.*; import java.util.stream.Stream; @@ -36,8 +35,6 @@ class RelayRaceOutputText extends RaceOutputText { - private String collated_times_filename; - RelayRaceOutputText(final RelayRace results) { super(results); @@ -45,17 +42,10 @@ class RelayRaceOutputText extends RaceOutputText { ////////////////////////////////////////////////////////////////////////////////////////////////// - @Override - protected void constructFilePaths() { - - super.constructFilePaths(); - collated_times_filename = STR."\{race_name_for_filenames}_times_collated_\{year}"; - } - @SuppressWarnings("IncorrectFormatting") void printCollatedResults() throws IOException { - final OutputStream stream = Files.newOutputStream(output_directory_path.resolve(STR."\{collated_times_filename}.txt")); + final OutputStream stream = getOutputStream(race_name_for_filenames, "times_collated", year); try (final OutputStreamWriter writer = new OutputStreamWriter(stream)) { diff --git a/src/main/java/org/grahamkirby/race_timing/series_race/tour/TourRaceOutputHTML.java b/src/main/java/org/grahamkirby/race_timing/series_race/tour/TourRaceOutputHTML.java index a06e66b..e56d960 100644 --- a/src/main/java/org/grahamkirby/race_timing/series_race/tour/TourRaceOutputHTML.java +++ b/src/main/java/org/grahamkirby/race_timing/series_race/tour/TourRaceOutputHTML.java @@ -31,7 +31,6 @@ import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; -import java.nio.file.Files; import java.util.Collection; import java.util.List; @@ -70,7 +69,7 @@ private void printIndividualRaceResults(final int race_number) throws IOExceptio if (individual_race != null) { - final OutputStream race_stream = Files.newOutputStream(output_directory_path.resolve(STR."\{race_name_for_filenames}_race\{race_number}_\{year}\{getFileSuffix()}")); + final OutputStream race_stream = getOutputStream(race_name_for_filenames, STR."race\{race_number}", year); try (final OutputStreamWriter writer = new OutputStreamWriter(race_stream)) {