forked from p85126437/datagear
参数化数据集恢复为:即使没有设置参数也解析模板内容,因为有实际应用场景
This commit is contained in:
parent
2407502902
commit
10e90f4cc4
|
@ -64,6 +64,9 @@ public interface DataSet extends Identifiable
|
|||
|
||||
/**
|
||||
* 给定的参数映射表是否可用于{@linkplain #getResult(Map)}。
|
||||
* <p>
|
||||
* 通常是:{@code paramValues}包含{@linkplain #getParams()}中的所有{@linkplain DataSetParam#isRequired()}参数值。
|
||||
* </p>
|
||||
*
|
||||
* @param paramValues
|
||||
* @return
|
||||
|
@ -77,7 +80,9 @@ public interface DataSet extends Identifiable
|
|||
* </p>
|
||||
*
|
||||
* @param paramValues
|
||||
* 由{@linkplain #getParams()}所描述的参数值映射表,其关键字是{@linkplain DataSetParam#getName()}
|
||||
* 包含{@linkplain #getParams()}所描述的参数值映射表,应是符合{@linkplain #isReady(Map)}校验的,
|
||||
* 其关键字是{@linkplain DataSetParam#getName()}。
|
||||
* 参数值映射表并不要求与{@linkplain #getParams()}一一对应,通常是包含相同、或者更多的项。
|
||||
* @return
|
||||
* @throws DataSetException
|
||||
*/
|
||||
|
|
|
@ -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<String, ?> paramValues)
|
||||
{
|
||||
if (!hasParam())
|
||||
return text;
|
||||
|
||||
return resolveAsFmkTemplate(text, paramValues);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将指定文本作为Freemarker模板解析。
|
||||
* <p>
|
||||
* 注意:即使此数据集没有定义任何参数({@linkplain #hasParam()}为{@code false}),此方法也必须将{@code text}作为模板解析,因为存在如下应用场景:
|
||||
* 用户不定义数据集参数,但却定义模板内容,之后用户自行在DataSet.getResult(Map<String,?>)参数映射表中传递模板内容所须的参数值。
|
||||
* </p>
|
||||
*
|
||||
* @param text
|
||||
* @param paramValues
|
||||
|
@ -282,6 +271,9 @@ public abstract class AbstractDataSet extends AbstractIdentifiable implements Da
|
|||
*/
|
||||
protected String resolveAsFmkTemplate(String text, Map<String, ?> paramValues)
|
||||
{
|
||||
// if (!hasParam())
|
||||
// return text;
|
||||
|
||||
if (text == null)
|
||||
return null;
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ public class CsvValueDataSet extends AbstractCsvDataSet
|
|||
@Override
|
||||
protected TemplateResolvedSource<Reader> getCsvReader(Map<String, ?> paramValues) throws Throwable
|
||||
{
|
||||
String csv = resolveAsFmkTemplateIfHasParam(this.value, paramValues);
|
||||
String csv = resolveAsFmkTemplate(this.value, paramValues);
|
||||
return new TemplateResolvedSource<>(IOUtil.getReader(csv), csv);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ import freemarker.template.TemplateException;
|
|||
* 专用于数据集模板且采用Freemarker作为模板语言的{@linkplain TemplateResolver}。
|
||||
* <p>
|
||||
* 此类的{@linkplain #setDataSetTemplateStandardConfig(Configuration)}定义了很多数据集模板规范,
|
||||
* 这些规范不应被更改,因为会影响用于已定义数据集的模板。
|
||||
* 这些规范不应被更改,因为会影响用户已定义数据集的模板。
|
||||
* </p>
|
||||
*
|
||||
* @author datagear@163.com
|
||||
|
@ -39,7 +39,7 @@ public class DataSetFmkTemplateResolver implements TemplateResolver
|
|||
|
||||
public DataSetFmkTemplateResolver()
|
||||
{
|
||||
this(500);
|
||||
this(1000);
|
||||
}
|
||||
|
||||
public DataSetFmkTemplateResolver(int cacheCapacity)
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换参数值映射表,返回一个经转换的新映射表。
|
||||
* <p>
|
||||
* 注意,此方法必须遵循如下规则:如果{@code paramValues}中有未在{@code dataSetParams}中定义的项,那么它应原样写入返回映射表中。
|
||||
* 因为:对于支持<code>Freemarker</code>的{@linkplain DataSet}实现类(比如:{@linkplain SqlDataSet}),
|
||||
* 存在不定义{@linkplain DataSet#getParams()}而传递参数给内部<code>Freemarker</code>模板的应用场景。
|
||||
* </p>
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> convert(Map<String, ?> paramValues, Collection<? extends DataNameType> dataSetParams)
|
||||
throws DataValueConvertionException
|
||||
{
|
||||
return super.convert(paramValues, dataSetParams);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object convertValue(Object value, String type) throws DataValueConvertionException
|
||||
{
|
||||
|
|
|
@ -27,10 +27,15 @@ public abstract class DataValueConverter
|
|||
public static final Pattern PATTERN_DECIMAL_NUMBER = Pattern.compile("^[^\\.]+\\.[^\\.]+$");
|
||||
|
||||
/**
|
||||
* 转换数据值映射表。
|
||||
* 转换数据值映射表,返回一个经转换的新映射表。
|
||||
* <p>
|
||||
* 如果{@code nameValues}中有未在{@code dataNameTypes}中定义的项,那么它将原样写入返回映射表中。
|
||||
* </p>
|
||||
*
|
||||
* @param nameValues
|
||||
* 原始名/值映射表,允许为{@code null}
|
||||
* @param dataNameTypes
|
||||
* 名/类型集合,允许为{@code null}
|
||||
* @return
|
||||
* @throws DataValueConvertionException
|
||||
*/
|
||||
|
@ -42,17 +47,20 @@ public abstract class DataValueConverter
|
|||
|
||||
Map<String, Object> 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;
|
||||
|
|
|
@ -404,17 +404,17 @@ public class HttpDataSet extends AbstractResolvableDataSet
|
|||
|
||||
protected String resolveTemplateUri(Map<String, ?> paramValues) throws Throwable
|
||||
{
|
||||
return resolveAsFmkTemplateIfHasParam(this.uri, paramValues);
|
||||
return resolveAsFmkTemplate(this.uri, paramValues);
|
||||
}
|
||||
|
||||
protected String resolveTemplateHeaderContent(Map<String, ?> paramValues) throws Throwable
|
||||
{
|
||||
return resolveAsFmkTemplateIfHasParam(this.headerContent, paramValues);
|
||||
return resolveAsFmkTemplate(this.headerContent, paramValues);
|
||||
}
|
||||
|
||||
protected String resolveTemplateRequestContent(Map<String, ?> paramValues) throws Throwable
|
||||
{
|
||||
return resolveAsFmkTemplateIfHasParam(this.requestContent, paramValues);
|
||||
return resolveAsFmkTemplate(this.requestContent, paramValues);
|
||||
}
|
||||
|
||||
protected ClassicHttpRequest createHttpRequest(String uri) throws Throwable
|
||||
|
|
|
@ -64,7 +64,7 @@ public class JsonValueDataSet extends AbstractJsonDataSet
|
|||
@Override
|
||||
protected TemplateResolvedSource<Reader> getJsonReader(Map<String, ?> paramValues) throws Throwable
|
||||
{
|
||||
String json = resolveAsFmkTemplateIfHasParam(this.value, paramValues);
|
||||
String json = resolveAsFmkTemplate(this.value, paramValues);
|
||||
return new TemplateResolvedSource<>(IOUtil.getReader(json), json);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ public class SqlDataSet extends AbstractResolvableDataSet implements ResolvableD
|
|||
protected TemplateResolvedDataSetResult resolveResult(Map<String, ?> paramValues, List<DataSetProperty> properties)
|
||||
throws DataSetException
|
||||
{
|
||||
String sql = resolveAsFmkTemplateIfHasParam(getSql(), paramValues);
|
||||
String sql = resolveAsFmkTemplate(getSql(), paramValues);
|
||||
|
||||
Connection cn = null;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue