[analysis]添加ResolvableDataSet类,用于为简化数据集预览功能提供支持

This commit is contained in:
datagear 2020-08-14 10:26:39 +08:00
parent 6327879a00
commit 92ebe89e9e
10 changed files with 218 additions and 15 deletions

View File

@ -27,6 +27,10 @@ public interface DataSet extends Identifiable
* <p>
* 属性列表描述{@linkplain #getResult(Map)}返回的{@linkplain DataSetResult#getData()}的对象结构
* </p>
* <p>
* 属性列表并不一定与{@linkplain DataSetResult#getData()}的对象结构严格一致
* 通常是{@linkplain DataSetResult#getData()}对象包含相同或者更多的属性
* </p>
*
* @return
*/

View File

@ -0,0 +1,31 @@
/*
* Copyright (c) 2018 datagear.tech. All Rights Reserved.
*/
/**
*
*/
package org.datagear.analysis;
import java.util.Map;
/**
* 可解析{@linkplain DataSetResult}
* <p>
* 调用{@linkplain #resolve(Map)}无需预先设置{@linkplain #getProperties()}
* </p>
*
* @author datagear@163.com
*
*/
public interface ResolvableDataSet extends DataSet
{
/**
* 解析{@linkplain ResolvedDataSetResult}
*
* @param paramValues
* @return
* @throws DataSetException
*/
ResolvedDataSetResult resolve(Map<String, ?> paramValues) throws DataSetException;
}

View File

@ -0,0 +1,54 @@
/*
* Copyright (c) 2018 datagear.tech. All Rights Reserved.
*/
/**
*
*/
package org.datagear.analysis;
import java.util.List;
/**
* 数据集解析结果
*
* @author datagear@163.com
*
*/
public class ResolvedDataSetResult
{
private DataSetResult result;
private List<DataSetProperty> properties;
public ResolvedDataSetResult()
{
}
public ResolvedDataSetResult(DataSetResult result, List<DataSetProperty> properties)
{
super();
this.result = result;
this.properties = properties;
}
public DataSetResult getResult()
{
return result;
}
public void setResult(DataSetResult result)
{
this.result = result;
}
public List<DataSetProperty> getProperties()
{
return properties;
}
public void setProperties(List<DataSetProperty> properties)
{
this.properties = properties;
}
}

View File

@ -7,9 +7,15 @@
*/
package org.datagear.analysis.support;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.datagear.analysis.DataSetException;
import org.datagear.analysis.DataSetProperty;
import org.datagear.analysis.DataSetResult;
import org.datagear.analysis.ResolvableDataSet;
import org.datagear.analysis.ResolvedDataSetResult;
/**
* 抽象JSON数据集
@ -17,7 +23,7 @@ import org.datagear.analysis.DataSetProperty;
* @author datagear@163.com
*
*/
public abstract class AbstractJsonDataSet extends AbstractFmkTemplateDataSet
public abstract class AbstractJsonDataSet extends AbstractFmkTemplateDataSet implements ResolvableDataSet
{
public static final JsonDataSetSupport JSON_DATA_SET_SUPPORT = new JsonDataSetSupport();
@ -26,6 +32,12 @@ public abstract class AbstractJsonDataSet extends AbstractFmkTemplateDataSet
super();
}
@SuppressWarnings("unchecked")
public AbstractJsonDataSet(String id, String name)
{
super(id, name, Collections.EMPTY_LIST);
}
public AbstractJsonDataSet(String id, String name, List<DataSetProperty> properties)
{
super(id, name, properties);
@ -35,4 +47,13 @@ public abstract class AbstractJsonDataSet extends AbstractFmkTemplateDataSet
{
return JSON_DATA_SET_SUPPORT;
}
@Override
public ResolvedDataSetResult resolve(Map<String, ?> paramValues) throws DataSetException
{
DataSetResult result = getResult(paramValues);
List<DataSetProperty> properties = getJsonDataSetSupport().resolveDataSetProperties(result.getData());
return new ResolvedDataSetResult(result, properties);
}
}

View File

@ -33,6 +33,11 @@ public abstract class AbstractJsonFileDataSet extends AbstractJsonSourceDataSet
super();
}
public AbstractJsonFileDataSet(String id, String name)
{
super(id, name);
}
public AbstractJsonFileDataSet(String id, String name, List<DataSetProperty> properties)
{
super(id, name, properties);

View File

@ -32,6 +32,11 @@ public abstract class AbstractJsonSourceDataSet extends AbstractJsonDataSet
super();
}
public AbstractJsonSourceDataSet(String id, String name)
{
super(id, name);
}
public AbstractJsonSourceDataSet(String id, String name, List<DataSetProperty> properties)
{
super(id, name, properties);

View File

@ -32,6 +32,12 @@ public class JsonValueDataSet extends AbstractJsonDataSet
super();
}
public JsonValueDataSet(String id, String name, String value)
{
super(id, name);
this.value = value;
}
public JsonValueDataSet(String id, String name, List<DataSetProperty> properties, String value)
{
super(id, name, properties);

View File

@ -27,6 +27,12 @@ public class SimpleJsonFileDataSet extends AbstractJsonFileDataSet
super();
}
public SimpleJsonFileDataSet(String id, String name, File file)
{
super(id, name);
this.file = file;
}
public SimpleJsonFileDataSet(String id, String name, List<DataSetProperty> properties, File file)
{
super(id, name, properties);

View File

@ -17,6 +17,8 @@ import org.datagear.analysis.DataSet;
import org.datagear.analysis.DataSetException;
import org.datagear.analysis.DataSetProperty;
import org.datagear.analysis.DataSetResult;
import org.datagear.analysis.ResolvableDataSet;
import org.datagear.analysis.ResolvedDataSetResult;
import org.datagear.util.JdbcUtil;
import org.datagear.util.QueryResultSet;
import org.datagear.util.Sql;
@ -31,7 +33,7 @@ import org.datagear.util.resource.ConnectionFactory;
* @author datagear@163.com
*
*/
public class SqlDataSet extends AbstractFmkTemplateDataSet
public class SqlDataSet extends AbstractFmkTemplateDataSet implements ResolvableDataSet
{
protected static final SqlDataSetSupport SQL_DATA_SET_SUPPORT = new SqlDataSetSupport();
@ -74,6 +76,32 @@ public class SqlDataSet extends AbstractFmkTemplateDataSet
@Override
public DataSetResult getResult(Map<String, ?> paramValues) throws DataSetException
{
List<DataSetProperty> properties = getProperties();
if (properties == null || properties.isEmpty())
throw new DataSetException("[getProperties()] must not be empty");
ResolvedDataSetResult result = getResolvedDataSetResult(paramValues, properties);
return result.getResult();
}
@Override
public ResolvedDataSetResult resolve(Map<String, ?> paramValues) throws DataSetException
{
return getResolvedDataSetResult(paramValues, null);
}
/**
*
* @param paramValues
* @param properties
* 允许为{@code null}此时会自动解析
* @return
* @throws DataSetException
*/
protected ResolvedDataSetResult getResolvedDataSetResult(Map<String, ?> paramValues,
List<DataSetProperty> properties) throws DataSetException
{
String sql = resolveTemplate(getSql(), paramValues);
@ -89,23 +117,57 @@ public class SqlDataSet extends AbstractFmkTemplateDataSet
throw new SqlDataSetConnectionException(e);
}
Sql sqlObj = Sql.valueOf(sql);
QueryResultSet qrs = null;
try
{
return getResult(cn, sql);
qrs = getSqlDataSetSupport().executeQuery(cn, sqlObj, ResultSet.TYPE_FORWARD_ONLY);
ResultSet rs = qrs.getResultSet();
if (properties == null || properties.isEmpty())
properties = getSqlDataSetSupport().resolveDataSetProperties(cn, rs, null);
List<Map<String, ?>> data = getSqlDataSetSupport().resolveResultData(cn, rs, properties);
DataSetResult result = new DataSetResult(data);
return new ResolvedDataSetResult(result, properties);
}
catch (SQLException e)
{
throw new SqlDataSetSqlExecutionException(sql, e);
}
finally
{
try
{
getConnectionFactory().release(cn);
QueryResultSet.close(qrs);
}
catch (Exception e)
finally
{
try
{
getConnectionFactory().release(cn);
}
catch (Exception e)
{
}
}
}
}
protected DataSetResult getResult(Connection cn, String sql) throws DataSetException
/**
*
* @param cn
* @param sql
* @param properties
* 允许为{@code null}此时会自动解析
* @return
* @throws DataSetException
*/
protected ResolvedDataSetResult getResolvedDataSetResult(Connection cn, String sql,
List<DataSetProperty> properties) throws DataSetException
{
Sql sqlObj = Sql.valueOf(sql);
@ -114,7 +176,15 @@ public class SqlDataSet extends AbstractFmkTemplateDataSet
try
{
qrs = getSqlDataSetSupport().executeQuery(cn, sqlObj, ResultSet.TYPE_FORWARD_ONLY);
return toDataSetResult(cn, qrs.getResultSet());
ResultSet rs = qrs.getResultSet();
if (properties == null || properties.isEmpty())
properties = getSqlDataSetSupport().resolveDataSetProperties(cn, rs, null);
List<Map<String, ?>> data = getSqlDataSetSupport().resolveResultData(cn, rs, properties);
DataSetResult result = new DataSetResult(data);
return new ResolvedDataSetResult(result, properties);
}
catch (SQLException e)
{
@ -126,14 +196,6 @@ public class SqlDataSet extends AbstractFmkTemplateDataSet
}
}
public DataSetResult toDataSetResult(Connection cn, ResultSet rs) throws SQLException
{
List<Map<String, ?>> data = getSqlDataSetSupport().resolveResultData(cn, rs, getProperties());
DataSetResult result = new DataSetResult(data);
return result;
}
protected SqlDataSetSupport getSqlDataSetSupport()
{
return SQL_DATA_SET_SUPPORT;

View File

@ -90,6 +90,9 @@ public class QueryResultSet
/**
* 关闭
* <p>
* 此方法不会抛出任何{@linkplain Throwable}
* </p>
*/
public void close()
{
@ -100,6 +103,12 @@ public class QueryResultSet
JdbcUtil.closeStatement(this.statement);
}
/**
* 关闭
* <p>
* 此方法不会抛出任何{@linkplain Throwable}
* </p>
*/
public static void close(QueryResultSet qrs)
{
if (qrs != null)