diff --git a/file-repository-core/src/main/java/org/genesys/filerepository/service/ImageGalleryService.java b/file-repository-core/src/main/java/org/genesys/filerepository/service/ImageGalleryService.java index b434fbf34ee3e4af83160c330acf6e15547a8e1e..3a453a0785661ba2847600ba6d7d53457ad15c43 100644 --- a/file-repository-core/src/main/java/org/genesys/filerepository/service/ImageGalleryService.java +++ b/file-repository-core/src/main/java/org/genesys/filerepository/service/ImageGalleryService.java @@ -17,6 +17,7 @@ package org.genesys.filerepository.service; import java.nio.file.Path; +import java.util.List; import org.genesys.filerepository.InvalidRepositoryPathException; import org.genesys.filerepository.model.ImageGallery; @@ -48,6 +49,15 @@ public interface ImageGalleryService { */ ImageGallery loadImageGallery(Path path) throws InvalidRepositoryPathException; + /** + * Loads galleries with the specified paths. + * + * @param paths Image gallery paths in the repository + * @return the list of ImageGalleries + * @throws InvalidRepositoryPathException if path is not a valid repository path + */ + List loadImageGalleries(final List paths) throws InvalidRepositoryPathException; + /** * Get gallery with the specified folder. Use within existing transactions only. * diff --git a/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/ImageGalleryServiceImpl.java b/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/ImageGalleryServiceImpl.java index c0e0ec34126d36f53d10f24c05c9ba24a812b193..1bb6e23b28968214e0713a9413dcddd447fbaa33 100644 --- a/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/ImageGalleryServiceImpl.java +++ b/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/ImageGalleryServiceImpl.java @@ -23,11 +23,13 @@ import java.util.Arrays; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; import org.genesys.blocks.security.SecurityContextUtil; import org.genesys.filerepository.InvalidRepositoryPathException; import org.genesys.filerepository.model.ImageGallery; import org.genesys.filerepository.model.QImageGallery; +import org.genesys.filerepository.model.QRepositoryFolder; import org.genesys.filerepository.model.RepositoryFile; import org.genesys.filerepository.model.RepositoryFolder; import org.genesys.filerepository.model.RepositoryImage; @@ -45,6 +47,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.prepost.PostAuthorize; +import org.springframework.security.access.prepost.PostFilter; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -101,6 +104,21 @@ public class ImageGalleryServiceImpl implements ImageGalleryService { final ImageGallery imageGallery = imageGalleryPersistence.findByFolder(repositoryService.getFolder(path)); return deepLoad(imageGallery); } + + @Override + @PostFilter("filterObject==null || hasRole('ADMINISTRATOR') || hasPermission(filterObject, 'read')") + public List loadImageGalleries(final List paths) throws InvalidRepositoryPathException { + List normalizedPaths = new ArrayList<>(paths.size()); + for (Path path : paths) { + PathValidator.checkValidPath(path); + normalizedPaths.add(path.normalize().toAbsolutePath().toString()); + } + + List folders = jpaQueryFactory.selectFrom(QRepositoryFolder.repositoryFolder).where(QRepositoryFolder.repositoryFolder.path.in(normalizedPaths)).fetch(); + + JPAQuery query = jpaQueryFactory.selectFrom(QImageGallery.imageGallery).where(QImageGallery.imageGallery.folder.in(folders)); + return query.fetch().stream().map(this::deepLoad).collect(Collectors.toList()); + } @Override @PostAuthorize("returnObject == null or hasRole('ADMINISTRATOR') or hasPermission(returnObject, 'read')")