/**
* 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 java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.servlet.ServletContext;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.log4j.Logger;
import org.dspace.content.Bundle;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.BitstreamService;
import org.dspace.content.service.BundleService;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.utils.DSpace;
/**
* Created with IntelliJ IDEA.
* User: peterdietz
* Date: 9/21/13
* Time: 12:54 AM
* To change this template use File | Settings | File Templates.
*/
@XmlRootElement(name = "bitstream")
public class Bitstream extends DSpaceObject {
protected BitstreamService bitstreamService = ContentServiceFactory.getInstance().getBitstreamService();
protected BundleService bundleService = ContentServiceFactory.getInstance().getBundleService();
Logger log = Logger.getLogger(Bitstream.class);
private String bundleName;
private String description;
private String format;
private String mimeType;
private Long sizeBytes;
private DSpaceObject parentObject;
private String retrieveLink;
private CheckSum checkSum;
private Integer sequenceId;
private ResourcePolicy[] policies = null;
public Bitstream() {
}
public Bitstream(org.dspace.content.Bitstream bitstream, ServletContext servletContext, String expand, Context context)
throws SQLException
{
super(bitstream, servletContext);
setup(bitstream, servletContext, expand, context);
}
public void setup(org.dspace.content.Bitstream bitstream, ServletContext servletContext, String expand, Context context)
throws SQLException
{
List<String> expandFields = new ArrayList<String>();
if (expand != null)
{
expandFields = Arrays.asList(expand.split(","));
}
//A logo bitstream might not have a bundle...
if (bitstream.getBundles() != null & bitstream.getBundles().size() >= 0)
{
if (bitstreamService.getParentObject(context, bitstream).getType() == Constants.ITEM)
{
bundleName = bitstream.getBundles().get(0).getName();
}
}
description = bitstream.getDescription();
format = bitstreamService.getFormatDescription(context, bitstream);
sizeBytes = bitstream.getSize();
String path = new DSpace().getRequestService().getCurrentRequest().getHttpServletRequest().getContextPath();
retrieveLink = path + "/bitstreams/" + bitstream.getID() + "/retrieve";
mimeType = bitstreamService.getFormat(context, bitstream).getMIMEType();
sequenceId = bitstream.getSequenceID();
CheckSum checkSum = new CheckSum();
checkSum.setCheckSumAlgorith(bitstream.getChecksumAlgorithm());
checkSum.setValue(bitstream.getChecksum());
this.setCheckSum(checkSum);
if (expandFields.contains("parent") || expandFields.contains("all"))
{
parentObject = new DSpaceObject(bitstreamService.getParentObject(context, bitstream), servletContext);
}
else
{
this.addExpand("parent");
}
if (expandFields.contains("policies") || expandFields.contains("all"))
{
// Find policies without context.
List<ResourcePolicy> tempPolicies = new ArrayList<ResourcePolicy>();
List<Bundle> bundles = bitstream.getBundles();
for (Bundle bundle : bundles)
{
List<org.dspace.authorize.ResourcePolicy> bitstreamsPolicies = bundleService.getBitstreamPolicies(context, bundle);
for (org.dspace.authorize.ResourcePolicy policy : bitstreamsPolicies)
{
if (policy.getdSpaceObject().equals(bitstream))
{
tempPolicies.add(new ResourcePolicy(policy));
}
}
}
policies = tempPolicies.toArray(new ResourcePolicy[0]);
}
else
{
this.addExpand("policies");
}
if (!expandFields.contains("all"))
{
this.addExpand("all");
}
}
public Integer getSequenceId() {
return sequenceId;
}
public void setSequenceId(Integer sequenceId) {
this.sequenceId = sequenceId;
}
public String getBundleName() {
return bundleName;
}
public void setBundleName(String bundleName) {
this.bundleName = bundleName;
}
public void setDescription(String description) {
this.description = description;
}
public void setFormat(String format) {
this.format = format;
}
public void setMimeType(String mimeType) {
this.mimeType = mimeType;
}
public void setSizeBytes(Long sizeBytes) {
this.sizeBytes = sizeBytes;
}
public void setParentObject(DSpaceObject parentObject) {
this.parentObject = parentObject;
}
public void setRetrieveLink(String retrieveLink) {
this.retrieveLink = retrieveLink;
}
public String getDescription() {
return description;
}
public String getFormat() {
return format;
}
public String getMimeType() {
return mimeType;
}
public Long getSizeBytes() {
return sizeBytes;
}
public String getRetrieveLink() {
return retrieveLink;
}
public DSpaceObject getParentObject() {
return parentObject;
}
public CheckSum getCheckSum() {
return checkSum;
}
public void setCheckSum(CheckSum checkSum) {
this.checkSum = checkSum;
}
public ResourcePolicy[] getPolicies() {
return policies;
}
public void setPolicies(ResourcePolicy[] policies) {
this.policies = policies;
}
}