This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-146
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
The following commit(s) were added to refs/heads/FREEMARKER-146 by this push:
new fff73ae FREEMARKER-146 Cleanly separate example templates and data
from user-supplied content
fff73ae is described below
commit fff73aec15e7cde61f07bce89640cbfe0ae413da
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Sat Jun 20 21:21:08 2020 +0200
FREEMARKER-146 Cleanly separate example templates and data from
user-supplied content
---
freemarker-generator-cli/README.md | 20 ++-----
freemarker-generator-cli/run-examples.sh | 2 +-
.../freemarker/generator/cli/config/Settings.java | 30 +++++------
.../freemarker/generator/cli/config/Suppliers.java | 2 +-
.../src/main/scripts/run-examples.sh | 2 +-
.../freemarker/generator/cli/ExamplesTest.java | 2 +-
.../freemarker/generator/cli/ManualTest.java | 5 +-
.../generator/cli/config/SettingsTest.java | 4 +-
.../templates/csv/csv/transform.ftl | 20 ++-----
.../templates/csv/html/transform.ftl | 10 +---
.../templates/csv/md/transform.ftl | 9 +---
.../generator/tools/commonscsv/CommonsCSVTool.java | 63 +++++++++++++++++++---
.../generator/tools/freemarker/FreeMarkerTool.java | 2 +-
.../generator/tools/system/SystemTool.java | 4 +-
14 files changed, 90 insertions(+), 85 deletions(-)
diff --git a/freemarker-generator-cli/README.md
b/freemarker-generator-cli/README.md
index 7f7a709..3060216 100644
--- a/freemarker-generator-cli/README.md
+++ b/freemarker-generator-cli/README.md
@@ -894,14 +894,14 @@ While this looks small and tidy there are some nifty
features
Sometimes you have a CSV file which is not quite right - you need to change
the format. Lets have a look how `freemarker-cli` can help
-> bin/freemarker-cli -PCVS_IN_DELIMITER=COMMA -PCSV_OUT_DELIMITER=PIPE -t
templates/csv/csv/transform.ftl ./examples/data/csv/contract.csv
+> bin/freemarker-cli -DCVS_IN_DELIMITER=COMMA -DCSV_OUT_DELIMITER=PIPE -t
templates/csv/csv/transform.ftl ./examples/data/csv/contract.csv
renders the following template
```text
<#ftl output_format="plainText" strip_text="true">
-<#assign csvParser = createCsvParser(DataSources.get(0))>
-<#assign csvPrinter = createCsvPrinter()>
+<#assign csvParser = CSVTool.parse(DataSources.get(0))>
+<#assign csvPrinter = CSVTool.printer(SystemTool.writer)>
<#--
Print each record directly to the underyling writer without materializing
the CSV in memory.
FreeMarker and CSV output are out of sync but millions of records can
processed without
@@ -912,20 +912,6 @@ renders the following template
${csvPrinter.printRecord(record)}
</#list>
</#compress>
-
-<#function createCsvParser dataSource>
- <#assign initialCvsInFormat = CSVTool.formats[CSV_IN_FORMAT!"DEFAULT"]>
- <#assign csvInDelimiter =
CSVTool.toDelimiter(CSV_IN_DELIMITER!initialCvsInFormat.getDelimiter())>
- <#assign cvsInFormat = initialCvsInFormat.withDelimiter(csvInDelimiter)>
- <#return CSVTool.parse(dataSource, cvsInFormat)>
-</#function>
-
-<#function createCsvPrinter>
- <#assign initialCvsOutFormat = CSVTool.formats[CSV_OUT_FORMAT!"DEFAULT"]>
- <#assign csvOutDelimiter =
CSVTool.toDelimiter(CSV_OUT_DELIMITER!initialCvsOutFormat.getDelimiter())>
- <#assign cvsOutFormat = initialCvsOutFormat.withDelimiter(csvOutDelimiter)>
- <#return CSVTool.printer(cvsOutFormat, SystemTool.writer)>
-</#function>
```
and generates the following output
diff --git a/freemarker-generator-cli/run-examples.sh
b/freemarker-generator-cli/run-examples.sh
index 6b68e16..37e6d4e 100755
--- a/freemarker-generator-cli/run-examples.sh
+++ b/freemarker-generator-cli/run-examples.sh
@@ -106,7 +106,7 @@ fi
#############################################################################
echo "examples/templates/dataframe/example.ftl"
-$FREEMARKER_CMD -DCSV_TOOL_DELIMITER=SEMICOLON -DCSV_TOOL_HEADERS=true -t
examples/templates/dataframe/example.ftl examples/data/csv/dataframe.csv >
target/out/dataframe.txt || { echo >&2 "Test failed. Aborting."; exit 1; }
+$FREEMARKER_CMD -DCSV_IN_DELIMITER=SEMICOLON -DCSV_IN_WITH_HEADER=true -t
examples/templates/dataframe/example.ftl examples/data/csv/dataframe.csv >
target/out/dataframe.txt || { echo >&2 "Test failed. Aborting."; exit 1; }
#############################################################################
# Grok
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Settings.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Settings.java
index 89e48bf..16dc76f 100644
---
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Settings.java
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Settings.java
@@ -96,10 +96,10 @@ public class Settings {
private final List<String> dataModels;
/** User-supplied parameters */
- private final Map<String, Object> parameters;
+ private final Map<String, Object> userParameters;
/** User-supplied system properties */
- private final Properties systemProperties;
+ private final Properties userSystemProperties;
/** The writer used for rendering templates, e.g. stdout or a file writer
*/
private final Writer writer;
@@ -122,8 +122,8 @@ public class Settings {
boolean isReadFromStdin,
List<String> dataSources,
List<String> dataModels,
- Map<String, Object> parameters,
- Properties systemProperties,
+ Map<String, Object> userParameters,
+ Properties userSystemProperties,
Writer writer) {
if ((templates == null || templates.isEmpty()) &&
isEmpty(interactiveTemplate)) {
throw new IllegalArgumentException("Either 'template' or
'interactiveTemplate' must be provided");
@@ -145,8 +145,8 @@ public class Settings {
this.isReadFromStdin = isReadFromStdin;
this.dataSources = requireNonNull(dataSources);
this.dataModels = requireNonNull(dataModels);
- this.parameters = requireNonNull(parameters);
- this.systemProperties = requireNonNull(systemProperties);
+ this.userParameters = requireNonNull(userParameters);
+ this.userSystemProperties = requireNonNull(userSystemProperties);
this.configuration = requireNonNull(configuration);
this.writer = writer != null ? new NonClosableWriterWrapper(writer) :
null;
}
@@ -170,7 +170,7 @@ public class Settings {
public List<String> getTemplates() {
return templates;
}
-
+
public String getInteractiveTemplate() {
return interactiveTemplate;
}
@@ -227,12 +227,12 @@ public class Settings {
return dataModels;
}
- public Map<String, Object> getParameters() {
- return parameters;
+ public Map<String, Object> getUserParameters() {
+ return userParameters;
}
- public Properties getSystemProperties() {
- return systemProperties;
+ public Properties getUserSystemProperties() {
+ return userSystemProperties;
}
public boolean hasOutputFile() {
@@ -254,8 +254,8 @@ public class Settings {
result.put(Model.FREEMARKER_CLI_ARGS, getArgs());
result.put(Model.FREEMARKER_LOCALE, getLocale());
result.put(Model.FREEMARKER_TEMPLATE_DIRECTORIES,
getTemplateDirectories());
- result.put(Model.FREEMARKER_USER_PARAMETERS, getParameters());
- result.put(Model.FREEMARKER_USER_SYSTEM_PROPERTIES,
getSystemProperties());
+ result.put(Model.FREEMARKER_USER_PARAMETERS, getUserParameters());
+ result.put(Model.FREEMARKER_USER_SYSTEM_PROPERTIES,
getUserSystemProperties());
result.put(Model.FREEMARKER_WRITER, getWriter());
return result;
}
@@ -283,8 +283,8 @@ public class Settings {
", locale=" + locale +
", isReadFromStdin=" + isReadFromStdin +
", dataSources=" + dataSources +
- ", properties=" + parameters +
- ", systemProperties=" + systemProperties +
+ ", userParameters=" + userParameters +
+ ", userSystemProperties=" + userSystemProperties +
'}';
}
diff --git
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
index 7151600..54e0758 100644
---
a/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
+++
b/freemarker-generator-cli/src/main/java/org/apache/freemarker/generator/cli/config/Suppliers.java
@@ -64,7 +64,7 @@ public class Suppliers {
}
public static Supplier<Map<String, Object>> parameterSupplier(Settings
settings) {
- return settings::getParameters;
+ return settings::getUserParameters;
}
public static TemplateTransformationsSupplier
templateTransformationsSupplier(Settings settings) {
diff --git a/freemarker-generator-cli/src/main/scripts/run-examples.sh
b/freemarker-generator-cli/src/main/scripts/run-examples.sh
index e65b6d8..c81cb71 100755
--- a/freemarker-generator-cli/src/main/scripts/run-examples.sh
+++ b/freemarker-generator-cli/src/main/scripts/run-examples.sh
@@ -106,7 +106,7 @@ fi
#############################################################################
echo "examples/templates/dataframe/example.ftl"
-$FREEMARKER_CMD -DCSV_TOOL_DELIMITER=SEMICOLON -DCSV_TOOL_HEADERS=true -t
examples/templates/dataframe/example.ftl examples/data/csv/dataframe.csv >
target/out/dataframe.txt || { echo >&2 "Test failed. Aborting."; exit 1; }
+$FREEMARKER_CMD -DCSV_IN_DELIMITER=SEMICOLON -DCSV_IN_WITH_HEADER=true -t
examples/templates/dataframe/example.ftl examples/data/csv/dataframe.csv >
target/out/dataframe.txt || { echo >&2 "Test failed. Aborting."; exit 1; }
#############################################################################
# Grok
diff --git
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
index a9dff72..45a027d 100644
---
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
+++
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ExamplesTest.java
@@ -105,7 +105,7 @@ public class ExamplesTest extends AbstractMainTest {
@Test
public void shouldRunDataFrameExamples() throws IOException {
- assertValid(execute("-DCSV_TOOL_DELIMITER=SEMICOLON
-DCSV_TOOL_HEADERS=true -t examples/templates/dataframe/example.ftl
examples/data/csv/dataframe.csv"));
+ assertValid(execute("-DCSV_IN_DELIMITER=SEMICOLON
-DCSV_IN_WITH_HEADER=true -t examples/templates/dataframe/example.ftl
examples/data/csv/dataframe.csv"));
}
@Test
diff --git
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
index fa33e18..09c1f79 100644
---
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
+++
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/ManualTest.java
@@ -24,9 +24,8 @@ import java.util.Arrays;
public class ManualTest {
private static final String SPACE = " ";
- // private static final String CMD = "-DCSV_TOOL_DELIMITER=SEMICOLON
-DCSV_TOOL_HEADERS=true -t examples/templates/dataframe/example.ftl
https://raw.githubusercontent.com/nRo/DataFrame/master/src/test/resources/users.csv";
- private static final String CMD = "-PCSV_OUT_FORMAT=EXCEL -t
templates/csv/csv/transform.ftl examples/data/csv/contract.csv";
-
+ // private static final String CMD = "-DCSV_IN_DELIMITER=SEMICOLON
-DCSV_IN_WITH_HEADER=true -t examples/templates/dataframe/example.ftl
https://raw.githubusercontent.com/nRo/DataFrame/master/src/test/resources/users.csv";
+ private static final String CMD = "-DCSV_IN_FORMAT=DEFAULT
-DCSV_OUT_FORMAT=INFORMIX_UNLOAD -t templates/csv/csv/transform.ftl
examples/data/csv/contract.csv";
public static void main(String[] args) {
Main.execute(toArgs(CMD));
diff --git
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SettingsTest.java
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SettingsTest.java
index 5aa6681..90c7696 100644
---
a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SettingsTest.java
+++
b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/SettingsTest.java
@@ -57,8 +57,8 @@ public class SettingsTest {
assertEquals(ANY_OUTPUT_FILE, settings.getOutput().getName());
assertEquals(ANY_TEMPLATE_NAME, settings.getTemplates().get(0));
assertNotNull(settings.getDataSources());
- assertNotNull(settings.getParameters());
- assertNotNull(settings.getSystemProperties());
+ assertNotNull(settings.getUserParameters());
+ assertNotNull(settings.getUserSystemProperties());
assertTrue(settings.isReadFromStdin());
assertTrue(settings.isInteractiveTemplate());
assertTrue(settings.isVerbose());
diff --git a/freemarker-generator-cli/templates/csv/csv/transform.ftl
b/freemarker-generator-cli/templates/csv/csv/transform.ftl
index 33988e1..587ebfe 100644
--- a/freemarker-generator-cli/templates/csv/csv/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/csv/transform.ftl
@@ -15,8 +15,8 @@
specific language governing permissions and limitations
under the License.
-->
-<#assign csvParser = createCsvParser(DataSources.get(0))>
-<#assign csvPrinter = createCsvPrinter()>
+<#assign csvParser = CSVTool.parse(DataSources.get(0))>
+<#assign csvPrinter = CSVTool.printer(SystemTool.writer)>
<#--
Print each record directly to the underyling writer without materializing
the CSV in memory.
FreeMarker and CSV output are out of sync but millions of records can
processed without
@@ -26,18 +26,4 @@
<#list csvParser.iterator() as record>
${csvPrinter.printRecord(record)}
</#list>
-</#compress>
-
-<#function createCsvParser dataSource>
- <#assign initialCvsInFormat =
CSVTool.formats[CSV_IN_FORMAT!"DEFAULT"].withHeader()>
- <#assign csvInDelimiter =
CSVTool.toDelimiter(CSV_IN_DELIMITER!initialCvsInFormat.getDelimiter())>
- <#assign cvsInFormat = initialCvsInFormat.withDelimiter(csvInDelimiter)>
- <#return CSVTool.parse(dataSource, cvsInFormat)>
-</#function>
-
-<#function createCsvPrinter>
- <#assign initialCvsOutFormat = CSVTool.formats[CSV_OUT_FORMAT!"DEFAULT"]>
- <#assign csvOutDelimiter =
CSVTool.toDelimiter(CSV_OUT_DELIMITER!initialCvsOutFormat.getDelimiter())>
- <#assign cvsOutFormat = initialCvsOutFormat.withDelimiter(csvOutDelimiter)>
- <#return CSVTool.printer(cvsOutFormat, SystemTool.writer)>
-</#function>
\ No newline at end of file
+</#compress>
\ No newline at end of file
diff --git a/freemarker-generator-cli/templates/csv/html/transform.ftl
b/freemarker-generator-cli/templates/csv/html/transform.ftl
index d5b5515..3e3c2b8 100644
--- a/freemarker-generator-cli/templates/csv/html/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/html/transform.ftl
@@ -17,7 +17,8 @@
-->
<#assign dataSource = DataSources.get(0)>
<#assign name = dataSource.name>
-<#assign csvParser = createCsvParser(DataSources.get(0))>
+<#assign csvParser = CSVTool.parse(dataSource)>
+<#assign csvPrinter = CSVTool.printer(SystemTool.writer)>
<#assign csvHeaders = csvParser.getHeaderNames()>
<#--------------------------------------------------------------------------->
<!DOCTYPE html>
@@ -53,10 +54,3 @@
</#list>
</tr>
</#macro>
-<#--------------------------------------------------------------------------->
-<#function createCsvParser dataSource>
- <#assign initialCvsInFormat =
CSVTool.formats[CSV_IN_FORMAT!"DEFAULT"].withHeader()>
- <#assign csvInDelimiter =
CSVTool.toDelimiter(CSV_IN_DELIMITER!initialCvsInFormat.getDelimiter())>
- <#assign cvsInFormat = initialCvsInFormat.withDelimiter(csvInDelimiter)>
- <#return CSVTool.parse(dataSource, cvsInFormat)>
-</#function>
\ No newline at end of file
diff --git a/freemarker-generator-cli/templates/csv/md/transform.ftl
b/freemarker-generator-cli/templates/csv/md/transform.ftl
index 303552c..ff2e09a 100644
--- a/freemarker-generator-cli/templates/csv/md/transform.ftl
+++ b/freemarker-generator-cli/templates/csv/md/transform.ftl
@@ -15,7 +15,7 @@
specific language governing permissions and limitations
under the License.
-->
-<#assign csvParser = createCsvParser(DataSources.get(0))>
+<#assign csvParser = CSVTool.parse(DataSources.get(0))>
<#assign csvHeaders = csvParser.getHeaderMap()?keys>
<#assign csvRecords = csvParser.records>
<#--------------------------------------------------------------------------->
@@ -34,10 +34,3 @@
| ${column.iterator()?join(" | ", "")} |
</#list>
</#macro>
-<#--------------------------------------------------------------------------->
-<#function createCsvParser dataSource>
- <#assign initialCvsInFormat =
CSVTool.formats[CSV_IN_FORMAT!"DEFAULT"].withHeader()>
- <#assign csvInDelimiter =
CSVTool.toDelimiter(CSV_IN_DELIMITER!initialCvsInFormat.getDelimiter())>
- <#assign cvsInFormat = initialCvsInFormat.withDelimiter(csvInDelimiter)>
- <#return CSVTool.parse(dataSource, cvsInFormat)>
-</#function>
\ No newline at end of file
diff --git
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
index 296f903..f315669 100644
---
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
+++
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
@@ -45,10 +45,8 @@ import static org.apache.commons.io.IOUtils.toInputStream;
public class CommonsCSVTool {
- private final CSVFormat defaulCSVFormat = csvFormat();
-
public CSVParser parse(DataSource dataSource) {
- return parse(dataSource, defaulCSVFormat);
+ return parse(dataSource, defaultCSVInputFormat());
}
public CSVParser parse(DataSource dataSource, CSVFormat format) {
@@ -68,7 +66,7 @@ public class CommonsCSVTool {
}
public CSVParser parse(String csv) {
- return parse(csv, defaulCSVFormat);
+ return parse(csv, defaultCSVInputFormat());
}
public CSVParser parse(String csv, CSVFormat format) {
@@ -91,6 +89,18 @@ public class CommonsCSVTool {
/**
* Get a CSVPrinter using the FreeMarker's writer instance.
*
+ * @param writer Writer to receive the CSV output
+ * @return CSVPrinter instance
+ * @throws IOException thrown if the parameters of the format are
inconsistent or if either out or format are null.
+ */
+ public CSVPrinter printer(Writer writer) throws IOException {
+ // We do not close the CSVPrinter but the underlying writer at the of
processing
+ return new CSVPrinter(writer, defaultCSVOutputFormat());
+ }
+
+ /**
+ * Get a CSVPrinter using the FreeMarker's writer instance.
+ *
* @param csvFormat CSV format to use for writing records
* @param writer Writer to receive the CSV output
* @return CSVPrinter instance
@@ -262,16 +272,53 @@ public class CommonsCSVTool {
return result;
}
- private CSVFormat csvFormat() {
+ /**
+ * Provides a CSV default input format controlled by the following system
properties:
+ * <ul>
+ * <li>CSV_IN_FORMAT</li>
+ * <li>CSV_IN_DELIMITER</li>
+ * <li>CSV_IN_WITH_HEADER</li>
+ * </ul>
+ *
+ * @return CSV format
+ */
+ private CSVFormat defaultCSVInputFormat() {
+
+ CSVFormat csvFormat =
getFormats().getOrDefault(System.getProperty("CSV_IN_FORMAT"),
CSVFormat.DEFAULT);
+
+ final String delimiter = System.getProperty("CSV_IN_DELIMITER");
+ if (StringUtils.isNotEmpty(delimiter)) {
+ csvFormat = csvFormat.withDelimiter(toDelimiter(delimiter));
+ }
+
+ final boolean withHeader =
parseBoolean(System.getProperty("CSV_IN_WITH_HEADER",
Boolean.toString(!csvFormat.getSkipHeaderRecord())));
+ if (withHeader) {
+ csvFormat = csvFormat.withHeader();
+ }
+
+ return csvFormat;
+ }
+
+ /**
+ * Provides a CSV default output format controlled by the following system
properties:
+ * <ul>
+ * <li>CSV_OUT_FORMAT</li>
+ * <li>CSV_OUT_DELIMITER</li>
+ * <li>CSV_OUT_WITH_HEADER</li>
+ * </ul>
+ *
+ * @return CSV format
+ */
+ private CSVFormat defaultCSVOutputFormat() {
- CSVFormat csvFormat =
CSVFormat.valueOf(System.getProperty("CSV_TOOL_FORMAT", "Default"));
+ CSVFormat csvFormat =
getFormats().getOrDefault(System.getProperty("CSV_OUT_FORMAT"),
CSVFormat.DEFAULT);
- final String delimiter = System.getProperty("CSV_TOOL_DELIMITER");
+ final String delimiter = System.getProperty("CSV_OUT_DELIMITER");
if (StringUtils.isNotEmpty(delimiter)) {
csvFormat = csvFormat.withDelimiter(toDelimiter(delimiter));
}
- final boolean withHeader =
parseBoolean(System.getProperty("CSV_TOOL_HEADERS",
Boolean.toString(!csvFormat.getSkipHeaderRecord())));
+ final boolean withHeader =
parseBoolean(System.getProperty("CSV_OUT_WITH_HEADER",
Boolean.toString(!csvFormat.getSkipHeaderRecord())));
if (withHeader) {
csvFormat = csvFormat.withHeader();
}
diff --git
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/freemarker/FreeMarkerTool.java
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/freemarker/FreeMarkerTool.java
index 1150ccb..45b43e6 100644
---
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/freemarker/FreeMarkerTool.java
+++
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/freemarker/FreeMarkerTool.java
@@ -36,7 +36,7 @@ public class FreeMarkerTool {
public synchronized BeansWrapper getBeansWrapper() {
if (beansWrapper == null) {
- beansWrapper = new
BeansWrapperBuilder(Configuration.VERSION_2_3_29).build();
+ beansWrapper = new
BeansWrapperBuilder(Configuration.VERSION_2_3_30).build();
}
return beansWrapper;
}
diff --git
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/system/SystemTool.java
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/system/SystemTool.java
index dfade40..3f038f7 100644
---
a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/system/SystemTool.java
+++
b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/system/SystemTool.java
@@ -38,7 +38,7 @@ import static
org.apache.freemarker.generator.base.FreeMarkerConstants.Model.FRE
/**
* Provides system related functionality, e.g. accessing environment variables,
- * system properties, commandl-line arguments, hostname, FreeMarker writer,
etc.
+ * system properties, command-line arguments, hostname, FreeMarker writer, etc.
*/
@SuppressWarnings("unchecked")
public class SystemTool {
@@ -145,7 +145,7 @@ public class SystemTool {
* environment variables.
*
* @param name name of the configuration parameter
- * @param def default value
+ * @param def default value
* @return value of null
*/
public String getString(String name, String def) {