/**
* 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.content.factory.ContentServiceFactory;
import org.dspace.content.service.CollectionService;
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.XmlRootElement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
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 = "collection")
public class Collection extends DSpaceObject {
protected CommunityService communityService = ContentServiceFactory.getInstance().getCommunityService();
protected CollectionService collectionService = ContentServiceFactory.getInstance().getCollectionService();
protected ItemService itemService = ContentServiceFactory.getInstance().getItemService();
Logger log = Logger.getLogger(Collection.class);
//Relationships
private Bitstream logo;
private Community parentCommunity;
private List<Community> parentCommunityList = new ArrayList<Community>();
private List<Item> items = new ArrayList<Item>();
//Collection-Metadata
private String license;
private String copyrightText, introductoryText, shortDescription, sidebarText;
//Calculated
private Integer numberItems;
public Collection(){}
public Collection(org.dspace.content.Collection collection, ServletContext servletContext, String expand, Context context, Integer limit, Integer offset)
throws SQLException, WebApplicationException
{
super(collection, servletContext);
setup(collection, servletContext, expand, context, limit, offset);
}
private void setup(org.dspace.content.Collection collection, ServletContext servletContext, String expand, Context context, Integer limit, Integer offset)
throws SQLException
{
List<String> expandFields = new ArrayList<String>();
if (expand != null)
{
expandFields = Arrays.asList(expand.split(","));
}
this.setCopyrightText(collectionService.getMetadata(collection, org.dspace.content.Collection.COPYRIGHT_TEXT));
this.setIntroductoryText(collectionService.getMetadata(collection, org.dspace.content.Collection.INTRODUCTORY_TEXT));
this.setShortDescription(collectionService.getMetadata(collection, org.dspace.content.Collection.SHORT_DESCRIPTION));
this.setSidebarText(collectionService.getMetadata(collection, org.dspace.content.Collection.SIDEBAR_TEXT));
if (expandFields.contains("parentCommunityList") || expandFields.contains("all"))
{
List<org.dspace.content.Community> parentCommunities = communityService.getAllParents(context, collection);
for (org.dspace.content.Community parentCommunity : parentCommunities)
{
this.addParentCommunityList(new Community(parentCommunity, servletContext, null, context));
}
}
else
{
this.addExpand("parentCommunityList");
}
if (expandFields.contains("parentCommunity") | expandFields.contains("all"))
{
org.dspace.content.Community parentCommunity =
(org.dspace.content.Community) collectionService
.getParentObject(context, collection);
this.setParentCommunity(new Community(
parentCommunity, servletContext, null, context));
}
else
{
this.addExpand("parentCommunity");
}
//TODO: Item paging. limit, offset/page
if (expandFields.contains("items") || expandFields.contains("all"))
{
Iterator<org.dspace.content.Item> childItems =
itemService.findByCollection(context, collection, limit, offset);
items = new ArrayList<Item>();
while (childItems.hasNext())
{
org.dspace.content.Item item = childItems.next();
if (itemService.isItemListedForUser(context, item))
{
items.add(new Item(item, servletContext, null, context));
}
}
}
else
{
this.addExpand("items");
}
if (expandFields.contains("license") || expandFields.contains("all"))
{
setLicense(collectionService.getLicense(collection));
}
else
{
this.addExpand("license");
}
if (expandFields.contains("logo") || expandFields.contains("all"))
{
if (collection.getLogo() != null)
{
this.logo = new Bitstream(collection.getLogo(), servletContext, null, context);
}
}
else
{
this.addExpand("logo");
}
if (!expandFields.contains("all"))
{
this.addExpand("all");
}
this.setNumberItems(itemService.countItems(context, collection));
}
public Bitstream getLogo() {
return logo;
}
public Integer getNumberItems() {
return numberItems;
}
public void setNumberItems(Integer numberItems) {
this.numberItems = numberItems;
}
public Community getParentCommunity() {
return parentCommunity;
}
public void setParentCommunity(Community parentCommunity) {
this.parentCommunity = parentCommunity;
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
public void setParentCommunityList(List<Community> parentCommunityList) {
this.parentCommunityList = parentCommunityList;
}
public List<Community> getParentCommunityList() {
return parentCommunityList;
}
public void addParentCommunityList(Community parentCommunity) {
this.parentCommunityList.add(parentCommunity);
}
public String getLicense() {
return license;
}
public void setLicense(String license) {
this.license = license;
}
public String getCopyrightText() {
return copyrightText;
}
public void setCopyrightText(String copyrightText) {
this.copyrightText = copyrightText;
}
public String getIntroductoryText() {
return introductoryText;
}
public void setIntroductoryText(String introductoryText) {
this.introductoryText = introductoryText;
}
public String getShortDescription() {
return shortDescription;
}
public void setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
}
public String getSidebarText() {
return sidebarText;
}
public void setSidebarText(String sidebarText) {
this.sidebarText = sidebarText;
}
}