diff --git a/src/main/java/io/github/robwin/markup/builder/AbstractMarkupDocBuilder.java b/src/main/java/io/github/robwin/markup/builder/AbstractMarkupDocBuilder.java index 25049dbc..9623dc53 100644 --- a/src/main/java/io/github/robwin/markup/builder/AbstractMarkupDocBuilder.java +++ b/src/main/java/io/github/robwin/markup/builder/AbstractMarkupDocBuilder.java @@ -29,6 +29,7 @@ import java.io.IOException; import java.io.Reader; import java.nio.charset.Charset; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import java.text.Normalizer; import java.util.List; @@ -323,23 +324,38 @@ public abstract class AbstractMarkupDocBuilder implements MarkupDocBuilder { return fileName + "." + markup; } + @Override + public Path addfileExtension(Path file) { + return file.resolveSibling(addfileExtension(file.getFileName().toString())); + } + /** * 2 newLines are needed at the end of file for file to be included without protection. */ @Override - public void writeToFileWithoutExtension(String directory, String fileName, Charset charset) throws IOException { - Files.createDirectories(Paths.get(directory)); - try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(directory, fileName), charset)) { + public void writeToFileWithoutExtension(Path file, Charset charset) throws IOException { + Files.createDirectories(file.getParent()); + try (BufferedWriter writer = Files.newBufferedWriter(file, charset)) { writer.write(documentBuilder.toString()); writer.write(newLine); writer.write(newLine); } if (logger.isInfoEnabled()) { - logger.info("{} was written to: {}", fileName, directory); + logger.info("{} was written to: {}", file); } documentBuilder = new StringBuilder(); } + @Override + public void writeToFile(Path file, Charset charset) throws IOException { + writeToFileWithoutExtension(file.resolveSibling(addfileExtension(file.getFileName().toString())), charset); + } + + @Override + public void writeToFileWithoutExtension(String directory, String fileName, Charset charset) throws IOException { + writeToFileWithoutExtension(Paths.get(directory, fileName), charset); + } + @Override public void writeToFile(String directory, String fileName, Charset charset) throws IOException { writeToFileWithoutExtension(directory, addfileExtension(fileName), charset); diff --git a/src/main/java/io/github/robwin/markup/builder/MarkupDocBuilder.java b/src/main/java/io/github/robwin/markup/builder/MarkupDocBuilder.java index c7bfe13f..38df0769 100644 --- a/src/main/java/io/github/robwin/markup/builder/MarkupDocBuilder.java +++ b/src/main/java/io/github/robwin/markup/builder/MarkupDocBuilder.java @@ -21,6 +21,7 @@ package io.github.robwin.markup.builder; import java.io.IOException; import java.io.Reader; import java.nio.charset.Charset; +import java.nio.file.Path; import java.util.List; /** @@ -443,25 +444,56 @@ public interface MarkupDocBuilder { */ String addfileExtension(String fileName); + /** + * Add an extension to file depending on markup language. + * + * @param file without extension + * @return file with an extension + */ + Path addfileExtension(Path file); + /** * Writes the content of the builder to a file and clears the builder.
- * An extension will be dynamically added to fileName depending on the markup language. + * An extension will be dynamically added to fileName depending on the markup language.
+ * Use {@link #writeToFile(Path, Charset)} instead. * * @param directory the directory where the generated file should be stored * @param fileName the base name of the file without extension * @param charset the the charset to use for encoding * @throws java.io.IOException if the file cannot be written */ + @Deprecated void writeToFile(String directory, String fileName, Charset charset) throws IOException; /** - * Writes the content of the builder to a file and clears the builder. + * Writes the content of the builder to a file and clears the builder.
+ * Use {@link #writeToFileWithoutExtension(Path, Charset)} instead. * * @param directory the directory where the generated file should be stored * @param fileName the name of the file * @param charset the the charset to use for encoding * @throws java.io.IOException if the file cannot be written */ + @Deprecated void writeToFileWithoutExtension(String directory, String fileName, Charset charset) throws IOException; + /** + * Writes the content of the builder to a file and clears the builder.
+ * An extension will be dynamically added to fileName depending on the markup language. + * + * @param file the generated file without extension + * @param charset the the charset to use for encoding + * @throws java.io.IOException if the file cannot be written + */ + void writeToFile(Path file, Charset charset) throws IOException; + + /** + * Writes the content of the builder to a file and clears the builder. + * + * @param file the generated file + * @param charset the the charset to use for encoding + * @throws java.io.IOException if the file cannot be written + */ + void writeToFileWithoutExtension(Path file, Charset charset) throws IOException; + } diff --git a/src/test/java/io/github/robwin/markup/builder/MarkupDocBuilderTest.java b/src/test/java/io/github/robwin/markup/builder/MarkupDocBuilderTest.java index 5a495bae..2f67a6f7 100644 --- a/src/test/java/io/github/robwin/markup/builder/MarkupDocBuilderTest.java +++ b/src/test/java/io/github/robwin/markup/builder/MarkupDocBuilderTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -41,7 +42,7 @@ public class MarkupDocBuilderTest { @Before - public void setUp(){ + public void setUp() { tableRowsInPSV = new ArrayList<>(); tableRowsInPSV.add("Header 1 | Header 2 | Header2"); tableRowsInPSV.add("Row 1, Column 1 | Row 1, Column 2 | Row 1, Column 3"); @@ -60,7 +61,8 @@ public class MarkupDocBuilderTest { @Test public void testToAsciiDocFile() throws IOException { MarkupDocBuilder builder = MarkupDocBuilders.documentBuilder(MarkupLanguage.ASCIIDOC); - builder.documentTitle("Test title") + + builder = builder.documentTitle("Test title") .sectionTitleLevel1("Section Level 1a") .sectionTitleWithAnchorLevel1("Section with anchor Level 1a", "level-1a") .sectionTitleWithAnchorLevel1("Section with anchor Level 1a") @@ -92,8 +94,12 @@ public class MarkupDocBuilderTest { .crossReferenceRaw("./document.adoc", "anchor", "text").newLine(true) .crossReferenceRaw(" \u0240 µ&|ù This .:/-_ ").newLine(true) .crossReference("./document.adoc", "anchor", "text").newLine(true) - .crossReference(" \u0240 µ&|ù This .:/-_ ").newLine(true) - .writeToFile("build/tmp", "test", StandardCharsets.UTF_8); + .crossReference(" \u0240 µ&|ù This .:/-_ ").newLine(true); + + builder.writeToFileWithoutExtension(builder.addfileExtension(Paths.get("build/tmp/test")), StandardCharsets.UTF_8); + builder.writeToFile(Paths.get("build/tmp/test"), StandardCharsets.UTF_8); + builder.writeToFileWithoutExtension("build/tmp", builder.addfileExtension("test"), StandardCharsets.UTF_8); + builder.writeToFile("build/tmp", "test", StandardCharsets.UTF_8); MarkupDocBuilder builderWithConfig = MarkupDocBuilders.documentBuilder(MarkupLanguage.ASCIIDOC).withAnchorPrefix(" mdb test- "); String prefixMarkup = builderWithConfig.anchor("anchor", "text") @@ -104,9 +110,10 @@ public class MarkupDocBuilderTest { } @Test - public void testToMarkdownDocFile() throws IOException { + public void testToMarkdownDocFile() throws IOException { MarkupDocBuilder builder = MarkupDocBuilders.documentBuilder(MarkupLanguage.MARKDOWN); - builder.documentTitle("Test title") + + builder = builder.documentTitle("Test title") .sectionTitleLevel1("Section Level 1a") .sectionTitleWithAnchorLevel1("Section with anchor Level 1a", "level-1a") .sectionTitleWithAnchorLevel1("Section with anchor Level 1a") @@ -138,8 +145,12 @@ public class MarkupDocBuilderTest { .crossReferenceRaw("./document.md", "anchor", "text").newLine(true) .crossReferenceRaw(" \u0240 µ&|ù This .:/-_ ").newLine(true) .crossReference("./document.md", "anchor", "text").newLine(true) - .crossReference(" \u0240 µ&|ù This .:/-_ ").newLine(true) - .writeToFile("build/tmp", "test", StandardCharsets.UTF_8); + .crossReference(" \u0240 µ&|ù This .:/-_ ").newLine(true); + + builder.writeToFileWithoutExtension(builder.addfileExtension(Paths.get("build/tmp/test")), StandardCharsets.UTF_8); + builder.writeToFile(Paths.get("build/tmp/test"), StandardCharsets.UTF_8); + builder.writeToFileWithoutExtension("build/tmp", builder.addfileExtension("test"), StandardCharsets.UTF_8); + builder.writeToFile("build/tmp", "test", StandardCharsets.UTF_8); MarkupDocBuilder builderWithConfig = MarkupDocBuilders.documentBuilder(MarkupLanguage.MARKDOWN).withAnchorPrefix(" mdb test- "); String prefixMarkup = builderWithConfig.anchor("anchor", "text")