This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-188
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
The following commit(s) were added to refs/heads/FREEMARKER-188 by this push:
new 16d6c47 FREEMARKER-188 Provide "OutputMapper"
16d6c47 is described below
commit 16d6c47e31f5c1b6fb27dcf207b1e8115b0e7e94
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Wed Sep 8 21:38:01 2021 +0200
FREEMARKER-188 Provide "OutputMapper"
---
.../generator/base/FreeMarkerConstants.java | 8 +--
.../cli/config/OutputGeneratorsSupplier.java | 30 +++++-----
....java => DataSourceSeedingOutputGenerator.java} | 44 +++++++-------
.../output/DataSourceSeedingOutputMapper.java | 32 ++++++++++
...or.java => TemplateSeedingOutputGenerator.java} | 54 +++--------------
.../cli/picocli/OutputGeneratorDefinition.java | 26 ++++----
...Definition.java => OutputMapperDefinition.java} | 2 +-
...deDefinition.java => OutputSeedDefinition.java} | 8 +--
.../output/DataSourceSeedingOutputMapperTest.java | 69 ++++++++++++++++++++++
9 files changed, 172 insertions(+), 101 deletions(-)
diff --git
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
index e4500ff..f4e19bd 100644
---
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
+++
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/FreeMarkerConstants.java
@@ -93,13 +93,13 @@ public class FreeMarkerConstants {
public static final String FREEMARKER_USER_PARAMETERS =
"freemarker.user.parameters";
}
- public static class Mode {
+ public static class SeedType {
- private Mode() {
+ private SeedType() {
}
- public static final String AGGREGATE = "aggregate";
- public static final String GENERATE = "generate";
+ public static final String TEMPLATE = "template";
+ public static final String DATASOURCE = "datasource";
}
public static class SystemProperties {
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java
index a8e819b..71046df 100644
---
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/OutputGeneratorsSupplier.java
@@ -16,10 +16,10 @@
*/
package org.apache.freemarker.generator.cli.config;
-import org.apache.freemarker.generator.base.FreeMarkerConstants.Mode;
+import org.apache.freemarker.generator.base.FreeMarkerConstants.SeedType;
import org.apache.freemarker.generator.base.output.OutputGenerator;
-import
org.apache.freemarker.generator.cli.config.output.AggregatingOutputGenerator;
-import
org.apache.freemarker.generator.cli.config.output.GeneratingOutputGenerator;
+import
org.apache.freemarker.generator.cli.config.output.DataSourceSeedingOutputGenerator;
+import
org.apache.freemarker.generator.cli.config.output.TemplateSeedingOutputGenerator;
import org.apache.freemarker.generator.cli.picocli.OutputGeneratorDefinition;
import java.util.Collection;
@@ -27,37 +27,35 @@ import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
+import static java.util.Objects.requireNonNull;
+
/**
* Supplies a list of list of <code>OutputGenerators</code> based on the user
input.
*/
public class OutputGeneratorsSupplier implements
Supplier<List<OutputGenerator>> {
private final Settings settings;
- private final AggregatingOutputGenerator aggregatingOutputGenerator;
- private final GeneratingOutputGenerator generatingOutputGenerator;
public OutputGeneratorsSupplier(Settings settings) {
- this.settings = settings;
- aggregatingOutputGenerator = new AggregatingOutputGenerator(settings);
- generatingOutputGenerator = new GeneratingOutputGenerator(settings);
+ this.settings = requireNonNull(settings);
}
@Override
public List<OutputGenerator> get() {
return settings.getOutputGeneratorDefinitions().stream()
- .map(this::outputGenerator)
+ .map(definition -> outputGenerator(settings, definition))
.flatMap(Collection::stream)
.collect(Collectors.toList());
}
- private List<OutputGenerator> outputGenerator(OutputGeneratorDefinition
definition) {
- final String mode = definition.getOutputGeneratorMode();
- if (Mode.AGGREGATE.equalsIgnoreCase(mode)) {
- return aggregatingOutputGenerator.apply(definition);
- } else if (Mode.GENERATE.equalsIgnoreCase(mode)) {
- return generatingOutputGenerator.apply(definition);
+ private List<OutputGenerator> outputGenerator(Settings settings,
OutputGeneratorDefinition definition) {
+ final String seedType = definition.getOutputSeedType();
+ if (SeedType.TEMPLATE.equalsIgnoreCase(seedType)) {
+ return new
TemplateSeedingOutputGenerator(settings).apply(definition);
+ } else if (SeedType.DATASOURCE.equalsIgnoreCase(seedType)) {
+ return new
DataSourceSeedingOutputGenerator(settings).apply(definition);
} else {
- throw new RuntimeException("Unknown output generator mode:" +
mode);
+ throw new RuntimeException("Unknown seed type:" + seedType);
}
}
}
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/GeneratingOutputGenerator.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/DataSourceSeedingOutputGenerator.java
similarity index 78%
rename from
freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/GeneratingOutputGenerator.java
rename to
freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/DataSourceSeedingOutputGenerator.java
index 4f6eaf8..fc9a418 100644
---
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/GeneratingOutputGenerator.java
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/DataSourceSeedingOutputGenerator.java
@@ -22,7 +22,6 @@ import
org.apache.freemarker.generator.base.output.OutputGenerator.SeedType;
import org.apache.freemarker.generator.base.template.TemplateOutput;
import org.apache.freemarker.generator.base.template.TemplateSource;
import org.apache.freemarker.generator.base.util.ListUtils;
-import org.apache.freemarker.generator.base.util.StringUtils;
import org.apache.freemarker.generator.base.util.Validate;
import org.apache.freemarker.generator.cli.config.Settings;
import org.apache.freemarker.generator.cli.config.Suppliers;
@@ -40,31 +39,35 @@ import java.util.function.Function;
import static java.util.Collections.singletonList;
-public class GeneratingOutputGenerator
+/**
+ * Generates an <code>OutputGenerator</code> per <code>DataSource</code>.
+ */
+public class DataSourceSeedingOutputGenerator
extends AbstractOutputGenerator
implements Function<OutputGeneratorDefinition, List<OutputGenerator>> {
private final Settings settings;
- public GeneratingOutputGenerator(Settings settings) {
+ public DataSourceSeedingOutputGenerator(Settings settings) {
this.settings = settings;
}
@Override
- public List<OutputGenerator> apply(OutputGeneratorDefinition definition) {
- Validate.notNull(definition, "definition must not be null");
+ public List<OutputGenerator> apply(OutputGeneratorDefinition
outputGeneratorDefinition) {
+ Validate.notNull(outputGeneratorDefinition, "outputGeneratorDefinition
must not be null");
final List<OutputGenerator> result = new ArrayList<>();
- final TemplateSourceDefinition templateSourceDefinition =
definition.getTemplateSourceDefinition();
- final TemplateOutputDefinition templateOutputDefinition =
definition.getTemplateOutputDefinition();
- final Map<String, Object> dataModels = super.dataModels(definition);
- final List<DataSource> dataSources = super.dataSources(settings,
definition);
+ final TemplateSourceDefinition templateSourceDefinition =
outputGeneratorDefinition.getTemplateSourceDefinition();
+ final TemplateOutputDefinition templateOutputDefinition =
outputGeneratorDefinition.getTemplateOutputDefinition();
+ final Map<String, Object> dataModels =
super.dataModels(outputGeneratorDefinition);
+ final List<DataSource> dataSources = super.dataSources(settings,
outputGeneratorDefinition);
final List<DataSource> sharedDataSources =
Suppliers.sharedDataSourcesSupplier(settings).get();
final List<DataSource> combinedDataSources =
ListUtils.concatenate(dataSources, sharedDataSources);
final TemplateSource templateSource =
TemplateSourceFactory.create(templateSourceDefinition,
settings.getTemplateEncoding());
+ final DataSourceSeedingOutputMapper outputMapper =
outputMapper(outputGeneratorDefinition.getOutputMapper());
for (DataSource dataSource : combinedDataSources) {
- final TemplateOutput templateOutput =
templateOutput(templateOutputDefinition, settings, dataSource);
+ final TemplateOutput templateOutput =
templateOutput(templateOutputDefinition, settings, dataSource, outputMapper);
final OutputGenerator outputGenerator = new OutputGenerator(
templateSource,
templateOutput,
@@ -78,9 +81,9 @@ public class GeneratingOutputGenerator
return result;
}
- private TemplateOutput templateOutput(TemplateOutputDefinition
templateOutputDefinition, Settings settings, DataSource dataSource) {
+ private TemplateOutput templateOutput(TemplateOutputDefinition
templateOutputDefinition, Settings settings, DataSource dataSource,
DataSourceSeedingOutputMapper outputMapper) {
final Charset outputEncoding = settings.getOutputEncoding();
- final File templateOutputFile =
templateOutputFile(templateOutputDefinition, dataSource);
+ final File templateOutputFile =
templateOutputFile(templateOutputDefinition, dataSource, outputMapper);
if (settings.getCallerSuppliedWriter() != null) {
return
TemplateOutput.fromWriter(settings.getCallerSuppliedWriter());
} else if (templateOutputFile != null) {
@@ -90,19 +93,20 @@ public class GeneratingOutputGenerator
}
}
- private File templateOutputFile(TemplateOutputDefinition
templateOutputDefinition, DataSource dataSource) {
+ private File templateOutputFile(
+ TemplateOutputDefinition templateOutputDefinition,
+ DataSource dataSource,
+ DataSourceSeedingOutputMapper outputMapper) {
+
if (templateOutputDefinition == null ||
!templateOutputDefinition.hasOutput()) {
return null;
}
final File outputDirectory = new
File(templateOutputDefinition.outputs.get(0));
- final String relativeFilePath = dataSource.getRelativeFilePath();
- final String fileName = dataSource.getBaseName() + ".html";
+ return outputMapper.map(outputDirectory, dataSource);
+ }
- if (StringUtils.isEmpty(relativeFilePath)) {
- return new File(outputDirectory, fileName);
- } else {
- return new File(outputDirectory, relativeFilePath + "/" +
fileName);
- }
+ private DataSourceSeedingOutputMapper outputMapper(String template) {
+ return new DataSourceSeedingOutputMapper(template);
}
}
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/DataSourceSeedingOutputMapper.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/DataSourceSeedingOutputMapper.java
new file mode 100644
index 0000000..d5d7568
--- /dev/null
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/DataSourceSeedingOutputMapper.java
@@ -0,0 +1,32 @@
+package org.apache.freemarker.generator.cli.config.output;
+
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.util.StringUtils;
+
+import java.io.File;
+
+public class DataSourceSeedingOutputMapper {
+
+ private final String template;
+
+ public DataSourceSeedingOutputMapper(String template) {
+ this.template = template;
+ }
+
+ public File map(File outputDirectory, DataSource dataSource) {
+ final String relativeFilePath = dataSource.getRelativeFilePath();
+ final String fileName = expand(template, dataSource);
+
+ return (StringUtils.isEmpty(relativeFilePath)) ?
+ new File(outputDirectory, fileName) :
+ new File(new File(outputDirectory, relativeFilePath),
fileName);
+ }
+
+ private static String expand(String value, DataSource dataSource) {
+ if (StringUtils.isEmpty(value)) {
+ return dataSource.getBaseName() + "." + dataSource.getExtension();
+ }
+
+ return value.replace("*", dataSource.getBaseName());
+ }
+}
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/AggregatingOutputGenerator.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/TemplateSeedingOutputGenerator.java
similarity index 63%
rename from
freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/AggregatingOutputGenerator.java
rename to
freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/TemplateSeedingOutputGenerator.java
index 56fe9ea..7bb59a0 100644
---
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/AggregatingOutputGenerator.java
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/output/TemplateSeedingOutputGenerator.java
@@ -16,40 +16,32 @@
*/
package org.apache.freemarker.generator.cli.config.output;
-import org.apache.freemarker.generator.base.FreeMarkerConstants.Location;
-import org.apache.freemarker.generator.base.datasource.DataSource;
-import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
-import org.apache.freemarker.generator.base.datasource.DataSourcesSupplier;
import org.apache.freemarker.generator.base.output.OutputGenerator;
import org.apache.freemarker.generator.base.output.OutputGenerator.SeedType;
import org.apache.freemarker.generator.base.template.TemplateTransformation;
import
org.apache.freemarker.generator.base.template.TemplateTransformationsBuilder;
-import org.apache.freemarker.generator.base.util.UriUtils;
-import org.apache.freemarker.generator.cli.config.DataModelSupplier;
import org.apache.freemarker.generator.cli.config.Settings;
import org.apache.freemarker.generator.cli.picocli.OutputGeneratorDefinition;
import org.apache.freemarker.generator.cli.picocli.TemplateOutputDefinition;
import org.apache.freemarker.generator.cli.picocli.TemplateSourceDefinition;
-import java.net.URI;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.function.Function;
-import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Objects.requireNonNull;
-import static
org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
-import static
org.apache.freemarker.generator.base.FreeMarkerConstants.Location.STDIN;
-import static
org.apache.freemarker.generator.base.mime.Mimetypes.MIME_TEXT_PLAIN;
-public class AggregatingOutputGenerator implements
Function<OutputGeneratorDefinition, List<OutputGenerator>> {
+/**
+ * Generates an <code>OutputGenerator</code> per <code>Template</code>.
+ */
+public class TemplateSeedingOutputGenerator
+ extends AbstractOutputGenerator
+ implements Function<OutputGeneratorDefinition, List<OutputGenerator>> {
private final Settings settings;
- public AggregatingOutputGenerator(Settings settings) {
- this.settings = settings;
+ public TemplateSeedingOutputGenerator(Settings settings) {
+ this.settings = requireNonNull(settings);
}
@Override
@@ -104,34 +96,4 @@ public class AggregatingOutputGenerator implements
Function<OutputGeneratorDefin
return result;
}
-
- private List<DataSource> dataSources(Settings settings,
OutputGeneratorDefinition outputGeneratorDefinition) {
- final ArrayList<DataSource> result = new ArrayList<>();
-
- // Add optional data source from STDIN at the start of the list since
- // this allows easy sequence slicing in FreeMarker.
- if (settings.isReadFromStdin()) {
- result.add(0, stdinDataSource());
- }
-
- final DataSourcesSupplier outputGeneratorDataSourcesSupplier = new
DataSourcesSupplier(
- outputGeneratorDefinition.getDataSources(),
- settings.getSourceIncludePattern(),
- settings.getSourceExcludePattern(),
- settings.getInputEncoding()
- );
-
- result.addAll(outputGeneratorDataSourcesSupplier.get());
-
- return result;
- }
-
- private Map<String, Object> dataModels(OutputGeneratorDefinition
outputGeneratorDefinition) {
- return new
DataModelSupplier(outputGeneratorDefinition.getDataModels()).get();
- }
-
- private static DataSource stdinDataSource() {
- final URI uri = UriUtils.toUri(Location.SYSTEM, STDIN);
- return DataSourceFactory.fromInputStream(STDIN, DEFAULT_GROUP, uri,
System.in, MIME_TEXT_PLAIN, UTF_8, new HashMap<>());
- }
}
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorDefinition.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorDefinition.java
index 98d2347..d824524 100644
---
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorDefinition.java
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorDefinition.java
@@ -16,7 +16,7 @@
*/
package org.apache.freemarker.generator.cli.picocli;
-import org.apache.freemarker.generator.base.FreeMarkerConstants.Mode;
+import org.apache.freemarker.generator.base.FreeMarkerConstants.SeedType;
import picocli.CommandLine;
import picocli.CommandLine.ArgGroup;
import picocli.CommandLine.ParameterException;
@@ -25,6 +25,9 @@ import java.util.List;
import static java.util.Collections.emptyList;
+/**
+ * Collects the setting for an output generator.
+ */
public class OutputGeneratorDefinition {
@ArgGroup(multiplicity = "1")
@@ -37,16 +40,16 @@ public class OutputGeneratorDefinition {
public TemplateOutputDefinition templateOutputDefinition;
@ArgGroup(exclusive = false)
- public TemplateOutputMapperDefinition templateOutputMapperDefinition;
-
- @ArgGroup(exclusive = false)
public DataSourceDefinition dataSourceDefinition;
@ArgGroup(exclusive = false)
public DataModelDefinition dataModelDefinition;
@ArgGroup(exclusive = false)
- public OutputGeneratorModeDefinition outputGeneratorModeDefinition;
+ public OutputSeedDefinition outputSeedDefinition;
+
+ @ArgGroup(exclusive = false)
+ public OutputMapperDefinition outputMapperDefinition;
public void validate(CommandLine commandLine) {
if (templateSourceDefinition == null) {
@@ -106,15 +109,18 @@ public class OutputGeneratorDefinition {
!getTemplateSourceFilterDefinition().templateExcludePatterns.isEmpty();
}
- public String getOutputGeneratorMode() {
- if (outputGeneratorModeDefinition != null &&
- outputGeneratorModeDefinition.outputGeneratorMode != null) {
- return outputGeneratorModeDefinition.outputGeneratorMode;
+ public String getOutputSeedType() {
+ if (outputSeedDefinition != null && outputSeedDefinition.type != null)
{
+ return outputSeedDefinition.type;
} else {
- return Mode.AGGREGATE;
+ return SeedType.TEMPLATE;
}
}
+ public String getOutputMapper() {
+ return (outputMapperDefinition != null) ?
outputMapperDefinition.outputMapper : null;
+ }
+
private static boolean isFileSource(String source) {
if (source.contains("file://")) {
return true;
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/TemplateOutputMapperDefinition.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputMapperDefinition.java
similarity index 95%
rename from
freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/TemplateOutputMapperDefinition.java
rename to
freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputMapperDefinition.java
index 1512a5d..d23ec74 100644
---
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/TemplateOutputMapperDefinition.java
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputMapperDefinition.java
@@ -18,7 +18,7 @@ package org.apache.freemarker.generator.cli.picocli;
import picocli.CommandLine.Option;
-public class TemplateOutputMapperDefinition {
+public class OutputMapperDefinition {
@Option(names = { "--output-mapper" }, description = "maps the name of the
output file")
public String outputMapper;
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorModeDefinition.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputSeedDefinition.java
similarity index 74%
rename from
freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorModeDefinition.java
rename to
freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputSeedDefinition.java
index ba865aa..f897cbb 100644
---
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputGeneratorModeDefinition.java
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/picocli/OutputSeedDefinition.java
@@ -19,10 +19,10 @@ package org.apache.freemarker.generator.cli.picocli;
import picocli.CommandLine.Option;
/**
- * Aggregate multiple data source into one output file or generate an output
file per data source.
+ * Seeding of template output.
*/
-public class OutputGeneratorModeDefinition {
+public class OutputSeedDefinition {
- @Option(names = { "-M", "--output-mode" }, defaultValue = "aggregate",
description = "Output mode: [generate|aggregate]")
- public String outputGeneratorMode;
+ @Option(names = { "--seed" }, defaultValue = "template", description =
"seed mode: [template|datasource]")
+ public String type;
}
diff --git
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/output/DataSourceSeedingOutputMapperTest.java
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/output/DataSourceSeedingOutputMapperTest.java
new file mode 100644
index 0000000..8e81ca8
--- /dev/null
+++
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/output/DataSourceSeedingOutputMapperTest.java
@@ -0,0 +1,69 @@
+package org.apache.freemarker.generator.cli.config.output;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
+import org.apache.freemarker.generator.base.util.FileUtils;
+import org.apache.freemarker.generator.base.util.OperatingSystem;
+import org.apache.freemarker.generator.base.util.StringUtils;
+import org.junit.Test;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+
+import static org.junit.Assert.assertEquals;
+
+public class DataSourceSeedingOutputMapperTest {
+
+ private final File CURRENT_DIRECTORY = new File(".");
+ private final File PARENT_DIRECTORY = new File("..");
+ private final File ANY_DIRECTORY = new File("target");
+ private final File ANY_FILE = new File("pom.xml");
+ private final DataSource ANY_DATA_SOURCE =
DataSourceFactory.fromFile(ANY_FILE, StandardCharsets.UTF_8);
+
+ @Test
+ public void shouldGenerateOutputFileForCurrentDirectory() {
+ assertEquals("pom.xml", path(outputMapper(null).map(CURRENT_DIRECTORY,
ANY_DATA_SOURCE)));
+ assertEquals("pom.xml", path(outputMapper("").map(CURRENT_DIRECTORY,
ANY_DATA_SOURCE)));
+ assertEquals("pom.html",
path(outputMapper("*.html").map(CURRENT_DIRECTORY, ANY_DATA_SOURCE)));
+ assertEquals("pom.html",
path(outputMapper("pom.html").map(CURRENT_DIRECTORY, ANY_DATA_SOURCE)));
+ assertEquals("html/pom.html",
path(outputMapper("html/*.html").map(CURRENT_DIRECTORY, ANY_DATA_SOURCE)));
+ }
+
+ @Test
+ public void shouldGenerateOutputFileForParentDirectory() {
+ assertEquals("../pom.xml",
path(outputMapper(null).map(PARENT_DIRECTORY, ANY_DATA_SOURCE)));
+ assertEquals("../pom.xml", path(outputMapper("").map(PARENT_DIRECTORY,
ANY_DATA_SOURCE)));
+ assertEquals("../pom.html",
path(outputMapper("*.html").map(PARENT_DIRECTORY, ANY_DATA_SOURCE)));
+ assertEquals("../pom.html",
path(outputMapper("pom.html").map(PARENT_DIRECTORY, ANY_DATA_SOURCE)));
+ assertEquals("../html/pom.html",
path(outputMapper("html/*.html").map(PARENT_DIRECTORY, ANY_DATA_SOURCE)));
+ }
+
+ @Test
+ public void shouldGenerateOutputFileForAnyDirectory() {
+ assertEquals("target/pom.xml",
path(outputMapper(null).map(ANY_DIRECTORY, ANY_DATA_SOURCE)));
+ assertEquals("target/pom.xml",
path(outputMapper("").map(ANY_DIRECTORY, ANY_DATA_SOURCE)));
+ assertEquals("target/pom.html",
path(outputMapper("*.html").map(ANY_DIRECTORY, ANY_DATA_SOURCE)));
+ assertEquals("target/pom.html",
path(outputMapper("pom.html").map(ANY_DIRECTORY, ANY_DATA_SOURCE)));
+ assertEquals("target/html/pom.html",
path(outputMapper("html/*.html").map(ANY_DIRECTORY, ANY_DATA_SOURCE)));
+ }
+
+ private static DataSourceSeedingOutputMapper outputMapper(String template)
{
+ return new DataSourceSeedingOutputMapper(template);
+ }
+
+ private static String fixSeparators(String str) {
+ if (OperatingSystem.isWindows()) {
+ return FilenameUtils.separatorsToUnix(str);
+ } else {
+ return str;
+ }
+ }
+
+ private static String path(File file) {
+ final File workingDir = new File(".");
+ final String relativePath = FileUtils.getRelativePath(workingDir,
file);
+ return StringUtils.isEmpty(relativePath) ?
+ file.getName() : fixSeparators(relativePath) +
File.separatorChar + file.getName();
+ }
+}