This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch feature/projects
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git


The following commit(s) were added to refs/heads/feature/projects by this push:
     new bca152a  DLAB-830 added project statuses and possibility to terminate 
project
bca152a is described below

commit bca152aac4c96874833b4ff649ef20c4e36eaa17
Author: bhliva <[email protected]>
AuthorDate: Mon Jul 1 13:49:13 2019 +0300

    DLAB-830 added project statuses and possibility to terminate project
---
 ...CreateProjectResult.java => ProjectResult.java} |  2 +-
 .../dlab/dto/{ => project}/ProjectCreateDTO.java   |  3 ++-
 .../epam/dlab/dto/project/ProjectTerminateDTO.java | 13 +++++++++++
 .../response/handlers/ProjectCallbackHandler.java  | 12 ++++++-----
 .../dlab/backendapi/resources/ProjectResource.java | 12 ++++++++++-
 .../dlab/backendapi/service/ProjectService.java    |  4 +++-
 .../service/impl/ProjectServiceImpl.java           | 22 ++++++++++++++-----
 .../mock_response/gcp/project_terminate.json       | 12 +++++++++++
 .../com/epam/dlab/backendapi/dao/ProjectDAO.java   |  2 +-
 .../epam/dlab/backendapi/dao/ProjectDAOImpl.java   |  9 ++++----
 .../epam/dlab/backendapi/domain/ProjectDTO.java    | 12 +++++++++--
 .../dlab/backendapi/resources/ProjectResource.java |  6 ++----
 .../resources/callback/ProjectCallback.java        | 14 ++++++------
 .../dlab/backendapi/service/ProjectService.java    |  3 ++-
 .../service/impl/ProjectServiceImpl.java           | 25 +++++++++++++++++-----
 15 files changed, 112 insertions(+), 39 deletions(-)

diff --git 
a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/CreateProjectResult.java
 
b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectResult.java
similarity index 82%
rename from 
services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/CreateProjectResult.java
rename to 
services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectResult.java
index 3059b0e..c1e6827 100644
--- 
a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/CreateProjectResult.java
+++ 
b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/project/ProjectResult.java
@@ -7,7 +7,7 @@ import lombok.Data;
 
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class CreateProjectResult extends StatusBaseDTO<CreateProjectResult> {
+public class ProjectResult extends StatusBaseDTO<ProjectResult> {
        private ProjectEdgeInfo edgeInfo;
        @JsonProperty("project_name")
        private String projectName;
diff --git 
a/services/dlab-model/src/main/java/com/epam/dlab/dto/ProjectCreateDTO.java 
b/services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectCreateDTO.java
similarity index 81%
rename from 
services/dlab-model/src/main/java/com/epam/dlab/dto/ProjectCreateDTO.java
rename to 
services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectCreateDTO.java
index a5ec693..a933f0b 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/ProjectCreateDTO.java
+++ 
b/services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectCreateDTO.java
@@ -1,5 +1,6 @@
-package com.epam.dlab.dto;
+package com.epam.dlab.dto.project;
 
+import com.epam.dlab.dto.ResourceBaseDTO;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Builder;
 import lombok.Data;
diff --git 
a/services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectTerminateDTO.java
 
b/services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectTerminateDTO.java
new file mode 100644
index 0000000..533e342
--- /dev/null
+++ 
b/services/dlab-model/src/main/java/com/epam/dlab/dto/project/ProjectTerminateDTO.java
@@ -0,0 +1,13 @@
+package com.epam.dlab.dto.project;
+
+import com.epam.dlab.dto.ResourceBaseDTO;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class ProjectTerminateDTO extends ResourceBaseDTO<ProjectTerminateDTO> {
+       @JsonProperty("project_name")
+       private final String name;
+}
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ProjectCallbackHandler.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ProjectCallbackHandler.java
index 6f7f9eb..71a21e1 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ProjectCallbackHandler.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ProjectCallbackHandler.java
@@ -3,23 +3,25 @@ package com.epam.dlab.backendapi.core.response.handlers;
 import com.epam.dlab.auth.SystemUserInfoService;
 import com.epam.dlab.backendapi.core.commands.DockerAction;
 import com.epam.dlab.dto.UserInstanceStatus;
-import com.epam.dlab.dto.base.project.CreateProjectResult;
 import com.epam.dlab.dto.base.project.ProjectEdgeInfo;
+import com.epam.dlab.dto.base.project.ProjectResult;
 import com.epam.dlab.exceptions.DlabException;
 import com.epam.dlab.rest.client.RESTService;
 import com.fasterxml.jackson.databind.JsonNode;
 
 import java.io.IOException;
 
-public class ProjectCallbackHandler extends 
ResourceCallbackHandler<CreateProjectResult> {
+public class ProjectCallbackHandler extends 
ResourceCallbackHandler<ProjectResult> {
 
 
        private final String callbackUri;
+       private final String projectName;
 
        public ProjectCallbackHandler(SystemUserInfoService 
systemUserInfoService, RESTService selfService, String user,
-                                                                 String uuid, 
DockerAction action, String callbackUri) {
+                                                                 String uuid, 
DockerAction action, String callbackUri, String projectName) {
                super(systemUserInfoService, selfService, user, uuid, action);
                this.callbackUri = callbackUri;
+               this.projectName = projectName;
        }
 
        @Override
@@ -28,13 +30,13 @@ public class ProjectCallbackHandler extends 
ResourceCallbackHandler<CreateProjec
        }
 
        @Override
-       protected CreateProjectResult parseOutResponse(JsonNode resultNode, 
CreateProjectResult baseStatus) {
+       protected ProjectResult parseOutResponse(JsonNode resultNode, 
ProjectResult baseStatus) {
+               baseStatus.setProjectName(projectName);
                if (resultNode != null && getAction() == DockerAction.CREATE
                                && 
UserInstanceStatus.of(baseStatus.getStatus()) != UserInstanceStatus.FAILED) {
                        try {
                                final ProjectEdgeInfo projectEdgeInfo = 
mapper.readValue(resultNode.toString(), ProjectEdgeInfo.class);
                                baseStatus.setEdgeInfo(projectEdgeInfo);
-                               
baseStatus.setProjectName(resultNode.get("project_name").asText());
                        } catch (IOException e) {
                                throw new DlabException("Cannot parse the EDGE 
info in JSON: " + e.getLocalizedMessage(), e);
                        }
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
index 6bb8826..fa7aee1 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
@@ -2,7 +2,8 @@ package com.epam.dlab.backendapi.resources;
 
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.service.ProjectService;
-import com.epam.dlab.dto.ProjectCreateDTO;
+import com.epam.dlab.dto.project.ProjectCreateDTO;
+import com.epam.dlab.dto.project.ProjectTerminateDTO;
 import com.google.inject.Inject;
 import io.dropwizard.auth.Auth;
 
@@ -22,10 +23,19 @@ public class ProjectResource {
                this.projectService = projectService;
        }
 
+       @Path("/create")
        @POST
        @Consumes(MediaType.APPLICATION_JSON)
        @Produces(MediaType.APPLICATION_JSON)
        public Response createProject(@Auth UserInfo userInfo, ProjectCreateDTO 
dto) {
                return Response.ok(projectService.create(userInfo, 
dto)).build();
        }
+
+       @Path("/terminate")
+       @POST
+       @Consumes(MediaType.APPLICATION_JSON)
+       @Produces(MediaType.APPLICATION_JSON)
+       public Response terminateProject(@Auth UserInfo userInfo, 
ProjectTerminateDTO dto) {
+               return Response.ok(projectService.terminate(userInfo, 
dto)).build();
+       }
 }
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
index 60656f4..b18aa8c 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
@@ -1,9 +1,11 @@
 package com.epam.dlab.backendapi.service;
 
 import com.epam.dlab.auth.UserInfo;
-import com.epam.dlab.dto.ProjectCreateDTO;
+import com.epam.dlab.dto.project.ProjectCreateDTO;
+import com.epam.dlab.dto.project.ProjectTerminateDTO;
 
 public interface ProjectService {
 
        String create(UserInfo userInfo, ProjectCreateDTO projectCreateDTO);
+       String terminate(UserInfo userInfo, ProjectTerminateDTO dto);
 }
diff --git 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
index dc6401a..4eebcfc 100644
--- 
a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
+++ 
b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
@@ -7,7 +7,9 @@ import com.epam.dlab.backendapi.core.commands.*;
 import 
com.epam.dlab.backendapi.core.response.folderlistener.FolderListenerExecutor;
 import com.epam.dlab.backendapi.core.response.handlers.ProjectCallbackHandler;
 import com.epam.dlab.backendapi.service.ProjectService;
-import com.epam.dlab.dto.ProjectCreateDTO;
+import com.epam.dlab.dto.ResourceBaseDTO;
+import com.epam.dlab.dto.project.ProjectCreateDTO;
+import com.epam.dlab.dto.project.ProjectTerminateDTO;
 import com.epam.dlab.rest.client.RESTService;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.inject.Inject;
@@ -15,6 +17,7 @@ import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
 public class ProjectServiceImpl implements ProjectService {
+       private static final String PROJECT_IMAGE = "docker.dlab-project";
        @Inject
        protected RESTService selfService;
        @Inject
@@ -30,24 +33,33 @@ public class ProjectServiceImpl implements ProjectService {
 
        @Override
        public String create(UserInfo userInfo, ProjectCreateDTO dto) {
+               return executeDocker(userInfo, dto, DockerAction.CREATE, 
dto.getName());
+       }
+
+       @Override
+       public String terminate(UserInfo userInfo, ProjectTerminateDTO dto) {
+               return executeDocker(userInfo, dto, DockerAction.TERMINATE, 
dto.getName());
+       }
+
+       private String executeDocker(UserInfo userInfo, ResourceBaseDTO dto, 
DockerAction action, String projectName) {
                String uuid = DockerCommands.generateUUID();
 
                
folderListenerExecutor.start(configuration.getKeyLoaderDirectory(),
                                configuration.getKeyLoaderPollTimeout(),
                                new 
ProjectCallbackHandler(systemUserInfoService, selfService, userInfo.getName(), 
uuid,
-                                               DockerAction.CREATE, 
"/api/project/status"));
+                                               action, "/api/project/status", 
projectName));
 
                RunDockerCommand runDockerCommand = new RunDockerCommand()
                                .withInteractive()
-                               .withName(String.join("_", dto.getName(), 
"project"))
+                               .withName(String.join("_", projectName, 
"project"))
                                
.withVolumeForRootKeys(configuration.getKeyDirectory())
                                
.withVolumeForResponse(configuration.getKeyLoaderDirectory())
                                
.withVolumeForLog(configuration.getDockerLogDirectory(), "project")
                                .withResource("project")
                                .withRequestId(uuid)
                                .withConfKeyName(configuration.getAdminKey())
-                               .withImage("docker.dlab-project")
-                               .withAction(DockerAction.CREATE);
+                               .withImage(PROJECT_IMAGE)
+                               .withAction(action);
 
                try {
                        commandExecutor.executeAsync(userInfo.getName(), uuid, 
commandBuilder.buildCommand(runDockerCommand, dto));
diff --git 
a/services/provisioning-service/src/main/resources/mock_response/gcp/project_terminate.json
 
b/services/provisioning-service/src/main/resources/mock_response/gcp/project_terminate.json
new file mode 100644
index 0000000..7420ded
--- /dev/null
+++ 
b/services/provisioning-service/src/main/resources/mock_response/gcp/project_terminate.json
@@ -0,0 +1,12 @@
+{
+  "status": "ok",
+  "response": {
+    "result": {
+      "Action": "Terminate edge node",
+      "project_tag": "prj1",
+      "service_base_name": "${CONF_SERVICE_BASE_NAME}"
+    },
+    "log": "/var/log/dlab/edge/edge_${EDGE_USER_NAME}_${REQUEST_ID}.log"
+  },
+  "request_id": "${REQUEST_ID}"
+}
\ No newline at end of file
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
index 2e2ab55..0532f17 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
@@ -11,7 +11,7 @@ import java.util.Set;
 public interface ProjectDAO {
        List<ProjectDTO> getProjects();
 
-       List<ProjectDTO> getUserProjects(UserInfo userInfo);
+       List<ProjectDTO> getUserProjectsWithStatus(UserInfo userInfo, 
ProjectDTO.Status status);
 
        void create(ProjectDTO projectDTO);
 
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
index dd89e5d..484438d 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
@@ -15,8 +15,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 
-import static com.mongodb.client.model.Filters.eq;
-import static com.mongodb.client.model.Filters.in;
+import static com.mongodb.client.model.Filters.*;
 
 public class ProjectDAOImpl extends BaseDAO implements ProjectDAO {
 
@@ -39,9 +38,9 @@ public class ProjectDAOImpl extends BaseDAO implements 
ProjectDAO {
        }
 
        @Override
-       public List<ProjectDTO> getUserProjects(UserInfo userInfo) {
-                       return find(PROJECTS_COLLECTION, in(GROUPS, 
Sets.union(userGroupDao.getUserGroups(userInfo.getName()),
-                                       userInfo.getRoles())), 
ProjectDTO.class);
+       public List<ProjectDTO> getUserProjectsWithStatus(UserInfo userInfo, 
ProjectDTO.Status status) {
+               return find(PROJECTS_COLLECTION, and(in(GROUPS, 
Sets.union(userGroupDao.getUserGroups(userInfo.getName()),
+                               userInfo.getRoles())), eq(STATUS_FIELD, 
status.toString())), ProjectDTO.class);
        }
 
        @Override
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
index 8490bd3..2305774 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ProjectDTO.java
@@ -1,5 +1,6 @@
 package com.epam.dlab.backendapi.domain;
 
+import com.epam.dlab.dto.UserInstanceStatus;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import lombok.Data;
 
@@ -27,7 +28,14 @@ public class ProjectDTO {
 
        public enum Status {
                CREATING,
-               CREATED,
-               FAILED
+               ACTIVE,
+               FAILED, TERMINATED, TERMINATING;
+
+               public static Status from(UserInstanceStatus 
userInstanceStatus) {
+                       if (userInstanceStatus == UserInstanceStatus.RUNNING) {
+                               return ACTIVE;
+                       }
+                       return Status.valueOf(userInstanceStatus.name());
+               }
        }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
index e8414a4..3a2b3ff 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
@@ -107,9 +107,7 @@ public class ProjectResource {
        @Path("/me")
        @GET
        @Produces(MediaType.APPLICATION_JSON)
-       public Response getUserProjects(@Parameter(hidden = true) @Auth 
UserInfo userInfo,
-                                                               
@Parameter(description = "Project name")
-                                                               
@PathParam("name") String name) {
+       public Response getUserProjects(@Parameter(hidden = true) @Auth 
UserInfo userInfo) {
                return Response
                                .ok(projectService.getUserProjects(userInfo))
                                .build();
@@ -144,7 +142,7 @@ public class ProjectResource {
                        @Parameter(hidden = true) @Auth UserInfo userInfo,
                        @Parameter(description = "Project name")
                        @PathParam("name") String name) {
-               projectService.remove(name);
+               projectService.terminate(userInfo, name);
                return Response.ok().build();
        }
 
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
index 9807119..a1b0039 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
@@ -5,7 +5,7 @@ import com.epam.dlab.backendapi.dao.ProjectDAO;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.dto.UserInstanceStatus;
-import com.epam.dlab.dto.base.project.CreateProjectResult;
+import com.epam.dlab.dto.base.project.ProjectResult;
 import com.google.inject.Inject;
 import io.dropwizard.auth.Auth;
 import lombok.extern.slf4j.Slf4j;
@@ -13,7 +13,6 @@ import lombok.extern.slf4j.Slf4j;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
@@ -33,13 +32,14 @@ public class ProjectCallback {
 
 
        @POST
-       public Response updateProjectStatus(@Auth UserInfo userInfo, 
CreateProjectResult projectResult) {
+       public Response updateProjectStatus(@Auth UserInfo userInfo, 
ProjectResult projectResult) {
                requestId.checkAndRemove(projectResult.getRequestId());
-               if (UserInstanceStatus.of(projectResult.getStatus()) == 
UserInstanceStatus.FAILED) {
-                       projectDAO.updateStatus(projectResult.getProjectName(), 
ProjectDTO.Status.FAILED);
+               final String projectName = projectResult.getProjectName();
+               final UserInstanceStatus status = 
UserInstanceStatus.of(projectResult.getStatus());
+               if (UserInstanceStatus.CREATED == status) {
+                       projectDAO.updateEdgeInfoAndStatus(projectName, 
projectResult.getEdgeInfo(), ProjectDTO.Status.ACTIVE);
                } else {
-                       
projectDAO.updateEdgeInfoAndStatus(projectResult.getProjectName(), 
projectResult.getEdgeInfo(),
-                                       ProjectDTO.Status.CREATED);
+                       projectDAO.updateStatus(projectName, 
ProjectDTO.Status.from(status));
                }
                return Response.ok().build();
        }
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
index 3245144..4c15d59 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
@@ -7,13 +7,14 @@ import java.util.List;
 
 public interface ProjectService {
        List<ProjectDTO> getProjects();
+
        List<ProjectDTO> getUserProjects(UserInfo userInfo);
 
        void create(UserInfo userInfo, ProjectDTO projectDTO);
 
        ProjectDTO get(String name);
 
-       void remove(String name);
+       void terminate(UserInfo userInfo, String name);
 
        void update(ProjectDTO projectDTO);
 
diff --git 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
index 637bdd3..8970939 100644
--- 
a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
+++ 
b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
@@ -8,7 +8,8 @@ import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.backendapi.service.EnvironmentService;
 import com.epam.dlab.backendapi.service.ProjectService;
 import com.epam.dlab.constants.ServiceConsts;
-import com.epam.dlab.dto.ProjectCreateDTO;
+import com.epam.dlab.dto.project.ProjectCreateDTO;
+import com.epam.dlab.dto.project.ProjectTerminateDTO;
 import com.epam.dlab.exceptions.ResourceConflictException;
 import com.epam.dlab.exceptions.ResourceNotFoundException;
 import com.epam.dlab.rest.client.RESTService;
@@ -26,7 +27,8 @@ import static java.util.stream.Stream.concat;
 @Slf4j
 public class ProjectServiceImpl implements ProjectService {
 
-       private static final String CREATE_PRJ_API = "infrastructure/project";
+       private static final String CREATE_PRJ_API = 
"infrastructure/project/create";
+       private static final String TERMINATE_PRJ_API = 
"infrastructure/project/terminate";
        private final ProjectDAO projectDAO;
        private final EnvironmentService environmentService;
        private final UserGroupDao userGroupDao;
@@ -52,7 +54,7 @@ public class ProjectServiceImpl implements ProjectService {
 
        @Override
        public List<ProjectDTO> getUserProjects(UserInfo userInfo) {
-               return projectDAO.getUserProjects(userInfo);
+               return projectDAO.getUserProjectsWithStatus(userInfo, 
ProjectDTO.Status.ACTIVE);
        }
 
        @Override
@@ -72,9 +74,10 @@ public class ProjectServiceImpl implements ProjectService {
        }
 
        @Override
-       public void remove(String name) {
+       public void terminate(UserInfo userInfo, String name) {
+               terminateProjectOnCloud(userInfo, name);
                environmentService.terminateProjectEnvironment(name);
-               projectDAO.remove(name);
+               projectDAO.updateStatus(name, ProjectDTO.Status.TERMINATING);
        }
 
        @Override
@@ -112,6 +115,18 @@ public class ProjectServiceImpl implements ProjectService {
                }
        }
 
+
+       private void terminateProjectOnCloud(UserInfo user, String projectName) 
{
+               try {
+                       String uuid = 
provisioningService.post(TERMINATE_PRJ_API, user.getAccessToken(),
+                                       new ProjectTerminateDTO(projectName), 
String.class);
+                       requestId.put(user.getName(), uuid);
+               } catch (Exception e) {
+                       log.error("Can not terminate project due to: {}", 
e.getMessage());
+                       projectDAO.updateStatus(projectName, 
ProjectDTO.Status.FAILED);
+               }
+       }
+
        private Supplier<ResourceNotFoundException> projectNotFound() {
                return () -> new ResourceNotFoundException("Project with passed 
name not found");
        }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to