You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by sg...@apache.org on 2020/04/15 22:26:25 UTC

[freemarker-generator] 04/08: FREEMARKER-141 freemarker-cli: Expose user-supplied parameters in the data model

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 <si...@gmail.com>
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();