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