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

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


The following commit(s) were added to refs/heads/DATALAB-2999 by this push:
     new 32124f412 refactor image service
32124f412 is described below

commit 32124f41208e2905b130c7946fc1504620add9be
Author: Denys Yankiv <[email protected]>
AuthorDate: Mon Sep 19 14:23:15 2022 +0300

    refactor image service
---
 .../resources/ImageExploratoryResource.java        |   2 +-
 .../backendapi/resources/dto/SharedWithDTO.java    |  17 +-
 .../dto/{SharedWithDTO.java => SharingInfo.java}   |  21 +--
 .../service/ImageExploratoryService.java           |   8 +-
 .../service/impl/ImageExploratoryServiceImpl.java  | 188 +++++++++++----------
 5 files changed, 122 insertions(+), 114 deletions(-)

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 da310d640..3b3c92af9 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
@@ -147,7 +147,7 @@ public class ImageExploratoryResource {
                                    @PathParam("imageName") String imageName,
                                    @PathParam("projectName") String 
projectName,
                                    @PathParam("endpoint") String endpoint){
-        return 
Response.ok(imageExploratoryService.getImageSharingInfo(ui.getName(),imageName,projectName,
 endpoint)).build();
+        return 
Response.ok(imageExploratoryService.getSharingInfo(ui.getName(),imageName,projectName,
 endpoint)).build();
     }
 
     @GET
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
index 5d4267dc7..8dcdf6ea5 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
@@ -22,17 +22,28 @@ package com.epam.datalab.backendapi.resources.dto;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import lombok.*;
 
+import javax.annotation.Nonnull;
+import java.util.Comparator;
+
 @Getter
 @Setter
 @ToString
 @EqualsAndHashCode
 @JsonIgnoreProperties(ignoreUnknown = true)
 @AllArgsConstructor
-public class SharedWithDTO {
+public class SharedWithDTO implements Comparable<SharedWithDTO>{
     private Type type;
     private String value;
+
     public enum Type{
-        USER,
-        GROUP
+        GROUP,
+        USER
+    }
+
+    @Override
+    public int compareTo(@Nonnull SharedWithDTO o) {
+        return Comparator.comparing(SharedWithDTO::getType)
+                .thenComparing(SharedWithDTO::getValue)
+                .compare(this, o);
     }
 }
diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharingInfo.java
similarity index 74%
copy from 
services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
copy to 
services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharingInfo.java
index 5d4267dc7..89d31809a 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharedWithDTO.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/SharingInfo.java
@@ -17,22 +17,17 @@
  * under the License.
  */
 
+
 package com.epam.datalab.backendapi.resources.dto;
 
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.*;
+import lombok.Getter;
+import lombok.Setter;
 
+import java.util.Set;
+import java.util.TreeSet;
 @Getter
 @Setter
-@ToString
-@EqualsAndHashCode
-@JsonIgnoreProperties(ignoreUnknown = true)
-@AllArgsConstructor
-public class SharedWithDTO {
-    private Type type;
-    private String value;
-    public enum Type{
-        USER,
-        GROUP
-    }
+public class SharingInfo {
+    public Set<SharedWithDTO> sharedWith = new TreeSet<>();
+    public Set<SharedWithDTO> canBeSharedWith = new TreeSet<>();
 }
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 414b6b52f..a81e8f144 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
@@ -31,19 +31,19 @@ public interface ImageExploratoryService {
     String createImage(UserInfo user, String project, String exploratoryName, 
String imageName, String imageDescription, String info);
 
     void terminateImage(UserInfo user, String project, String endpoint, String 
imageName);
+
     void finishTerminateImage(String imageName, String projectName, String 
endpoint);
 
     void finishImageCreate(Image image, String exploratoryName, String 
newNotebookIp);
 
     List<ImageInfoRecord> getNotFailedImages(UserInfo user, String 
dockerImage, String project, String endpoint);
 
-    List<ImageInfoRecord> getNotFailedImages(String dockerImage, String 
project, String endpoint);
-
     ImageInfoRecord getImage(String user, String name, String project, String 
endpoint);
 
     ImageInfoRecord getImage(String name, String project, String endpoint);
 
     List<ImageInfoRecord> getImagesForProject(String project);
+
     ImagesPageInfo getImagesOfUser(UserInfo user, ImageFilter imageFilter);
 
     void shareImage(UserInfo user, String imageName, String projectName, 
String endpoint, Set<SharedWithDTO> sharedWithDTOS);
@@ -54,9 +54,9 @@ public interface ImageExploratoryService {
 
     ImageUserPermissions getUserImagePermissions(UserInfo userInfo, 
ImageInfoRecord image);
 
-    Set<SharedWithDTO> getImageSharingInfo(String userName, String imageName, 
String project, String endpoint);
+    SharingInfo getSharingInfo(String userName, String imageName, String 
project, String endpoint);
 
     boolean canCreateFromImage(UserInfo userInfo, String imageName, String 
project, String endpoint);
 
-    Set<SharedWithDTO> getUsersAndGroupsForSharing(String userName,String 
imageName, String project, String endpoint, String value);
+    Set<SharedWithDTO> getUsersAndGroupsForSharing(String userName, String 
imageName, String project, String endpoint, String value);
 }
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 8ec5da79f..67d8658cc 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
@@ -42,7 +42,6 @@ import com.epam.datalab.dto.UserInstanceStatus;
 import com.epam.datalab.dto.exploratory.ExploratoryStatusDTO;
 import com.epam.datalab.dto.exploratory.ImageSharingStatus;
 import com.epam.datalab.dto.exploratory.ImageStatus;
-import com.epam.datalab.exceptions.DatalabException;
 import com.epam.datalab.exceptions.ResourceAlreadyExistException;
 import com.epam.datalab.exceptions.ResourceNotFoundException;
 import com.epam.datalab.model.ResourceType;
@@ -115,7 +114,7 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
                 .description(imageDescription)
                 .status(ImageStatus.CREATING)
                 .user(user.getName())
-                        .sharedWith(new SharedWith())
+                .sharedWith(new SharedWith())
                 .libraries(fetchExploratoryLibs(libraries))
                 .computationalLibraries(fetchComputationalLibs(libraries))
                 .clusterConfig(userInstance.getClusterConfig())
@@ -143,9 +142,9 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
     @Override
     public void terminateImage(@User UserInfo user, @Project String project, 
String endpoint, String imageName) {
         Optional<ImageInfoRecord> image = 
imageExploratoryDao.getImage(user.getName(), imageName, project, endpoint);
-        if(image.isPresent()){
+        if (image.isPresent()) {
             ImageInfoRecord imageInfoRecord = image.get();
-            
imageExploratoryDao.updateImageStatus(user.getName(),imageName,project,endpoint,ImageStatus.TERMINATING);
+            imageExploratoryDao.updateImageStatus(user.getName(), imageName, 
project, endpoint, ImageStatus.TERMINATING);
             EndpointDTO endpointDTO = endpointService.get(endpoint);
             ProjectDTO projectDTO = projectService.get(project);
             UserInstanceDTO userInstance = 
exploratoryDAO.fetchExploratoryFields(user.getName(), project, 
imageInfoRecord.getInstanceName());
@@ -187,20 +186,15 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
     @Override
     public List<ImageInfoRecord> getNotFailedImages(UserInfo user, String 
dockerImage, String project, String endpoint) {
         List<ImageInfoRecord> images = new ArrayList<>();
-        if(UserRoles.checkAccess(user, 
RoleType.PAGE,CREATE_NOTEBOOK_BASED_ON_OWN_IMAGES,user.getRoles())){
+        if (UserRoles.checkAccess(user, RoleType.PAGE, 
CREATE_NOTEBOOK_BASED_ON_OWN_IMAGES, user.getRoles())) {
             images.addAll(imageExploratoryDao.getImages(user.getName(), 
dockerImage, project, endpoint, ImageStatus.ACTIVE, ImageStatus.CREATING));
         }
-        if (UserRoles.checkAccess(user,RoleType.PAGE, 
CREATE_NOTEBOOK_BASED_ON_SHARED_IMAGES,user.getRoles())){
-            images.addAll(getSharedImages(user,dockerImage,project,endpoint));
+        if (UserRoles.checkAccess(user, RoleType.PAGE, 
CREATE_NOTEBOOK_BASED_ON_SHARED_IMAGES, user.getRoles())) {
+            images.addAll(getSharedImages(user, dockerImage, project, 
endpoint));
         }
         return images;
     }
 
-    @Override
-    public List<ImageInfoRecord> getNotFailedImages(String dockerImage, String 
project, String endpoint) {
-        return imageExploratoryDao.getImages(project, endpoint, dockerImage);
-    }
-
     @Override
     public ImageInfoRecord getImage(String user, String name, String project, 
String endpoint) {
         return imageExploratoryDao.getImage(user, name, project, 
endpoint).orElseThrow(() ->
@@ -222,24 +216,24 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
     public ImagesPageInfo getImagesOfUser(UserInfo user, ImageFilter 
imageFilter) {
         log.debug("Loading list of images for user {}", user.getName());
         List<ImageInfoRecord> images = 
imageExploratoryDao.getImagesOfUser(user.getName());
-        images.forEach(img -> 
img.setSharingStatus(getImageSharingStatus(user.getName(),img)));
+        images.forEach(img -> 
img.setSharingStatus(getImageSharingStatus(user.getName(), img)));
         images.addAll(getSharedImages(user));
         ImageFilterFormData filterData = getDataForFilter(images);
 
-        if(imageFilter == null){
-            if(userSettingsDAO.getImageFilter(user.getName()).isPresent()){
+        if (imageFilter == null) {
+            if (userSettingsDAO.getImageFilter(user.getName()).isPresent()) {
                 imageFilter = 
userSettingsDAO.getImageFilter(user.getName()).get();
                 images = filterImages(images, imageFilter);
             } else {
                 imageFilter = new ImageFilter();
-                userSettingsDAO.setUserImageFilter(user.getName(),imageFilter);
+                userSettingsDAO.setUserImageFilter(user.getName(), 
imageFilter);
             }
-        } else{
+        } else {
             images = filterImages(images, imageFilter);
-            userSettingsDAO.setUserImageFilter(user.getName(),imageFilter);
+            userSettingsDAO.setUserImageFilter(user.getName(), imageFilter);
         }
 
-        images.forEach(img -> 
img.setImageUserPermissions(getUserImagePermissions(user,img)));
+        images.forEach(img -> 
img.setImageUserPermissions(getUserImagePermissions(user, img)));
         final List<ImageInfoRecord> finalImages = images;
         List<ProjectImagesInfo> projectImagesInfoList = 
projectService.getUserProjects(user, Boolean.FALSE)
                 .stream()
@@ -260,89 +254,41 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
 
     @Override
     public void shareImage(UserInfo user, String imageName, String 
projectName, String endpoint, Set<SharedWithDTO> sharedWithDTOS) {
-        Optional<ImageInfoRecord> image = 
imageExploratoryDao.getImage(user.getName(),imageName,projectName,endpoint);
+        Optional<ImageInfoRecord> image = 
imageExploratoryDao.getImage(user.getName(), imageName, projectName, endpoint);
         image.ifPresent(img -> {
             log.info("image {}", img);
-            imageExploratoryDao.updateSharing(toSharedWith(sharedWithDTOS), 
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_FOR_USER_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));
-        return accessByUserName || accessByGroup;
-    }
-
-    private Map<String, List<Library>> fetchComputationalLibs(List<Library> 
libraries) {
-        return libraries.stream()
-                .filter(resourceTypePredicate(ResourceType.COMPUTATIONAL))
-                .collect(Collectors.toMap(Library::getResourceName, 
Lists::newArrayList, this::merge));
-    }
-
-    private List<Library> merge(List<Library> oldValue, List<Library> 
newValue) {
-        oldValue.addAll(newValue);
-        return oldValue;
-    }
-
-    private List<Library> fetchExploratoryLibs(List<Library> libraries) {
-        return libraries.stream()
-                .filter(resourceTypePredicate(ResourceType.EXPLORATORY))
-                .collect(Collectors.toList());
-    }
-
-    private Predicate<Library> resourceTypePredicate(ResourceType 
resourceType) {
-        return l -> resourceType == l.getType();
+    public SharingInfo getSharingInfo(String userName, String imageName, 
String project, String endpoint) {
+        SharingInfo sharingInfo = new SharingInfo();
+        sharingInfo.setSharedWith(getImageSharingInfo(userName, imageName, 
project, endpoint));
+        sharingInfo.setCanBeSharedWith(getUsersAndGroupsForSharing(userName, 
imageName, project, endpoint, ""));
+        return sharingInfo;
     }
 
+    @Override
     public List<ImageInfoRecord> getSharedImages(UserInfo userInfo) {
         List<ImageInfoRecord> sharedImages = 
imageExploratoryDao.getAllImages().stream()
                 .filter(img -> !img.getUser().equals(userInfo.getName()))
-                .filter(img -> 
hasAccess(userInfo.getName(),img.getSharedWith()))
+                .filter(img -> hasAccess(userInfo.getName(), 
img.getSharedWith()))
                 .collect(Collectors.toList());
-        sharedImages.forEach(img -> 
img.setSharingStatus(getImageSharingStatus(userInfo.getName(),img)));
+        sharedImages.forEach(img -> 
img.setSharingStatus(getImageSharingStatus(userInfo.getName(), img)));
         log.info("Shared with user {} images : {}", userInfo.getName(), 
sharedImages);
         return sharedImages;
     }
 
+    @Override
     public List<ImageInfoRecord> getSharedImages(UserInfo userInfo, String 
dockerImage, String project, String endpoint) {
         List<ImageInfoRecord> sharedImages = 
imageExploratoryDao.getAllImages().stream()
                 .filter(img -> img.getStatus().equals(ImageStatus.ACTIVE))
                 .filter(img -> !img.getUser().equals(userInfo.getName()))
                 .filter(img -> img.getDockerImage().equals(dockerImage) && 
img.getProject().equals(project) && img.getEndpoint().equals(endpoint))
-                .filter(img -> 
hasAccess(userInfo.getName(),img.getSharedWith()))
+                .filter(img -> hasAccess(userInfo.getName(), 
img.getSharedWith()))
                 .collect(Collectors.toList());
-        sharedImages.forEach(img -> 
img.setSharingStatus(getImageSharingStatus(userInfo.getName(),img)));
+        sharedImages.forEach(img -> 
img.setSharingStatus(getImageSharingStatus(userInfo.getName(), img)));
         log.info("Found shared with user {} images {}", userInfo.getName(), 
sharedImages);
         return sharedImages;
     }
@@ -354,42 +300,98 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
         boolean canTerminate = (image.getStatus().equals(ImageStatus.ACTIVE) 
|| image.getStatus().equals(ImageStatus.FAILED)) &&
                 (image.getUser().equals(userInfo.getName())
                         && UserRoles.checkAccess(userInfo, RoleType.PAGE, 
TERMINATE_OWN_IMAGES_PAGE, userInfo.getRoles()));
-        return new ImageUserPermissions(canShare,canTerminate);
+        return new ImageUserPermissions(canShare, canTerminate);
     }
 
     @Override
-    public boolean canCreateFromImage(UserInfo userInfo, String imageName, 
String project, String endpoint){
+    public boolean canCreateFromImage(UserInfo userInfo, String imageName, 
String project, String endpoint) {
         ImageInfoRecord image = getImage(imageName, project, endpoint);
-        if(image.getUser().equals(userInfo.getName())){
-              return UserRoles.checkAccess(userInfo,RoleType.PAGE, 
CREATE_NOTEBOOK_BASED_ON_OWN_IMAGES, userInfo.getRoles() );
+        if (image.getUser().equals(userInfo.getName())) {
+            return UserRoles.checkAccess(userInfo, RoleType.PAGE, 
CREATE_NOTEBOOK_BASED_ON_OWN_IMAGES, userInfo.getRoles());
         } else {
             return hasAccess(userInfo.getName(), image.getSharedWith())
-                    && UserRoles.checkAccess(userInfo, 
RoleType.PAGE,CREATE_NOTEBOOK_BASED_ON_SHARED_IMAGES, userInfo.getRoles());
+                    && UserRoles.checkAccess(userInfo, RoleType.PAGE, 
CREATE_NOTEBOOK_BASED_ON_SHARED_IMAGES, userInfo.getRoles());
         }
     }
 
     @Override
-    public Set<SharedWithDTO> getUsersAndGroupsForSharing(String userName, 
String imageName, String project, String endpoint, String value){
+    public Set<SharedWithDTO> getUsersAndGroupsForSharing(String userName, 
String imageName, String project, String endpoint, String value) {
         Set<SharedWithDTO> sharedWith = getImageSharingInfo(userName, 
imageName, project, endpoint);
         Set<SharedWithDTO> canBeSharedWith = 
userSettingsDAO.getUserNames(value).stream()
                 .map(s -> new SharedWithDTO(SharedWithDTO.Type.USER, 
s)).collect(Collectors.toSet());
         canBeSharedWith.addAll(userGroupDAO.getGroupNames(value).stream()
                 .map(s -> new SharedWithDTO(SharedWithDTO.Type.GROUP, 
s)).collect(Collectors.toSet()));
         canBeSharedWith.removeAll(sharedWith);
-        return canBeSharedWith;
+        return new TreeSet<>(canBeSharedWith);
+    }
+
+    private boolean hasAccess(String userName, SharedWith sharedWith) {
+        boolean accessByUserName = sharedWith.getUsers().contains(userName);
+        boolean accessByGroup = 
sharedWith.getGroups().stream().anyMatch(groupName -> 
userGroupDAO.getUsers(groupName).contains(userName));
+        return accessByUserName || accessByGroup;
+    }
+
+    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;
+    }
+
+    private Map<String, List<Library>> fetchComputationalLibs(List<Library> 
libraries) {
+        return libraries.stream()
+                .filter(resourceTypePredicate(ResourceType.COMPUTATIONAL))
+                .collect(Collectors.toMap(Library::getResourceName, 
Lists::newArrayList, this::merge));
+    }
+
+    private List<Library> merge(List<Library> oldValue, List<Library> 
newValue) {
+        oldValue.addAll(newValue);
+        return oldValue;
+    }
+
+    private List<Library> fetchExploratoryLibs(List<Library> libraries) {
+        return libraries.stream()
+                .filter(resourceTypePredicate(ResourceType.EXPLORATORY))
+                .collect(Collectors.toList());
+    }
+
+    private Predicate<Library> resourceTypePredicate(ResourceType 
resourceType) {
+        return l -> resourceType == l.getType();
+    }
+
+    private 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_FOR_USER_MSG);
+        }
     }
 
-    private ImageSharingStatus getImageSharingStatus(String username, 
ImageInfoRecord image){
+    private ImageSharingStatus getImageSharingStatus(String username, 
ImageInfoRecord image) {
         boolean notShared = image.getSharedWith().getUsers().isEmpty() && 
image.getSharedWith().getGroups().isEmpty();
-        if(notShared && image.getUser().equals(username)){
+        if (notShared && image.getUser().equals(username)) {
             return ImageSharingStatus.PRIVATE;
-        } else if (!notShared && image.getUser().equals(username)){
+        } else if (!notShared && image.getUser().equals(username)) {
             return ImageSharingStatus.SHARED;
         }
-        return ImageSharingStatus.RECEIVED ;
+        return ImageSharingStatus.RECEIVED;
     }
 
-    private List<ImageInfoRecord> filterImages(List<ImageInfoRecord> images, 
ImageFilter filter){
+    private List<ImageInfoRecord> filterImages(List<ImageInfoRecord> images, 
ImageFilter filter) {
         return images.stream()
                 .filter(img -> 
img.getName().toLowerCase().contains(filter.getImageName().toLowerCase()))
                 .filter(img -> CollectionUtils.isEmpty(filter.getStatuses()) 
|| filter.getStatuses().contains(img.getStatus()))
@@ -400,7 +402,7 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
 
     }
 
-    private ImageFilterFormData getDataForFilter(List<ImageInfoRecord> images){
+    private ImageFilterFormData getDataForFilter(List<ImageInfoRecord> images) 
{
         ImageFilterFormData filterData = new ImageFilterFormData();
         
filterData.setImageNames(images.stream().map(ImageInfoRecord::getName).collect(Collectors.toSet()));
         
filterData.setStatuses(images.stream().map(ImageInfoRecord::getStatus).collect(Collectors.toSet()));


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

Reply via email to