Skip to content

Commit 47a8aee

Browse files
committed
closes #57 Static generators: Dynamically set output file name
1 parent 2f7c538 commit 47a8aee

File tree

3 files changed

+68
-32
lines changed

3 files changed

+68
-32
lines changed

core/chaintest-core-java/src/main/java/com/aventstack/chaintest/generator/ChainTestEmailGenerator.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,22 @@
1515
public class ChainTestEmailGenerator extends FileGenerator implements Generator {
1616

1717
private static final Logger log = LoggerFactory.getLogger(ChainTestEmailGenerator.class);
18-
private static final String NAME = "email";
18+
private static final String GENERATOR_NAME = "email";
1919
private static final String BASE_PROPERTY = "chaintest.generator.email";
2020
private static final String PROP_ENABLED = BASE_PROPERTY + ".enabled";
21-
private static final String PROP_OUT_FILE_NAME = BASE_PROPERTY + ".output-file";
22-
private static final String DEFAULT_OUT_DIR = "target/chaintest/";
23-
private static final String DEFAULT_OUT_FILE_NAME = "Email.html";
2421
private static final String TEMPLATE_DIR = "email/";
2522
private static final String INDEX = "index.ftl";
2623

24+
private Map<String, String> _config;
2725
private boolean _started;
2826
private Build _build;
2927
private String _source;
3028
private File _outFile;
3129

30+
public ChainTestEmailGenerator() {
31+
super(GENERATOR_NAME);
32+
}
33+
3234
public String getSource() {
3335
return _source;
3436
}
@@ -41,19 +43,15 @@ public void start(final Optional<Map<String, String>> config, final String testR
4143
return;
4244
}
4345

44-
final String enabled = config.get().get(PROP_ENABLED);
46+
_config = config.get();
47+
48+
final String enabled = _config.get(PROP_ENABLED);
4549
if (!Boolean.parseBoolean(enabled)) {
46-
log.debug("{} Generator was not enabled. To enable, set property {}=true in your configuration", NAME, PROP_ENABLED);
50+
log.debug("{} Generator was not enabled. To enable, set property {}=true in your configuration", GENERATOR_NAME, PROP_ENABLED);
4751
return;
4852
}
4953

50-
String outputFileName = Optional.ofNullable(config.get().get(PROP_OUT_FILE_NAME))
51-
.filter(name -> !name.isEmpty())
52-
.orElse(DEFAULT_OUT_DIR + DEFAULT_OUT_FILE_NAME);
53-
if (!(outputFileName.endsWith("htm") || outputFileName.endsWith("html"))) {
54-
outputFileName += "/" + DEFAULT_OUT_FILE_NAME;
55-
}
56-
_outFile = new File(outputFileName);
54+
_outFile = getOutFile(_config);
5755

5856
log.trace("Start was called for testRunner: {}", testRunner);
5957
_build = build;
@@ -71,6 +69,7 @@ public boolean started() {
7169
}
7270

7371
public void flush(final Queue<Test> tests) {
72+
_outFile = getOutFile(_config);
7473
if (null == _build || null == tests || tests.isEmpty() || _build.getRunStats().isEmpty()) {
7574
log.debug("No tests to process, skipping flush");
7675
return;
@@ -86,7 +85,7 @@ public void executionFinished() { }
8685

8786
@Override
8887
public String getName() {
89-
return NAME;
88+
return GENERATOR_NAME;
9089
}
9190

9291
}

core/chaintest-core-java/src/main/java/com/aventstack/chaintest/generator/ChainTestSimpleGenerator.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,13 @@ public class ChainTestSimpleGenerator extends FileGenerator implements Generator
2222
private static final String GENERATOR_NAME = "simple";
2323
private static final String BASE_PROPERTY = "chaintest.generator.simple";
2424
private static final String PROP_ENABLED = BASE_PROPERTY + ".enabled";
25-
private static final String PROP_OUT_FILE_NAME = BASE_PROPERTY + ".output-file";
2625
private static final String PROP_SAVE_OFFLINE = BASE_PROPERTY + ".offline";
2726
private static final String PROP_DATETIME_FORMAT = BASE_PROPERTY + ".datetime-format";
2827
private static final String PROP_DOCUMENT_TITLE = BASE_PROPERTY + ".document-title";
2928
private static final String PROP_DARK_THEME = BASE_PROPERTY + ".dark-theme";
3029
private static final String PROP_JS = BASE_PROPERTY + ".js";
3130
private static final String PROP_CSS = BASE_PROPERTY + ".css";
3231
private static final String BASE_TEMPLATE_NAME = "index.ftl";
33-
private static final String DEFAULT_OUT_FILE_NAME = "Simple.html";
34-
private static final String DEFAULT_OUT_DIR = "target/chaintest/";
3532
private static final String RESOURCES_DIR = "/resources";
3633
private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss a";
3734
private static final List<String> OFFLINE_RESOURCE_LIST = List.of(
@@ -48,6 +45,7 @@ public class ChainTestSimpleGenerator extends FileGenerator implements Generator
4845
"esc", "Reset all filters"
4946
);
5047

48+
private Map<String, String> _config;
5149
private boolean _started;
5250
private Build _build;
5351
private String _projectName;
@@ -59,6 +57,10 @@ public class ChainTestSimpleGenerator extends FileGenerator implements Generator
5957
private boolean _offline;
6058
private boolean _darkTheme = false;
6159

60+
public ChainTestSimpleGenerator() {
61+
super(GENERATOR_NAME);
62+
}
63+
6264
@Override
6365
public void start(final Optional<Map<String, String>> config, final String testRunner, final Build build) {
6466
if (config.isEmpty()) {
@@ -67,33 +69,29 @@ public void start(final Optional<Map<String, String>> config, final String testR
6769
return;
6870
}
6971

70-
if (!Boolean.parseBoolean(config.get().get(PROP_ENABLED))) {
72+
_config = config.get();
73+
74+
if (!Boolean.parseBoolean(_config.get(PROP_ENABLED))) {
7175
log.debug("{} generator was not enabled. To enable, set property {}=true in your configuration", GENERATOR_NAME, PROP_ENABLED);
7276
return;
7377
}
7478

75-
String outputFileName = Optional.ofNullable(config.get().get(PROP_OUT_FILE_NAME))
76-
.filter(name -> !name.isEmpty())
77-
.orElse(DEFAULT_OUT_DIR + DEFAULT_OUT_FILE_NAME);
78-
if (!(outputFileName.endsWith("htm") || outputFileName.endsWith("html"))) {
79-
outputFileName += "/" + DEFAULT_OUT_FILE_NAME;
80-
}
81-
_outFile = new File(outputFileName);
79+
_outFile = getOutFile(_config);
8280

83-
_offline = Boolean.parseBoolean(config.get().get(PROP_SAVE_OFFLINE));
81+
_offline = Boolean.parseBoolean(_config.get(PROP_SAVE_OFFLINE));
8482
if (_offline) {
8583
saveResources();
8684
}
8785

88-
_projectName = Optional.ofNullable(config.get().get(ChainTestPropertyKeys.PROJECT_NAME)).orElse("");
89-
_datetimeFormat = Optional.ofNullable(config.get().get(PROP_DATETIME_FORMAT))
86+
_projectName = Optional.ofNullable(_config.get(ChainTestPropertyKeys.PROJECT_NAME)).orElse("");
87+
_datetimeFormat = Optional.ofNullable(_config.get(PROP_DATETIME_FORMAT))
9088
.filter(DateTimeUtil::isPatternValid)
9189
.orElse(DATETIME_FORMAT);
92-
_documentTitle = Optional.ofNullable(config.get().get(PROP_DOCUMENT_TITLE))
90+
_documentTitle = Optional.ofNullable(_config.get(PROP_DOCUMENT_TITLE))
9391
.orElse(ChainTestPropertyKeys.CHAINTEST);
94-
_darkTheme = Boolean.parseBoolean(config.get().get(PROP_DARK_THEME));
95-
_js = config.get().get(PROP_JS);
96-
_css = config.get().get(PROP_CSS);
92+
_darkTheme = Boolean.parseBoolean(_config.get(PROP_DARK_THEME));
93+
_js = _config.get(PROP_JS);
94+
_css = _config.get(PROP_CSS);
9795
_build = build;
9896

9997
log.trace("Start was called for testRunner: {}", testRunner);
@@ -111,6 +109,7 @@ public boolean started() {
111109
}
112110

113111
private void saveResources() {
112+
_outFile = getOutFile(_config);
114113
final File parentDir = _outFile.getParentFile();
115114
new File(parentDir.getPath() + RESOURCES_DIR).mkdirs();
116115

core/chaintest-core-java/src/main/java/com/aventstack/chaintest/generator/FileGenerator.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,28 @@
1313
import java.io.UncheckedIOException;
1414
import java.nio.file.Files;
1515
import java.util.Map;
16+
import java.util.Optional;
1617

1718
public abstract class FileGenerator {
1819

1920
private static final Logger log = LoggerFactory.getLogger(FileGenerator.class);
2021

22+
protected static final String BASE_PROPERTY = "chaintest.generator";
23+
protected static final String PROP_OUT_FILE_KEY = "output-file";
24+
protected static final String DEFAULT_OUT_DIR = "target/chaintest/";
25+
26+
private final String _propOutFile;
27+
private final String _defaultOutFileName;
2128
private Template _template;
2229
private Class<?> _classForTemplateLoading;
2330
private String _basePackagePath;
2431
private String _templateName;
2532

33+
protected FileGenerator(final String gen) {
34+
_propOutFile = BASE_PROPERTY + "." + gen + "." + PROP_OUT_FILE_KEY;
35+
_defaultOutFileName = gen + ".html";
36+
}
37+
2638
protected String processTemplate(final Map<String, Object> objectModel, final File outputFile) {
2739
final File dir = Files.isDirectory(outputFile.toPath()) ? outputFile : outputFile.getParentFile();
2840
if (null != dir) {
@@ -64,4 +76,30 @@ protected void cacheTemplate(final Class<?> classForTemplateLoading, final Strin
6476
}
6577
}
6678

79+
protected File getOutFile() {
80+
final String envOutFile = System.getenv(_propOutFile);
81+
if (null != envOutFile && !envOutFile.isEmpty()) {
82+
return new File(envOutFile);
83+
}
84+
final String sysOutFile = System.getProperty(_propOutFile);
85+
if (null != sysOutFile && !sysOutFile.isEmpty()) {
86+
return new File(sysOutFile);
87+
}
88+
return null;
89+
}
90+
91+
protected File getOutFile(final Map<String, String> config) {
92+
final File outFile = getOutFile();
93+
if (null != outFile) {
94+
return outFile;
95+
}
96+
String outputFileName = Optional.ofNullable(config.get(_propOutFile))
97+
.filter(name -> !name.isEmpty())
98+
.orElse(DEFAULT_OUT_DIR + _defaultOutFileName);
99+
if (!(outputFileName.endsWith("htm") || outputFileName.endsWith("html"))) {
100+
outputFileName += "/" + _defaultOutFileName;
101+
}
102+
return new File(outputFileName);
103+
}
104+
67105
}

0 commit comments

Comments
 (0)