/** * 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.eperson; import java.sql.SQLException; import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.ResourcePolicy; import org.dspace.authorize.service.ResourcePolicyService; import org.dspace.content.Item; import org.dspace.content.WorkspaceItem; import org.dspace.content.service.ItemService; import org.dspace.core.Constants; import org.dspace.core.Context; import org.dspace.eperson.service.SupervisorService; import org.springframework.beans.factory.annotation.Autowired; public class SupervisorServiceImpl implements SupervisorService{ @Autowired(required = true) protected ItemService itemService; @Autowired(required = true) protected ResourcePolicyService resourcePolicyService; protected SupervisorServiceImpl() { } @Override public boolean isOrder(Context context, WorkspaceItem workspaceItem, Group group) throws SQLException { return workspaceItem.getSupervisorGroups().contains(group); } @Override public void remove(Context context, WorkspaceItem workspaceItem, Group group) throws SQLException, AuthorizeException { // get the workspace item and the group from the request values workspaceItem.getSupervisorGroups().remove(group); // get the item and have it remove the policies for the group Item item = workspaceItem.getItem(); itemService.removeGroupPolicies(context, item, group); } @Override public void add(Context context, Group group, WorkspaceItem workspaceItem, int policy) throws SQLException, AuthorizeException { // make a table row in the database table, and update with the relevant // details workspaceItem.getSupervisorGroups().add(group); group.getSupervisedItems().add(workspaceItem); // If a default policy type has been requested, apply the policies using // the DSpace API for doing so if (policy != POLICY_NONE) { Item item = workspaceItem.getItem(); // "Editor" implies READ, WRITE, ADD permissions // "Observer" implies READ permissions if (policy == POLICY_EDITOR) { ResourcePolicy r = resourcePolicyService.create(context); r.setdSpaceObject(item); r.setGroup(group); r.setAction(Constants.READ); resourcePolicyService.update(context, r); r = resourcePolicyService.create(context); r.setdSpaceObject(item); r.setGroup(group); r.setAction(Constants.WRITE); resourcePolicyService.update(context, r); r = resourcePolicyService.create(context); r.setdSpaceObject(item); r.setGroup(group); r.setAction(Constants.ADD); resourcePolicyService.update(context, r); } else if (policy == POLICY_OBSERVER) { ResourcePolicy r = resourcePolicyService.create(context); r.setdSpaceObject(item); r.setGroup(group); r.setAction(Constants.READ); resourcePolicyService.update(context, r); } } } }