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