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));