diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/DataSet.java b/datagear-analysis/src/main/java/org/datagear/analysis/DataSet.java index b6b6490a..f280aece 100644 --- a/datagear-analysis/src/main/java/org/datagear/analysis/DataSet.java +++ b/datagear-analysis/src/main/java/org/datagear/analysis/DataSet.java @@ -64,6 +64,9 @@ public interface DataSet extends Identifiable /** * 给定的参数映射表是否可用于{@linkplain #getResult(Map)}。 + *

+ * 通常是:{@code paramValues}包含{@linkplain #getParams()}中的所有{@linkplain DataSetParam#isRequired()}参数值。 + *

* * @param paramValues * @return @@ -77,7 +80,9 @@ public interface DataSet extends Identifiable *

* * @param paramValues - * 由{@linkplain #getParams()}所描述的参数值映射表,其关键字是{@linkplain DataSetParam#getName()} + * 包含{@linkplain #getParams()}所描述的参数值映射表,应是符合{@linkplain #isReady(Map)}校验的, + * 其关键字是{@linkplain DataSetParam#getName()}。 + * 参数值映射表并不要求与{@linkplain #getParams()}一一对应,通常是包含相同、或者更多的项。 * @return * @throws DataSetException */ diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/support/AbstractDataSet.java b/datagear-analysis/src/main/java/org/datagear/analysis/support/AbstractDataSet.java index a2687ce5..ef4400fa 100644 --- a/datagear-analysis/src/main/java/org/datagear/analysis/support/AbstractDataSet.java +++ b/datagear-analysis/src/main/java/org/datagear/analysis/support/AbstractDataSet.java @@ -258,23 +258,12 @@ public abstract class AbstractDataSet extends AbstractIdentifiable implements Da return maps; } - /** - * 只有当{@linkplain #hasParam()}为{@code true}时才将指定文本作为Freemarker模板解析。 - * - * @param text - * @param paramValues - * @return - */ - protected String resolveAsFmkTemplateIfHasParam(String text, Map paramValues) - { - if (!hasParam()) - return text; - - return resolveAsFmkTemplate(text, paramValues); - } - /** * 将指定文本作为Freemarker模板解析。 + *

+ * 注意:即使此数据集没有定义任何参数({@linkplain #hasParam()}为{@code false}),此方法也必须将{@code text}作为模板解析,因为存在如下应用场景: + * 用户不定义数据集参数,但却定义模板内容,之后用户自行在DataSet.getResult(Map<String,?>)参数映射表中传递模板内容所须的参数值。 + *

* * @param text * @param paramValues @@ -282,6 +271,9 @@ public abstract class AbstractDataSet extends AbstractIdentifiable implements Da */ protected String resolveAsFmkTemplate(String text, Map paramValues) { + // if (!hasParam()) + // return text; + if (text == null) return null; diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/support/CsvValueDataSet.java b/datagear-analysis/src/main/java/org/datagear/analysis/support/CsvValueDataSet.java index 3f8cf9b0..0cda1cc8 100644 --- a/datagear-analysis/src/main/java/org/datagear/analysis/support/CsvValueDataSet.java +++ b/datagear-analysis/src/main/java/org/datagear/analysis/support/CsvValueDataSet.java @@ -73,7 +73,7 @@ public class CsvValueDataSet extends AbstractCsvDataSet @Override protected TemplateResolvedSource getCsvReader(Map paramValues) throws Throwable { - String csv = resolveAsFmkTemplateIfHasParam(this.value, paramValues); + String csv = resolveAsFmkTemplate(this.value, paramValues); return new TemplateResolvedSource<>(IOUtil.getReader(csv), csv); } } diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/support/DataSetFmkTemplateResolver.java b/datagear-analysis/src/main/java/org/datagear/analysis/support/DataSetFmkTemplateResolver.java index 775e37f3..49447df8 100644 --- a/datagear-analysis/src/main/java/org/datagear/analysis/support/DataSetFmkTemplateResolver.java +++ b/datagear-analysis/src/main/java/org/datagear/analysis/support/DataSetFmkTemplateResolver.java @@ -25,7 +25,7 @@ import freemarker.template.TemplateException; * 专用于数据集模板且采用Freemarker作为模板语言的{@linkplain TemplateResolver}。 *

* 此类的{@linkplain #setDataSetTemplateStandardConfig(Configuration)}定义了很多数据集模板规范, - * 这些规范不应被更改,因为会影响用于已定义数据集的模板。 + * 这些规范不应被更改,因为会影响用户已定义数据集的模板。 *

* * @author datagear@163.com @@ -39,7 +39,7 @@ public class DataSetFmkTemplateResolver implements TemplateResolver public DataSetFmkTemplateResolver() { - this(500); + this(1000); } public DataSetFmkTemplateResolver(int cacheCapacity) diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/support/DataSetParamValueConverter.java b/datagear-analysis/src/main/java/org/datagear/analysis/support/DataSetParamValueConverter.java index b4fa5c4c..d9c86196 100644 --- a/datagear-analysis/src/main/java/org/datagear/analysis/support/DataSetParamValueConverter.java +++ b/datagear-analysis/src/main/java/org/datagear/analysis/support/DataSetParamValueConverter.java @@ -7,6 +7,11 @@ */ package org.datagear.analysis.support; +import java.util.Collection; +import java.util.Map; + +import org.datagear.analysis.DataNameType; +import org.datagear.analysis.DataSet; import org.datagear.analysis.DataSetParam; import org.datagear.analysis.DataSetParam.DataType; @@ -23,6 +28,21 @@ public class DataSetParamValueConverter extends DataValueConverter super(); } + /** + * 转换参数值映射表,返回一个经转换的新映射表。 + *

+ * 注意,此方法必须遵循如下规则:如果{@code paramValues}中有未在{@code dataSetParams}中定义的项,那么它应原样写入返回映射表中。 + * 因为:对于支持Freemarker的{@linkplain DataSet}实现类(比如:{@linkplain SqlDataSet}), + * 存在不定义{@linkplain DataSet#getParams()}而传递参数给内部Freemarker模板的应用场景。 + *

+ */ + @Override + public Map convert(Map paramValues, Collection dataSetParams) + throws DataValueConvertionException + { + return super.convert(paramValues, dataSetParams); + } + @Override protected Object convertValue(Object value, String type) throws DataValueConvertionException { diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/support/DataValueConverter.java b/datagear-analysis/src/main/java/org/datagear/analysis/support/DataValueConverter.java index 2c538473..0cd25858 100644 --- a/datagear-analysis/src/main/java/org/datagear/analysis/support/DataValueConverter.java +++ b/datagear-analysis/src/main/java/org/datagear/analysis/support/DataValueConverter.java @@ -27,10 +27,15 @@ public abstract class DataValueConverter public static final Pattern PATTERN_DECIMAL_NUMBER = Pattern.compile("^[^\\.]+\\.[^\\.]+$"); /** - * 转换数据值映射表。 + * 转换数据值映射表,返回一个经转换的新映射表。 + *

+ * 如果{@code nameValues}中有未在{@code dataNameTypes}中定义的项,那么它将原样写入返回映射表中。 + *

* * @param nameValues + * 原始名/值映射表,允许为{@code null} * @param dataNameTypes + * 名/类型集合,允许为{@code null} * @return * @throws DataValueConvertionException */ @@ -42,17 +47,20 @@ public abstract class DataValueConverter Map re = new HashMap<>(nameValues); - for (DataNameType dnt : dataNameTypes) + if (dataNameTypes != null) { - String name = dnt.getName(); + for (DataNameType dnt : dataNameTypes) + { + String name = dnt.getName(); - if (!nameValues.containsKey(name)) - continue; + if (!nameValues.containsKey(name)) + continue; - Object value = nameValues.get(name); - value = convert(value, dnt.getType()); + Object value = nameValues.get(name); + value = convert(value, dnt.getType()); - re.put(name, value); + re.put(name, value); + } } return re; diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/support/HttpDataSet.java b/datagear-analysis/src/main/java/org/datagear/analysis/support/HttpDataSet.java index 08ef21db..870e2429 100644 --- a/datagear-analysis/src/main/java/org/datagear/analysis/support/HttpDataSet.java +++ b/datagear-analysis/src/main/java/org/datagear/analysis/support/HttpDataSet.java @@ -404,17 +404,17 @@ public class HttpDataSet extends AbstractResolvableDataSet protected String resolveTemplateUri(Map paramValues) throws Throwable { - return resolveAsFmkTemplateIfHasParam(this.uri, paramValues); + return resolveAsFmkTemplate(this.uri, paramValues); } protected String resolveTemplateHeaderContent(Map paramValues) throws Throwable { - return resolveAsFmkTemplateIfHasParam(this.headerContent, paramValues); + return resolveAsFmkTemplate(this.headerContent, paramValues); } protected String resolveTemplateRequestContent(Map paramValues) throws Throwable { - return resolveAsFmkTemplateIfHasParam(this.requestContent, paramValues); + return resolveAsFmkTemplate(this.requestContent, paramValues); } protected ClassicHttpRequest createHttpRequest(String uri) throws Throwable diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/support/JsonValueDataSet.java b/datagear-analysis/src/main/java/org/datagear/analysis/support/JsonValueDataSet.java index d43eeaed..15915ad9 100644 --- a/datagear-analysis/src/main/java/org/datagear/analysis/support/JsonValueDataSet.java +++ b/datagear-analysis/src/main/java/org/datagear/analysis/support/JsonValueDataSet.java @@ -64,7 +64,7 @@ public class JsonValueDataSet extends AbstractJsonDataSet @Override protected TemplateResolvedSource getJsonReader(Map paramValues) throws Throwable { - String json = resolveAsFmkTemplateIfHasParam(this.value, paramValues); + String json = resolveAsFmkTemplate(this.value, paramValues); return new TemplateResolvedSource<>(IOUtil.getReader(json), json); } } diff --git a/datagear-analysis/src/main/java/org/datagear/analysis/support/SqlDataSet.java b/datagear-analysis/src/main/java/org/datagear/analysis/support/SqlDataSet.java index 45231616..311dcdd6 100644 --- a/datagear-analysis/src/main/java/org/datagear/analysis/support/SqlDataSet.java +++ b/datagear-analysis/src/main/java/org/datagear/analysis/support/SqlDataSet.java @@ -99,7 +99,7 @@ public class SqlDataSet extends AbstractResolvableDataSet implements ResolvableD protected TemplateResolvedDataSetResult resolveResult(Map paramValues, List properties) throws DataSetException { - String sql = resolveAsFmkTemplateIfHasParam(getSql(), paramValues); + String sql = resolveAsFmkTemplate(getSql(), paramValues); Connection cn = null; diff --git a/datagear-management/src/main/java/org/datagear/management/domain/CsvFileDataSetEntity.java b/datagear-management/src/main/java/org/datagear/management/domain/CsvFileDataSetEntity.java index 748c07e4..68babd6c 100644 --- a/datagear-management/src/main/java/org/datagear/management/domain/CsvFileDataSetEntity.java +++ b/datagear-management/src/main/java/org/datagear/management/domain/CsvFileDataSetEntity.java @@ -226,7 +226,7 @@ public class CsvFileDataSetEntity extends AbstractCsvFileDataSet implements Dire else if (FILE_SOURCE_TYPE_SERVER.equals(this.fileSourceType)) { // 服务器端文件名允许参数化 - String fileName = resolveAsFmkTemplateIfHasParam(this.dataSetResFileName, paramValues); + String fileName = resolveAsFmkTemplate(this.dataSetResFileName, paramValues); File directory = FileUtil.getDirectory(this.dataSetResDirectory.getDirectory(), false); file = FileUtil.getFile(directory, fileName, false); diff --git a/datagear-management/src/main/java/org/datagear/management/domain/ExcelDataSetEntity.java b/datagear-management/src/main/java/org/datagear/management/domain/ExcelDataSetEntity.java index f9895113..f2b02474 100644 --- a/datagear-management/src/main/java/org/datagear/management/domain/ExcelDataSetEntity.java +++ b/datagear-management/src/main/java/org/datagear/management/domain/ExcelDataSetEntity.java @@ -226,7 +226,7 @@ public class ExcelDataSetEntity extends AbstractExcelDataSet implements Director else if (FILE_SOURCE_TYPE_SERVER.equals(this.fileSourceType)) { // 服务器端文件名允许参数化 - String fileName = resolveAsFmkTemplateIfHasParam(this.dataSetResFileName, paramValues); + String fileName = resolveAsFmkTemplate(this.dataSetResFileName, paramValues); File directory = FileUtil.getDirectory(this.dataSetResDirectory.getDirectory(), false); file = FileUtil.getFile(directory, fileName, false); diff --git a/datagear-management/src/main/java/org/datagear/management/domain/JsonFileDataSetEntity.java b/datagear-management/src/main/java/org/datagear/management/domain/JsonFileDataSetEntity.java index f1a1c242..ecdc7f02 100644 --- a/datagear-management/src/main/java/org/datagear/management/domain/JsonFileDataSetEntity.java +++ b/datagear-management/src/main/java/org/datagear/management/domain/JsonFileDataSetEntity.java @@ -228,7 +228,7 @@ public class JsonFileDataSetEntity extends AbstractJsonFileDataSet implements Di else if (FILE_SOURCE_TYPE_SERVER.equals(this.fileSourceType)) { // 服务器端文件名允许参数化 - String fileName = resolveAsFmkTemplateIfHasParam(this.dataSetResFileName, paramValues); + String fileName = resolveAsFmkTemplate(this.dataSetResFileName, paramValues); File directory = FileUtil.getDirectory(this.dataSetResDirectory.getDirectory(), false); file = FileUtil.getFile(directory, fileName, false);