添加数据集资源目录管理功能

This commit is contained in:
wodezy66 2020-09-26 17:52:12 +08:00
parent 6341c22401
commit 0c14c644ae
16 changed files with 992 additions and 45 deletions

View File

@ -0,0 +1,113 @@
/*
* Copyright 2018 datagear.tech. All Rights Reserved.
*/
package org.datagear.management.domain;
import java.util.Date;
/**
* 数据集资源目录实体
* <p>
* 文件类数据集允许选择服务器端文件需要限定用户可访问的服务端目录此类即用于定义访问目录
* </p>
*
* @author datagear@163.com
*
*/
public class DataSetResDirectory extends AbstractStringIdEntity
implements CreateUserEntity<String>, DataPermissionEntity<String>
{
private static final long serialVersionUID = 1L;
/** 授权资源类型 */
public static final String AUTHORIZATION_RESOURCE_TYPE = "DataSetDirectory";
/** 目录 */
private String directory;
/** 描述 */
private String desc = "";
/** 此模式的创建用户 */
private User createUser;
/** 此模式的创建时间 */
private Date createTime = new Date();
/** 权限 */
private int dataPermission = PERMISSION_NOT_LOADED;
public DataSetResDirectory()
{
super();
}
public DataSetResDirectory(String id, String directory, User createuUser)
{
super(id);
this.directory = directory;
this.createUser = createuUser;
}
public String getDirectory()
{
return directory;
}
public void setDirectory(String directory)
{
this.directory = directory;
}
public String getDesc()
{
return desc;
}
public void setDesc(String desc)
{
this.desc = desc;
}
@Override
public User getCreateUser()
{
return createUser;
}
@Override
public void setCreateUser(User createUser)
{
this.createUser = createUser;
}
public Date getCreateTime()
{
return createTime;
}
public void setCreateTime(Date createTime)
{
this.createTime = createTime;
}
@Override
public int getDataPermission()
{
return dataPermission;
}
@Override
public void setDataPermission(int dataPermission)
{
this.dataPermission = dataPermission;
}
@Override
public String toString()
{
return getClass().getSimpleName() + " [directory=" + directory + ", desc=" + desc + ", createUser=" + createUser
+ ", createTime=" + createTime + ", dataPermission=" + dataPermission + "]";
}
}

View File

@ -0,0 +1,19 @@
/*
* Copyright 2018 datagear.tech. All Rights Reserved.
*/
package org.datagear.management.service;
import org.datagear.management.domain.DataSetResDirectory;
/**
* {@linkplain DataSetResDirectory}业务服务接口
*
* @author datagear@163.com
*
*/
public interface DataSetResDirectoryService
extends DataPermissionEntityService<String, DataSetResDirectory>, CreateUserEntityService
{
}

View File

@ -0,0 +1,91 @@
/*
* Copyright 2018 datagear.tech. All Rights Reserved.
*/
package org.datagear.management.service.impl;
import java.util.Map;
import org.apache.ibatis.session.SqlSessionFactory;
import org.datagear.management.domain.DataSetResDirectory;
import org.datagear.management.domain.User;
import org.datagear.management.service.DataSetResDirectoryService;
import org.datagear.management.service.PermissionDeniedException;
import org.mybatis.spring.SqlSessionTemplate;
/**
* {@linkplain DataSetResDirectoryService}实现类
*
* @author datagear@163.com
*
*/
public class DataSetResDirectoryServiceImpl
extends AbstractMybatisDataPermissionEntityService<String, DataSetResDirectory>
implements DataSetResDirectoryService
{
protected static final String SQL_NAMESPACE = DataSetResDirectory.class.getName();
public DataSetResDirectoryServiceImpl()
{
super();
}
public DataSetResDirectoryServiceImpl(SqlSessionFactory sqlSessionFactory)
{
super(sqlSessionFactory);
}
public DataSetResDirectoryServiceImpl(SqlSessionTemplate sqlSessionTemplate)
{
super(sqlSessionTemplate);
}
@Override
public String getResourceType()
{
return DataSetResDirectory.AUTHORIZATION_RESOURCE_TYPE;
}
@Override
public DataSetResDirectory getByStringId(User user, String id) throws PermissionDeniedException
{
return getById(user, id);
}
@Override
public int updateCreateUserId(String oldUserId, String newUserId)
{
Map<String, Object> params = buildParamMap();
addIdentifierQuoteParameter(params);
params.put("oldUserId", oldUserId);
params.put("newUserId", newUserId);
return updateMybatis("updateCreateUserId", params);
}
@Override
protected void checkAddInput(DataSetResDirectory entity)
{
if (isBlank(entity.getId()) || isBlank(entity.getDirectory()) || isEmpty(entity.getCreateUser()))
throw new IllegalArgumentException();
}
@Override
protected void checkUpdateInput(DataSetResDirectory entity)
{
if (isBlank(entity.getId()) || isBlank(entity.getDirectory()))
throw new IllegalArgumentException();
}
@Override
protected void addDataPermissionParameters(Map<String, Object> params, User user)
{
addDataPermissionParameters(params, user, getResourceType(), false, true);
}
@Override
protected String getSqlNamespace()
{
return SQL_NAMESPACE;
}
}

View File

@ -617,3 +617,15 @@ CREATE INDEX DATAGEAR_DATA_SET_CREATE_USER_ID ON DATAGEAR_DATA_SET(DS_CREATE_USE
CREATE INDEX DATAGEAR_HTML_CHART_WIDGET_CREATE_USER_ID ON DATAGEAR_HTML_CHART_WIDGET(HCW_CREATE_USER_ID);
CREATE INDEX DATAGEAR_HTML_DASHBOARD_CREATE_USER_ID ON DATAGEAR_HTML_DASHBOARD(HD_CREATE_USER_ID);
--2020-09-26
--
CREATE TABLE DATAGEAR_DSR_DIRECTORY
(
DD_ID VARCHAR(50) NOT NULL,
DD_DIRECTORY VARCHAR(250) NOT NULL,
DD_DESC VARCHAR(500),
DD_CREATE_USER_ID VARCHAR(50),
DD_CREATE_TIME TIMESTAMP,
PRIMARY KEY (DD_ID)
);

View File

@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.datagear.management.domain.DataSetResDirectory">
<insert id="insert">
INSERT INTO DATAGEAR_DSR_DIRECTORY
(
DD_ID, DD_DIRECTORY, DD_DESC, DD_CREATE_USER_ID, DD_CREATE_TIME
)
VALUES
(
#{entity.id}, #{entity.directory}, #{entity.desc}, #{entity.createUser.id}, #{entity.createTime}
)
</insert>
<update id="update">
UPDATE DATAGEAR_DSR_DIRECTORY SET
DD_DIRECTORY = #{entity.directory},
DD_DESC = #{entity.desc}
WHERE
DD_ID = #{entity.id}
</update>
<update id="updateCreateUserId">
UPDATE DATAGEAR_DSR_DIRECTORY SET
DD_CREATE_USER_ID = #{newUserId}
WHERE
DD_CREATE_USER_ID = #{oldUserId}
</update>
<delete id="deleteById">
DELETE FROM DATAGEAR_DSR_DIRECTORY
WHERE
DD_ID = #{id}
</delete>
<select id="getById" resultType="org.datagear.management.domain.DataSetResDirectory">
SELECT
T.*
FROM
(<include refid="queryViewDataPermission" />) T
WHERE
T.${_iq_}id${_iq_} = #{id}
</select>
<select id="getDataIdPermissions" resultType="org.datagear.management.domain.DataIdPermission">
SELECT
T.DATA_ID as ${_iq_}dataId${_iq_},
T.DATA_PERMISSION as ${_iq_}dataPermission${_iq_}
FROM
(
<include refid="commonDataPermission.dataIdPermissionQueryViewHead" />
<include refid="queryViewDataPermissionId" />
<include refid="commonDataPermission.dataIdPermissionQueryViewFoot" />
) T
WHERE
<foreach item="item" collection="ids" separator=" OR ">T.DATA_ID = #{item}</foreach>
</select>
<select id="query" resultType="org.datagear.management.domain.DataSetResDirectory">
SELECT
T.*
FROM
(<include refid="queryViewDataPermission" />) T
WHERE
<include refid="queryCondition" />
<include refid="common.queryOrder" />
</select>
<select id="pagingQueryCount" resultType="int">
SELECT
COUNT(*)
FROM
(<include refid="queryViewDataPermission" />) T
WHERE
<include refid="queryCondition" />
</select>
<select id="pagingQuery" resultType="org.datagear.management.domain.DataSetResDirectory">
<include refid="common.pagingQueryHead" />
SELECT
T.*
FROM
(<include refid="queryViewDataPermission" />) T
WHERE
<include refid="queryCondition" />
<include refid="common.queryOrder" />
<include refid="common.pagingQueryFoot" />
</select>
<sql id="queryViewDataPermission">
<choose><when test="DP_CURRENT_USER == null">
<include refid="queryView" />
</when><otherwise>
SELECT
T0.*,
T1.DATA_PERMISSION as ${_iq_}dataPermission${_iq_}
FROM
(<include refid="queryView" />) T0
INNER JOIN
(
<include refid="commonDataPermission.dataIdPermissionQueryViewHead" />
<include refid="queryViewDataPermissionId" />
<include refid="commonDataPermission.dataIdPermissionQueryViewFoot" />
) T1
ON
T0.${_iq_}id${_iq_} = T1.DATA_ID
WHERE
T1.DATA_PERMISSION >= ${DP_MIN_READ_PERMISSION}
</otherwise></choose>
</sql>
<sql id="queryViewDataPermissionId">
SELECT
A.DD_ID AS DP_AUTH_DATA_ID,
A.DD_CREATE_USER_ID AS DP_AUTH_DATA_CREATOR_ID
FROM
DATAGEAR_DSR_DIRECTORY A
</sql>
<sql id="queryView">
SELECT
A.DD_ID AS ${_iq_}id${_iq_},
A.DD_DIRECTORY AS ${_iq_}directory${_iq_},
A.DD_DESC AS ${_iq_}desc${_iq_},
A.DD_CREATE_TIME AS ${_iq_}createTime${_iq_},
A.DD_CREATE_USER_ID AS ${_iq_}createUser.id${_iq_},
<include refid="common.fieldsForCreateUser" />
FROM
DATAGEAR_DSR_DIRECTORY A
LEFT JOIN
DATAGEAR_USER USR
ON
A.DD_CREATE_USER_ID = USR.USER_ID
</sql>
<sql id="queryCondition">
1 = 1
<if test="queryKeyword != null">
AND
(
${_iq_}directory${_iq_} LIKE #{queryKeyword}
OR ${_iq_}desc${_iq_} LIKE #{queryKeyword}
)
</if>
<include refid="commonDataPermission.dataFilterCondition" />
<include refid="common.queryCondition" />
</sql>
</mapper>

View File

@ -51,6 +51,7 @@ import org.datagear.management.service.AnalysisProjectService;
import org.datagear.management.service.AuthorizationService;
import org.datagear.management.service.DataPermissionEntityService;
import org.datagear.management.service.DataSetEntityService;
import org.datagear.management.service.DataSetResDirectoryService;
import org.datagear.management.service.HtmlChartWidgetEntityService;
import org.datagear.management.service.HtmlTplDashboardWidgetEntityService;
import org.datagear.management.service.RoleService;
@ -61,6 +62,7 @@ import org.datagear.management.service.UserService;
import org.datagear.management.service.impl.AnalysisProjectServiceImpl;
import org.datagear.management.service.impl.AuthorizationServiceImpl;
import org.datagear.management.service.impl.DataSetEntityServiceImpl;
import org.datagear.management.service.impl.DataSetResDirectoryServiceImpl;
import org.datagear.management.service.impl.HtmlChartWidgetEntityServiceImpl;
import org.datagear.management.service.impl.HtmlTplDashboardWidgetEntityServiceImpl;
import org.datagear.management.service.impl.RoleServiceImpl;
@ -562,6 +564,13 @@ public class CoreConfiguration implements InitializingBean
return bean;
}
@Bean
public DataSetResDirectoryService dataSetResDirectoryService() throws Exception
{
DataSetResDirectoryService bean = new DataSetResDirectoryServiceImpl(this.sqlSessionFactory().getObject());
return bean;
}
@Bean
public SqlHistoryService sqlHistoryService() throws Exception
{

View File

@ -28,6 +28,7 @@ import org.datagear.util.StringUtil;
import org.datagear.web.OperationMessage;
import org.datagear.web.convert.StringToJsonConverter;
import org.datagear.web.freemarker.WriteJsonTemplateDirectiveModel;
import org.datagear.web.util.DeliverContentTypeExceptionHandlerExceptionResolver;
import org.datagear.web.util.WebContextPath;
import org.datagear.web.util.WebUtils;
import org.datagear.web.vo.APIDDataFilterPagingQuery;
@ -323,6 +324,46 @@ public abstract class AbstractController
WebUtils.setOperationMessage(request, operationMessage);
}
/**
* 获取错误信息视图
*
* @param request
* @param response
* @return
*/
protected String getErrorView(HttpServletRequest request, HttpServletResponse response)
{
setAttributeIfIsJsonResponse(request, response);
return ERROR_PAGE_URL;
}
/**
* 设置JSON响应的错误页面属性
*
* @param request
* @param response
*/
protected void setAttributeIfIsJsonResponse(HttpServletRequest request, HttpServletResponse response)
{
String expectedContentType = DeliverContentTypeExceptionHandlerExceptionResolver.getHandlerContentType(request);
if (expectedContentType != null && !expectedContentType.isEmpty())
response.setContentType(expectedContentType);
boolean isJsonResponse = WebUtils.isJsonResponse(response);
request.setAttribute("isJsonResponse", isJsonResponse);
if (isJsonResponse)
{
OperationMessage operationMessage = getOperationMessageForHttpError(request, response);
request.setAttribute(WebUtils.KEY_OPERATION_MESSAGE,
WriteJsonTemplateDirectiveModel.toWriteJsonTemplateModel(operationMessage));
response.setContentType(CONTENT_TYPE_JSON);
}
}
/**
* 构建操作成功消息无消息内容对应的{@linkplain ResponseEntity}
* <p>

View File

@ -38,10 +38,6 @@ import org.datagear.persistence.support.NoColumnDefinedException;
import org.datagear.persistence.support.SqlParamValueSqlExpressionException;
import org.datagear.persistence.support.SqlParamValueVariableExpressionException;
import org.datagear.persistence.support.UnsupportedDialectException;
import org.datagear.web.OperationMessage;
import org.datagear.web.freemarker.WriteJsonTemplateDirectiveModel;
import org.datagear.web.util.DeliverContentTypeExceptionHandlerExceptionResolver;
import org.datagear.web.util.WebUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.ConversionException;
@ -543,46 +539,6 @@ public class ControllerAdvice extends AbstractController
LOGGER.error("", t);
}
/**
* 获取错误信息视图
*
* @param request
* @param response
* @return
*/
protected String getErrorView(HttpServletRequest request, HttpServletResponse response)
{
setAttributeIfIsJsonResponse(request, response);
return ERROR_PAGE_URL;
}
/**
* 设置JSON响应的错误页面属性
*
* @param request
* @param response
*/
protected void setAttributeIfIsJsonResponse(HttpServletRequest request, HttpServletResponse response)
{
String expectedContentType = DeliverContentTypeExceptionHandlerExceptionResolver.getHandlerContentType(request);
if (expectedContentType != null && !expectedContentType.isEmpty())
response.setContentType(expectedContentType);
boolean isJsonResponse = WebUtils.isJsonResponse(response);
request.setAttribute("isJsonResponse", isJsonResponse);
if (isJsonResponse)
{
OperationMessage operationMessage = getOperationMessageForHttpError(request, response);
request.setAttribute(WebUtils.KEY_OPERATION_MESSAGE,
WriteJsonTemplateDirectiveModel.toWriteJsonTemplateModel(operationMessage));
response.setContentType(CONTENT_TYPE_JSON);
}
}
protected String buildMessageCode(Class<? extends Throwable> clazz)
{
return buildMessageCode(clazz.getSimpleName());

View File

@ -0,0 +1,218 @@
/*
* Copyright 2018 datagear.tech. All Rights Reserved.
*/
package org.datagear.web.controller;
import java.io.File;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.datagear.management.domain.DataSetResDirectory;
import org.datagear.management.domain.User;
import org.datagear.management.service.DataSetResDirectoryService;
import org.datagear.persistence.PagingData;
import org.datagear.persistence.PagingQuery;
import org.datagear.util.FileUtil;
import org.datagear.util.IDUtil;
import org.datagear.web.OperationMessage;
import org.datagear.web.util.WebUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
* 数据集资源目录控制器
*
* @author datagear@163.com
*
*/
@Controller
@RequestMapping("/dataSetResDirectory")
public class DataSetResDirectoryController extends AbstractController
{
static
{
AuthorizationResourceMetas.registerForShare(DataSetResDirectory.AUTHORIZATION_RESOURCE_TYPE,
"dataSetResDirectory");
}
@Autowired
private DataSetResDirectoryService dataSetResDirectoryService;
public DataSetResDirectoryController()
{
super();
}
public DataSetResDirectoryService getDataSetResDirectoryService()
{
return dataSetResDirectoryService;
}
public void setDataSetResDirectoryService(DataSetResDirectoryService dataSetResDirectoryService)
{
this.dataSetResDirectoryService = dataSetResDirectoryService;
}
@ExceptionHandler(DataSetResDirectoryNotFoundException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleDataSetResDirectoryNotFoundException(HttpServletRequest request,
HttpServletResponse response, DataSetResDirectoryNotFoundException exception)
{
setOperationMessageForThrowable(request, "dataSetResDirectory.DataSetResDirectoryNotFoundException", exception,
false, exception.getDirectory());
return getErrorView(request, response);
}
@RequestMapping("/add")
public String add(HttpServletRequest request, org.springframework.ui.Model model)
{
DataSetResDirectory dataSetResDirectory = new DataSetResDirectory();
model.addAttribute("dataSetResDirectory", dataSetResDirectory);
model.addAttribute(KEY_TITLE_MESSAGE_KEY, "dataSetResDirectory.addDataSetResDirectory");
model.addAttribute(KEY_FORM_ACTION, "saveAdd");
return "/dataSetResDirectory/dataSetResDirectory_form";
}
@RequestMapping(value = "/saveAdd", produces = CONTENT_TYPE_JSON)
@ResponseBody
public ResponseEntity<OperationMessage> saveAdd(HttpServletRequest request, HttpServletResponse response,
@RequestBody DataSetResDirectory dataSetResDirectory)
{
checkSaveEntity(dataSetResDirectory);
User user = WebUtils.getUser(request, response);
dataSetResDirectory.setId(IDUtil.randomIdOnTime20());
dataSetResDirectory.setCreateUser(user);
this.dataSetResDirectoryService.add(dataSetResDirectory);
return buildOperationMessageSaveSuccessResponseEntity(request, dataSetResDirectory);
}
@RequestMapping("/edit")
public String edit(HttpServletRequest request, HttpServletResponse response, org.springframework.ui.Model model,
@RequestParam("id") String id)
{
User user = WebUtils.getUser(request, response);
DataSetResDirectory dataSetResDirectory = this.dataSetResDirectoryService.getByIdForEdit(user, id);
if (dataSetResDirectory == null)
throw new RecordNotFoundException();
model.addAttribute("dataSetResDirectory", dataSetResDirectory);
model.addAttribute(KEY_TITLE_MESSAGE_KEY, "dataSetResDirectory.editDataSetResDirectory");
model.addAttribute(KEY_FORM_ACTION, "saveEdit");
return "/dataSetResDirectory/dataSetResDirectory_form";
}
@RequestMapping(value = "/saveEdit", produces = CONTENT_TYPE_JSON)
@ResponseBody
public ResponseEntity<OperationMessage> save(HttpServletRequest request, HttpServletResponse response,
@RequestBody DataSetResDirectory dataSetResDirectory)
{
checkSaveEntity(dataSetResDirectory);
User user = WebUtils.getUser(request, response);
this.dataSetResDirectoryService.update(user, dataSetResDirectory);
return buildOperationMessageSaveSuccessResponseEntity(request, dataSetResDirectory);
}
@RequestMapping("/view")
public String view(HttpServletRequest request, HttpServletResponse response, org.springframework.ui.Model model,
@RequestParam("id") String id)
{
User user = WebUtils.getUser(request, response);
DataSetResDirectory dataSetResDirectory = this.dataSetResDirectoryService.getById(user, id);
if (dataSetResDirectory == null)
throw new RecordNotFoundException();
model.addAttribute("dataSetResDirectory", dataSetResDirectory);
model.addAttribute(KEY_TITLE_MESSAGE_KEY, "dataSetResDirectory.viewDataSetResDirectory");
model.addAttribute(KEY_READONLY, true);
return "/dataSetResDirectory/dataSetResDirectory_form";
}
@RequestMapping(value = "/delete", produces = CONTENT_TYPE_JSON)
@ResponseBody
public ResponseEntity<OperationMessage> delete(HttpServletRequest request, HttpServletResponse response,
@RequestBody String[] ids)
{
User user = WebUtils.getUser(request, response);
for (int i = 0; i < ids.length; i++)
{
String id = ids[i];
this.dataSetResDirectoryService.deleteById(user, id);
}
return buildOperationMessageDeleteSuccessResponseEntity(request);
}
@RequestMapping("/pagingQuery")
public String pagingQuery(HttpServletRequest request, HttpServletResponse response,
org.springframework.ui.Model model)
{
User user = WebUtils.getUser(request, response);
model.addAttribute("currentUser", user);
model.addAttribute(KEY_TITLE_MESSAGE_KEY, "dataSetResDirectory.manageDataSetResDirectory");
return "/dataSetResDirectory/dataSetResDirectory_grid";
}
@RequestMapping(value = "/select")
public String select(HttpServletRequest request, HttpServletResponse response, org.springframework.ui.Model model)
{
model.addAttribute(KEY_TITLE_MESSAGE_KEY, "dataSetResDirectory.selectDataSetResDirectory");
model.addAttribute(KEY_SELECT_OPERATION, true);
setIsMultipleSelectAttribute(request, model);
return "/dataSetResDirectory/dataSetResDirectory_grid";
}
@RequestMapping(value = "/pagingQueryData", produces = CONTENT_TYPE_JSON)
@ResponseBody
public PagingData<DataSetResDirectory> pagingQueryData(HttpServletRequest request, HttpServletResponse response,
final org.springframework.ui.Model springModel,
@RequestBody(required = false) PagingQuery pagingQueryParam) throws Exception
{
User user = WebUtils.getUser(request, response);
final PagingQuery pagingQuery = inflatePagingQuery(request, pagingQueryParam);
PagingData<DataSetResDirectory> pagingData = this.dataSetResDirectoryService.pagingQuery(user, pagingQuery);
return pagingData;
}
protected void checkSaveEntity(DataSetResDirectory dataSetResDirectory)
{
if (isBlank(dataSetResDirectory.getDirectory()))
throw new IllegalInputException();
File directory = FileUtil.getDirectory(dataSetResDirectory.getDirectory(), false);
if (!directory.exists())
throw new DataSetResDirectoryNotFoundException(dataSetResDirectory.getDirectory());
}
}

View File

@ -0,0 +1,55 @@
/*
* Copyright 2018 datagear.tech. All Rights Reserved.
*/
package org.datagear.web.controller;
import org.datagear.management.domain.DataSetResDirectory;
/**
* {@linkplain DataSetResDirectory#getDirectory()}未找到异常
*
* @author datagear@163.com
*
*/
public class DataSetResDirectoryNotFoundException extends IllegalInputException
{
private static final long serialVersionUID = 1L;
private String directory;
public DataSetResDirectoryNotFoundException(String directory)
{
super();
this.directory = directory;
}
public DataSetResDirectoryNotFoundException(String directory, String message)
{
super(message);
this.directory = directory;
}
public DataSetResDirectoryNotFoundException(String directory, Throwable cause)
{
super(cause);
this.directory = directory;
}
public DataSetResDirectoryNotFoundException(String directory, String message, Throwable cause)
{
super(message, cause);
this.directory = directory;
}
public String getDirectory()
{
return directory;
}
protected void setDirectory(String directory)
{
this.directory = directory;
}
}

View File

@ -274,6 +274,10 @@
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="dataSetResDirectoryService" class="org.datagear.management.service.impl.DataSetResDirectoryServiceImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="sqlHistoryService" class="org.datagear.management.service.impl.SqlHistoryServiceImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

View File

@ -60,6 +60,12 @@
<intercept-url pattern="${subContextPath}/analysis/chartPlugin/chartPluginManager.js" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER" />
<intercept-url pattern="${subContextPath}/analysis/chartPlugin/**" access="ROLE_ADMIN" />
<!-- 数据集资源目录管理 -->
<intercept-url pattern="${subContextPath}/dataSetResDirectory/view" access="#{sercurityDisableAnonymous.value ? 'ROLE_USER' : 'IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER'}" />
<intercept-url pattern="${subContextPath}/dataSetResDirectory/select" access="#{sercurityDisableAnonymous.value ? 'ROLE_USER' : 'IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER'}" />
<intercept-url pattern="${subContextPath}/dataSetResDirectory/pagingQueryData" access="#{sercurityDisableAnonymous.value ? 'ROLE_USER' : 'IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER'}" />
<intercept-url pattern="${subContextPath}/dataSetResDirectory/**" access="ROLE_ADMIN" />
<!-- 图表、看板展示功能始终允许匿名用户访问用于支持外部系统iframe嵌套场景 -->
<intercept-url pattern="${subContextPath}/analysis/chart/show/**" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER" />
<intercept-url pattern="${subContextPath}/analysis/chart/showData" access="IS_AUTHENTICATED_ANONYMOUSLY,ROLE_USER" />

View File

@ -235,6 +235,7 @@ main.manageRole=管理用户组
main.manageSchemaAuth=数据源授权
main.manageChartPlugin=管理图表插件
main.uploadChartPlugin=上传图表插件
main.manageDataSetResDirectory=管理数据集资源目录
main.personalSet=个人设置
main.changeTheme=切换肤色
main.changeTheme.light=浅色
@ -830,4 +831,17 @@ analysisProject.auth.resouceTypeLabel=数据分析项目
analysisProject.name=名称
analysisProject.desc=描述
analysisProject.createUser=创建用户
analysisProject.createTime=创建时间
analysisProject.createTime=创建时间
#数据集资源目录
dataSetResDirectory.manageDataSetResDirectory=管理数据集资源目录
dataSetResDirectory.addDataSetResDirectory=添加数据集资源目录
dataSetResDirectory.editDataSetResDirectory=编辑数据集资源目录
dataSetResDirectory.viewDataSetResDirectory=查看数据集资源目录
dataSetResDirectory.selectDataSetResDirectory=选择数据集资源目录
dataSetResDirectory.auth.resouceTypeLabel=数据集资源目录
dataSetResDirectory.directory=目录
dataSetResDirectory.desc=描述
dataSetResDirectory.createUser=创建用户
dataSetResDirectory.createTime=创建时间
dataSetResDirectory.DataSetResDirectoryNotFoundException=目录[{0}]不存在

View File

@ -0,0 +1,92 @@
<#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}' /></title>
</head>
<body>
<div id="${pageId}" class="page-form page-form-dataSetResDirectory">
<form id="${pageId}-form" action="${contextPath}/dataSetResDirectory/${formAction}" method="POST">
<div class="form-head"></div>
<div class="form-content">
<input type="hidden" name="id" value="${(dataSetResDirectory.id)!''?html}" />
<div class="form-item">
<div class="form-item-label">
<label><@spring.message code='dataSetResDirectory.directory' /></label>
</div>
<div class="form-item-value">
<input type="text" name="directory" value="${(dataSetResDirectory.directory)!''?html}" class="ui-widget ui-widget-content" />
</div>
</div>
<div class="form-item">
<div class="form-item-label">
<label><@spring.message code='dataSetResDirectory.desc' /></label>
</div>
<div class="form-item-value">
<textarea name="desc" class="ui-widget ui-widget-content">${(dataSetResDirectory.desc)!''?html}</textarea>
</div>
</div>
</div>
<div class="form-foot" style="text-align:center;">
<#if !readonly>
<input type="submit" value="<@spring.message code='save' />" class="recommended" />
</#if>
</div>
</form>
</div>
<#include "../include/page_js_obj.ftl" >
<#include "../include/page_obj_form.ftl">
<script type="text/javascript">
(function(po)
{
$.initButtons(po.element());
po.url = function(action)
{
return "${contextPath}/dataSetResDirectory/" + action;
};
<#if !readonly>
po.form().validate(
{
rules :
{
"directory" : "required"
},
messages :
{
"directory" : "<@spring.message code='validation.required' />"
},
submitHandler : function(form)
{
var data = $.formToJson(form);
$.ajaxJson($(form).attr("action"),
{
data: data,
success : function(response)
{
po.pageParamCallAfterSave(true, response.data);
}
});
},
errorPlacement : function(error, element)
{
error.appendTo(element.closest(".form-item-value"));
}
});
</#if>
})
(${pageId});
</script>
</body>
</html>

View File

@ -0,0 +1,158 @@
<#include "../include/import_global.ftl">
<#include "../include/html_doctype.ftl">
<#--
titleMessageKey 标题标签I18N关键字不允许null
selectOperation 是否选择操作允许为null
-->
<#assign selectOperation=(selectOperation!false)>
<#assign DataSetResDirectory=statics['org.datagear.management.domain.DataSetResDirectory']>
<html>
<head>
<#include "../include/html_head.ftl">
<title><#include "../include/html_title_app_name.ftl"><@spring.message code='${titleMessageKey}' /></title>
</head>
<body class="fill-parent">
<#if !isAjaxRequest>
<div class="fill-parent">
</#if>
<#include "../include/page_js_obj.ftl">
<div id="${pageId}" class="page-grid page-grid-dataSetResDirectory">
<div class="head">
<div class="search search-dataSetResDirectory">
<#include "../include/page_obj_searchform.html.ftl">
</div>
<div class="operation">
<#if selectOperation>
<input name="confirmButton" type="button" class="recommended" value="<@spring.message code='confirm' />" />
<input name="viewButton" type="button" class="view-button" value="<@spring.message code='view' />" />
<#else>
<input name="addButton" type="button" value="<@spring.message code='add' />" />
<input name="editButton" type="button" value="<@spring.message code='edit' />" />
<input name="viewButton" type="button" value="<@spring.message code='view' />" />
<#if !(currentUser.anonymous)>
<input name="shareButton" type="button" value="<@spring.message code='share' />" />
</#if>
<input name="deleteButton" type="button" value="<@spring.message code='delete' />" />
</#if>
</div>
</div>
<div class="content">
<table id="${pageId}-table" width="100%" class="hover stripe">
</table>
</div>
<div class="foot">
<div class="pagination-wrapper">
<div id="${pageId}-pagination" class="pagination"></div>
</div>
</div>
</div>
<#if !isAjaxRequest>
</div>
</#if>
<#include "../include/page_obj_searchform_js.ftl">
<#include "../include/page_obj_pagination.ftl">
<#include "../include/page_obj_grid.ftl">
<#include "../include/page_obj_data_permission.ftl" >
<script type="text/javascript">
(function(po)
{
$.initButtons(po.element(".operation"));
po.currentUser = <@writeJson var=currentUser />;
po.url = function(action)
{
return "${contextPath}/dataSetResDirectory/" + action;
};
po.element("input[name=addButton]").click(function()
{
po.open(po.url("add"),
{
<#if selectOperation>
pageParam:
{
afterSave: function(data)
{
po.pageParamCallSelect(true, data);
}
}
</#if>
});
});
po.element("input[name=editButton]").click(function()
{
po.executeOnSelect(function(row)
{
var data = {"id" : row.id};
po.open(po.url("edit"), { data : data });
});
});
po.element("input[name=viewButton]").click(function()
{
po.executeOnSelect(function(row)
{
var data = {"id" : row.id};
po.open(po.url("view"),
{
data : data
});
});
});
po.element("input[name=shareButton]").click(function()
{
po.executeOnSelect(function(row)
{
if(!po.canAuthorize(row, po.currentUser))
{
$.tipInfo("<@spring.message code='error.PermissionDeniedException' />");
return;
}
var options = {};
$.setGridPageHeightOption(options);
po.open(contextPath+"/authorization/${DataSetResDirectory.AUTHORIZATION_RESOURCE_TYPE}/query?"
+"${statics['org.datagear.web.controller.AuthorizationController'].PARAM_ASSIGNED_RESOURCE}="+encodeURIComponent(row.id), options);
});
});
po.element("input[name=deleteButton]").click(
function()
{
po.executeOnSelects(function(rows)
{
po.confirmDeleteEntities(po.url("delete"), rows);
});
});
po.element("input[name=confirmButton]").click(function()
{
po.executeOnSelect(function(row)
{
po.pageParamCallSelect(true, row);
});
});
var tableColumns = [
$.buildDataTablesColumnSimpleOption("<@spring.message code='id' />", "id", true),
$.buildDataTablesColumnSimpleOption($.buildDataTablesColumnTitleSearchable("<@spring.message code='dataSetResDirectory.directory' />"), "directory"),
$.buildDataTablesColumnSimpleOption($.buildDataTablesColumnTitleSearchable("<@spring.message code='dataSetResDirectory.desc' />"), "desc"),
$.buildDataTablesColumnSimpleOption("<@spring.message code='dataSetResDirectory.createUser' />", "createUser.realName", true),
$.buildDataTablesColumnSimpleOption("<@spring.message code='dataSetResDirectory.createTime' />", "createTime", true)
];
po.initPagination();
var tableSettings = po.buildDataTableSettingsAjax(tableColumns, po.url("pagingQueryData"));
po.initDataTable(tableSettings);
po.bindResizeDataTable();
})
(${pageId});
</script>
</body>
</html>

View File

@ -841,6 +841,12 @@ ${detectNewVersionScript}
$.setGridPageHeightOption(options);
po.open(contextPath+"/user/query", options);
}
else if($item.hasClass("system-set-dataSetResDirectory-manage"))
{
var options = {};
$.setGridPageHeightOption(options);
po.open(contextPath+"/dataSetResDirectory/pagingQuery", options);
}
else if($item.hasClass("system-set-rold-manage"))
{
var options = {};
@ -1406,6 +1412,8 @@ ${detectNewVersionScript}
<li class="system-set-chartPlugin-manage"><a href="javascript:void(0);"><@spring.message code='main.manageChartPlugin' /></a></li>
<li class="system-set-chartPlugin-upload"><a href="javascript:void(0);"><@spring.message code='main.uploadChartPlugin' /></a></li>
<li class="ui-widget-header"></li>
<li class="system-set-dataSetResDirectory-manage"><a href="javascript:void(0);"><@spring.message code='main.manageDataSetResDirectory' /></a></li>
<li class="ui-widget-header"></li>
<li class="system-set-user-manage"><a href="javascript:void(0);"><@spring.message code='main.manageUser' /></a></li>
<li class="system-set-user-add"><a href="javascript:void(0);"><@spring.message code='main.addUser' /></a></li>
<li class="system-set-rold-manage"><a href="javascript:void(0);"><@spring.message code='main.manageRole' /></a></li>