This is an automated email from the ASF dual-hosted git repository.

sgoeschl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git


The following commit(s) were added to refs/heads/master by this push:
     new 3eca7e1  Change "DataSource#location" to "DataSource#uri" and support 
data sources based on environment variables
3eca7e1 is described below

commit 3eca7e128c9fc483e62e3ddb151a5c5b1dc8dd74
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Sat Mar 21 15:23:47 2020 +0100

    Change "DataSource#location" to "DataSource#uri" and support data sources 
based on environment variables
---
 .../base/datasource/DataSourceFactory.java         |  6 +++--
 .../base/datasource/DataSourcesSupplier.java       | 12 ++++-----
 .../freemarker/generator/base/uri/NamedUri.java    |  1 -
 .../datasource/DataSourceFactoryTest.java          | 17 +++++++++++-
 .../datasource/DataSourcesSupplierTest.java        | 31 +++++++++++++++-------
 .../site/sample/ftl/nginx/nginx.conf.ftl           |  9 +++++++
 .../site/sample/ftl/nginx/nginx.env                |  3 +++
 .../user.properties}                               |  0
 .../user.properties}                               |  0
 .../user.properties}                               |  0
 .../user.properties}                               |  0
 .../freemarker/generator/cli/ManualTest.java       |  4 ++-
 12 files changed, 62 insertions(+), 21 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 cfddab1..95e7e68 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
@@ -59,10 +59,12 @@ public class DataSourceFactory {
 
         if (UriUtils.isHttpURI(uri)) {
             final URL url = toURL(uri);
-            return fromUrl(url.getHost(), group, url, charset);
+            final String name = namedUri.getNameOrElse(url.getHost());
+            return fromUrl(name, group, url, charset);
         } else if (UriUtils.isFileUri(uri)) {
             final File file = namedUri.getFile();
-            return fromFile(file.getName(), group, file, charset);
+            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);
             final String name = StringUtils.firstNonEmpty(namedUri.getName(), 
key, "env");
diff --git 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
index 54e0291..a514b8a 100644
--- 
a/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
+++ 
b/freemarker-generator-base/src/main/java/org/apache/freemarker/generator/base/datasource/DataSourcesSupplier.java
@@ -21,6 +21,7 @@ import org.apache.freemarker.generator.base.uri.NamedUri;
 import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
 import org.apache.freemarker.generator.base.util.Validate;
 
+import java.io.File;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -88,7 +89,7 @@ public class DataSourcesSupplier implements 
Supplier<List<DataSource>> {
             } else if (isEnvUri(source)) {
                 return singletonList(resolveEnvironment(source));
             } else {
-                return resolveFile(source, include, exclude, charset);
+                return resolveFileOrDirectory(source, include, exclude, 
charset);
             }
         } catch (RuntimeException e) {
             throw new RuntimeException("Unable to create the data source: " + 
source, e);
@@ -99,14 +100,13 @@ public class DataSourcesSupplier implements 
Supplier<List<DataSource>> {
         return DataSourceFactory.create(source);
     }
 
-    private static List<DataSource> resolveFile(String source, String include, 
String exclude, Charset charset) {
+    private static List<DataSource> resolveFileOrDirectory(String source, 
String include, String exclude, Charset charset) {
         final NamedUri namedUri = NamedUriStringParser.parse(source);
         final String path = namedUri.getFile().getPath();
-        final String name = getDataSourceName(namedUri);
         final String group = namedUri.getGroupOrElse(DEFAULT_GROUP);
         final Charset currCharset = getCharsetOrElse(namedUri, charset);
         return fileResolver(path, include, exclude).get().stream()
-                .map(file -> DataSourceFactory.fromFile(name, group, file, 
currCharset))
+                .map(file -> 
DataSourceFactory.fromFile(getDataSourceName(namedUri, file), group, file, 
currCharset))
                 .collect(toList());
     }
 
@@ -131,11 +131,11 @@ public class DataSourcesSupplier implements 
Supplier<List<DataSource>> {
         return value.contains("env:///");
     }
 
-    private static String getDataSourceName(NamedUri namedUri) {
+    private static String getDataSourceName(NamedUri namedUri, File file) {
         if (namedUri.hasName()) {
             return namedUri.getName();
         } else {
-            return namedUri.getFile().getName();
+            return file.getName();
         }
     }
 }
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 8eb7382..39efcad 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,7 +16,6 @@
  */
 package org.apache.freemarker.generator.base.uri;
 
-import org.apache.freemarker.generator.base.util.StringUtils;
 import org.apache.freemarker.generator.base.util.UriUtils;
 
 import java.io.File;
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 13ef213..d8b7b4b 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
@@ -16,9 +16,10 @@
  */
 package org.apache.freemarker.generator.datasource;
 
-import org.apache.freemarker.generator.base.activation.Mimetypes;
 import org.apache.freemarker.generator.base.datasource.DataSource;
 import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
+import org.apache.freemarker.generator.base.uri.NamedUri;
+import org.apache.freemarker.generator.base.uri.NamedUriStringParser;
 import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
@@ -40,6 +41,8 @@ public class DataSourceFactoryTest {
     private static final String ANY_FILE_URI = "file:///pom.xml";
     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";;
+
 
     @Test
     public void shouldCreateDataSourceFromFile() throws IOException {
@@ -97,4 +100,16 @@ public class DataSourceFactoryTest {
         
assertTrue(dataSource.getUri().toString().startsWith("inputstream:///"));
         assertEquals(ANY_TEXT, dataSource.getText());
     }
+
+    @Test
+    public void shouldCreateDataSourceFromURL() throws IOException {
+        final NamedUri namedUri = 
NamedUriStringParser.parse(ANY_NAMED_URL_STRING);
+        final DataSource dataSource = 
DataSourceFactory.fromNamedUri(ANY_NAMED_URL_STRING);
+
+        assertEquals(namedUri.getName(), dataSource.getName());
+        assertEquals(namedUri.getGroup(), dataSource.getGroup());
+        assertEquals(UTF_8, dataSource.getCharset());
+        assertEquals(namedUri.getUri().toString(), 
dataSource.getUri().toString());
+    }
+
 }
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 2bc5d73..68e6662 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
@@ -27,12 +27,12 @@ import java.util.List;
 import static java.util.Collections.singletonList;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 public class DataSourcesSupplierTest {
 
     private static final String NO_EXCLUDE = null;
-    private static final String ANY_DIRECTORY = "./src/test/data";
-    private static final String ANY_ENVIRONMENT_VARIABLE = "PATH";
+    private static final String DATA_DIRECTORY = "./src/test/data";
 
     @Test
     public void shouldResolveSingleFile() {
@@ -60,18 +60,18 @@ public class DataSourcesSupplierTest {
 
     @Test
     public void shouldResolveDirectory() {
-        assertEquals(4, supplier(ANY_DIRECTORY, null, null).get().size());
-        assertEquals(4, supplier(ANY_DIRECTORY, "", null).get().size());
-        assertEquals(4, supplier(ANY_DIRECTORY, "*", null).get().size());
-        assertEquals(4, supplier(ANY_DIRECTORY, "*.*", null).get().size());
-        assertEquals(2, supplier(ANY_DIRECTORY, "*.csv", null).get().size());
-        assertEquals(1, supplier(ANY_DIRECTORY, "*.t*", null).get().size());
-        assertEquals(0, supplier(ANY_DIRECTORY, "*.bin", null).get().size());
+        assertEquals(4, supplier(DATA_DIRECTORY, null, null).get().size());
+        assertEquals(4, supplier(DATA_DIRECTORY, "", null).get().size());
+        assertEquals(4, supplier(DATA_DIRECTORY, "*", null).get().size());
+        assertEquals(4, supplier(DATA_DIRECTORY, "*.*", null).get().size());
+        assertEquals(2, supplier(DATA_DIRECTORY, "*.csv", null).get().size());
+        assertEquals(1, supplier(DATA_DIRECTORY, "*.t*", null).get().size());
+        assertEquals(0, supplier(DATA_DIRECTORY, "*.bin", null).get().size());
     }
 
     @Test
     public void shouldResolveFilesAndDirectory() {
-        final List<String> sources = Arrays.asList("pom.xml", "README.md", 
ANY_DIRECTORY);
+        final List<String> sources = Arrays.asList("pom.xml", "README.md", 
DATA_DIRECTORY);
 
         assertEquals(6, supplier(sources, null, null).get().size());
         assertEquals(6, supplier(sources, "", null).get().size());
@@ -90,6 +90,17 @@ public class DataSourcesSupplierTest {
     }
 
     @Test
+    public void shouldUseFileNameForDataSourceWhenResolvingDirectory() {
+        final List<DataSource> dataSources = supplier(DATA_DIRECTORY, 
"*.properties", NO_EXCLUDE).get();
+
+        final DataSource dataSource = dataSources.get(0);
+
+        assertEquals(1, dataSources.size());
+        assertEquals("test.properties", dataSource.getName());
+        
assertTrue(dataSource.getUri().getPath().contains("src/test/data/properties/test.properties"));
+    }
+
+    @Test
     public void shouldResolveEnvironmentVariable() {
         assertEquals(1, supplier("env:///PATH", "*", NO_EXCLUDE).get().size());
         assertEquals(1, supplier("path=env:///PATH", "*", 
NO_EXCLUDE).get().size());
diff --git a/freemarker-generator-cli/site/sample/ftl/nginx/nginx.conf.ftl 
b/freemarker-generator-cli/site/sample/ftl/nginx/nginx.conf.ftl
new file mode 100644
index 0000000..41105cb
--- /dev/null
+++ b/freemarker-generator-cli/site/sample/ftl/nginx/nginx.conf.ftl
@@ -0,0 +1,9 @@
+<#assign env = PropertiesTool.parse(DataSources.get(0))>
+
+server {
+  listen 80;
+  server_name ${env.NGINX_HOSTNAME};
+
+  root ${env.NGINX_WEBROOT};
+  index index.htm;
+}
diff --git a/freemarker-generator-cli/site/sample/ftl/nginx/nginx.env 
b/freemarker-generator-cli/site/sample/ftl/nginx/nginx.env
new file mode 100644
index 0000000..94973df
--- /dev/null
+++ b/freemarker-generator-cli/site/sample/ftl/nginx/nginx.env
@@ -0,0 +1,3 @@
+NGINX_HOSTNAME=localhost
+NGINX_WEBROOT=/var/www/project
+NGINX_LOGS=/var/log/nginx/
\ No newline at end of file
diff --git 
a/freemarker-generator-cli/site/sample/properties/user_0001.properties 
b/freemarker-generator-cli/site/sample/properties/user_0001/user.properties
similarity index 100%
rename from freemarker-generator-cli/site/sample/properties/user_0001.properties
rename to 
freemarker-generator-cli/site/sample/properties/user_0001/user.properties
diff --git 
a/freemarker-generator-cli/site/sample/properties/user_0002.properties 
b/freemarker-generator-cli/site/sample/properties/user_0002/user.properties
similarity index 100%
rename from freemarker-generator-cli/site/sample/properties/user_0002.properties
rename to 
freemarker-generator-cli/site/sample/properties/user_0002/user.properties
diff --git 
a/freemarker-generator-cli/site/sample/properties/user_0003.properties 
b/freemarker-generator-cli/site/sample/properties/user_0003/user.properties
similarity index 100%
rename from freemarker-generator-cli/site/sample/properties/user_0003.properties
rename to 
freemarker-generator-cli/site/sample/properties/user_0003/user.properties
diff --git 
a/freemarker-generator-cli/site/sample/properties/user_0004.properties 
b/freemarker-generator-cli/site/sample/properties/user_0004/user.properties
similarity index 100%
rename from freemarker-generator-cli/site/sample/properties/user_0004.properties
rename to 
freemarker-generator-cli/site/sample/properties/user_0004/user.properties
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 6df1d79..8eb44cf 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
@@ -37,7 +37,9 @@ public class ManualTest {
     // 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#charset=UTF-16 
google:www=https://www.google.com?foo=bar#contenttype=application/json";;
-    private static final String CMD = "-b ./src/test -t templates/info.ftl -d 
env:///";
+    // private static final String CMD = "-b ./src/test -t templates/info.ftl 
-d :user=site/sample/properties -d contract=site/sample/csv/contract.csv";
+    // private static final String CMD = "-b ./src/test -t 
site/sample/ftl/nginx/nginx.conf.ftl -d env=site/sample/ftl/nginx/nginx.env";
+    private static final String CMD = "-b ./src/test -t templates/info.ftl -d 
env=site/sample/ftl/nginx/nginx.env";
 
     public static void main(String[] args) {
         Main.execute(toArgs(CMD));

Reply via email to