This is an automated email from the ASF dual-hosted git repository. sgoeschl pushed a commit to branch FREEMARKER-141 in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
commit 79e14625a79eb51fd75649f2fe0fd81638936da5 Author: Siegfried Goeschl <[email protected]> AuthorDate: Tue Apr 14 00:35:55 2020 +0200 FREEMARKER-141 freemarker-cli: Expose user-supplied parameters in the data model --- .../generator/base/datasource/DataSourceFactory.java | 12 +++++++++++- .../generator/base/parameter/ParameterModelSupplier.java | 2 +- .../org/apache/freemarker/generator/base/uri/NamedUri.java | 8 +------- .../freemarker/generator/base/uri/NamedUriStringParser.java | 10 +--------- .../generator/datasource/DataSourceFactoryTest.java | 5 ++++- .../generator/datasource/DataSourcesSupplierTest.java | 13 +++++++------ .../freemarker/generator/uri/NamedUriStringParserTest.java | 4 ++-- .../generator/cli/config/DataModelSupplierTest.java | 4 +++- 8 files changed, 30 insertions(+), 28 deletions(-) diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java index 76f5142..b8dda83 100644 --- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java +++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourceFactory.java @@ -53,6 +53,7 @@ public class DataSourceFactory { private static final String NO_MIME_TYPE = null; private static final Charset NO_CHARSET = null; + private static final String ROOT_DIR = "/"; private DataSourceFactory() { } @@ -82,7 +83,8 @@ public class DataSourceFactory { final String name = namedUri.getNameOrElse(file.getName()); return fromFile(name, group, file, charset); } else if (UriUtils.isEnvUri(uri)) { - final String key = uri.getPath().substring(1); + // environment variables come with a leading "/" to be removed + final String key = stripRootDir(uri.getPath()); final String contentType = getMimeTypeOrElse(namedUri, MIME_TEXT_PLAIN); final String name = firstNonEmpty(namedUri.getName(), key, Location.ENVIRONMENT); if (StringUtils.isEmpty(key)) { @@ -218,4 +220,12 @@ public class DataSourceFactory { throw new IllegalArgumentException(uri.toString(), e); } } + + private static String stripRootDir(String str) { + if (str.startsWith(ROOT_DIR)) { + return str.substring(ROOT_DIR.length()); + } else { + return str; + } + } } diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterModelSupplier.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterModelSupplier.java index 7dc0d86..997e1b9 100644 --- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterModelSupplier.java +++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/parameter/ParameterModelSupplier.java @@ -53,7 +53,7 @@ public class ParameterModelSupplier implements Supplier<Map<String, Object>> { for (NamedUri namedUri : namedUris) { final String key = namedUri.getName(); - final String value = namedUri.getUri().getPath().substring(1); + final String value = namedUri.getUri().getPath(); if (namedUri.hasGroup()) { final String group = namedUri.getGroup(); diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUri.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUri.java index 77cd1fa..45fb595 100644 --- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUri.java +++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUri.java @@ -16,8 +16,6 @@ */ package org.apache.freemarker.generator.base.uri; -import org.apache.freemarker.generator.base.util.UriUtils; - import java.io.File; import java.net.URI; import java.util.Map; @@ -101,11 +99,7 @@ public class NamedUri { } public File getFile() { - if (UriUtils.isFileUri(uri)) { - return new File(uri.getPath().substring(1)); - } else { - return new File(uri.getPath()); - } + return new File(uri.getPath()); } @Override diff --git a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUriStringParser.java b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUriStringParser.java index 0da4365..6aabbd0 100644 --- a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUriStringParser.java +++ b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/uri/NamedUriStringParser.java @@ -52,7 +52,7 @@ public class NamedUriStringParser { if (matcher.matches()) { final String name = matcher.group(NAME); final String group = matcher.group(GROUP); - final URI uri = uri(matcher.group(URI)); + final URI uri = UriUtils.toURI(matcher.group(URI)); return new NamedUri(name, group, uri, parameters(uri)); } else { final URI uri = UriUtils.toURI(value); @@ -63,12 +63,4 @@ public class NamedUriStringParser { private static Map<String, String> parameters(URI uri) { return UriFragmentParser.parse(uri.getFragment()); } - - private static URI uri(String str) { - if (!str.contains("://")) { - return UriUtils.toURI("file:///" + str); - } else { - return UriUtils.toURI(str); - } - } } diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceFactoryTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceFactoryTest.java index d0d665c..16df1ef 100644 --- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceFactoryTest.java +++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourceFactoryTest.java @@ -29,7 +29,9 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.charset.Charset; +import java.nio.file.Paths; +import static java.lang.String.format; import static java.nio.charset.StandardCharsets.UTF_8; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertTrue; @@ -38,9 +40,10 @@ import static org.junit.Assert.assertEquals; public class DataSourceFactoryTest { + private static final String PWD = Paths.get(".").toAbsolutePath().normalize().toString(); private static final String ANY_TEXT = "Hello World"; private static final String ANY_FILE_NAME = "pom.xml"; - private static final String ANY_FILE_URI = "file:///pom.xml"; + private static final String ANY_FILE_URI = format("file:///%s/pom.xml", PWD); private static final Charset ANY_CHAR_SET = UTF_8; private static final File ANY_FILE = new File(ANY_FILE_NAME); private static final String ANY_NAMED_URL_STRING = "content:www=https://www.google.com?foo=bar#contenttype=application/json"; diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourcesSupplierTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourcesSupplierTest.java index 68e6662..f0be3b1 100644 --- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourcesSupplierTest.java +++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/datasource/DataSourcesSupplierTest.java @@ -21,6 +21,7 @@ import org.apache.freemarker.generator.base.datasource.DataSourcesSupplier; import org.junit.Test; import java.nio.charset.Charset; +import java.nio.file.Paths; import java.util.Arrays; import java.util.List; @@ -33,16 +34,18 @@ public class DataSourcesSupplierTest { private static final String NO_EXCLUDE = null; private static final String DATA_DIRECTORY = "./src/test/data"; + private static final String PWD = Paths.get(".").toAbsolutePath().normalize().toString(); + @Test public void shouldResolveSingleFile() { assertEquals(1, supplier("pom.xml", "*", NO_EXCLUDE).get().size()); assertEquals(1, supplier("./pom.xml", "*", NO_EXCLUDE).get().size()); - assertEquals(1, supplier("file://./pom.xml", "*", NO_EXCLUDE).get().size()); assertEquals(1, supplier("pom=pom.xml", "*", NO_EXCLUDE).get().size()); assertEquals(1, supplier("pom=./pom.xml", "*", NO_EXCLUDE).get().size()); - assertEquals(1, supplier("pom=file://./pom.xml", "*", NO_EXCLUDE).get().size()); - assertEquals(1, supplier("pom=file://./pom.xml?mimetype=application/xml", "*", NO_EXCLUDE).get().size()); + assertEquals(1, supplier("pom=./pom.xml#mimetype=application/xml", "*", NO_EXCLUDE).get().size()); + assertEquals(1, supplier("pom=" + PWD + "/pom.xml", "*", NO_EXCLUDE).get().size()); + assertEquals(1, supplier("pom=file:///" + PWD + "/pom.xml#mimetype=application/xml", "*", NO_EXCLUDE).get().size()); } @Test @@ -127,9 +130,7 @@ public class DataSourcesSupplierTest { public void shouldNormalizeDataSourceNameBasedOnFilePath() { assertEquals("pom.xml", supplier("pom.xml", "*", NO_EXCLUDE).get().get(0).getName()); assertEquals("pom.xml", supplier("./pom.xml", "*", NO_EXCLUDE).get().get(0).getName()); - assertEquals("pom.xml", supplier("file://./pom.xml", "*", NO_EXCLUDE).get().get(0).getName()); - assertEquals("pom.xml", supplier("file:///pom.xml", "*", NO_EXCLUDE).get().get(0).getName()); - assertEquals("pom.xml", supplier("file://tmp/pom.xml", "*", NO_EXCLUDE).get().get(0).getName()); + assertEquals("pom.xml", supplier("file:///" + PWD + "/pom.xml", "*", NO_EXCLUDE).get().get(0).getName()); } private static DataSourcesSupplier supplier(String directory, String include, String exclude) { diff --git a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriStringParserTest.java b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriStringParserTest.java index 5de2289..897ef82 100644 --- a/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriStringParserTest.java +++ b/freemarker-generator-base/src/test/java/org/apache/freemarker/generator/uri/NamedUriStringParserTest.java @@ -77,7 +77,7 @@ public class NamedUriStringParserTest { assertEquals("users", namedURI.getName()); assertNull(namedURI.getGroup()); - assertEquals("file:///users.csv", namedURI.getUri().toString()); + assertEquals("users.csv", namedURI.getUri().toString()); assertEquals("users.csv", namedURI.getFile().getName()); assertEquals(0, namedURI.getParameters().size()); assertTrue(namedURI.hasName()); @@ -90,7 +90,7 @@ public class NamedUriStringParserTest { assertEquals("name", namedURI.getName()); assertEquals("group", namedURI.getGroup()); - assertEquals("file:///users.csv", namedURI.getUri().toString()); + assertEquals("users.csv", namedURI.getUri().toString()); assertEquals("users.csv", namedURI.getFile().getName()); assertEquals(0, namedURI.getParameters().size()); } diff --git a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelSupplierTest.java b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelSupplierTest.java index ef52df4..def6a86 100644 --- a/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelSupplierTest.java +++ b/freemarker-generator-cli/src/test/java/org/apache/freemarker/generator/cli/config/DataModelSupplierTest.java @@ -19,6 +19,7 @@ package org.apache.freemarker.generator.cli.config; import org.junit.Ignore; import org.junit.Test; +import java.nio.file.Paths; import java.util.Map; import static java.util.Collections.singletonList; @@ -28,6 +29,7 @@ import static org.junit.Assert.assertTrue; public class DataModelSupplierTest { + private static final String PWD = Paths.get(".").toAbsolutePath().normalize().toString(); private static final String PWD_VALUE = System.getenv("PWD"); private static final int NR_OF_ALL_ENV_VARIABLES = System.getenv().size(); @@ -105,7 +107,7 @@ public class DataModelSupplierTest { @Test public void shouldResolvePropertiesUriToDataModelVariable() { - final DataModelSupplier supplier = supplier("props=file://./src/test/data/properties/test.properties"); + final DataModelSupplier supplier = supplier("props=file:///" + PWD + "/src/test/data/properties/test.properties"); final Map<String, Object> model = supplier.get();
