#1186 #1150 forbid project rename and remove if it's not empty
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0ab915da Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0ab915da Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0ab915da Branch: refs/heads/master Commit: 0ab915dad029440bf8b9c6091958f99d7cadd241 Parents: 70ad90c Author: Roger Shi <[email protected]> Authored: Sat Jun 17 15:43:36 2017 +0800 Committer: Hongbin Ma <[email protected]> Committed: Sat Jun 17 15:47:29 2017 +0800 ---------------------------------------------------------------------- .../rest/controller2/ProjectControllerV2.java | 35 ++++++++++++++++---- .../org/apache/kylin/rest/msg/CnMessage.java | 7 ++++ .../java/org/apache/kylin/rest/msg/Message.java | 8 +++++ 3 files changed, 44 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/0ab915da/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java b/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java index 52e17b5..5a34807 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller2/ProjectControllerV2.java @@ -32,6 +32,8 @@ import org.apache.kylin.rest.msg.MsgPicker; import org.apache.kylin.rest.request.ProjectRequest; import org.apache.kylin.rest.response.EnvelopeResponse; import org.apache.kylin.rest.response.ResponseCode; +import org.apache.kylin.rest.service.CubeService; +import org.apache.kylin.rest.service.ModelService; import org.apache.kylin.rest.service.ProjectService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,6 +62,14 @@ public class ProjectControllerV2 extends BasicController { @Qualifier("projectService") private ProjectService projectService; + @Autowired + @Qualifier("cubeMgmtService") + private CubeService cubeService; + + @Autowired + @Qualifier("modelMgmtService") + private ModelService modelService; + @RequestMapping(value = "", method = { RequestMethod.GET }, produces = { "application/vnd.apache.kylin-v2+json" }) @ResponseBody @@ -123,21 +133,23 @@ public class ProjectControllerV2 extends BasicController { ProjectInstance projectDesc = deserializeProjectDescV2(projectRequest); - ProjectInstance updatedProj = null; - ProjectInstance currentProject = projectService.getProjectManager().getProject(formerProjectName); if (currentProject == null) { throw new BadRequestException(String.format(msg.getPROJECT_NOT_FOUND(), formerProjectName)); } - updatedProj = projectService.updateProject(projectDesc, currentProject); + // cannot modify project name if it's not empty + if (!currentProject.getName().equals(projectDesc.getName()) && !isProjectEmpty(currentProject.getName())) { + throw new BadRequestException(msg.getRENAME_PROJECT_NOT_EMPTY()); + } + + ProjectInstance updatedProj = projectService.updateProject(projectDesc, currentProject); return new EnvelopeResponse(ResponseCode.CODE_SUCCESS, updatedProj, ""); } private ProjectInstance deserializeProjectDescV2(ProjectRequest projectRequest) throws IOException { - ProjectInstance projectDesc = null; logger.debug("Saving project " + projectRequest.getProjectDescData()); - projectDesc = JsonUtil.readValue(projectRequest.getProjectDescData(), ProjectInstance.class); + ProjectInstance projectDesc = JsonUtil.readValue(projectRequest.getProjectDescData(), ProjectInstance.class); return projectDesc; } @@ -145,9 +157,20 @@ public class ProjectControllerV2 extends BasicController { "application/vnd.apache.kylin-v2+json" }) @ResponseBody public void deleteProjectV2(@PathVariable String projectName) throws IOException { - + Message msg = MsgPicker.getMsg(); ProjectInstance project = projectService.getProjectManager().getProject(projectName); + if (!isProjectEmpty(projectName)) { + throw new BadRequestException(msg.getDELETE_PROJECT_NOT_EMPTY()); + } + projectService.deleteProject(projectName, project); } + private boolean isProjectEmpty(String projectName) throws IOException { + return cubeService.listAllCubes(projectName).isEmpty() + && cubeService.listCubeDrafts(null, null, projectName).isEmpty() + && modelService.listAllModels(null, projectName, false).isEmpty() + && modelService.listModelDrafts(null, projectName).isEmpty(); + } + } http://git-wip-us.apache.org/repos/asf/kylin/blob/0ab915da/server-base/src/main/java/org/apache/kylin/rest/msg/CnMessage.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/msg/CnMessage.java b/server-base/src/main/java/org/apache/kylin/rest/msg/CnMessage.java index 1c6fb69..a828aa0 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/msg/CnMessage.java +++ b/server-base/src/main/java/org/apache/kylin/rest/msg/CnMessage.java @@ -245,6 +245,13 @@ public class CnMessage extends Message { return "æ¾ä¸å°é¡¹ç® '%s'"; } + public String getDELETE_PROJECT_NOT_EMPTY() { + return "ä¸è½å é¤è¯¥é¡¹ç®ï¼å¦éè¦å é¤è¯·å æ¸ ç©ºå ¶ä¸çCubeåModel"; + } + + public String getRENAME_PROJECT_NOT_EMPTY() { + return "ä¸è½éå½å该项ç®ï¼å¦æè¦éå½åè¯·å æ¸ ç©ºå ¶ä¸çCubeåModel"; + } // Table public String getHIVE_TABLE_NOT_FOUND() { return "æ¾ä¸å° Hive 表 '%s'"; http://git-wip-us.apache.org/repos/asf/kylin/blob/0ab915da/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java b/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java index f4bcda7..9ed38bb 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java +++ b/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java @@ -245,6 +245,14 @@ public class Message { return "Cannot find project '%s'."; } + public String getDELETE_PROJECT_NOT_EMPTY() { + return "Cannot delete non-empty project"; + } + + public String getRENAME_PROJECT_NOT_EMPTY() { + return "Cannot rename non-empty project"; + } + // Table public String getHIVE_TABLE_NOT_FOUND() { return "Cannot find Hive table '%s'.";
