mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-18 15:33:09 +00:00
implemented Solr query for CommunityCollectionLinkRepository
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
package org.dspace.app.rest.repository;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
@@ -17,12 +18,17 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import org.dspace.app.rest.model.CollectionRest;
|
||||
import org.dspace.app.rest.model.CommunityRest;
|
||||
import org.dspace.app.rest.projection.Projection;
|
||||
import org.dspace.authorize.service.AuthorizeService;
|
||||
import org.dspace.content.Collection;
|
||||
import org.dspace.content.Community;
|
||||
import org.dspace.content.service.CommunityService;
|
||||
import org.dspace.core.Constants;
|
||||
import org.dspace.core.Context;
|
||||
import org.dspace.discovery.DiscoverQuery;
|
||||
import org.dspace.discovery.DiscoverResult;
|
||||
import org.dspace.discovery.IndexableObject;
|
||||
import org.dspace.discovery.SearchService;
|
||||
import org.dspace.discovery.SearchServiceException;
|
||||
import org.dspace.discovery.indexobject.IndexableCollection;
|
||||
import org.dspace.discovery.indexobject.factory.IndexObjectFactoryFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
@@ -41,7 +47,7 @@ public class CommunityCollectionLinkRepository extends AbstractDSpaceRestReposit
|
||||
CommunityService communityService;
|
||||
|
||||
@Autowired
|
||||
AuthorizeService authorizeService;
|
||||
SearchService searchService;
|
||||
|
||||
@PreAuthorize("hasPermission(#communityId, 'COMMUNITY', 'READ')")
|
||||
public Page<CollectionRest> getCollections(@Nullable HttpServletRequest request,
|
||||
@@ -54,16 +60,25 @@ public class CommunityCollectionLinkRepository extends AbstractDSpaceRestReposit
|
||||
if (community == null) {
|
||||
throw new ResourceNotFoundException("No such community: " + communityId);
|
||||
}
|
||||
List<Collection> collections = community.getCollections();
|
||||
List<Collection> publicCollection = new LinkedList<Collection>();
|
||||
for (Collection c : collections ) {
|
||||
if (authorizeService.authorizeActionBoolean(context, c, Constants.READ)) {
|
||||
publicCollection.add(c);
|
||||
Pageable pageable = utils.getPageable(optionalPageable);
|
||||
List<Collection> collections = new LinkedList<Collection>();
|
||||
IndexObjectFactoryFactory indexObjectFactory = IndexObjectFactoryFactory.getInstance();
|
||||
IndexableObject scopeObject = indexObjectFactory.getIndexableObjects(context, community).get(0);
|
||||
DiscoverQuery discoverQuery = new DiscoverQuery();
|
||||
discoverQuery.setQuery("*:*");
|
||||
discoverQuery.setDSpaceObjectFilter(IndexableCollection.TYPE);
|
||||
discoverQuery.addFilterQueries("location.parent:" + communityId);
|
||||
discoverQuery.setStart(Math.toIntExact(pageable.getOffset()));
|
||||
discoverQuery.setMaxResults(pageable.getPageSize());
|
||||
DiscoverResult resp = searchService.search(context, scopeObject, discoverQuery);
|
||||
long tot = resp.getTotalSearchResults();
|
||||
for (IndexableObject solrCol : resp.getIndexableObjects()) {
|
||||
Collection c = ((IndexableCollection) solrCol).getIndexedObject();
|
||||
collections.add(c);
|
||||
}
|
||||
}
|
||||
return converter.toRestPage(utils.getPage(publicCollection, optionalPageable), projection);
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
return converter.toRestPage(collections, pageable, tot, utils.obtainProjection());
|
||||
} catch (SQLException | SearchServiceException e) {
|
||||
throw new RuntimeException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user