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>

Reply via email to