You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/06/29 05:48:20 UTC

[13/50] kylin git commit: #1186 #1150 forbid project rename and remove if it's not empty

#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 <ro...@hotmail.com>
Authored: Sat Jun 17 15:43:36 2017 +0800
Committer: Hongbin Ma <ma...@kyligence.io>
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'.";