You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by dy...@apache.org on 2022/09/08 10:04:25 UTC

[incubator-datalab] 02/03: add sharing dto

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

dyankiv pushed a commit to branch DATALAB-2995
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git

commit 1a88d03e65db6035ec14c35da7c5bf8d8c689076
Author: Denys Yankiv <de...@gmail.com>
AuthorDate: Thu Sep 8 12:50:59 2022 +0300

    add sharing dto
---
 .../backendapi/dao/ImageExploratoryDAOImpl.java    |  2 --
 .../resources/ImageExploratoryResource.java        | 13 +++++--
 ...ojectGroupsShareDTO.java => ImageShareDTO.java} |  7 ++--
 ...ojectGroupsShareDTO.java => SharedWithDTO.java} | 23 +++++++-----
 .../service/ImageExploratoryService.java           | 10 +++---
 .../service/impl/ImageExploratoryServiceImpl.java  | 42 +++++++++++++++++-----
 6 files changed, 69 insertions(+), 28 deletions(-)

diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAOImpl.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAOImpl.java
index a48b6a4b5..994f2ef12 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAOImpl.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/ImageExploratoryDAOImpl.java
@@ -36,7 +36,6 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-import static com.epam.datalab.backendapi.dao.ExploratoryDAO.COMPUTATIONAL_RESOURCES;
 import static com.mongodb.client.model.Filters.and;
 import static com.mongodb.client.model.Filters.eq;
 import static com.mongodb.client.model.Filters.in;
@@ -44,7 +43,6 @@ import static com.mongodb.client.model.Projections.elemMatch;
 import static com.mongodb.client.model.Projections.excludeId;
 import static com.mongodb.client.model.Projections.fields;
 import static com.mongodb.client.model.Projections.include;
-import static com.mongodb.client.model.Updates.push;
 import static com.mongodb.client.model.Updates.set;
 
 @Singleton
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
index 1950b224e..f0dedb41c 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/ImageExploratoryResource.java
@@ -122,9 +122,9 @@ public class ImageExploratoryResource {
 
     @POST
     @Path("share")
-    public Response shareImageWithProjectGroups(@Auth UserInfo ui, @Valid @NotNull ImageProjectGroupsShareDTO dto) {
+    public Response shareImage(@Auth UserInfo ui, @Valid @NotNull ImageShareDTO dto) {
         log.debug("Sharing user image {} with project {} groups", dto.getImageName(), dto.getProjectName());
-        imageExploratoryService.shareImageWithProjectGroups(ui, dto.getImageName(), dto.getProjectName(), dto.getEndpoint());
+        imageExploratoryService.shareImage(ui, dto.getImageName(), dto.getProjectName(), dto.getEndpoint(), dto.getSharedWith());
         return Response.ok(imageExploratoryService.getImagesOfUser(ui)).build();
     }
 
@@ -139,4 +139,13 @@ public class ImageExploratoryResource {
         imageExploratoryService.terminateImage(ui,projectName,endpoint,imageName);
         return Response.ok(imageExploratoryService.getImagesOfUser(ui)).build();
     }
+
+    @GET
+    @Path("sharing_info/{imageName}/{projectName}/{endpoint}")
+    public Response getSharingInfo(@Auth UserInfo ui,
+                                   @PathParam("imageName") String imageName,
+                                   @PathParam("projectName") String projectName,
+                                   @PathParam("endpoint") String endpoint){
+        return Response.ok(imageExploratoryService.getImageSharingInfo(ui.getName(),imageName,projectName, endpoint)).build();
+    }
 }
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageProjectGroupsShareDTO.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageShareDTO.java
similarity index 89%
copy from services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageProjectGroupsShareDTO.java
copy to services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageShareDTO.java
index b1e682ab5..25634c3d4 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageProjectGroupsShareDTO.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageShareDTO.java
@@ -19,15 +19,16 @@
 
 package com.epam.datalab.backendapi.resources.dto;
 
-import com.epam.datalab.dto.SharedWith;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import lombok.Data;
 
+import java.util.Set;
+
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class ImageProjectGroupsShareDTO {
+public class ImageShareDTO {
     private final String imageName;
     private final String projectName;
     private final String endpoint;
-    private final SharedWith sharedWith;
+    private final Set<SharedWithDTO> sharedWith;
 }
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageProjectGroupsShareDTO.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
similarity index 77%
rename from services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageProjectGroupsShareDTO.java
rename to services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
index b1e682ab5..cac806ed1 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageProjectGroupsShareDTO.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
@@ -19,15 +19,22 @@
 
 package com.epam.datalab.backendapi.resources.dto;
 
-import com.epam.datalab.dto.SharedWith;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.Data;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
 
-@Data
+@Getter
+@Setter
+@ToString
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class ImageProjectGroupsShareDTO {
-    private final String imageName;
-    private final String projectName;
-    private final String endpoint;
-    private final SharedWith sharedWith;
+@AllArgsConstructor
+public class SharedWithDTO {
+    private Type type;
+    private String value;
+    public enum Type{
+        USER,
+        GROUP
+    }
 }
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
index e368ae471..8a01f2daf 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/ImageExploratoryService.java
@@ -20,13 +20,11 @@
 package com.epam.datalab.backendapi.service;
 
 import com.epam.datalab.auth.UserInfo;
-import com.epam.datalab.backendapi.resources.dto.ImageFilter;
-import com.epam.datalab.backendapi.resources.dto.ImageInfoRecord;
-import com.epam.datalab.backendapi.resources.dto.ImageUserPermissions;
-import com.epam.datalab.backendapi.resources.dto.ImagesPageInfo;
+import com.epam.datalab.backendapi.resources.dto.*;
 import com.epam.datalab.model.exploratory.Image;
 
 import java.util.List;
+import java.util.Set;
 
 public interface ImageExploratoryService {
 
@@ -48,7 +46,7 @@ public interface ImageExploratoryService {
     ImagesPageInfo getImagesOfUser(UserInfo user);
     ImagesPageInfo getImagesOfUserWithFilter(UserInfo user, ImageFilter imageFilter);
 
-    void shareImageWithProjectGroups(UserInfo user, String imageName, String projectName, String endpoint);
+    void shareImage(UserInfo user, String imageName, String projectName, String endpoint, Set<SharedWithDTO> sharedWithDTOS);
 
     List<ImageInfoRecord> getSharedImages(UserInfo user);
 
@@ -56,4 +54,6 @@ public interface ImageExploratoryService {
 
     ImageUserPermissions getUserImagePermissions(UserInfo userInfo, ImageInfoRecord image);
 
+    Set<SharedWithDTO> getImageSharingInfo(String userName, String imageName, String project, String endpoint);
+
 }
diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
index 302a555aa..33cd704b4 100644
--- a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java
@@ -59,6 +59,7 @@ import org.apache.commons.collections4.CollectionUtils;
 import java.util.*;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static com.epam.datalab.backendapi.domain.AuditActionEnum.CREATE;
 import static com.epam.datalab.backendapi.domain.AuditActionEnum.TERMINATE;
@@ -80,10 +81,6 @@ public class ImageExploratoryServiceImpl implements ImageExploratoryService {
     private ImageExploratoryDAO imageExploratoryDao;
     @Inject
     private ExploratoryLibDAO libDAO;
-
-    @Inject
-    private UserRoleDAO userRoleDAO;
-
     @Inject
     private UserGroupDAO userGroupDAO;
     @Inject
@@ -280,17 +277,46 @@ public class ImageExploratoryServiceImpl implements ImageExploratoryService {
     }
 
     @Override
-    public void shareImageWithProjectGroups(UserInfo user, String imageName, String projectName, String endpoint) {
+    public void shareImage(UserInfo user, String imageName, String projectName, String endpoint, Set<SharedWithDTO> sharedWithDTOS) {
         Set<String> projectGroups = projectService.get(projectName).getGroups();
         Optional<ImageInfoRecord> image = imageExploratoryDao.getImage(user.getName(),imageName,projectName,endpoint);
         image.ifPresent(img -> {
             log.info("image {}", img);
-            SharedWith sharedWith = img.getSharedWith();
-            sharedWith.getGroups().addAll(projectGroups);
-            imageExploratoryDao.updateSharing(sharedWith, img.getName() ,img.getProject(), img.getEndpoint());
+            imageExploratoryDao.updateSharing(toSharedWith(sharedWithDTOS), img.getName() ,img.getProject(), img.getEndpoint());
         });
     }
 
+    @Override
+    public Set<SharedWithDTO> getImageSharingInfo(String userName, String imageName, String project, String endpoint){
+        Optional<ImageInfoRecord> image = imageExploratoryDao.getImage(userName, imageName, project, endpoint);
+        if(image.isPresent()){
+            return toSharedWithDTOs(image.get().getSharedWith());
+        } else {
+            throw new ResourceNotFoundException(IMAGE_NOT_FOUND_MSG);
+        }
+    }
+
+    private Set<SharedWithDTO> toSharedWithDTOs(SharedWith sharedWith){
+        Set<SharedWithDTO> sharedWithDTO = sharedWith.getGroups().stream()
+                .map(s -> new SharedWithDTO(SharedWithDTO.Type.GROUP, s)).collect(Collectors.toSet());
+        Set<SharedWithDTO> users = sharedWith.getUsers().stream()
+                .map(s -> new SharedWithDTO(SharedWithDTO.Type.USER, s)).collect(Collectors.toSet());
+        sharedWithDTO.addAll(users);
+        return sharedWithDTO;
+
+    }
+
+    private SharedWith toSharedWith(Set<SharedWithDTO> dtos){
+        SharedWith sharedWith = new SharedWith();
+        dtos.forEach(dto -> {
+                    if(dto.getType().equals(SharedWithDTO.Type.GROUP)){
+                        sharedWith.getGroups().add(dto.getValue());
+                    }
+                    else sharedWith.getUsers().add(dto.getValue());
+                });
+        return sharedWith;
+    }
+
     public boolean hasAccess(String userName, SharedWith sharedWith){
         boolean accessByUserName = sharedWith.getUsers().contains(userName);
         boolean accessByGroup = sharedWith.getGroups().stream().anyMatch(groupName -> userGroupDAO.getUsers(groupName).contains(userName));


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org