/** * 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.sword2; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Item; import org.dspace.content.WorkspaceItem; import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.service.WorkspaceItemService; import org.dspace.core.ConfigurationManager; import org.dspace.core.Context; import org.dspace.workflow.WorkflowException; import org.dspace.workflow.WorkflowItem; import org.dspace.workflow.WorkflowItemService; import org.dspace.workflow.WorkflowService; import org.dspace.workflow.factory.WorkflowServiceFactory; import java.io.IOException; import java.sql.SQLException; public class WorkflowTools { protected WorkspaceItemService workspaceItemService = ContentServiceFactory.getInstance().getWorkspaceItemService(); protected WorkflowItemService workflowItemService = WorkflowServiceFactory.getInstance().getWorkflowItemService(); protected WorkflowService workflowService = WorkflowServiceFactory.getInstance().getWorkflowService(); /** * Is the given item in the DSpace workflow? * <p> * This method queries the database directly to determine if this is the * case rather than using the DSpace API (which is very slow). * * @param context * The relevant DSpace Context. * @param item * item to check * @return true if item is in workflow * @throws DSpaceSwordException * can be thrown by the internals of the DSpace SWORD implementation */ public boolean isItemInWorkflow(Context context, Item item) throws DSpaceSwordException { try { return workflowItemService.findByItem(context, item) != null; } catch (SQLException e) { throw new DSpaceSwordException(e); } } /** * Is the given item in a DSpace workspace? * <p> * This method queries the database directly to determine if this is the * case rather than using the DSpace API (which is very slow). * * @param context * The relevant DSpace Context. * @param item * item to check * @return true if item is in workspace * @throws DSpaceSwordException * can be thrown by the internals of the DSpace SWORD implementation */ public boolean isItemInWorkspace(Context context, Item item) throws DSpaceSwordException { try { return workspaceItemService.findByItem(context, item) != null; } catch (SQLException e) { throw new DSpaceSwordException(e); } } /** * Obtain the WorkflowItem object which wraps the given Item. * <p> * This method queries the database directly to determine if this is the * case rather than using the DSpace API (which is very slow). * * @param context * The relevant DSpace Context. * @param item * item to check * @return workflow item * @throws DSpaceSwordException * can be thrown by the internals of the DSpace SWORD implementation */ public WorkflowItem getWorkflowItem(Context context, Item item) throws DSpaceSwordException { try { return workflowItemService.findByItem(context, item); } catch (SQLException e) { throw new DSpaceSwordException(e); } } /** * Obtain the WorkspaceItem object which wraps the given Item. * <p> * This method queries the database directly to determine if this is the * case rather than using the DSpace API (which is very slow). * * @param context * The relevant DSpace Context. * @param item * item to check * @return workspace item * @throws DSpaceSwordException * can be thrown by the internals of the DSpace SWORD implementation */ public WorkspaceItem getWorkspaceItem(Context context, Item item) throws DSpaceSwordException { try { return workspaceItemService.findByItem(context, item); } catch (SQLException e) { throw new DSpaceSwordException(e); } } /** * Start the DSpace workflow on the given item * * @param context * The relevant DSpace Context. * @param item * item to check * @throws DSpaceSwordException * can be thrown by the internals of the DSpace SWORD implementation */ public void startWorkflow(Context context, Item item) throws DSpaceSwordException { try { // obtain the workspace item which should therefore exist WorkspaceItem wsi = this.getWorkspaceItem(context, item); // kick off the workflow boolean notify = ConfigurationManager .getBooleanProperty("swordv2-server", "workflow.notify"); if (notify) { workflowService.start(context, wsi); } else { workflowService.startWithoutNotify(context, wsi); } } catch (SQLException | WorkflowException | IOException | AuthorizeException e) { throw new DSpaceSwordException(e); } } /** * Stop the DSpace workflow, and return the item to the user workspace * * @param context * The relevant DSpace Context. * @param item * item to check * @throws DSpaceSwordException * can be thrown by the internals of the DSpace SWORD implementation */ public void stopWorkflow(Context context, Item item) throws DSpaceSwordException { try { // find the item in the workflow if it exists WorkflowItem wfi = this.getWorkflowItem(context, item); // abort the workflow if (wfi != null) { workflowService.abort(context, wfi, context.getCurrentUser()); } } catch (SQLException | AuthorizeException | IOException e) { throw new DSpaceSwordException(e); } } }