This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-135
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
The following commit(s) were added to refs/heads/FREEMARKER-135 by this push:
new 1b11f5a FREEMARKER-135 Support user-supplied names for datasources
1b11f5a is described below
commit 1b11f5aa9ae556f6f09339ad57a291ff27111dcd
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Sat Feb 29 15:55:00 2020 +0100
FREEMARKER-135 Support user-supplied names for datasources
---
.../generator/base/datasource/Datasources.java | 16 +++++++++++
.../generator/base/util/StringUtils.java | 8 ++++++
.../generator/datasource/DatasourcesTest.java | 6 ++++
.../generator/uri/NamedUriParserTest.java | 32 +++++++++++++++++++++-
.../freemarker/generator/cli/ManualTest.java | 2 +-
freemarker-generator-cli/templates/info.ftl | 19 +++++++------
.../generator/maven/JsonPropertiesProvider.java | 1 +
7 files changed, 73 insertions(+), 11 deletions(-)
diff --git
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/Datasources.java
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/Datasources.java
index 5381faa..5c55c6b 100644
---
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/Datasources.java
+++
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/Datasources.java
@@ -17,6 +17,7 @@
package org.apache.freemarker.generator.base.datasource;
import org.apache.freemarker.generator.base.util.ClosableUtils;
+import org.apache.freemarker.generator.base.util.StringUtils;
import java.io.Closeable;
import java.util.ArrayList;
@@ -46,6 +47,21 @@ public class Datasources implements Closeable {
public List<String> getNames() {
return datasources.stream()
.map(Datasource::getName)
+ .filter(StringUtils::isNotEmpty)
+ .collect(toList());
+ }
+
+ /**
+ * Get the groups of all datasources.
+ *
+ * @return datasource names
+ */
+ public List<String> getGroups() {
+ return datasources.stream()
+ .map(Datasource::getGroup)
+ .filter(StringUtils::isNotEmpty)
+ .sorted()
+ .distinct()
.collect(toList());
}
diff --git
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/StringUtils.java
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/StringUtils.java
index ba7327b..4dd8184 100644
---
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/StringUtils.java
+++
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/util/StringUtils.java
@@ -22,8 +22,16 @@ public class StringUtils {
return value == null || value.trim().isEmpty();
}
+ public static boolean isNotEmpty(String value) {
+ return !isEmpty(value);
+ }
+
public static String emptyToNull(String value) {
return value != null && value.trim().isEmpty() ? null : value;
}
+ public static String nullToEmpty(String value) {
+ return value == null ? "" : value;
+ }
+
}
diff --git
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourcesTest.java
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourcesTest.java
index 6e492ef..de78af5 100644
---
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourcesTest.java
+++
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DatasourcesTest.java
@@ -27,6 +27,7 @@ import java.net.URL;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
import static
org.apache.freemarker.generator.base.FreeMarkerConstants.DEFAULT_GROUP;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -102,6 +103,11 @@ public class DatasourcesTest {
assertEquals(asList("unknown", "pom.xml", "server.invalid"),
datasources().getNames());
}
+ @Test
+ public void shouldGetGroups() {
+ assertEquals(singletonList(DEFAULT_GROUP), datasources().getGroups());
+ }
+
@Test(expected = IllegalArgumentException.class)
public void shouldThrowExceptionWhenGetDoesNotFindDatasource() {
datasources().get("file-does-not-exist");
diff --git
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriParserTest.java
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriParserTest.java
index e9a7024..06718a0 100644
---
a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriParserTest.java
+++
b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriParserTest.java
@@ -26,7 +26,7 @@ import static org.junit.Assert.assertNull;
public class NamedUriParserTest {
@Test
- public void shouldParseFileName() {
+ public void shouldParseRelativeFileName() {
final NamedUri namedURI = parse("users.csv");
assertNull(namedURI.getName());
@@ -36,6 +36,16 @@ public class NamedUriParserTest {
}
@Test
+ public void shouldParseAbsoluteFileName() {
+ final NamedUri namedURI = parse("/data/users.csv");
+
+ assertNull(namedURI.getName());
+ assertNull(namedURI.getGroup());
+ assertEquals("/data/users.csv", namedURI.getUri().toString());
+ assertEquals(0, namedURI.getParameters().size());
+ }
+
+ @Test
public void shouldParseDirectoryName() {
final NamedUri namedURI = parse("users/");
@@ -76,6 +86,26 @@ public class NamedUriParserTest {
}
@Test
+ public void shouldParseNamedWithEmptyGroupFileUri() {
+ final NamedUri namedURI = parse("users:=file:///some-admin-users.csv");
+
+ assertEquals("users", namedURI.getName());
+ assertNull(namedURI.getGroup());
+ assertEquals("file:///some-admin-users.csv",
namedURI.getUri().toString());
+ assertEquals(0, namedURI.getParameters().size());
+ }
+
+ @Test
+ public void shouldParseEmptyNamedWithGroupFileUri() {
+ final NamedUri namedURI = parse(":admin=file:///some-admin-users.csv");
+
+ assertNull(namedURI.getName());
+ assertEquals("admin", namedURI.getGroup());
+ assertEquals("file:///some-admin-users.csv",
namedURI.getUri().toString());
+ assertEquals(0, namedURI.getParameters().size());
+ }
+
+ @Test
public void shouldParseNamedFileUriWithFragment() {
final NamedUri namedURI =
parse("users=file:///users.csv#charset=UTF-16&mimetype=text/csv");
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 2fc7d43..d693905 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
@@ -36,7 +36,7 @@ public class ManualTest {
// private static final String CMD = "-b ./src/test -t
templates/properties/csv/locker-test-users.ftl site/sample/properties";
// private static final String CMD = "-b ./src/test -e UTF-8 -l de_AT
-Dcolumn=Order%20ID -Dvalues=226939189,957081544 -Dformat=DEFAULT
-Ddelimiter=COMMA -t templates/csv/md/filter.ftl
site/sample/csv/sales-records.csv";
// private static final String CMD = "-E -b ./src/test -t
templates/environment.ftl";
- private static final String CMD = "-b ./src/test -l de_AT -DFOO=foo
-DBAR=bar -t templates/info.ftl -d user:admin=site/sample/csv/contract.csv
google:www=https://www.google.com?foo=bar";
+ private static final String CMD = "-b ./src/test -l de_AT -DFOO=foo
-DBAR=bar -t templates/info.ftl -d
user:admin=site/sample/csv/contract.csv#charset=UTF-16
google:www=https://www.google.com?foo=bar#contenttype=application/json";
public static void main(String[] args) {
Main.execute(toArgs(CMD));
diff --git a/freemarker-generator-cli/templates/info.ftl
b/freemarker-generator-cli/templates/info.ftl
index 0e69545..6b9380b 100644
--- a/freemarker-generator-cli/templates/info.ftl
+++ b/freemarker-generator-cli/templates/info.ftl
@@ -16,7 +16,7 @@
under the License.
-->
FreeMarker CLI Information
----------------------------------------------------------------------------
+------------------------------------------------------------------------------
FreeMarker version : ${.version}
Template name : ${.current_template_name}
Language : ${.lang}
@@ -26,13 +26,13 @@ Output encoding : ${.output_encoding}
Output format : ${.output_format}
FreeMarker CLI Template Directories
----------------------------------------------------------------------------
+------------------------------------------------------------------------------
<#list SystemTool.getTemplateDirectories() as directory>
-[${directory?counter}] ${directory}
+[#${directory?counter}] ${directory}
</#list>
FreeMarker CLI Tools
----------------------------------------------------------------------------
+------------------------------------------------------------------------------
<#list .data_model?keys?sort as key>
<#if key?ends_with("Tool")>
- ${key?right_pad(20)} : ${.data_model[key]}
@@ -40,25 +40,26 @@ FreeMarker CLI Tools
</#list>
FreeMarker CLI Datasources
----------------------------------------------------------------------------
+------------------------------------------------------------------------------
<#list Datasources.list as datasource>
-[${datasource?counter}] ${datasource.name}, ${datasource.group},
${datasource.location}, ${datasource.charset}, ${datasource.contentType},
${datasource.length} Bytes
+[#${datasource?counter}], name=${datasource.name}, group=${datasource.group},
charset=${datasource.charset}, length= ${datasource.length} Bytes
+Location : ${datasource.location}
</#list>
User Supplied Parameters
----------------------------------------------------------------------------
+------------------------------------------------------------------------------
<#list SystemTool.parameters as name,value>
- ${name} ==> ${value}
</#list>
User Supplied System Properties
----------------------------------------------------------------------------
+------------------------------------------------------------------------------
<#list SystemTool.userSystemProperties as name,value>
- ${name} ==> ${value}
</#list>
SystemTool
----------------------------------------------------------------------------
+------------------------------------------------------------------------------
Command line : ${SystemTool.getCommandLineArgs()?join(", ")}
Host Name : ${SystemTool.getHostName()}
Java Home : ${SystemTool.getEnv("JAVA_HOME", "N.A.")}
diff --git
a/freemarker-generator-maven-plugin/src/main/java/org/apache/freemarker/generator/maven/JsonPropertiesProvider.java
b/freemarker-generator-maven-plugin/src/main/java/org/apache/freemarker/generator/maven/JsonPropertiesProvider.java
index f2e2cc4..1d16822 100644
---
a/freemarker-generator-maven-plugin/src/main/java/org/apache/freemarker/generator/maven/JsonPropertiesProvider.java
+++
b/freemarker-generator-maven-plugin/src/main/java/org/apache/freemarker/generator/maven/JsonPropertiesProvider.java
@@ -54,6 +54,7 @@ public class JsonPropertiesProvider implements
OutputGeneratorPropertiesProvider
}
@Override
+ @SuppressWarnings("unchecked")
public void providePropertiesFromFile(Path path,
OutputGenerator.OutputGeneratorBuilder builder) {
final File jsonDataFile = path.toFile();
final Map<String, Object> data = parseJson(jsonDataFile);