Parse list of `DataSources` for the various tools
diff --git a/freemarker-generator-cli/CHANGELOG.md b/freemarker-generator-cli/CHANGELOG.md
index 2b564b3..c6abcd7 100644
--- a/freemarker-generator-cli/CHANGELOG.md
+++ b/freemarker-generator-cli/CHANGELOG.md
@@ -5,6 +5,7 @@
## 0.1.0-SNAPSHOT
### Added
+* Parse list of `DataSources` for the various tools
* [FREEMARKER-163] Integrate Java Faker library for test data generation
* [FREEMARKER-148] Make usage of "DataSources" more "Freemarker" like
* [FREEMARKER-149] Support multiple template transformations on the command line
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
index 1dcda46..552ae16 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/commonscsv/CommonsCSVTool.java
@@ -47,6 +47,12 @@
return parse(dataSource, defaultCSVInputFormat());
}
+ public List<CSVParser> parse(Collection<DataSource> dataSources) {
+ return dataSources.stream()
+ .map(this::parse)
+ .collect(Collectors.toList());
+ }
+
public CSVParser parse(DataSource dataSource, CSVFormat format) {
if (dataSource == null) {
throw new IllegalArgumentException("No data source was provided");
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/excel/ExcelTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/excel/ExcelTool.java
index 406a927..eff89ea 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/excel/ExcelTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/excel/ExcelTool.java
@@ -32,9 +32,11 @@
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
+import java.util.stream.Collectors;
import static org.apache.poi.ss.usermodel.Row.MissingCellPolicy.CREATE_NULL_AS_BLANK;
@@ -57,6 +59,12 @@
}
}
+ public List<Workbook> parse(Collection<DataSource> dataSources) {
+ return dataSources.stream()
+ .map(this::parse)
+ .collect(Collectors.toList());
+ }
+
/**
* Get all sheets of a workbook.
*
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/gson/GsonTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/gson/GsonTool.java
index dd8128b..96f02bd 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/gson/GsonTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/gson/GsonTool.java
@@ -23,6 +23,9 @@
import java.io.IOException;
import java.io.InputStreamReader;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
/**
* JSON processing using <a href="https://github.com/google/gson">Google GSON</a>
@@ -46,6 +49,18 @@
}
/**
+ * Parse a list of data sources.
+ *
+ * @param dataSources list of data sources
+ * @return list of parsed JSON (either as a map or list)
+ */
+ public List<Object> parse(Collection<DataSource> dataSources) {
+ return dataSources.stream()
+ .map(this::parse)
+ .collect(Collectors.toList());
+ }
+
+ /**
* Parse a JSON object string.
*
* @param json Json string
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsonpath/JsonPathTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsonpath/JsonPathTool.java
index 8bd38e7..e57898c 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsonpath/JsonPathTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/jsonpath/JsonPathTool.java
@@ -24,15 +24,26 @@
import java.io.IOException;
import java.io.InputStream;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
public class JsonPathTool {
- public DocumentContext parse(DataSource dataSource) throws IOException {
+ public DocumentContext parse(DataSource dataSource) {
try (InputStream is = dataSource.getUnsafeInputStream()) {
return JsonPath.using(configuration()).parse(is);
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to parse data source:" + dataSource, e);
}
}
+ public List<DocumentContext> parse(Collection<DataSource> dataSources) {
+ return dataSources.stream()
+ .map(this::parse)
+ .collect(Collectors.toList());
+ }
+
public DocumentContext parse(String json) {
return JsonPath.using(configuration()).parse(json);
}
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/properties/PropertiesTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/properties/PropertiesTool.java
index 6656e2d..0f520fa 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/properties/PropertiesTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/properties/PropertiesTool.java
@@ -21,7 +21,10 @@
import java.io.IOException;
import java.io.InputStream;
+import java.util.Collection;
+import java.util.List;
import java.util.Properties;
+import java.util.stream.Collectors;
public class PropertiesTool {
@@ -33,6 +36,12 @@
}
}
+ public List<Properties> parse(Collection<DataSource> dataSources) {
+ return dataSources.stream()
+ .map(this::parse)
+ .collect(Collectors.toList());
+ }
+
public Properties parse(String value) {
return PropertiesFactory.create(value);
}
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlTool.java
index efacaea..5516d0d 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/snakeyaml/SnakeYamlTool.java
@@ -22,6 +22,9 @@
import java.io.IOException;
import java.io.InputStream;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
import static org.yaml.snakeyaml.DumperOptions.FlowStyle.BLOCK;
@@ -37,6 +40,12 @@
}
}
+ public List<Object> parse(Collection<DataSource> dataSources) {
+ return dataSources.stream()
+ .map(this::parse)
+ .collect(Collectors.toList());
+ }
+
public Object parse(String yaml) {
return yaml().load(yaml);
}
diff --git a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/xml/XmlTool.java b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/xml/XmlTool.java
index ddacf1c..6404fd4 100644
--- a/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/xml/XmlTool.java
+++ b/freemarker-generator-tools/src/main/java/org/apache/freemarker/generator/tools/xml/XmlTool.java
@@ -22,6 +22,9 @@
import java.io.InputStream;
import java.io.StringReader;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
public class XmlTool {
@@ -33,6 +36,12 @@
}
}
+ public List<NodeModel> parse(Collection<DataSource> dataSources) {
+ return dataSources.stream()
+ .map(this::parse)
+ .collect(Collectors.toList());
+ }
+
public NodeModel parse(String value) {
try (StringReader reader = new StringReader(value)) {
return NodeModel.parse(new InputSource(reader));
diff --git a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/gson/GsonToolTest.java b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/gson/GsonToolTest.java
index 1914fda..965b62f 100644
--- a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/gson/GsonToolTest.java
+++ b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/gson/GsonToolTest.java
@@ -16,10 +16,14 @@
*/
package org.apache.freemarker.generator.tools.gson;
+import org.apache.freemarker.generator.base.datasource.DataSource;
+import org.apache.freemarker.generator.base.datasource.DataSourceFactory;
+import org.apache.freemarker.generator.base.mime.Mimetypes;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -104,7 +108,7 @@
@Test
@SuppressWarnings("unchecked")
- public void shouldParseJsonWithComemnts() {
+ public void shouldParseJsonWithComments() {
final Map<String, Object> map = (Map) gsonTool.parse(JSON_WITH_COMMENTS);
assertEquals("Apple", map.get("fruit"));
@@ -123,6 +127,25 @@
@Test
@SuppressWarnings("unchecked")
+ public void shouldParseDataSource() {
+ final DataSource dataSource = dataSource();
+ final Map<String, Object> map = (Map) gsonTool.parse(dataSource);
+
+ assertEquals(3, map.size());
+ assertEquals("110.0", map.get("id").toString());
+ assertEquals("Python", map.get("language"));
+ assertEquals("1900.0", map.get("price").toString());
+ }
+
+ @Test
+ public void shouldParseDataSources() {
+ final List<DataSource> dataSources = Arrays.asList(dataSource(), dataSource());
+ final List<Object> jsonList = gsonTool.parse(dataSources);
+
+ assertEquals(2, jsonList.size());
+ }
+
+ @Test
public void shouldConvertToJson() {
assertEquals(JSON_OBJECT, gsonTool.toJson(gsonTool.parse(JSON_OBJECT)));
assertEquals(JSON_OBJECT_WITH_ARRAY, gsonTool.toJson(gsonTool.parse(JSON_OBJECT_WITH_ARRAY)));
@@ -140,4 +163,8 @@
private GsonTool gsonTool() {
return new GsonTool();
}
+
+ private DataSource dataSource() {
+ return DataSourceFactory.fromString("name", "group", JSON_OBJECT, Mimetypes.MIME_APPLICATION_JSON);
+ }
}
diff --git a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/jsoup/JsoupToolTest.java b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/jsoup/JsoupToolTest.java
index a8f3a61..88f396a 100644
--- a/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/jsoup/JsoupToolTest.java
+++ b/freemarker-generator-tools/src/test/java/org/apache/freemarker/generator/tools/jsoup/JsoupToolTest.java
@@ -54,6 +54,4 @@
private JsoupTool jsoupTool() {
return new JsoupTool();
}
-
-
}