This is an automated email from the ASF dual-hosted git repository.
sgoeschl pushed a commit to branch FREEMARKER-195
in repository https://gitbox.apache.org/repos/asf/freemarker-generator.git
The following commit(s) were added to refs/heads/FREEMARKER-195 by this push:
new b5dc2a8 FREEMARKER-195 [freemarker-generator] Tweak the DataSources
API
b5dc2a8 is described below
commit b5dc2a80dbfc8f4b221045d5c2477619ee065036
Author: Siegfried Goeschl <[email protected]>
AuthorDate: Thu Oct 7 08:43:31 2021 +0200
FREEMARKER-195 [freemarker-generator] Tweak the DataSources API
---
.../generator/base/datasource/DataSources.java | 30 +++++++++--
.../generator/datasource/DataSourcesTest.java | 42 +++++++--------
.../src/app/examples/templates/datasources.ftl | 10 ++--
.../app/templates/freemarker-generator/info.ftl | 60 +++++++++++-----------
4 files changed, 82 insertions(+), 60 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 77b8a4a..d108731 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
@@ -60,7 +60,7 @@ public class DataSources implements Closeable {
}
/**
- * Get a list of unique metadata value for all data sources.
+ * Get a list of distinct metadata values for all data sources.
*
* @param key key of the metadata part
* @return list of metadata values
@@ -74,7 +74,7 @@ public class DataSources implements Closeable {
}
/**
- * Get a list of unique group names of all data sources.
+ * Get a list of distinct group names of all data sources.
*
* @return list of group names
*/
@@ -105,6 +105,15 @@ public class DataSources implements Closeable {
}
/**
+ * Get an array representation of the underlying data sources.
+ *
+ * @return array of data sources
+ */
+ public DataSource[] toArray() {
+ return dataSources.toArray(new DataSource[0]);
+ }
+
+ /**
* Get a list representation of the underlying data sources.
*
* @return list of data sources
@@ -146,7 +155,7 @@ public class DataSources implements Closeable {
* @return data source
*/
public DataSource get(String name) {
- final List<DataSource> list = find(name);
+ final List<DataSource> list = findByName(name);
if (list.isEmpty()) {
throw new IllegalArgumentException("Data source not found : " +
name);
@@ -166,7 +175,7 @@ public class DataSources implements Closeable {
* @return list of matching data sources
* @see <a
href="https://commons.apache.org/proper/commons-io/javadocs/api-2.7/org/apache/commons/io/FilenameUtils.html#wildcardMatch-java.lang.String-java.lang.String-">Apache
Commons IO</a>
*/
- public List<DataSource> find(String wildcard) {
+ public List<DataSource> findByName(String wildcard) {
return find(DataSource.METADATA_NAME, wildcard);
}
@@ -184,6 +193,19 @@ public class DataSources implements Closeable {
.collect(Collectors.toList());
}
+ /**
+ * Create a new <code>DataSources</code> instance consisting of
+ * data sources matching the filter.
+ *
+ * @param key metadata key to match
+ * @param wildcard the wildcard string to match against
+ * @return list of matching data sources
+ * @see <a
href="https://commons.apache.org/proper/commons-io/javadocs/api-2.7/org/apache/commons/io/FilenameUtils.html#wildcardMatch-java.lang.String-java.lang.String-">Apache
Commons IO</a>
+ */
+ public DataSources filter(String key, String wildcard) {
+ return new DataSources(find(key, wildcard));
+ }
+
@Override
public void close() {
dataSources.forEach(ClosableUtils::closeQuietly);
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 cbc2315..4bdf193 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
@@ -45,31 +45,31 @@ public class DataSourcesTest {
private static final String GROUP_PART = "group";
@Test
- public void shouldFindByName() {
+ public void shouldFindDataSourcesByName() {
try (DataSources dataSources = dataSources()) {
- assertEquals(0, dataSources.find(null).size());
- assertEquals(0, dataSources.find("").size());
- assertEquals(0, dataSources.find("*.bar").size());
- assertEquals(0, dataSources.find("foo.*").size());
- assertEquals(0, dataSources.find("foo.bar").size());
-
- assertEquals(2, dataSources.find("*.*").size());
- assertEquals(1, dataSources.find("*." +
ANY_FILE_EXTENSION).size());
- assertEquals(1, dataSources.find("*.???").size());
- assertEquals(1, dataSources.find("*om*").size());
- assertEquals(1, dataSources.find("*o*.xml").size());
-
- assertEquals(3, dataSources.find("*").size());
-
- assertEquals(2, dataSources.find("!pom.xml").size());
- assertEquals(3, dataSources.find("!").size());
- assertEquals(0, dataSources.find("!*").size());
- assertEquals(1, dataSources.find("!*.*").size());
+ assertEquals(0, dataSources.findByName(null).size());
+ assertEquals(0, dataSources.findByName("").size());
+ assertEquals(0, dataSources.findByName("*.bar").size());
+ assertEquals(0, dataSources.findByName("foo.*").size());
+ assertEquals(0, dataSources.findByName("foo.bar").size());
+
+ assertEquals(2, dataSources.findByName("*.*").size());
+ assertEquals(1, dataSources.findByName("*." +
ANY_FILE_EXTENSION).size());
+ assertEquals(1, dataSources.findByName("*.???").size());
+ assertEquals(1, dataSources.findByName("*om*").size());
+ assertEquals(1, dataSources.findByName("*o*.xml").size());
+
+ assertEquals(3, dataSources.findByName("*").size());
+
+ assertEquals(2, dataSources.findByName("!pom.xml").size());
+ assertEquals(3, dataSources.findByName("!").size());
+ assertEquals(0, dataSources.findByName("!*").size());
+ assertEquals(1, dataSources.findByName("!*.*").size());
}
}
@Test
- public void shouldFindByGroupPart() {
+ public void shouldFindDataSourcesByMetadata() {
try (DataSources dataSources = dataSources()) {
assertEquals(0, dataSources.find(GROUP_PART, null).size());
assertEquals(0, dataSources.find(GROUP_PART, "").size());
@@ -95,10 +95,10 @@ public class DataSourcesTest {
@Test
public void shouldGetAllDataSource() {
try (DataSources dataSources = dataSources()) {
-
assertEquals("unknown", dataSources.get(0).getName());
assertEquals("pom.xml", dataSources.get(1).getName());
assertEquals("server.invalid?foo=bar",
dataSources.get(2).getName());
+ assertEquals(3, dataSources.toArray().length);
assertEquals(3, dataSources.toList().size());
assertEquals(3, dataSources.toMap().size());
assertEquals(3, dataSources.size());
diff --git
a/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
b/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
index c1b1566..e00e76a 100644
--- a/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
+++ b/freemarker-generator-cli/src/app/examples/templates/datasources.ftl
@@ -22,7 +22,7 @@ dataSources?size: ${dataSources?size}
Iterate Over DataSources Using Array-style Access
==============================================================================
<#if dataSources?has_content>
-<#list 0..dataSources?size-1 as i>
+<#list 0..<dataSources?size as i>
- dataSource[${i}] ==> ${dataSources[i].name}
</#list>
<#else>
@@ -61,7 +61,7 @@ Iterate Over DataSources Using Hash Map Keys
No data sources provided ...
</#list>
-Iterate Over DataSources Using Lambda Expression
+Iterate Over DataSources Using Local Lambda Expression
==============================================================================
<#list dataSources?filter(ds -> ds.match("group", "default")) as dataSource>
- Group "default" => ${dataSource.name}
@@ -71,7 +71,7 @@ No data sources provided ...
Iterate Over DataSources Using Wildcard Search
==============================================================================
-<#list dataSources?api.find("*") as dataSource>
+<#list dataSources?api.findByName("*") as dataSource>
- ${dataSource.name}
<#else>
No data sources provided ...
@@ -81,10 +81,10 @@ Access Underlying DataSources API
==============================================================================
DataSources.getNames(): ${dataSources?api.names?size}
DataSources.getGroups(): ${dataSources?api.getGroups()?size}
-DataSources.find("*"): ${dataSources?api.find("*")?size}
+DataSources.find("name", "*"): ${dataSources?api.find("name", "*")?size}
+DataSources.find("name", "!readme"): ${dataSources?api.find("name",
"!readme")?size}
DataSources.find("uri", "*.md"): ${dataSources?api.find("uri", "*.md")?size}
DataSources.find("extension", "md"): ${dataSources?api.find("extension",
"md")?size}
-DataSources.find("name", "!readme"): ${dataSources?api.find("name",
"!readme")?size}
<#if dataSources?has_content>
<#list dataSources as dataSource>
diff --git
a/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
b/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
index a2fac8f..d5725d0 100644
--- a/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
+++ b/freemarker-generator-cli/src/app/templates/freemarker-generator/info.ftl
@@ -1,4 +1,3 @@
-<#ftl output_format="plainText" strip_whitespace=true>
<#--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -31,66 +30,67 @@ FreeMarker Command-line Parameters
==============================================================================
<#list tools.system.getCommandLineArgs() as arg>
- [#${arg?counter}] ${arg}
+[#${arg?counter}] ${arg}
</#list>
FreeMarker Generator Template Loader Directories
==============================================================================
<#list tools.system.getTemplateDirectories() as directory>
- [#${directory?counter}] ${directory}
+[#${directory?counter}] ${directory}
</#list>
FreeMarker Generator Data Model
==============================================================================
<#list .data_model?keys?sort as key>
- - ${key}<#lt>
+- ${key}<#lt>
</#list>
FreeMarker Generator Data Sources
==============================================================================
<#if dataSources?has_content>
- <#list dataSources as dataSource>
+<#list dataSources as dataSource>
- DataSource #${dataSource?counter}
-
------------------------------------------------------------------------------
- name : ${dataSource.name}
- group : ${dataSource.group}
- contentType : ${dataSource.contentType}
- fileName : ${dataSource.fileName}
- baseName : ${dataSource.baseName}
- extension : ${dataSource.extension}
- relativeFilePath : ${dataSource.relativeFilePath}
- charset : ${dataSource.charset}
- mimeType : ${dataSource.mimeType}
- uri : ${dataSource.uri}
- length : ${dataSource.length} bytes
- metadata : ${dataSource.metadata?size} entries
- </#list>
+DataSource #${dataSource?counter}
+------------------------------------------------------------------------------
+name : ${dataSource.name}
+group : ${dataSource.group}
+contentType : ${dataSource.contentType}
+fileName : ${dataSource.fileName}
+baseName : ${dataSource.baseName}
+extension : ${dataSource.extension}
+extension : ${dataSource.extension}
+relativeFilePath : ${dataSource.relativeFilePath}
+charset : ${dataSource.charset}
+mimeType : ${dataSource.mimeType}
+uri : ${dataSource.uri}
+length : ${dataSource.length} bytes
+metadata : ${dataSource.metadata?size} entries
+</#list>
<#else>
- No data sources found ...
+No data sources found ...
</#if>
FreeMarker Generator Parameters
==============================================================================
<#if tools.system.parameters?has_content>
- <#list tools.system.parameters as key,value>
- <#if value?is_hash>
- - ${key} ==> { <#list value as name,value>${name}=${value}
</#list>}
- <#else>
- - ${key} ==> ${value}
- </#if>
- </#list>
+<#list tools.system.parameters as key,value>
+<#if value?is_hash>
+- ${key} ==> { <#list value as name,value>${name}=${value} </#list>}
+<#else>
+- ${key} ==> ${value}
+</#if>
+</#list>
<#else>
- No parameters found ...
+No parameters found ...
</#if>
FreeMarker Generator Tools
==============================================================================
<#list tools?keys?sort as name>
- - ${name?right_pad(19)} : ${tools[name]}
+- ${name?right_pad(19)} : ${tools[name]}
</#list>