This is an automated email from the ASF dual-hosted git repository.
wenhemin pushed a commit to branch json_split_two
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/json_split_two by this push:
new c386b64 [Feature][JsonSplit-api] copy of processDefinition (#5740)
c386b64 is described below
commit c386b6450008b6bee69c41445aed362be3badeaf
Author: JinyLeeChina <[email protected]>
AuthorDate: Sat Jul 3 14:10:16 2021 +0800
[Feature][JsonSplit-api] copy of processDefinition (#5740)
* select-by-code of processDefinition
* fix ut
* prcessDefinition copy
Co-authored-by: JinyLeeChina <[email protected]>
---
.../controller/ProcessDefinitionController.java | 16 +-
.../api/controller/ProjectController.java | 28 +--
.../apache/dolphinscheduler/api/enums/Status.java | 4 +-
.../api/service/ProcessDefinitionService.java | 8 +-
.../service/impl/ProcessDefinitionServiceImpl.java | 219 +++++++----------
.../ProcessDefinitionControllerTest.java | 9 +-
.../api/controller/ProjectControllerTest.java | 272 ++++++++-------------
.../api/service/ProcessDefinitionServiceTest.java | 32 ++-
.../apache/dolphinscheduler/common/Constants.java | 4 +
.../dao/entity/ProcessDefinition.java | 37 +++
.../service/process/ProcessService.java | 28 +--
11 files changed, 273 insertions(+), 384 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
index 55a7ea4..b2f5dbc 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
@@ -136,14 +136,14 @@ public class ProcessDefinitionController extends
BaseController {
*
* @param loginUser login user
* @param projectName project name
- * @param processDefinitionIds process definition ids
- * @param targetProjectId target project id
+ * @param processDefinitionCodes process definition codes
+ * @param targetProjectName target project name
* @return copy result code
*/
- @ApiOperation(value = "copyProcessDefinition", notes =
"COPY_PROCESS_DEFINITION_NOTES")
+ @ApiOperation(value = "copy", notes = "COPY_PROCESS_DEFINITION_NOTES")
@ApiImplicitParams({
- @ApiImplicitParam(name = "processDefinitionIds", value =
"PROCESS_DEFINITION_IDS", required = true, dataType = "String", example =
"3,4"),
- @ApiImplicitParam(name = "targetProjectId", value =
"TARGET_PROJECT_ID", required = true, dataType = "Int", example = "10")
+ @ApiImplicitParam(name = "processDefinitionCodes", value =
"PROCESS_DEFINITION_CODES", required = true, dataType = "String", example =
"3,4"),
+ @ApiImplicitParam(name = "targetProjectName", value =
"TARGET_PROJECT_NAME", required = true, dataType = "String", example = "ddd")
})
@PostMapping(value = "/copy")
@ResponseStatus(HttpStatus.OK)
@@ -151,10 +151,10 @@ public class ProcessDefinitionController extends
BaseController {
@AccessLogAnnotation(ignoreRequestArgs = "loginUser")
public Result copyProcessDefinition(@ApiIgnore @RequestAttribute(value =
Constants.SESSION_USER) User loginUser,
@ApiParam(name = "projectName", value
= "PROJECT_NAME", required = true) @PathVariable String projectName,
- @RequestParam(value =
"processDefinitionIds", required = true) String processDefinitionIds,
- @RequestParam(value =
"targetProjectId", required = true) int targetProjectId) {
+ @RequestParam(value =
"processDefinitionCodes", required = true) String processDefinitionCodes,
+ @RequestParam(value =
"targetProjectName", required = true) String targetProjectName) {
return returnDataList(
- processDefinitionService.batchCopyProcessDefinition(loginUser,
projectName, processDefinitionIds, targetProjectId));
+ processDefinitionService.batchCopyProcessDefinition(loginUser,
projectName, processDefinitionCodes, targetProjectName));
}
/**
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
index 6279305..76f9090 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java
@@ -23,7 +23,7 @@ import static
org.apache.dolphinscheduler.api.enums.Status.IMPORT_PROCESS_DEFINE
import static
org.apache.dolphinscheduler.api.enums.Status.LOGIN_USER_QUERY_PROJECT_LIST_PAGING_ERROR;
import static
org.apache.dolphinscheduler.api.enums.Status.QUERY_AUTHORIZED_AND_USER_CREATED_PROJECT_ERROR;
import static
org.apache.dolphinscheduler.api.enums.Status.QUERY_AUTHORIZED_PROJECT;
-import static
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROJECT_DETAILS_BY_ID_ERROR;
+import static
org.apache.dolphinscheduler.api.enums.Status.QUERY_PROJECT_DETAILS_BY_CODE_ERROR;
import static
org.apache.dolphinscheduler.api.enums.Status.QUERY_UNAUTHORIZED_PROJECT_ERROR;
import static
org.apache.dolphinscheduler.api.enums.Status.UPDATE_PROJECT_ERROR;
@@ -73,7 +73,7 @@ public class ProjectController extends BaseController {
/**
* create project
*
- * @param loginUser login user
+ * @param loginUser login user
* @param projectName project name
* @param description description
* @return returns an error if it exists
@@ -97,8 +97,8 @@ public class ProjectController extends BaseController {
/**
* update project
*
- * @param loginUser login user
- * @param projectCode project code
+ * @param loginUser login user
+ * @param projectCode project code
* @param projectName project name
* @param description description
* @return update result code
@@ -136,10 +136,10 @@ public class ProjectController extends BaseController {
})
@GetMapping(value = "/query-by-code")
@ResponseStatus(HttpStatus.OK)
- @ApiException(QUERY_PROJECT_DETAILS_BY_ID_ERROR)
+ @ApiException(QUERY_PROJECT_DETAILS_BY_CODE_ERROR)
@AccessLogAnnotation(ignoreRequestArgs = "loginUser")
- public Result queryProjectById(@ApiIgnore @RequestAttribute(value =
Constants.SESSION_USER) User loginUser,
- @RequestParam("projectCode") Long
projectCode) {
+ public Result queryProjectByCode(@ApiIgnore @RequestAttribute(value =
Constants.SESSION_USER) User loginUser,
+ @RequestParam("projectCode") Long
projectCode) {
Map<String, Object> result = projectService.queryByCode(loginUser,
projectCode);
return returnDataList(result);
}
@@ -149,8 +149,8 @@ public class ProjectController extends BaseController {
*
* @param loginUser login user
* @param searchVal search value
- * @param pageSize page size
- * @param pageNo page number
+ * @param pageSize page size
+ * @param pageNo page number
* @return project list which the login user have permission to see
*/
@ApiOperation(value = "queryProjectListPaging", notes =
"QUERY_PROJECT_LIST_PAGING_NOTES")
@@ -201,7 +201,7 @@ public class ProjectController extends BaseController {
* query unauthorized project
*
* @param loginUser login user
- * @param userId user id
+ * @param userId user id
* @return the projects which user have not permission to see
*/
@ApiOperation(value = "queryUnauthorizedProject", notes =
"QUERY_UNAUTHORIZED_PROJECT_NOTES")
@@ -223,7 +223,7 @@ public class ProjectController extends BaseController {
* query authorized project
*
* @param loginUser login user
- * @param userId user id
+ * @param userId user id
* @return projects which the user have permission to see, Except for
items created by this user
*/
@ApiOperation(value = "queryAuthorizedProject", notes =
"QUERY_AUTHORIZED_PROJECT_NOTES")
@@ -259,13 +259,13 @@ public class ProjectController extends BaseController {
/**
* import process definition
*
- * @param loginUser login user
- * @param file resource file
+ * @param loginUser login user
+ * @param file resource file
* @param projectName project name
* @return import result code
*/
- @ApiOperation(value = "importProcessDefinition", notes=
"EXPORT_PROCESS_DEFINITION_NOTES")
+ @ApiOperation(value = "importProcessDefinition", notes =
"EXPORT_PROCESS_DEFINITION_NOTES")
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "RESOURCE_FILE", required
= true, dataType = "MultipartFile")
})
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index 9e06558..268dd8e 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -74,7 +74,7 @@ public enum Status {
LIST_WORKERS_ERROR(10044, "list workers error", "查询worker列表错误"),
LIST_MASTERS_ERROR(10045, "list masters error", "查询master列表错误"),
UPDATE_PROJECT_ERROR(10046, "update project error", "更新项目信息错误"),
- QUERY_PROJECT_DETAILS_BY_ID_ERROR(10047, "query project details by id
error", "查询项目详细信息错误"),
+ QUERY_PROJECT_DETAILS_BY_CODE_ERROR(10047, "query project details by code
error", "查询项目详细信息错误"),
CREATE_PROJECT_ERROR(10048, "create project error", "创建项目错误"),
LOGIN_USER_QUERY_PROJECT_LIST_PAGING_ERROR(10049, "login user query
project list paging error", "分页查询项目列表错误"),
DELETE_PROJECT_ERROR(10050, "delete project error", "删除项目错误"),
@@ -189,7 +189,7 @@ public enum Status {
DELETE_PROCESS_DEFINITION_VERSION_ERROR(10156, "delete process definition
version error", "删除工作流历史版本出错"),
QUERY_USER_CREATED_PROJECT_ERROR(10157, "query user created project error
error", "查询用户创建的项目错误"),
- PROCESS_DEFINITION_IDS_IS_EMPTY(10158, "process definition ids is empty",
"工作流IDS不能为空"),
+ PROCESS_DEFINITION_CODES_IS_EMPTY(10158, "process definition codes is
empty", "工作流CODES不能为空"),
BATCH_COPY_PROCESS_DEFINITION_ERROR(10159, "batch copy process definition
error", "复制工作流错误"),
BATCH_MOVE_PROCESS_DEFINITION_ERROR(10160, "batch move process definition
error", "移动工作流错误"),
QUERY_WORKFLOW_LINEAGE_ERROR(10161, "query workflow lineage error",
"查询血缘失败"),
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
index 045a920..7ae7953 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
@@ -120,13 +120,13 @@ public interface ProcessDefinitionService {
*
* @param loginUser loginUser
* @param projectName projectName
- * @param processDefinitionIds processDefinitionIds
- * @param targetProjectId targetProjectId
+ * @param processDefinitionCodes processDefinitionCodes
+ * @param targetProjectName targetProjectName
*/
Map<String, Object> batchCopyProcessDefinition(User loginUser,
String projectName,
- String processDefinitionIds,
- int targetProjectId);
+ String
processDefinitionCodes,
+ String targetProjectName);
/**
* batch move process definition
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
index 907c7c3..3617639 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
@@ -67,6 +67,7 @@ import org.apache.dolphinscheduler.dao.entity.Tenant;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionLogMapper;
import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
+import org.apache.dolphinscheduler.dao.mapper.ProcessTaskRelationLogMapper;
import org.apache.dolphinscheduler.dao.mapper.ProcessTaskRelationMapper;
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
import org.apache.dolphinscheduler.dao.mapper.ScheduleMapper;
@@ -107,7 +108,6 @@ import org.springframework.web.multipart.MultipartFile;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -158,6 +158,9 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
private ProcessTaskRelationMapper processTaskRelationMapper;
@Autowired
+ private ProcessTaskRelationLogMapper processTaskRelationLogMapper;
+
+ @Autowired
TaskDefinitionLogMapper taskDefinitionLogMapper;
@Autowired
@@ -194,14 +197,11 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
String tenantCode,
String
taskRelationJson) {
- Map<String, Object> result = new HashMap<>();
- Project project = projectMapper.queryByName(projectName);
- // check project auth
- Map<String, Object> checkResult =
projectService.checkProjectAndAuth(loginUser, project, projectName);
- Status resultStatus = (Status) checkResult.get(Constants.STATUS);
- if (resultStatus != Status.SUCCESS) {
- return checkResult;
+ Map<String, Object> result = checkProjectAndAuth(loginUser,
projectName);
+ if (result.get(Constants.STATUS) != Status.SUCCESS) {
+ return result;
}
+ long projectCode = (long) result.get(Constants.PROJECT_CODE);
List<ProcessTaskRelationLog> taskRelationList =
JSONUtils.toList(taskRelationJson, ProcessTaskRelationLog.class);
Map<String, Object> checkRelationJson =
checkTaskRelationList(taskRelationList, taskRelationJson);
@@ -222,16 +222,23 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
putMsg(result, Status.CREATE_PROCESS_DEFINITION);
return result;
}
+ ProcessDefinition processDefinition = new
ProcessDefinition(projectCode, name, processDefinitionCode, description,
+ globalParams, locations, connects, timeout, loginUser.getId(),
tenant.getId());
- int insertVersion = processService.saveProcessDefine(loginUser,
project, name, description, globalParams,
- locations, connects, timeout, tenant.getId(),
processDefinitionCode, 0, true);
+ return createProcessDefine(loginUser, result, taskRelationList,
processDefinition);
+ }
+ private Map<String, Object> createProcessDefine(User loginUser,
+ Map<String, Object> result,
+
List<ProcessTaskRelationLog> taskRelationList,
+ ProcessDefinition
processDefinition) {
+ int insertVersion = processService.saveProcessDefine(loginUser,
processDefinition, true);
if (insertVersion > 0) {
- int insertResult = processService.saveTaskRelation(loginUser,
project.getCode(), processDefinitionCode, insertVersion, taskRelationList);
+ int insertResult = processService.saveTaskRelation(loginUser,
processDefinition.getProjectCode(), processDefinition.getCode(), insertVersion,
taskRelationList);
if (insertResult > 0) {
putMsg(result, Status.SUCCESS);
// return processDefinitionCode
- result.put(Constants.DATA_LIST, processDefinitionCode);
+ result.put(Constants.DATA_LIST, processDefinition.getCode());
} else {
putMsg(result, Status.CREATE_PROCESS_DEFINITION);
}
@@ -282,17 +289,11 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
*/
@Override
public Map<String, Object> queryProcessDefinitionList(User loginUser,
String projectName) {
-
- HashMap<String, Object> result = new HashMap<>();
- Project project = projectMapper.queryByName(projectName);
-
- Map<String, Object> checkResult =
projectService.checkProjectAndAuth(loginUser, project, projectName);
- Status resultStatus = (Status) checkResult.get(Constants.STATUS);
- if (resultStatus != Status.SUCCESS) {
- return checkResult;
+ Map<String, Object> result = checkProjectAndAuth(loginUser,
projectName);
+ if (result.get(Constants.STATUS) != Status.SUCCESS) {
+ return result;
}
-
- List<ProcessDefinition> resourceList =
processDefinitionMapper.queryAllDefinitionList(project.getCode());
+ List<ProcessDefinition> resourceList =
processDefinitionMapper.queryAllDefinitionList((long)
result.get(Constants.PROJECT_CODE));
resourceList.forEach(processDefinition -> {
ProcessData processData =
processService.genProcessData(processDefinition);
@@ -387,17 +388,12 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
@Override
public Map<String, Object> queryProcessDefinitionByName(User loginUser,
String projectName, String processDefinitionName) {
-
- Map<String, Object> result = new HashMap<>();
- Project project = projectMapper.queryByName(projectName);
-
- Map<String, Object> checkResult =
projectService.checkProjectAndAuth(loginUser, project, projectName);
- Status resultStatus = (Status) checkResult.get(Constants.STATUS);
- if (resultStatus != Status.SUCCESS) {
- return checkResult;
+ Map<String, Object> result = checkProjectAndAuth(loginUser,
projectName);
+ if (result.get(Constants.STATUS) != Status.SUCCESS) {
+ return result;
}
-
- ProcessDefinition processDefinition =
processDefinitionMapper.queryByDefineName(project.getCode(),
processDefinitionName);
+ long projectCode = (long) result.get(Constants.PROJECT_CODE);
+ ProcessDefinition processDefinition =
processDefinitionMapper.queryByDefineName(projectCode, processDefinitionName);
if (processDefinition == null) {
putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST,
processDefinitionName);
@@ -438,14 +434,11 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
int timeout,
String tenantCode,
String
taskRelationJson) {
- Map<String, Object> result = new HashMap<>();
-
- Project project = projectMapper.queryByName(projectName);
- Map<String, Object> checkResult =
projectService.checkProjectAndAuth(loginUser, project, projectName);
- Status resultStatus = (Status) checkResult.get(Constants.STATUS);
- if (resultStatus != Status.SUCCESS) {
- return checkResult;
+ Map<String, Object> result = checkProjectAndAuth(loginUser,
projectName);
+ if (result.get(Constants.STATUS) != Status.SUCCESS) {
+ return result;
}
+ long projectCode = (long) result.get(Constants.PROJECT_CODE);
List<ProcessTaskRelationLog> taskRelationList =
JSONUtils.toList(taskRelationJson, ProcessTaskRelationLog.class);
Map<String, Object> checkRelationJson =
checkTaskRelationList(taskRelationList, taskRelationJson);
@@ -471,10 +464,11 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
return result;
}
- int insertVersion = processService.saveProcessDefine(loginUser,
project, name, description, globalParams,
- locations, connects, timeout, tenant.getId(), code,
processDefinition.getId(), true);
+ processDefinition.set(projectCode, name, description, globalParams,
locations, connects, timeout, tenant.getId());
+ processDefinition.setUpdateTime(new Date());
+ int insertVersion = processService.saveProcessDefine(loginUser,
processDefinition, true);
if (insertVersion > 0) {
- int insertResult = processService.saveTaskRelation(loginUser,
project.getCode(), code, insertVersion, taskRelationList);
+ int insertResult = processService.saveTaskRelation(loginUser,
projectCode, code, insertVersion, taskRelationList);
if (insertResult > 0) {
putMsg(result, Status.SUCCESS);
result.put(Constants.DATA_LIST, processDefinition);
@@ -1453,51 +1447,24 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
}
private Map<String, Object> copyProcessDefinition(User loginUser,
- Integer processId,
- Project targetProject)
throws JsonProcessingException {
+ Long processCode,
+ long targetProjectCode) {
Map<String, Object> result = new HashMap<>();
- String currentTimeStamp = DateUtils.getCurrentTimeStamp();
- ProcessDefinition processDefinition =
processDefinitionMapper.selectById(processId);
+ ProcessDefinition processDefinition =
processDefinitionMapper.queryByCode(processCode);
if (processDefinition == null) {
- putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processId);
+ putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processCode);
return result;
- } else {
- ProcessData processData =
processService.genProcessData(processDefinition);
- List<TaskNode> taskNodeList = processData.getTasks();
- String locations = processDefinition.getLocations();
- ObjectNode locationsJN = JSONUtils.parseObject(locations);
-
- for (TaskNode taskNode : taskNodeList) {
- String suffix = "_copy_" + currentTimeStamp;
- String id = taskNode.getId();
- String newName = locationsJN.path(id).path("name").asText() +
suffix;
- ((ObjectNode) locationsJN.get(id)).put("name", newName);
-
- List<String> depList = taskNode.getDepList();
- List<String> newDepList = depList.stream()
- .map(s -> s + suffix)
- .collect(Collectors.toList());
-
- taskNode.setDepList(newDepList);
- taskNode.setName(taskNode.getName() + suffix);
- taskNode.setCode(0L);
- }
- processData.setTasks(taskNodeList);
- String processDefinitionJson = JSONUtils.toJsonString(processData);
- // TODO copy process
- // return createProcessDefinition(
- // loginUser,
- // targetProject.getName(),
- // processDefinition.getName() + "_copy_" + currentTimeStamp,
- // processDefinitionJson,
- // processDefinition.getDescription(),
- // locationsJN.toString(),
- // processDefinition.getConnects());
- // TODO remove
+ }
+ List<ProcessTaskRelationLog> taskRelationList =
+
processTaskRelationLogMapper.queryByProcessCodeAndVersion(processDefinition.getCode(),
processDefinition.getVersion());
+ if (taskRelationList.isEmpty()) {
+ putMsg(result, Status.PROCESS_TASK_RELATION_NOT_EXIST,
processCode);
return result;
-
}
+ processDefinition.setName(processDefinition.getName() + "_copy_" +
DateUtils.getCurrentTimeStamp());
+ processDefinition.setProjectCode(targetProjectCode);
+ return createProcessDefine(loginUser, result, taskRelationList,
processDefinition);
}
/**
@@ -1505,45 +1472,37 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
*
* @param loginUser loginUser
* @param projectName projectName
- * @param processDefinitionIds processDefinitionIds
- * @param targetProjectId targetProjectId
+ * @param processDefinitionCodes processDefinitionCodes
+ * @param targetProjectName targetProjectName
*/
@Override
public Map<String, Object> batchCopyProcessDefinition(User loginUser,
String projectName,
- String
processDefinitionIds,
- int targetProjectId)
{
- Map<String, Object> result = new HashMap<>();
+ String
processDefinitionCodes,
+ String
targetProjectName) {
List<String> failedProcessList = new ArrayList<>();
-
- if (StringUtils.isEmpty(processDefinitionIds)) {
- putMsg(result, Status.PROCESS_DEFINITION_IDS_IS_EMPTY,
processDefinitionIds);
- return result;
- }
-
//check src project auth
- Map<String, Object> checkResult = checkProjectAndAuth(loginUser,
projectName);
- if (checkResult != null) {
- return checkResult;
+ Map<String, Object> result = checkProjectAndAuth(loginUser,
projectName);
+ if (result.get(Constants.STATUS) != Status.SUCCESS) {
+ return result;
}
-
- Project targetProject = projectMapper.queryDetailById(targetProjectId);
- if (targetProject == null) {
- putMsg(result, Status.PROJECT_NOT_FOUNT, targetProjectId);
+ if (StringUtils.isEmpty(processDefinitionCodes)) {
+ putMsg(result, Status.PROCESS_DEFINITION_CODES_IS_EMPTY,
processDefinitionCodes);
return result;
}
-
- if (!(targetProject.getName()).equals(projectName)) {
- Map<String, Object> checkTargetProjectResult =
checkProjectAndAuth(loginUser, targetProject.getName());
- if (checkTargetProjectResult != null) {
+ long targetProjectCode = 0L;
+ if (!(targetProjectName).equals(projectName)) {
+ Map<String, Object> checkTargetProjectResult =
checkProjectAndAuth(loginUser, targetProjectName);
+ if (checkTargetProjectResult.get(Constants.STATUS) !=
Status.SUCCESS) {
return checkTargetProjectResult;
+ } else {
+ targetProjectCode = (long)
checkTargetProjectResult.get(Constants.PROJECT_CODE);
}
}
- String[] processDefinitionIdList =
processDefinitionIds.split(Constants.COMMA);
- doBatchCopyProcessDefinition(loginUser, targetProject,
failedProcessList, processDefinitionIdList);
-
- checkBatchOperateResult(projectName, targetProject.getName(), result,
failedProcessList, true);
+ String[] processDefinitionCodeList =
processDefinitionCodes.split(Constants.COMMA);
+ doBatchCopyProcessDefinition(loginUser, targetProjectCode,
failedProcessList, processDefinitionCodeList);
+ checkBatchOperateResult(projectName, targetProjectName, result,
failedProcessList, true);
return result;
}
@@ -1561,16 +1520,15 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
String projectName,
String
processDefinitionIds,
int targetProjectId)
{
- Map<String, Object> result = new HashMap<>();
List<String> failedProcessList = new ArrayList<>();
//check src project auth
- Map<String, Object> checkResult = checkProjectAndAuth(loginUser,
projectName);
- if (checkResult != null) {
- return checkResult;
+ Map<String, Object> result = checkProjectAndAuth(loginUser,
projectName);
+ if (result.get(Constants.STATUS) != Status.SUCCESS) {
+ return result;
}
if (StringUtils.isEmpty(processDefinitionIds)) {
- putMsg(result, Status.PROCESS_DEFINITION_IDS_IS_EMPTY,
processDefinitionIds);
+ putMsg(result, Status.PROCESS_DEFINITION_CODES_IS_EMPTY,
processDefinitionIds);
return result;
}
@@ -1697,23 +1655,21 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
* batch copy process definition
*
* @param loginUser loginUser
- * @param targetProject targetProject
+ * @param targetProjectCode targetProjectCode
* @param failedProcessList failedProcessList
- * @param processDefinitionIdList processDefinitionIdList
+ * @param processDefinitionCodeList processDefinitionCodeList
*/
- private void doBatchCopyProcessDefinition(User loginUser, Project
targetProject, List<String> failedProcessList, String[]
processDefinitionIdList) {
- for (String processDefinitionId : processDefinitionIdList) {
+ private void doBatchCopyProcessDefinition(User loginUser, long
targetProjectCode, List<String> failedProcessList, String[]
processDefinitionCodeList) {
+ for (String processDefinitionCode : processDefinitionCodeList) {
try {
- Map<String, Object> copyProcessDefinitionResult =
- copyProcessDefinition(loginUser,
Integer.valueOf(processDefinitionId), targetProject);
+ Map<String, Object> copyProcessDefinitionResult =
copyProcessDefinition(loginUser, Long.valueOf(processDefinitionCode),
targetProjectCode);
if
(!Status.SUCCESS.equals(copyProcessDefinitionResult.get(Constants.STATUS))) {
- setFailedProcessList(failedProcessList,
processDefinitionId);
+ setFailedProcessList(failedProcessList,
processDefinitionCode);
logger.error((String)
copyProcessDefinitionResult.get(Constants.MSG));
}
} catch (Exception e) {
- setFailedProcessList(failedProcessList, processDefinitionId);
+ setFailedProcessList(failedProcessList, processDefinitionCode);
logger.error("copy processDefinition error: {}",
e.getMessage(), e);
-
}
}
}
@@ -1741,15 +1697,12 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
*/
private Map<String, Object> checkProjectAndAuth(User loginUser, String
projectName) {
Project project = projectMapper.queryByName(projectName);
-
//check user access for project
- Map<String, Object> checkResult =
projectService.checkProjectAndAuth(loginUser, project, projectName);
- Status resultStatus = (Status) checkResult.get(Constants.STATUS);
-
- if (resultStatus != Status.SUCCESS) {
- return checkResult;
+ Map<String, Object> result =
projectService.checkProjectAndAuth(loginUser, project, projectName);
+ if (result.get(Constants.STATUS) == Status.SUCCESS) {
+ result.put(Constants.PROJECT_CODE, project.getCode());
}
- return null;
+ return result;
}
/**
@@ -1811,13 +1764,9 @@ public class ProcessDefinitionServiceImpl extends
BaseServiceImpl implements Pro
return result;
}
- Project project = projectMapper.queryByName(projectName);
-
- // check project auth
- Map<String, Object> checkResult =
projectService.checkProjectAndAuth(loginUser, project, projectName);
- Status resultStatus = (Status) checkResult.get(Constants.STATUS);
- if (resultStatus != Status.SUCCESS) {
- return checkResult;
+ result = checkProjectAndAuth(loginUser, projectName);
+ if (result.get(Constants.STATUS) != Status.SUCCESS) {
+ return result;
}
ProcessDefinition processDefinition =
processDefinitionMapper.queryByCode(processDefinitionCode);
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
index e0ee1dd..98849ae 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
@@ -67,7 +67,6 @@ public class ProcessDefinitionControllerTest {
loginUser.setId(1);
loginUser.setUserType(UserType.GENERAL_USER);
loginUser.setUserName("admin");
-
user = loginUser;
}
@@ -190,14 +189,14 @@ public class ProcessDefinitionControllerTest {
public void testBatchCopyProcessDefinition() throws Exception {
String projectName = "test";
- int targetProjectId = 2;
- String id = "1";
+ String targetProjectName = "test1";
+ String code = "1";
Map<String, Object> result = new HashMap<>();
putMsg(result, Status.SUCCESS);
- Mockito.when(processDefinitionService.batchCopyProcessDefinition(user,
projectName, id, targetProjectId)).thenReturn(result);
- Result response =
processDefinitionController.copyProcessDefinition(user, projectName, id,
targetProjectId);
+ Mockito.when(processDefinitionService.batchCopyProcessDefinition(user,
projectName, code, targetProjectName)).thenReturn(result);
+ Result response =
processDefinitionController.copyProcessDefinition(user, projectName, code,
targetProjectName);
Assert.assertTrue(response != null && response.isSuccess());
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProjectControllerTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProjectControllerTest.java
index 0e01312..9e116ce 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProjectControllerTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProjectControllerTest.java
@@ -17,220 +17,140 @@
package org.apache.dolphinscheduler.api.controller;
-import static
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static
org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static
org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.service.impl.ProjectServiceImpl;
+import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
-import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.dao.entity.Project;
+import org.apache.dolphinscheduler.dao.entity.Resource;
+import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
+
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.Map;
-import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.http.MediaType;
-import org.springframework.test.web.servlet.MvcResult;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-
-import com.fasterxml.jackson.core.type.TypeReference;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
/**
* project controller test
*/
-public class ProjectControllerTest extends AbstractControllerTest {
-
- private static Logger logger =
LoggerFactory.getLogger(ProjectControllerTest.class);
-
- private String projectCode;
-
- @Before
- public void before() throws Exception {
- projectCode = testCreateProject("project_test11", "the test project");
- }
-
- @After
- public void after() throws Exception {
- testDeleteProject(projectCode);
- }
+@RunWith(MockitoJUnitRunner.Silent.class)
+public class ProjectControllerTest {
- private String testCreateProject(String projectName, String description)
throws Exception {
+ @InjectMocks
+ private ProjectController projectController;
- MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("projectName",projectName);
- paramsMap.add("description",description);
+ @Mock
+ private ProjectServiceImpl projectService;
- MvcResult mvcResult = mockMvc.perform(post("/projects/create")
- .header(SESSION_ID, sessionId)
- .params(paramsMap))
- .andExpect(status().isCreated())
-
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
- .andReturn();
+ @Mock
+ private ProjectMapper projectMapper;
- Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), new
TypeReference<Result<String>>() {});
- Assert.assertEquals(Status.SUCCESS.getCode(),
result.getCode().intValue());
- Assert.assertNotNull(result.getData());
- logger.info("create project return result:{}",
mvcResult.getResponse().getContentAsString());
+ protected User user;
- return (String)result.getData();
+ @Before
+ public void before() {
+ User loginUser = new User();
+ loginUser.setId(1);
+ loginUser.setUserType(UserType.GENERAL_USER);
+ loginUser.setUserName("admin");
+ user = loginUser;
}
@Test
- public void testUpdateProject() throws Exception {
-
- MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("projectCode", projectCode);
- paramsMap.add("projectName","project_test_update");
- paramsMap.add("desc","the test project update");
- paramsMap.add("userName", "the project owner");
-
- MvcResult mvcResult = mockMvc.perform(post("/projects/update")
- .header(SESSION_ID, sessionId)
- .params(paramsMap))
- .andExpect(status().isOk())
-
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
- .andReturn();
-
- Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
-
Assert.assertEquals(Status.USER_NOT_EXIST.getCode(),result.getCode().intValue());
- logger.info("update project return result:{}",
mvcResult.getResponse().getContentAsString());
-
+ public void testUpdateProject() {
+ Map<String, Object> result = new HashMap<>();
+ putMsg(result, Status.SUCCESS);
+ result.put("projectId", 1);
+
+ long projectCode = 1L;
+ String projectName = "test";
+ String desc = "";
+ String userName = "jack";
+ Mockito.when(projectService.update(user, projectCode, projectName,
desc, userName)).thenReturn(result);
+ Result response = projectController.updateProject(user, projectCode,
projectName, desc, userName);
+ Assert.assertEquals(Status.SUCCESS.getCode(),
response.getCode().intValue());
}
@Test
- public void testQueryProjectByCode() throws Exception {
-
- MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("projectCode", projectCode);
-
- MvcResult mvcResult = mockMvc.perform(get("/projects/query-by-code")
- .header(SESSION_ID, sessionId)
- .params(paramsMap))
- .andExpect(status().isOk())
-
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
- .andReturn();
-
- Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
- Assert.assertEquals(Status.SUCCESS.getCode(),
result.getCode().intValue());
- logger.info(mvcResult.getResponse().getContentAsString());
- logger.info("query project by code :{}, return result:{}",
projectCode, mvcResult.getResponse().getContentAsString());
-
+ public void testQueryProjectByCode() {
+ Map<String, Object> result = new HashMap<>();
+ putMsg(result, Status.SUCCESS);
+ long projectCode = 1L;
+
Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(getProject());
+ Mockito.when(projectService.queryByCode(user,
projectCode)).thenReturn(result);
+ Result response = projectController.queryProjectByCode(user,
projectCode);
+ Assert.assertEquals(Status.SUCCESS.getCode(),
response.getCode().intValue());
}
@Test
- public void testQueryProjectListPaging() throws Exception {
-
- MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("searchVal","test");
- paramsMap.add("pageSize","2");
- paramsMap.add("pageNo","2");
-
- MvcResult mvcResult = mockMvc.perform(get("/projects/list-paging")
- .header(SESSION_ID, sessionId)
- .params(paramsMap))
- .andExpect(status().isOk())
-
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
- .andReturn();
-
- Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
-
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
- logger.info("query list-paging project return result:{}",
mvcResult.getResponse().getContentAsString());
- }
-
- @Test
- public void testQueryUnauthorizedProject() throws Exception {
+ public void testQueryProjectListPaging() {
+ int pageNo = 1;
+ int pageSize = 10;
+ String searchVal = "";
- MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("userId","2");
+ Map<String, Object> result = new HashMap<>();
+ putMsg(result, Status.SUCCESS);
+ result.put(Constants.DATA_LIST, new PageInfo<Resource>(1, 10));
- MvcResult mvcResult = mockMvc.perform(get("/projects/unauth-project")
- .header(SESSION_ID, sessionId)
- .params(paramsMap))
- .andExpect(status().isOk())
-
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
- .andReturn();
+ Mockito.when(projectService.queryProjectListPaging(user, pageSize,
pageNo, searchVal)).thenReturn(result);
+ Result response = projectController.queryProjectListPaging(user,
searchVal, pageSize, pageNo);
- Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
-
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
- logger.info("query unauth project return result:{}",
mvcResult.getResponse().getContentAsString());
+ Assert.assertTrue(response != null && response.isSuccess());
}
@Test
- public void testQueryAuthorizedProject() throws Exception {
-
- MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("userId",String.valueOf(user.getId()));
-
- MvcResult mvcResult = mockMvc.perform(get("/projects/authed-project")
- .header(SESSION_ID, sessionId)
- .params(paramsMap))
- .andExpect(status().isOk())
-
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
- .andReturn();
-
- Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
-
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
- logger.info("query authed project return result:{}",
mvcResult.getResponse().getContentAsString());
-
+ public void testQueryUnauthorizedProject() {
+ Map<String, Object> result = new HashMap<>();
+ putMsg(result, Status.SUCCESS);
+ Mockito.when(projectService.queryUnauthorizedProject(user,
2)).thenReturn(result);
+ Result response = projectController.queryUnauthorizedProject(user, 2);
+ Assert.assertEquals(Status.SUCCESS.getCode(),
response.getCode().intValue());
}
@Test
- public void testQueryAllProjectList() throws Exception {
-
- MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
-
- MvcResult mvcResult =
mockMvc.perform(get("/projects/query-project-list")
- .header(SESSION_ID, sessionId)
- .params(paramsMap))
- .andExpect(status().isOk())
-
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
- .andReturn();
-
- Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
-
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
- logger.info("query all project return result:{}",
mvcResult.getResponse().getContentAsString());
-
+ public void testQueryAuthorizedProject() {
+ Map<String, Object> result = new HashMap<>();
+ putMsg(result, Status.SUCCESS);
+ Mockito.when(projectService.queryAuthorizedProject(user,
2)).thenReturn(result);
+ Result response = projectController.queryAuthorizedProject(user, 2);
+ Assert.assertEquals(Status.SUCCESS.getCode(),
response.getCode().intValue());
}
- @Ignore
@Test
- public void testImportProcessDefinition() throws Exception {
-
- MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("file","test");
-
- MvcResult mvcResult =
mockMvc.perform(post("/projects/import-definition")
- .header(SESSION_ID, sessionId)
- .params(paramsMap))
- .andExpect(status().isOk())
- .andExpect(content().contentType(MediaType.TEXT_PLAIN))
- .andReturn();
-
- Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
-
Assert.assertEquals(Status.IMPORT_PROCESS_DEFINE_ERROR.getCode(),result.getCode().intValue());
- logger.info(mvcResult.getResponse().getContentAsString());
+ public void testQueryAllProjectList() {
+ Map<String, Object> result = new HashMap<>();
+ putMsg(result, Status.SUCCESS);
+ Mockito.when(projectService.queryAllProjectList()).thenReturn(result);
+ Result response = projectController.queryAllProjectList(user);
+ Assert.assertEquals(Status.SUCCESS.getCode(),
response.getCode().intValue());
}
- private void testDeleteProject(String projectCode) throws Exception {
-
- MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("projectCode", projectCode);
-
- MvcResult mvcResult = mockMvc.perform(get("/projects/delete")
- .header(SESSION_ID, sessionId)
- .params(paramsMap))
- .andExpect(status().isOk())
-
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
- .andReturn();
-
- Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
-
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
- logger.info("delete project return result:{}",
mvcResult.getResponse().getContentAsString());
+ private Project getProject() {
+ Project project = new Project();
+ project.setCode(1L);
+ project.setId(1);
+ project.setName("test");
+ project.setUserId(1);
+ return project;
}
+ private void putMsg(Map<String, Object> result, Status status, Object...
statusParams) {
+ result.put(Constants.STATUS, status);
+ if (statusParams != null && statusParams.length > 0) {
+ result.put(Constants.MSG, MessageFormat.format(status.getMsg(),
statusParams));
+ } else {
+ result.put(Constants.MSG, status.getMsg());
+ }
+ }
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
index 8cad1ea..a0226c6 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
@@ -387,6 +387,8 @@ public class ProcessDefinitionServiceTest {
//instance exit
Mockito.when(processDefineMapper.queryByDefineName(project.getCode(),
"test")).thenReturn(getProcessDefinition());
+ putMsg(result, Status.SUCCESS, projectName);
+ Mockito.when(projectService.checkProjectAndAuth(loginUser, project,
projectName)).thenReturn(result);
Map<String, Object> successRes =
processDefinitionService.queryProcessDefinitionByName(loginUser,
"project_test1", "test");
Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS));
@@ -398,30 +400,32 @@ public class ProcessDefinitionServiceTest {
String projectName = "project_test1";
Project project = getProject(projectName);
User loginUser = new User();
- loginUser.setId(-1);
+ loginUser.setId(1);
loginUser.setUserType(UserType.GENERAL_USER);
+
Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName));
+ Map<String, Object> result = new HashMap<>();
+ putMsg(result, Status.SUCCESS, projectName);
+ Mockito.when(projectService.checkProjectAndAuth(loginUser, project,
projectName)).thenReturn(result);
// copy project definition ids empty test
- Map<String, Object> map =
processDefinitionService.batchCopyProcessDefinition(loginUser, projectName,
StringUtils.EMPTY, 0);
- Assert.assertEquals(Status.PROCESS_DEFINITION_IDS_IS_EMPTY,
map.get(Constants.STATUS));
+ Map<String, Object> map =
processDefinitionService.batchCopyProcessDefinition(loginUser, projectName,
StringUtils.EMPTY, "project_test2");
+ Assert.assertEquals(Status.PROCESS_DEFINITION_CODES_IS_EMPTY,
map.get(Constants.STATUS));
- Map<String, Object> result = new HashMap<>();
// project check auth fail
putMsg(result, Status.PROJECT_NOT_FOUNT, projectName);
-
Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName));
Mockito.when(projectService.checkProjectAndAuth(loginUser, project,
projectName)).thenReturn(result);
Map<String, Object> map1 =
processDefinitionService.batchCopyProcessDefinition(
- loginUser, projectName, String.valueOf(project.getId()), 0);
+ loginUser, projectName, String.valueOf(project.getId()),
"project_test2");
Assert.assertEquals(Status.PROJECT_NOT_FOUNT,
map1.get(Constants.STATUS));
// project check auth success, target project is null
- putMsg(result, Status.SUCCESS, projectName);
Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName));
Mockito.when(projectService.checkProjectAndAuth(loginUser, project,
projectName)).thenReturn(result);
- Mockito.when(projectMapper.queryDetailById(0)).thenReturn(null);
+ putMsg(result, Status.PROJECT_NOT_FOUNT, "project_test2");
+ Mockito.when(projectService.checkProjectAndAuth(loginUser, project,
projectName)).thenReturn(result);
Map<String, Object> map2 =
processDefinitionService.batchCopyProcessDefinition(
- loginUser, projectName, String.valueOf(project.getId()), 0);
+ loginUser, projectName, String.valueOf(project.getId()),
"project_test2");
Assert.assertEquals(Status.PROJECT_NOT_FOUNT,
map2.get(Constants.STATUS));
// project check auth success, target project name not equal project
name, check auth target project fail
@@ -430,21 +434,13 @@ public class ProcessDefinitionServiceTest {
Mockito.when(projectService.checkProjectAndAuth(loginUser, project,
projectName)).thenReturn(result);
putMsg(result, Status.SUCCESS, projectName);
- String projectName2 = "project_test2";
- Project project2 = getProject(projectName2);
-
Mockito.when(projectMapper.queryByName(projectName2)).thenReturn(project2);
- Mockito.when(projectService.checkProjectAndAuth(loginUser, project2,
projectName2)).thenReturn(result);
- Mockito.when(projectMapper.queryDetailById(1)).thenReturn(project2);
// instance exit
ProcessDefinition definition = getProcessDefinition();
definition.setLocations("{\"tasks-36196\":{\"name\":\"ssh_test1\",\"targetarr\":\"\",\"x\":141,\"y\":70}}");
definition.setConnects("[]");
-
Mockito.when(processDefineMapper.selectById(46)).thenReturn(definition);
-
Mockito.when(processService.genProcessData(Mockito.any())).thenReturn(getProcessData());
-
Map<String, Object> map3 =
processDefinitionService.batchCopyProcessDefinition(
- loginUser, projectName, "46", 1);
+ loginUser, projectName, "46", projectName);
Assert.assertEquals(Status.COPY_PROCESS_DEFINITION_ERROR,
map3.get(Constants.STATUS));
}
diff --git
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index 59e65c5..f18cfd5 100644
---
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -710,6 +710,10 @@ public final class Constants {
*/
public static final String PROJECT_ID = "projectId";
/**
+ * projectCode
+ */
+ public static final String PROJECT_CODE = "projectCode";
+ /**
* processId
*/
public static final String SCHEDULE_ID = "scheduleId";
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java
index 98fe7ee..d43667c 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java
@@ -190,6 +190,43 @@ public class ProcessDefinition {
public ProcessDefinition(){}
+ public ProcessDefinition(Long projectCode,
+ String name,
+ Long code,
+ String description,
+ String globalParams,
+ String locations,
+ String connects,
+ int timeout,
+ int userId,
+ int tenantId) {
+ set(projectCode, name, description, globalParams, connects, locations,
timeout, tenantId);
+ this.code = code;
+ this.userId = userId;
+ Date date = new Date();
+ this.createTime = date;
+ this.updateTime = date;
+ }
+
+ public void set(long projectCode,
+ String name,
+ String description,
+ String globalParams,
+ String connects,
+ String locations,
+ int timeout,
+ int tenantId) {
+ this.projectCode = projectCode;
+ this.name = name;
+ this.description = description;
+ this.globalParams = globalParams;
+ this.locations = locations;
+ this.connects = connects;
+ this.timeout = timeout;
+ this.tenantId = tenantId;
+ this.flag = Flag.YES;
+ }
+
public String getName() {
return name;
}
diff --git
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
index ddead50..618451f 100644
---
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
+++
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
@@ -2205,36 +2205,20 @@ public class ProcessService {
/**
* save processDefinition (including create or update processDefinition)
*/
- public int saveProcessDefine(User operator, Project project, String name,
String description, String globalParams,
- String locations, String connects, int
timeout, int tenantId, long processDefinitionCode,
- int processDefinitionId, Boolean
isFromProcessDefine) {
- ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog();
- Integer version =
processDefineLogMapper.queryMaxVersionForDefinition(processDefinitionCode);
+ public int saveProcessDefine(User operator, ProcessDefinition
processDefinition, Boolean isFromProcessDefine) {
+ ProcessDefinitionLog processDefinitionLog = new
ProcessDefinitionLog(processDefinition);
+ Integer version =
processDefineLogMapper.queryMaxVersionForDefinition(processDefinition.getCode());
int insertVersion = version == null || version == 0 ? 1 : version + 1;
- processDefinitionLog.setUserId(operator.getId());
- processDefinitionLog.setCode(processDefinitionCode);
processDefinitionLog.setVersion(insertVersion);
- processDefinitionLog.setName(name);
- processDefinitionLog.setFlag(Flag.YES);
processDefinitionLog.setReleaseState(isFromProcessDefine ?
ReleaseState.OFFLINE : ReleaseState.ONLINE);
- processDefinitionLog.setProjectCode(project.getCode());
- processDefinitionLog.setDescription(description);
- processDefinitionLog.setGlobalParams(globalParams);
- processDefinitionLog.setLocations(locations);
- processDefinitionLog.setConnects(connects);
- processDefinitionLog.setTimeout(timeout);
- processDefinitionLog.setTenantId(tenantId);
processDefinitionLog.setOperator(operator.getId());
- Date now = new Date();
- processDefinitionLog.setOperateTime(now);
- processDefinitionLog.setUpdateTime(now);
- processDefinitionLog.setCreateTime(now);
+ processDefinitionLog.setOperateTime(processDefinition.getUpdateTime());
int insertLog = processDefineLogMapper.insert(processDefinitionLog);
int result;
- if (0 == processDefinitionId) {
+ if (0 == processDefinition.getId()) {
result = processDefineMapper.insert(processDefinitionLog);
} else {
- processDefinitionLog.setId(processDefinitionId);
+ processDefinitionLog.setId(processDefinition.getId());
result = processDefineMapper.updateById(processDefinitionLog);
}
return (insertLog & result) > 0 ? insertVersion : 0;