/** * 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.workflowbasic; import org.apache.log4j.Logger; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Collection; import org.dspace.content.Item; import org.dspace.content.service.ItemService; import org.dspace.core.Context; import org.dspace.core.LogManager; import org.dspace.eperson.EPerson; import org.dspace.workflowbasic.dao.BasicWorkflowItemDAO; import org.dspace.workflowbasic.service.BasicWorkflowItemService; import org.dspace.workflowbasic.service.TaskListItemService; import org.springframework.beans.factory.annotation.Autowired; import java.io.IOException; import java.sql.SQLException; import java.util.Iterator; import java.util.List; /** * Service implementation for the BasicWorkflowItem object. * This class is responsible for all business logic calls for the BasicWorkflowItem object and is autowired by spring. * This class should never be accessed directly. * * @author kevinvandevelde at atmire.com */ public class BasicWorkflowItemServiceImpl implements BasicWorkflowItemService { /** log4j category */ protected static Logger log = Logger.getLogger(BasicWorkflowItem.class); @Autowired(required = true) protected BasicWorkflowItemDAO workflowItemDAO; @Autowired(required = true) protected ItemService itemService; @Autowired(required = true) protected TaskListItemService taskListItemService; protected BasicWorkflowItemServiceImpl() { } @Override public BasicWorkflowItem create(Context context, Item item, Collection collection) throws SQLException, AuthorizeException { if(findByItem(context, item) != null){ throw new IllegalArgumentException("Unable to create a workflow item for an item that already has a workflow item."); } BasicWorkflowItem workflowItem = workflowItemDAO.create(context, new BasicWorkflowItem()); workflowItem.setItem(item); workflowItem.setCollection(collection); update(context, workflowItem); return workflowItem; } @Override public BasicWorkflowItem find(Context context, int id) throws SQLException { BasicWorkflowItem workflowItem = workflowItemDAO.findByID(context, BasicWorkflowItem.class, id); if (workflowItem == null) { if (log.isDebugEnabled()) { log.debug(LogManager.getHeader(context, "find_workflow_item", "not_found,workflow_id=" + id)); } } else { if (log.isDebugEnabled()) { log.debug(LogManager.getHeader(context, "find_workflow_item", "workflow_id=" + id)); } } return workflowItem; } @Override public List<BasicWorkflowItem> findAll(Context context) throws SQLException { return workflowItemDAO.findAll(context, BasicWorkflowItem.class); } @Override public List<BasicWorkflowItem> findBySubmitter(Context context, EPerson ep) throws SQLException { return workflowItemDAO.findBySubmitter(context, ep); } @Override public void deleteByCollection(Context context, Collection collection) throws SQLException, IOException, AuthorizeException { List<BasicWorkflowItem> workflowItems = findByCollection(context, collection); Iterator<BasicWorkflowItem> iterator = workflowItems.iterator(); while (iterator.hasNext()) { BasicWorkflowItem workflowItem = iterator.next(); iterator.remove(); delete(context, workflowItem); } } @Override public void delete(Context context, BasicWorkflowItem workflowItem) throws SQLException, AuthorizeException, IOException { Item item = workflowItem.getItem(); deleteWrapper(context, workflowItem); itemService.delete(context, item); } @Override public List<BasicWorkflowItem> findByCollection(Context context, Collection collection) throws SQLException { return workflowItemDAO.findByCollection(context, collection); } @Override public BasicWorkflowItem findByItem(Context context, Item item) throws SQLException { return workflowItemDAO.findByItem(context, item); } @Override public void deleteWrapper(Context context, BasicWorkflowItem workflowItem) throws SQLException, AuthorizeException { // delete any pending tasks taskListItemService.deleteByWorkflowItem(context, workflowItem); // FIXME - auth? workflowItemDAO.delete(context, workflowItem); } @Override public void update(Context context, BasicWorkflowItem workflowItem) throws SQLException, AuthorizeException { // FIXME check auth log.info(LogManager.getHeader(context, "update_workflow_item", "workflow_item_id=" + workflowItem.getID())); // Update the item itemService.update(context, workflowItem.getItem()); // Update ourselves workflowItemDAO.save(context, workflowItem); } @Override public List<BasicWorkflowItem> findPooledTasks(Context context, EPerson ePerson) throws SQLException { return workflowItemDAO.findByPooledTasks(context, ePerson); } @Override public List<BasicWorkflowItem> findByOwner(Context context, EPerson ePerson) throws SQLException { return workflowItemDAO.findByOwner(context, ePerson); } @Override public int countTotal(Context context) throws SQLException { return workflowItemDAO.countRows(context); } }