forked from p85126437/datagear
添加JSON文件数据集后台基本功能
This commit is contained in:
parent
65ba6e40bd
commit
0b1a61b722
|
@ -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";
|
||||
|
||||
/**
|
||||
* 设置名称。
|
||||
*
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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_},
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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" />
|
||||
|
||||
<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>
|
|
@ -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 "";
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue