/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.xoai.services.impl; import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.Item; import org.dspace.core.Context; import org.dspace.xoai.services.api.context.ContextService; import org.dspace.xoai.services.api.context.ContextServiceException; import org.dspace.xoai.services.api.CollectionsService; import java.sql.SQLException; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.UUID; import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.service.CommunityService; public class DSpaceCollectionsService implements CollectionsService { private static final CommunityService communityService = ContentServiceFactory.getInstance().getCommunityService(); @Override public List<UUID> getAllSubCollections(ContextService contextService, UUID communityId) throws SQLException { Queue<Community> comqueue = new LinkedList<>(); List<UUID> list = new ArrayList<>(); try { comqueue.add(communityService.find(contextService.getContext(), communityId)); } catch (ContextServiceException e) { throw new SQLException(e); } while (!comqueue.isEmpty()) { Community c = comqueue.poll(); for (Community sub : c.getSubcommunities()) comqueue.add(sub); for (Collection col : c.getCollections()) if (!list.contains(col.getID())) list.add(col.getID()); } return list; } @Override public List<Community> flatParentCommunities(Collection c) throws SQLException { Queue<Community> queue = new LinkedList<>(); List<Community> result = new ArrayList<>(); for (Community com : c.getCommunities()) queue.add(com); while (!queue.isEmpty()) { Community p = queue.poll(); List<Community> par = p.getParentCommunities(); if (par != null) queue.addAll(par); if (!result.contains(p)) result.add(p); } return result; } @Override public List<Community> flatParentCommunities(Community c) throws SQLException { Queue<Community> queue = new LinkedList<>(); List<Community> result = new ArrayList<>(); queue.add(c); while (!queue.isEmpty()) { Community p = queue.poll(); List<Community> par = p.getParentCommunities(); if (par != null) queue.addAll(par); if (!result.contains(p)) result.add(p); } return result; } @Override public List<Community> flatParentCommunities(Context context, Item c) throws SQLException { Queue<Community> queue = new LinkedList<>(); List<Community> result = new ArrayList<>(); for (Collection collection : c.getCollections()) queue.addAll(communityService.getAllParents(context, collection)); while (!queue.isEmpty()) { Community p = queue.poll(); List<Community> par = p.getParentCommunities(); if (par != null) queue.addAll(par); if (!result.contains(p)) result.add(p); } return result; } }