/** * 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.content.service; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Bitstream; import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.core.Context; import org.dspace.eperson.Group; import java.io.IOException; import java.io.InputStream; import java.sql.SQLException; import java.util.List; import java.util.MissingResourceException; /** * Service interface class for the Community object. * The implementation of this class is responsible for all business logic calls for the Community object and is autowired by spring * * @author kevinvandevelde at atmire.com */ public interface CommunityService extends DSpaceObjectService<Community>, DSpaceObjectLegacySupportService<Community> { /** * Create a new top-level community, with a new ID. * * @param parent parent community * @param context * DSpace context object * * @return the newly created community * @throws SQLException if database error * @throws AuthorizeException if authorization error */ public Community create(Community parent, Context context) throws SQLException, AuthorizeException; /** * Create a new top-level community, with a new ID. * * @param parent parent community * @param context * DSpace context object * @param handle the pre-determined Handle to assign to the new community * * @return the newly created community * @throws SQLException if database error * @throws AuthorizeException if authorization error */ public Community create(Community parent, Context context, String handle) throws SQLException, AuthorizeException; /** * Get a list of all communities in the system. These are alphabetically * sorted by community name. * * @param context * DSpace context object * * @return the communities in the system * @throws SQLException if database error */ public List<Community> findAll(Context context) throws SQLException; /** * Get all communities in the system. Adds support for limit and offset. * @param context context * @param limit limit * @param offset offset * @return list of communities * @throws SQLException if database error */ public List<Community> findAll(Context context, Integer limit, Integer offset) throws SQLException; /** * Get a list of all top-level communities in the system. These are * alphabetically sorted by community name. A top-level community is one * without a parent community. * * @param context * DSpace context object * * @return the top-level communities in the system * @throws SQLException if database error */ public List<Community> findAllTop(Context context) throws SQLException; /** * Get the value of a metadata field * * @param community community * @param field * the name of the metadata field to get * * @return the value of the metadata field * * @throws IllegalArgumentException * if the requested metadata field doesn't exist * @deprecated */ @Override @Deprecated public String getMetadata(Community community, String field); /** * Set a metadata value * * @param context context * @param community community * @param field * the name of the metadata field to get * @param value * value to set the field to * * @throws IllegalArgumentException * if the requested metadata field doesn't exist * @throws MissingResourceException if resource missing * @throws SQLException if database error * @deprecated */ @Deprecated public void setMetadata(Context context, Community community, String field, String value) throws MissingResourceException, SQLException; /** * Give the community a logo. Passing in <code>null</code> removes any * existing logo. You will need to set the format of the new logo bitstream * before it will work, for example to "JPEG". Note that * <code>update</code> will need to be called for the change to take * effect. Setting a logo and not calling <code>update</code> later may * result in a previous logo lying around as an "orphaned" bitstream. * * @param context context * @param community community * @param is the stream to use as the new logo * * @return the new logo bitstream, or <code>null</code> if there is no * logo (<code>null</code> was passed in) * @throws IOException if IO error * @throws SQLException if database error * @throws AuthorizeException if authorization error */ public Bitstream setLogo(Context context, Community community, InputStream is) throws AuthorizeException, IOException, SQLException; /** * Create a default administrators group if one does not already exist. * Returns either the newly created group or the previously existing one. * Note that other groups may also be administrators. * * @param context context * @param community community * @return the default group of editors associated with this community * @throws SQLException if database error * @throws AuthorizeException if authorization error */ public Group createAdministrators(Context context, Community community) throws SQLException, AuthorizeException; /** * Remove the administrators group, if no group has already been created * then return without error. This will merely dereference the current * administrators group from the community so that it may be deleted * without violating database constraints. * @param context context * @param community community * @throws SQLException if database error * @throws AuthorizeException if authorization error */ public void removeAdministrators(Context context, Community community) throws SQLException, AuthorizeException; /** * Return an array of parent communities of this community, in ascending * order. If community is top-level, return an empty array. * * @param context context * @param community community * @return an array of parent communities, empty if top-level * @throws SQLException if database error */ public List<Community> getAllParents(Context context, Community community) throws SQLException; /** * Return an array of parent communities of this collection. * * @param context * The relevant DSpace Context. * @param collection * collection to check * @return an array of parent communities * @throws SQLException if database error */ public List<Community> getAllParents(Context context, Collection collection) throws SQLException; /** * Return an array of collections of this community and its subcommunities * * @param context context * @param community community * @return an array of collections * @throws SQLException if database error */ public List<Collection> getAllCollections(Context context, Community community) throws SQLException; /** * Add an exisiting collection to the community * * @param context context * @param community community * @param collection * collection to add * @throws SQLException if database error * @throws AuthorizeException if authorization error */ public void addCollection(Context context, Community community, Collection collection) throws SQLException, AuthorizeException; /** * Create a new sub-community within this community. * * @param context context * @param parentCommunity parent community * @return the new community * @throws SQLException if database error * @throws AuthorizeException if authorization error */ public Community createSubcommunity(Context context, Community parentCommunity) throws SQLException, AuthorizeException; /** * Create a new sub-community within this community. * * @param context context * @param handle the pre-determined Handle to assign to the new community * @param parentCommunity parent community * @return the new community * @throws SQLException if database error * @throws AuthorizeException if authorization error */ public Community createSubcommunity(Context context, Community parentCommunity, String handle) throws SQLException, AuthorizeException; /** * Add an existing community as a subcommunity to the community * * @param context context * @param parentCommunity * parent community to add our subcommunity to * @param childCommunity * subcommunity to add * @throws SQLException if database error * @throws AuthorizeException if authorization error */ public void addSubcommunity(Context context, Community parentCommunity, Community childCommunity) throws SQLException, AuthorizeException; /** * Remove a collection. If it only belongs to one parent community, * then it is permanently deleted. If it has more than one parent community, * it is simply unmapped from the current community. * * @param context context * @param c collection to remove * @param community community * @throws SQLException if database error * @throws AuthorizeException if authorization error * @throws IOException if IO error */ public void removeCollection(Context context, Community community, Collection c) throws SQLException, AuthorizeException, IOException; /** * Remove a subcommunity. If it only belongs to one parent community, * then it is permanently deleted. If it has more than one parent community, * it is simply unmapped from the current community. * * @param context context * @param childCommunity * subcommunity to remove * @param parentCommunity parent community * @throws SQLException if database error * @throws AuthorizeException if authorization error * @throws IOException if IO error */ public void removeSubcommunity(Context context, Community parentCommunity, Community childCommunity) throws SQLException, AuthorizeException, IOException; /** * return TRUE if context's user can edit community, false otherwise * * @param context context * @param community community * @return boolean true = current user can edit community * @throws SQLException if database error */ public boolean canEditBoolean(Context context, Community community) throws java.sql.SQLException; public void canEdit(Context context, Community community) throws AuthorizeException, SQLException; public Community findByAdminGroup(Context context, Group group) throws SQLException; public List<Community> findAuthorized(Context context, List<Integer> actions) throws SQLException; public List<Community> findAuthorizedGroupMapped(Context context, List<Integer> actions) throws SQLException; int countTotal(Context context) throws SQLException; }