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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
