/** * 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.rest.common; import org.apache.log4j.Logger; import org.dspace.authorize.factory.AuthorizeServiceFactory; import org.dspace.authorize.service.AuthorizeService; import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.service.CommunityService; import org.dspace.content.service.ItemService; import org.dspace.core.Context; import javax.servlet.ServletContext; import javax.ws.rs.WebApplicationException; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created with IntelliJ IDEA. * User: peterdietz * Date: 5/22/13 * Time: 9:41 AM * To change this template use File | Settings | File Templates. */ @XmlRootElement(name = "community") public class Community extends DSpaceObject{ protected CommunityService communityService = ContentServiceFactory.getInstance().getCommunityService(); protected ItemService itemService = ContentServiceFactory.getInstance().getItemService(); protected AuthorizeService authorizeService = AuthorizeServiceFactory.getInstance().getAuthorizeService(); private static Logger log = Logger.getLogger(Community.class); //Exandable relationships private Bitstream logo; private Community parentCommunity; private String copyrightText, introductoryText, shortDescription, sidebarText; private Integer countItems; private List<Community> subcommunities = new ArrayList<Community>(); private List<Collection> collections = new ArrayList<Collection>(); public Community(){} public Community(org.dspace.content.Community community, ServletContext servletContext, String expand, Context context) throws SQLException, WebApplicationException { super(community, servletContext); setup(community,servletContext, expand, context); } private void setup(org.dspace.content.Community community, ServletContext servletContext, String expand, Context context) throws SQLException { List<String> expandFields = new ArrayList<String>(); if (expand != null) { expandFields = Arrays.asList(expand.split(",")); } this.setCopyrightText(communityService.getMetadata(community, org.dspace.content.Community.COPYRIGHT_TEXT)); this.setIntroductoryText(communityService.getMetadata(community, org.dspace.content.Community.INTRODUCTORY_TEXT)); this.setShortDescription(communityService.getMetadata(community, org.dspace.content.Community.SHORT_DESCRIPTION)); this.setSidebarText(communityService.getMetadata(community, org.dspace.content.Community.SIDEBAR_TEXT)); this.setCountItems(itemService.countItems(context, community)); if (expandFields.contains("parentCommunity") || expandFields.contains("all")) { org.dspace.content.Community parentCommunity = (org.dspace.content.Community) communityService.getParentObject(context, community); if (parentCommunity != null) { setParentCommunity(new Community(parentCommunity,servletContext, null, context)); } } else { this.addExpand("parentCommunity"); } if (expandFields.contains("collections") || expandFields.contains("all")) { List<org.dspace.content.Collection> collections = community.getCollections(); List<org.dspace.rest.common.Collection> restCollections = new ArrayList<>(); for (org.dspace.content.Collection collection : collections) { if (authorizeService.authorizeActionBoolean(context, collection, org.dspace.core.Constants.READ)) { restCollections.add(new Collection(collection,servletContext, null, context, null, null)); } else { log.info("Omitted restricted collection: " + collection.getID() + " _ " + collection.getName()); } } setCollections(restCollections); } else { this.addExpand("collections"); } if (expandFields.contains("subCommunities") || expandFields.contains("all")) { List<org.dspace.content.Community> communities = community.getSubcommunities(); subcommunities = new ArrayList<Community>(); for (org.dspace.content.Community subCommunity : communities) { if (authorizeService.authorizeActionBoolean(context, subCommunity, org.dspace.core.Constants.READ)) { subcommunities.add(new Community(subCommunity, servletContext, null, context)); } else { log.info("Omitted restricted subCommunity: " + subCommunity.getID() + " _ " + subCommunity.getName()); } } } else { this.addExpand("subCommunities"); } if (expandFields.contains("logo") || expandFields.contains("all")) { if (community.getLogo() != null) { logo = new Bitstream(community.getLogo(),servletContext, null, context); } } else { this.addExpand("logo"); } if (!expandFields.contains("all")) { this.addExpand("all"); } } public List<Collection> getCollections() { return collections; } public void setCollections(List<Collection> collections) { this.collections = collections; } public Integer getCountItems() { return countItems; } public void setCountItems(Integer countItems) { this.countItems = countItems; } public String getSidebarText() { return sidebarText; } public void setSidebarText(String sidebarText) { this.sidebarText = sidebarText; } public String getShortDescription() { return shortDescription; } public void setShortDescription(String shortDescription) { this.shortDescription = shortDescription; } public String getIntroductoryText() { return introductoryText; } public void setIntroductoryText(String introductoryText) { this.introductoryText = introductoryText; } public String getCopyrightText() { return copyrightText; } public void setCopyrightText(String copyrightText) { this.copyrightText = copyrightText; } public Community getParentCommunity() { return parentCommunity; } public void setParentCommunity(Community parentCommunity) { this.parentCommunity = parentCommunity; } public Bitstream getLogo() { return logo; } public void setLogo(Bitstream logo) { this.logo = logo; } // Renamed because of xml annotation exception with this attribute and getSubCommunities. @XmlElement(name = "subcommunities", required = true) public List<Community> getSubcommunities() { return subcommunities; } public void setSubcommunities(List<Community> subcommunities) { this.subcommunities = subcommunities; } }