/**
* 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.xmlworkflow.storedcomponents;
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.xmlworkflow.storedcomponents.dao.XmlWorkflowItemDAO;
import org.dspace.xmlworkflow.storedcomponents.service.ClaimedTaskService;
import org.dspace.xmlworkflow.storedcomponents.service.PoolTaskService;
import org.dspace.xmlworkflow.storedcomponents.service.WorkflowItemRoleService;
import org.dspace.xmlworkflow.storedcomponents.service.XmlWorkflowItemService;
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 XmlWorkflowItem object.
* This class is responsible for all business logic calls for the XmlWorkflowItem object and is autowired by spring.
* This class should never be accessed directly.
*
* @author kevinvandevelde at atmire.com
*/
public class XmlWorkflowItemServiceImpl implements XmlWorkflowItemService {
@Autowired(required = true)
protected XmlWorkflowItemDAO xmlWorkflowItemDAO;
@Autowired(required = true)
protected ClaimedTaskService claimedTaskService;
@Autowired(required = true)
protected ItemService itemService;
@Autowired(required = true)
protected PoolTaskService poolTaskService;
@Autowired(required = true)
protected WorkflowItemRoleService workflowItemRoleService;
/*
* The current step in the workflow system in which this workflow item is present
*/
private Logger log = Logger.getLogger(XmlWorkflowItemServiceImpl.class);
protected XmlWorkflowItemServiceImpl()
{
}
@Override
public XmlWorkflowItem create(Context context, Item item, Collection collection) throws SQLException, AuthorizeException {
XmlWorkflowItem xmlWorkflowItem = xmlWorkflowItemDAO.create(context, new XmlWorkflowItem());
xmlWorkflowItem.setItem(item);
xmlWorkflowItem.setCollection(collection);
return xmlWorkflowItem;
}
@Override
public XmlWorkflowItem find(Context context, int id) throws SQLException {
XmlWorkflowItem workflowItem = xmlWorkflowItemDAO.findByID(context, XmlWorkflowItem.class, id);
if (workflowItem == null)
{
if (log.isDebugEnabled())
{
log.debug(LogManager.getHeader(context, "find_workflow_item",
"not_found,workflowitem_id=" + id));
}
}
else
{
if (log.isDebugEnabled())
{
log.debug(LogManager.getHeader(context, "find_workflow_item",
"workflowitem_id=" + id));
}
}
return workflowItem;
}
@Override
public List<XmlWorkflowItem> findAll(Context context) throws SQLException {
return xmlWorkflowItemDAO.findAll(context, XmlWorkflowItem.class);
}
@Override
public List<XmlWorkflowItem> findAll(Context context, Integer offset, Integer pagesize) throws SQLException {
return findAllInCollection(context, offset, pagesize, null);
}
@Override
public List<XmlWorkflowItem> findAllInCollection(Context context, Integer offset, Integer pagesize, Collection collection) throws SQLException {
return xmlWorkflowItemDAO.findAllInCollection(context, offset, pagesize, collection);
}
@Override
public int countAll(Context context) throws SQLException {
return xmlWorkflowItemDAO.countAll(context);
}
@Override
public int countAllInCollection(Context context, Collection collection) throws SQLException {
return xmlWorkflowItemDAO.countAllInCollection(context, collection);
}
@Override
public List<XmlWorkflowItem> findBySubmitter(Context context, EPerson ep) throws SQLException {
return xmlWorkflowItemDAO.findBySubmitter(context, ep);
}
@Override
public void deleteByCollection(Context context, Collection collection) throws SQLException, IOException, AuthorizeException {
List<XmlWorkflowItem> xmlWorkflowItems = findByCollection(context, collection);
Iterator<XmlWorkflowItem> iterator = xmlWorkflowItems.iterator();
while (iterator.hasNext()) {
XmlWorkflowItem workflowItem = iterator.next();
iterator.remove();
delete(context, workflowItem);
}
}
@Override
public void delete(Context context, XmlWorkflowItem workflowItem) throws SQLException, AuthorizeException, IOException {
Item item = workflowItem.getItem();
// Need to delete the workspaceitem row first since it refers
// to item ID
deleteWrapper(context, workflowItem);
// Delete item
itemService.delete(context, item);
}
@Override
public List<XmlWorkflowItem> findByCollection(Context context, Collection collection) throws SQLException {
return xmlWorkflowItemDAO.findByCollection(context, collection);
}
@Override
public XmlWorkflowItem findByItem(Context context, Item item) throws SQLException {
return xmlWorkflowItemDAO.findByItem(context, item);
}
@Override
public void update(Context context, XmlWorkflowItem workflowItem) throws SQLException, AuthorizeException {
// FIXME check auth
log.info(LogManager.getHeader(context, "update_workflow_item",
"workflowitem_id=" + workflowItem.getID()));
// Update the item
itemService.update(context, workflowItem.getItem());
xmlWorkflowItemDAO.save(context, workflowItem);
}
@Override
public void deleteWrapper(Context context, XmlWorkflowItem workflowItem) throws SQLException, AuthorizeException {
List<WorkflowItemRole> roles = workflowItemRoleService.findByWorkflowItem(context, workflowItem);
Iterator<WorkflowItemRole> workflowItemRoleIterator = roles.iterator();
while (workflowItemRoleIterator.hasNext())
{
WorkflowItemRole workflowItemRole = workflowItemRoleIterator.next();
workflowItemRoleIterator.remove();
workflowItemRoleService.delete(context, workflowItemRole);
}
poolTaskService.deleteByWorkflowItem(context, workflowItem);
claimedTaskService.deleteByWorkflowItem(context, workflowItem);
// FIXME - auth?
xmlWorkflowItemDAO.delete(context, workflowItem);
}
}