/**
* 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.filter;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import org.dspace.authorize.factory.AuthorizeServiceFactory;
import org.dspace.authorize.service.AuthorizeService;
import org.dspace.content.Bitstream;
import org.dspace.content.Bundle;
import org.dspace.content.Item;
import org.dspace.core.Context;
import org.dspace.rest.filter.ItemFilterUtil.BundleName;
/**
* Define the set of use cases for filtering items of interest through the REST API.
* @author Terry Brady, Georgetown University
*
*/
public class ItemFilterDefsPerm implements ItemFilterList {
protected static AuthorizeService authorizeService = AuthorizeServiceFactory.getInstance().getAuthorizeService();
public static final String CAT_PERM = "Perimission Filters";
private static Logger log = Logger.getLogger(ItemFilterDefsPerm.class);
public ItemFilterDefsPerm() {
}
public enum EnumItemFilterPermissionDefs implements ItemFilterTest
{
has_restricted_original("Item has Restricted Original Bitstream",
"Item has at least one original bitstream that is not accessible to Anonymous user", CAT_PERM)
{
public boolean testItem(Context context, Item item)
{
try
{
for (Bundle bundle: item.getBundles())
{
if (!bundle.getName().equals(BundleName.ORIGINAL))
{
continue;
}
for (Bitstream bit: bundle.getBitstreams())
{
if (!authorizeService.authorizeActionBoolean(getAnonContext(), bit, org.dspace.core.Constants.READ))
{
return true;
}
}
}
}
catch (SQLException e)
{
ItemFilterDefsPerm.log.warn("SQL Exception testing original bitstream access " + e.getMessage(), e);
}
return false;
}
},
has_restricted_thumbnail("Item has Restricted Thumbnail",
"Item has at least one thumbnail that is not accessible to Anonymous user", CAT_PERM)
{
public boolean testItem(Context context, Item item)
{
try
{
for (Bundle bundle: item.getBundles())
{
if (!bundle.getName().equals(BundleName.THUMBNAIL))
{
continue;
}
for (Bitstream bit: bundle.getBitstreams())
{
if (!authorizeService.authorizeActionBoolean(getAnonContext(), bit, org.dspace.core.Constants.READ))
{
return true;
}
}
}
}
catch (SQLException e)
{
ItemFilterDefsPerm.log.warn("SQL Exception testing thumbnail bitstream access " + e.getMessage(), e);
}
return false;
}
},
has_restricted_metadata("Item has Restricted Metadata",
"Item has metadata that is not accessible to Anonymous user", CAT_PERM)
{
public boolean testItem(Context context, Item item)
{
try
{
return !authorizeService.authorizeActionBoolean(getAnonContext(), item, org.dspace.core.Constants.READ);
}
catch (SQLException e)
{
ItemFilterDefsPerm.log.warn("SQL Exception testing item metadata access " + e.getMessage(), e);
return false;
}
}
},
;
private static Context anonContext;
private static Context getAnonContext()
{
if (anonContext == null) {
anonContext = new Context();
}
return anonContext;
}
private String title = null;
private String description = null;
private EnumItemFilterPermissionDefs(String title, String description, String category)
{
this.title = title;
this.description = description;
this.category = category;
}
private EnumItemFilterPermissionDefs() {
this(null, null, null);
}
public String getName() {
return name();
}
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
private String category = null;
public String getCategory() {
return category;
}
}
@Override
public ItemFilterTest[] getFilters() {
return EnumItemFilterPermissionDefs.values();
}
}