添加JSON文件数据集后台基本功能

This commit is contained in:
datagear 2020-08-12 21:09:41 +08:00
parent 65ba6e40bd
commit 0b1a61b722
14 changed files with 606 additions and 8 deletions

View File

@ -28,6 +28,9 @@ public interface DataSetEntity extends DataSet, CreateUserEntity<String>, DataPe
/** 数据集类型JSON值 */
String DATA_SET_TYPE_JsonValue = "JsonValue";
/** 数据集类型JSON文件 */
String DATA_SET_TYPE_JsonFile = "JsonFile";
/**
* 设置名称
*

View File

@ -0,0 +1,155 @@
/*
* Copyright (c) 2018 datagear.tech. All Rights Reserved.
*/
/**
*
*/
package org.datagear.management.domain;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.datagear.analysis.DataSetException;
import org.datagear.analysis.DataSetProperty;
import org.datagear.analysis.support.AbstractJsonFileDataSet;
import org.datagear.util.FileUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
/**
* {@linkplain AbstractJsonFileDataSet}实体
*
* @author datagear@163.com
*
*/
public class JsonFileDataSetEntity extends AbstractJsonFileDataSet implements DataSetEntity
{
private static final long serialVersionUID = 1L;
/** JSON文件所在的目录 */
private File directory;
/** JSON文件名 */
private String fileName;
/** 展示名 */
private String displayName;
/** 创建用户 */
private User createUser;
/** 创建时间 */
private Date createTime;
/** 权限 */
private int dataPermission = PERMISSION_NOT_LOADED;
public JsonFileDataSetEntity()
{
super();
this.createTime = new Date();
}
public JsonFileDataSetEntity(String id, String name, List<DataSetProperty> properties, File directory,
String fileName, String displayName, User createUser)
{
super(id, name, properties);
this.directory = directory;
this.fileName = fileName;
this.displayName = displayName;
this.createTime = new Date();
this.createUser = createUser;
}
@JsonIgnore
public File getDirectory()
{
return directory;
}
@JsonIgnore
public void setDirectory(File directory)
{
this.directory = directory;
}
public String getFileName()
{
return fileName;
}
public void setFileName(String fileName)
{
this.fileName = fileName;
}
public String getDisplayName()
{
return displayName;
}
public void setDisplayName(String displayName)
{
this.displayName = displayName;
}
@Override
public String getDataSetType()
{
return DataSetEntity.DATA_SET_TYPE_JsonFile;
}
@Override
public void setDataSetType(String dataSetType)
{
// XXX 什么也不做不采用抛出异常的方式便于统一底层SQL查询语句
// throw new UnsupportedOperationException();
}
@Override
public User getCreateUser()
{
return createUser;
}
@Override
public void setCreateUser(User createUser)
{
this.createUser = createUser;
}
@Override
public Date getCreateTime()
{
return createTime;
}
@Override
public void setCreateTime(Date createTime)
{
this.createTime = createTime;
}
@Override
public int getDataPermission()
{
return dataPermission;
}
@Override
public void setDataPermission(int dataPermission)
{
this.dataPermission = dataPermission;
}
@Override
protected File getJsonFile(Map<String, ?> paramValues) throws DataSetException
{
String fileName = resolveTemplate(this.fileName, paramValues);
File jsonFile = FileUtil.getFile(directory, fileName);
return jsonFile;
}
}

View File

@ -7,8 +7,11 @@
*/
package org.datagear.management.service;
import java.io.File;
import org.datagear.analysis.DataSet;
import org.datagear.management.domain.DataSetEntity;
import org.datagear.management.domain.JsonFileDataSetEntity;
/**
* {@linkplain DataSetEntity}业务服务接口
@ -25,4 +28,18 @@ public interface DataSetEntityService extends DataPermissionEntityService<String
* @return
*/
DataSet getDataSet(String id);
/**
* 获取{@linkplain JsonFileDataSetEntity#getDirectory()}
*
* @return
*/
File getDataSetJsonFileDirectory();
/**
* 设置{@linkplain JsonFileDataSetEntity}使其具备执行分析的条件
*
* @param entity
*/
void inflateJsonFileDataSetEntity(JsonFileDataSetEntity entity);
}

View File

@ -7,6 +7,7 @@
*/
package org.datagear.management.service.impl;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -17,6 +18,7 @@ import org.datagear.analysis.DataSetParam;
import org.datagear.analysis.DataSetProperty;
import org.datagear.connection.ConnectionSource;
import org.datagear.management.domain.DataSetEntity;
import org.datagear.management.domain.JsonFileDataSetEntity;
import org.datagear.management.domain.JsonValueDataSetEntity;
import org.datagear.management.domain.SchemaConnectionFactory;
import org.datagear.management.domain.SqlDataSetEntity;
@ -26,6 +28,7 @@ import org.datagear.management.service.AuthorizationService;
import org.datagear.management.service.DataSetEntityService;
import org.datagear.management.service.PermissionDeniedException;
import org.datagear.management.service.SchemaService;
import org.datagear.util.FileUtil;
import org.mybatis.spring.SqlSessionTemplate;
/**
@ -45,27 +48,34 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
private AuthorizationService authorizationService;
/** 数据集资源文件存储根目录 */
private File dataSetResourceRootDirectory;
private File _dataSetJsonFileDirectory;
public DataSetEntityServiceImpl()
{
super();
}
public DataSetEntityServiceImpl(SqlSessionFactory sqlSessionFactory, ConnectionSource connectionSource,
SchemaService schemaService, AuthorizationService authorizationService)
SchemaService schemaService, AuthorizationService authorizationService, File dataSetResourceRootDirectory)
{
super(sqlSessionFactory);
this.connectionSource = connectionSource;
this.schemaService = schemaService;
this.authorizationService = authorizationService;
setDataSetResourceRootDirectory(dataSetResourceRootDirectory);
}
public DataSetEntityServiceImpl(SqlSessionTemplate sqlSessionTemplate, ConnectionSource connectionSource,
SchemaService schemaService, AuthorizationService authorizationService)
SchemaService schemaService, AuthorizationService authorizationService, File dataSetResourceRootDirectory)
{
super(sqlSessionTemplate);
this.connectionSource = connectionSource;
this.schemaService = schemaService;
this.authorizationService = authorizationService;
setDataSetResourceRootDirectory(dataSetResourceRootDirectory);
}
public ConnectionSource getConnectionSource()
@ -98,6 +108,24 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
this.authorizationService = authorizationService;
}
public File getDataSetResourceRootDirectory()
{
return dataSetResourceRootDirectory;
}
public void setDataSetResourceRootDirectory(File dataSetResourceRootDirectory)
{
this.dataSetResourceRootDirectory = dataSetResourceRootDirectory;
this._dataSetJsonFileDirectory = FileUtil.getDirectory(this.dataSetResourceRootDirectory,
DataSetEntity.DATA_SET_TYPE_JsonFile, true);
}
@Override
public File getDataSetJsonFileDirectory()
{
return _dataSetJsonFileDirectory;
}
@Override
public DataSet getDataSet(String id)
{
@ -116,6 +144,12 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
return entity;
}
@Override
public void inflateJsonFileDataSetEntity(JsonFileDataSetEntity entity)
{
entity.setDirectory(getDataSetJsonFileDirectory());
}
@Override
protected boolean add(DataSetEntity entity, Map<String, Object> params)
{
@ -130,6 +164,8 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
success = addSqlDataSetEntity((SqlDataSetEntity) entity);
else if (entity instanceof JsonValueDataSetEntity)
success = addJsonValueDataSetEntity((JsonValueDataSetEntity) entity);
else if (entity instanceof JsonFileDataSetEntity)
success = addJsonFileDataSetEntity((JsonFileDataSetEntity) entity);
}
if (success)
@ -154,6 +190,14 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
return (updateMybatis("insertJsonValueDataSetEntity", params) > 0);
}
protected boolean addJsonFileDataSetEntity(JsonFileDataSetEntity entity)
{
Map<String, Object> params = buildParamMapWithIdentifierQuoteParameter();
params.put("entity", entity);
return (updateMybatis("insertJsonFileDataSetEntity", params) > 0);
}
@Override
protected boolean update(DataSetEntity entity, Map<String, Object> params)
{
@ -168,6 +212,8 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
success = updateSqlDataSetEntity((SqlDataSetEntity) entity);
else if (entity instanceof JsonValueDataSetEntity)
success = updateJsonValueDataSetEntity((JsonValueDataSetEntity) entity);
else if (entity instanceof JsonFileDataSetEntity)
success = updateJsonFileDataSetEntity((JsonFileDataSetEntity) entity);
}
if (success)
@ -192,6 +238,14 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
return (updateMybatis("updateJsonValueDataSetEntity", params) > 0);
}
protected boolean updateJsonFileDataSetEntity(JsonFileDataSetEntity entity)
{
Map<String, Object> params = buildParamMapWithIdentifierQuoteParameter();
params.put("entity", entity);
return (updateMybatis("updateJsonFileDataSetEntity", params) > 0);
}
@Override
public String getResourceType()
{
@ -234,6 +288,8 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
obj = getSqlDataSetEntityById(obj.getId());
else if (DataSetEntity.DATA_SET_TYPE_JsonValue.equals(obj.getDataSetType()))
obj = getJsonValueDataSetEntityById(obj.getId());
else if (DataSetEntity.DATA_SET_TYPE_JsonFile.equals(obj.getDataSetType()))
obj = getJsonFileDataSetEntityById(obj.getId());
Map<String, Object> sqlParams = buildParamMapWithIdentifierQuoteParameter();
sqlParams.put("dataSetId", obj.getId());
@ -269,6 +325,19 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
return entity;
}
protected JsonFileDataSetEntity getJsonFileDataSetEntityById(String id)
{
Map<String, Object> params = buildParamMapWithIdentifierQuoteParameter();
params.put("id", id);
JsonFileDataSetEntity entity = selectOneMybatis("getJsonFileDataSetEntityById", params);
if (entity != null)
entity.setDirectory(getDataSetJsonFileDirectory());
return entity;
}
@Override
protected void addDataPermissionParameters(Map<String, Object> params, User user)
{
@ -364,7 +433,7 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
public static <T> List<T> to(List<? extends DataSetChildPO<T>> pos)
{
List<T> childs = new ArrayList<T>();
List<T> childs = new ArrayList<>();
if (pos != null)
{
@ -402,7 +471,7 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
public static List<DataSetPropertyPO> from(DataSet dataSet)
{
List<DataSetPropertyPO> pos = new ArrayList<DataSetPropertyPO>();
List<DataSetPropertyPO> pos = new ArrayList<>();
List<DataSetProperty> properties = dataSet.getProperties();
@ -445,7 +514,7 @@ public class DataSetEntityServiceImpl extends AbstractMybatisDataPermissionEntit
public static List<DataSetParamPO> from(DataSet dataSet)
{
List<DataSetParamPO> pos = new ArrayList<DataSetParamPO>();
List<DataSetParamPO> pos = new ArrayList<>();
List<DataSetParam> params = dataSet.getParams();

View File

@ -478,6 +478,7 @@ UPDATE DATAGEAR_DATA_SET SET DS_TYPE = 'SQL';
ALTER TABLE DATAGEAR_DATA_SET ALTER COLUMN DS_TYPE SET NOT NULL;
--2020-08-10
--JSON值数据集
CREATE TABLE DATAGEAR_DATA_SET_JSON_VALUE
(
@ -488,3 +489,14 @@ CREATE TABLE DATAGEAR_DATA_SET_JSON_VALUE
ALTER TABLE DATAGEAR_DATA_SET_JSON_VALUE ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE CASCADE;
--2020-08-12
--JSON文件数据集
CREATE TABLE DATAGEAR_DATA_SET_JSON_FILE
(
DS_ID VARCHAR(50) NOT NULL,
DS_FILE_NAME VARCHAR(100) NOT NULL,
DS_DISPLAY_NAME VARCHAR(100) NOT NULL,
PRIMARY KEY (DS_ID)
);
ALTER TABLE DATAGEAR_DATA_SET_JSON_FILE ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE CASCADE;

View File

@ -36,6 +36,17 @@
)
</insert>
<insert id="insertJsonFileDataSetEntity">
INSERT INTO DATAGEAR_DATA_SET_JSON_FILE
(
DS_ID, DS_FILE_NAME, DS_DISPLAY_NAME
)
VALUES
(
#{entity.id}, #{entity.fileName}, #{entity.displayName}
)
</insert>
<insert id="insertPropertyPO">
INSERT INTO DATAGEAR_DATA_SET_PROP
(
@ -82,6 +93,14 @@
DS_ID = #{entity.id}
</update>
<update id="updateJsonFileDataSetEntity">
UPDATE DATAGEAR_DATA_SET_JSON_FILE SET
DS_FILE_NAME = #{entity.fileName},
DS_DISPLAY_NAME = #{entity.displayName}
WHERE
DS_ID = #{entity.id}
</update>
<delete id="deleteById">
DELETE FROM DATAGEAR_DATA_SET
WHERE
@ -139,6 +158,19 @@
T1.${_iq_}id${_iq_} = T2.DS_ID
</select>
<select id="getJsonFileDataSetEntityById" resultType="org.datagear.management.domain.JsonFileDataSetEntity">
SELECT
T1.*,
T2.DS_FILE_NAME AS ${_iq_}fileName${_iq_},
T2.DS_DISPLAY_NAME AS ${_iq_}displayName${_iq_}
FROM
(SELECT * FROM (<include refid="queryView" />) T0 WHERE T0.${_iq_}id${_iq_} = #{id}) T1
INNER JOIN
DATAGEAR_DATA_SET_JSON_FILE T2
ON
T1.${_iq_}id${_iq_} = T2.DS_ID
</select>
<select id="getPropertyPOs" resultType="org.datagear.management.service.impl.DataSetEntityServiceImpl$DataSetPropertyPO">
SELECT
PROP_DS_ID AS ${_iq_}dataSetId${_iq_},

View File

@ -47,21 +47,21 @@ import org.datagear.dataexchange.support.SqlDataImportService;
import org.datagear.management.dbversion.DbVersionManager;
import org.datagear.management.service.AuthorizationService;
import org.datagear.management.service.DataPermissionEntityService;
import org.datagear.management.service.DataSetEntityService;
import org.datagear.management.service.HtmlChartWidgetEntityService;
import org.datagear.management.service.HtmlTplDashboardWidgetEntityService;
import org.datagear.management.service.RoleService;
import org.datagear.management.service.RoleUserService;
import org.datagear.management.service.SchemaService;
import org.datagear.management.service.DataSetEntityService;
import org.datagear.management.service.SqlHistoryService;
import org.datagear.management.service.UserService;
import org.datagear.management.service.impl.AuthorizationServiceImpl;
import org.datagear.management.service.impl.DataSetEntityServiceImpl;
import org.datagear.management.service.impl.HtmlChartWidgetEntityServiceImpl;
import org.datagear.management.service.impl.HtmlTplDashboardWidgetEntityServiceImpl;
import org.datagear.management.service.impl.RoleServiceImpl;
import org.datagear.management.service.impl.RoleUserServiceImpl;
import org.datagear.management.service.impl.SchemaServiceImpl;
import org.datagear.management.service.impl.DataSetEntityServiceImpl;
import org.datagear.management.service.impl.SqlHistoryServiceImpl;
import org.datagear.management.service.impl.UserPasswordEncoder;
import org.datagear.management.service.impl.UserServiceImpl;
@ -227,6 +227,12 @@ public class CoreConfiguration implements InitializingBean
return createDirectory(environment.getProperty("directory.resetPasswordCheckFile"), true);
}
@Bean
public File dataSetResourceRootDirectory() throws IOException
{
return createDirectory(environment.getProperty("directory.dataSetResource"), true);
}
protected File createDirectory(String directoryName, boolean createIfInexistence) throws IOException
{
DirectoryFactory bean = new DirectoryFactory();
@ -384,7 +390,8 @@ public class CoreConfiguration implements InitializingBean
public DataSetEntityService dataSetEntityService() throws Exception
{
DataSetEntityServiceImpl bean = new DataSetEntityServiceImpl(this.sqlSessionFactory().getObject(),
this.connectionSource(), this.schemaService(), this.authorizationService());
this.connectionSource(), this.schemaService(), this.authorizationService(),
this.dataSetResourceRootDirectory());
return bean;
}

View File

@ -23,6 +23,7 @@ import org.datagear.analysis.support.DataSetParamValueConverter;
import org.datagear.analysis.support.SqlDataSetSupport;
import org.datagear.analysis.support.TemplateContext;
import org.datagear.management.domain.DataSetEntity;
import org.datagear.management.domain.JsonFileDataSetEntity;
import org.datagear.management.domain.JsonValueDataSetEntity;
import org.datagear.management.domain.Schema;
import org.datagear.management.domain.SqlDataSetEntity;
@ -176,6 +177,35 @@ public class DataSetController extends AbstractSchemaConnController
return buildOperationMessageSaveSuccessResponseEntity(request, dataSet);
}
@RequestMapping("/addForJsonFile")
public String addForJsonFile(HttpServletRequest request, org.springframework.ui.Model model)
{
JsonFileDataSetEntity dataSet = new JsonFileDataSetEntity();
model.addAttribute("dataSet", dataSet);
model.addAttribute(KEY_TITLE_MESSAGE_KEY, "dataSet.addDataSet");
model.addAttribute(KEY_FORM_ACTION, "saveAddForJsonFile");
return buildFormView(dataSet.getDataSetType());
}
@RequestMapping(value = "/saveAddForJsonFile", produces = CONTENT_TYPE_JSON)
@ResponseBody
public ResponseEntity<OperationMessage> saveAddForJsonFile(HttpServletRequest request, HttpServletResponse response,
@RequestBody JsonFileDataSetEntity dataSet)
{
User user = WebUtils.getUser(request, response);
dataSet.setId(IDUtil.randomIdOnTime20());
dataSet.setCreateUser(User.copyWithoutPassword(user));
checkSaveJsonFileDataSetEntity(dataSet);
this.dataSetEntityService.add(user, dataSet);
return buildOperationMessageSaveSuccessResponseEntity(request, dataSet);
}
@RequestMapping("/edit")
public String edit(HttpServletRequest request, HttpServletResponse response, org.springframework.ui.Model model,
@RequestParam("id") String id)
@ -224,6 +254,20 @@ public class DataSetController extends AbstractSchemaConnController
return buildOperationMessageSaveSuccessResponseEntity(request, dataSet);
}
@RequestMapping(value = "/saveEditFor" + DataSetEntity.DATA_SET_TYPE_JsonFile, produces = CONTENT_TYPE_JSON)
@ResponseBody
public ResponseEntity<OperationMessage> saveEditForJsonFile(HttpServletRequest request,
HttpServletResponse response, @RequestBody JsonFileDataSetEntity dataSet)
{
User user = WebUtils.getUser(request, response);
checkSaveJsonFileDataSetEntity(dataSet);
this.dataSetEntityService.update(user, dataSet);
return buildOperationMessageSaveSuccessResponseEntity(request, dataSet);
}
@RequestMapping("/view")
public String view(HttpServletRequest request, HttpServletResponse response, org.springframework.ui.Model model,
@RequestParam("id") String id)
@ -370,6 +414,24 @@ public class DataSetController extends AbstractSchemaConnController
return result;
}
@RequestMapping(value = "/previewJsonFile", produces = CONTENT_TYPE_JSON)
@ResponseBody
public DataSetPreviewResult previewJsonFile(HttpServletRequest request, HttpServletResponse response,
org.springframework.ui.Model springModel, @RequestBody JsonFileDataSetEntityPreview preview)
throws Throwable
{
JsonFileDataSetEntity dataSet = preview.getDataSet();
getDataSetEntityService().inflateJsonFileDataSetEntity(dataSet);
Object data = dataSet.getResult(preview.getParamValues());
List<DataSetProperty> dataSetProperties = AbstractJsonDataSet.JSON_DATA_SET_SUPPORT
.resolveDataSetProperties(data);
DataSetPreviewResult result = new DataSetPreviewResult(dataSet.getFileName(), data, dataSetProperties);
return result;
}
protected String buildFormView(String dataSetType)
{
return "/analysis/dataSet/dataSet_form_" + dataSetType;
@ -506,6 +568,17 @@ public class DataSetController extends AbstractSchemaConnController
throw new IllegalInputException();
}
protected void checkSaveJsonFileDataSetEntity(JsonFileDataSetEntity dataSet)
{
checkSaveEntity(dataSet);
if (isEmpty(dataSet.getFileName()))
throw new IllegalInputException();
if (isEmpty(dataSet.getDisplayName()))
throw new IllegalInputException();
}
/**
* 数据集预览结果
*
@ -747,6 +820,46 @@ public class DataSetController extends AbstractSchemaConnController
}
}
public static class JsonFileDataSetEntityPreview
{
private JsonFileDataSetEntity dataSet;
@SuppressWarnings("unchecked")
private Map<String, Object> paramValues = Collections.EMPTY_MAP;
public JsonFileDataSetEntityPreview()
{
super();
}
public JsonFileDataSetEntityPreview(JsonFileDataSetEntity dataSet, Map<String, Object> paramValues)
{
super();
this.dataSet = dataSet;
this.paramValues = paramValues;
}
public JsonFileDataSetEntity getDataSet()
{
return dataSet;
}
public void setDataSet(JsonFileDataSetEntity dataSet)
{
this.dataSet = dataSet;
}
public Map<String, Object> getParamValues()
{
return paramValues;
}
public void setParamValues(Map<String, Object> paramValues)
{
this.paramValues = paramValues;
}
}
public static class ResolveSqlParam
{
private String sql;

View File

@ -58,6 +58,11 @@
</bean>
<bean id="resetPasswordCheckFileDirectory" factory-bean="resetPasswordCheckFileDirectoryFactory" factory-method="getDirectory" />
<bean id="dataSetResourceRootDirectoryFactory" class="org.datagear.web.util.DirectoryFactory" init-method="init">
<property name="directoryName" value="${directory.dataSetResource}" />
</bean>
<bean id="dataSetResourceRootDirectory" factory-bean="dataSetResourceRootDirectoryFactory" factory-method="getDirectory" />
<bean id="dbVersionManager" class="org.datagear.management.dbversion.DbVersionManager" init-method="upgrade">
<property name="dataSource" ref="dataSource" />
</bean>
@ -225,6 +230,7 @@
<property name="connectionSource" ref="connectionSource" />
<property name="schemaService" ref="schemaService" />
<property name="authorizationService" ref="authorizationService" />
<property name="dataSetResourceRootDirectory" ref="dataSetResourceRootDirectory" />
</bean>
<bean id="directoryHtmlChartPluginManager" class="org.datagear.analysis.support.html.DirectoryHtmlChartPluginManager">

View File

@ -20,6 +20,9 @@ directory.chartPlugin=${directory.root}/chartPlugin
#看板主目录
directory.dashboard=${directory.root}/dashboard
#数据集资源文件主目录
directory.dataSetResource=${directory.root}/dataset/resource
#数据编辑界面自定义URL构建器脚本文件
schemaUrlBuilderScriptFile=${directory.root}/db_url_builder.js

View File

@ -600,9 +600,11 @@ dataSet.name=\u540D\u79F0
dataSet.dataSetType=\u7C7B\u578B
dataSet.dataSetType.SQL=SQL
dataSet.dataSetType.JsonValue=JSON
dataSet.dataSetType.JsonFile=JSON\u6587\u4EF6
dataSet.dataSource=\u6570\u636E\u6E90
dataSet.sql=SQL\u67E5\u8BE2\u8BED\u53E5
dataSet.json=JSON\u6587\u672C
dataSet.jsonFile=JSON\u6587\u4EF6
dataSet.createUser=\u521B\u5EFA\u7528\u6237
dataSet.createTime=\u521B\u5EFA\u65F6\u95F4
dataSet.param=\u53C2\u6570

View File

@ -2208,6 +2208,14 @@ table.dataTable tbody tr .column-check .row-data-state .ui-icon{
max-height: 14em;
overflow: auto;
}
.page-form-dataSet-jsonFile{}
.page-form-dataSet-jsonFile .form-item-workspace .form-item-label{
vertical-align:top;
margin-top: 0.3em;
}
.page-form-dataSet-jsonFile .form-item-workspace .form-item-value .file-display-name{
width: 60% !important;
}
.page-form-chart .chart-plugin{
display: inline-block;

View File

@ -0,0 +1,168 @@
<#include "../../include/import_global.ftl">
<#include "../../include/html_doctype.ftl">
<#--
titleMessageKey 标题标签I18N关键字不允许null
formAction 表单提交action允许为null
readonly 是否只读操作允许为null
-->
<#assign formAction=(formAction!'#')>
<#assign readonly=(readonly!false)>
<#assign isAdd=(formAction == 'saveAdd')>
<html>
<head>
<#include "../../include/html_head.ftl">
<title><#include "../../include/html_title_app_name.ftl">
<@spring.message code='${titleMessageKey}' /> - <@spring.message code='dataSet.dataSetType.JsonFile' />
</title>
</head>
<body>
<div id="${pageId}" class="page-form page-form-dataSet page-form-dataSet-jsonFile">
<form id="${pageId}-form" action="#" method="POST">
<div class="form-head"></div>
<div class="form-content">
<#include "include/dataSet_form_html_name.ftl">
<div class="form-item form-item-workspace">
<div class="form-item-label">
<label><@spring.message code='dataSet.jsonFile' /></label>
</div>
<div class="form-item-value">
<input type="hidden" name="fileName" value="${(dataSet.fileName)!''?html}" />
<div class="workspace-editor-wrapper">
<input type="text" name="displayName" value="${(dataSet.displayName)!''?html}" class="file-display-name ui-widget ui-widget-content" readonly="readonly" />
<input type="hidden" id="${pageId}-workspaceEditor" value="${(dataSet.fileName)!''?html}" />
<div class="ui-widget ui-corner-all ui-button fileinput-button"><@spring.message code='upload' /><input type="file"></div>
<div class="upload-file-info"></div>
</div>
<#include "include/dataSet_form_html_wow.ftl" >
</div>
</div>
</div>
<div class="form-foot" style="text-align:center;">
<#if !readonly>
<input type="submit" value="<@spring.message code='save' />" class="recommended" />
&nbsp;&nbsp;
<input type="reset" value="<@spring.message code='reset' />" />
</#if>
</div>
</form>
<#include "include/dataSet_form_html_preview_pvp.ftl" >
</div>
<#include "../../include/page_js_obj.ftl" >
<#include "../../include/page_obj_form.ftl">
<#include "include/dataSet_form_js.ftl">
<script type="text/javascript">
(function(po)
{
po.dataSetProperties = <@writeJson var=dataSetProperties />;
po.dataSetParams = <@writeJson var=dataSetParams />;
$.initButtons(po.element());
po.initWorkspaceHeight();
po.fileNameEditorValue = function(value)
{
var $editor = po.element("#${pageId}-workspaceEditor");
if(value === undefined)
return $editor.val();
else
$editor.val(value);
};
po.isValueModified = function(inputValue, editorValue)
{
if(inputValue == undefined)
inputValue = po.element("input[name='fileName']").val();
if(editorValue == undefined)
editorValue = po.fileNameEditorValue();
return po.isModifiedIgnoreBlank(inputValue, editorValue);
};
po.initWorkspaceTabs();
po.initDataSetPropertiesTable(po.dataSetProperties);
po.initDataSetParamsTable(po.dataSetParams);
po.initPreviewParamValuePanel();
po.previewOptions.url = po.url("previewJsonFile");
po.previewOptions.beforePreview = function()
{
var fileName = po.fileNameEditorValue();
if(!fileName)
return false;
this.data.fileName = fileName;
};
po.previewOptions.beforeMore = function()
{
if(!this.data.fileName)
return false;
};
po.previewOptions.beforeRefresh = function()
{
if(!this.data.fileName)
return false;
};
po.previewOptions.success = function(previewResponse)
{
po.element("input[name='fileName']").val(this.data.fileName);
po.jsonEditor.focus();
};
po.initPreviewOperations();
$.validator.addMethod("dataSetJsonFileRequired", function(value, element)
{
var value = po.fileNameEditorValue();
return value.length > 0;
});
$.validator.addMethod("dataSetJsonFilePreviewRequired", function(value, element)
{
return !po.isValueModified(value);
});
po.form().validate(
{
ignore : "",
rules :
{
"name" : "required",
"fileName" : {"dataSetJsonFileRequired": true, "dataSetJsonFilePreviewRequired": true, "dataSetPropertiesRequired": true}
},
messages :
{
"name" : "<@spring.message code='validation.required' />",
"fileName" :
{
"dataSetJsonFileRequired": "<@spring.message code='validation.required' />",
"dataSetJsonFilePreviewRequired": "<@spring.message code='dataSet.validation.previewRequired' />",
"dataSetPropertiesRequired": "<@spring.message code='dataSet.validation.propertiesRequired' />"
}
},
submitHandler : function(form)
{
var formData = $.formToJson(form);
formData["properties"] = po.getFormDataSetProperties();
formData["params"] = po.getFormDataSetParams();
$.postJson("${contextPath}/analysis/dataSet/${formAction}", formData,
function(response)
{
po.pageParamCallAfterSave(true, response.data);
});
},
errorPlacement : function(error, element)
{
error.appendTo(element.closest(".form-item-value"));
}
});
})
(${pageId});
</script>
</body>
</html>

View File

@ -40,6 +40,7 @@ boolean readonly 是否只读操作默认为false
<ul class="add-button-list">
<li addURL="addForSql"><div><@spring.message code='dataSet.dataSetType.SQL' /></div></li>
<li addURL="addForJsonValue"><div><@spring.message code='dataSet.dataSetType.JsonValue' /></div></li>
<li addURL="addForJsonFile"><div><@spring.message code='dataSet.dataSetType.JsonFile' /></div></li>
</ul>
</div>
</div>
@ -190,6 +191,8 @@ boolean readonly 是否只读操作默认为false
return "<@spring.message code='dataSet.dataSetType.SQL' />";
else if("${DataSetEntity.DATA_SET_TYPE_JsonValue}" == data)
return "<@spring.message code='dataSet.dataSetType.JsonValue' />";
else if("${DataSetEntity.DATA_SET_TYPE_JsonFile}" == data)
return "<@spring.message code='dataSet.dataSetType.JsonFile' />";
else
return "";
};