/**
* 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.migration;
import org.apache.commons.cli.*;
import org.apache.log4j.Logger;
import org.dspace.content.Item;
import org.dspace.content.WorkspaceItem;
import org.dspace.core.Context;
import org.dspace.core.LogManager;
import org.dspace.eperson.EPerson;
import org.dspace.eperson.factory.EPersonServiceFactory;
import org.dspace.eperson.service.EPersonService;
import org.dspace.workflow.WorkflowItem;
import org.dspace.workflow.WorkflowService;
import org.dspace.workflow.factory.WorkflowServiceFactory;
import java.util.List;
import java.util.UUID;
/**
* A utility class that will send all the worklfow items
* back to their submitters
*
* @author Bram De Schouwer (bram.deschouwer at dot com)
* @author Kevin Van de Velde (kevin at atmire dot com)
* @author Ben Bosman (ben at atmire dot com)
* @author Mark Diggory (markd at atmire dot com)
*/
public class RestartWorkflow {
/**
* log4j category
*/
private static Logger log = Logger.getLogger(RestartWorkflow.class);
public static boolean useWorkflowSendEmail = false;
private static final EPersonService ePersonService = EPersonServiceFactory.getInstance().getEPersonService();
public static void main(String[] args) {
try {
System.out.println("All workflowitems will be sent back to the first workflow step.");
Context context = new Context();
context.turnOffAuthorisationSystem();
// create an options object and populate it
CommandLineParser parser = new PosixParser();
Options options = new Options();
options.addOption("e", "eperson", true,
"email of eperson doing importing");
options.addOption("n", "notify", false,
"if sending submissions through the workflow, send notification emails");
options.addOption("p", "provenance", true,
"the provenance description to be added to the item");
options.addOption("h", "help", false, "help");
CommandLine line = parser.parse(options, args);
String eperson = null; // db ID or email
if (line.hasOption('h')) {
HelpFormatter myhelp = new HelpFormatter();
myhelp.printHelp("RestartWorkflow\n", options);
System.exit(0);
}
if (line.hasOption('n')) {
useWorkflowSendEmail = true;
}
if (line.hasOption('e')) // eperson
{
eperson = line.getOptionValue('e');
}else{
System.out.println("The -e (eperson) option is mandatory !");
System.exit(1);
}
// find the EPerson, assign to context
EPerson myEPerson = null;
if (eperson.indexOf('@') != -1) {
// @ sign, must be an email
myEPerson = ePersonService.findByEmail(context, eperson);
} else {
myEPerson = ePersonService.find(context, UUID.fromString(eperson));
}
if (myEPerson == null) {
System.out.println("Error, eperson cannot be found: " + eperson);
System.exit(1);
}
String provenance = null;
if(line.hasOption('p')){
provenance = line.getOptionValue('p');
}
context.setCurrentUser(myEPerson);
System.out.println("Sending all workflow items back to the workspace");
WorkflowServiceFactory workflowServiceFactory = WorkflowServiceFactory.getInstance();
List<WorkflowItem> workflowItems = workflowServiceFactory.getWorkflowItemService().findAll(context);
WorkflowService workflowService = workflowServiceFactory.getWorkflowService();
int i = 0;
for (WorkflowItem workflowItem : workflowItems) {
System.out.println("Processing workflow item " + i + " of " + workflowItems.size());
System.out.println("Removing pooled tasks");
// rejection provenance
Item myitem = workflowItem.getItem();
// Get current date
// String now = DCDate.getCurrent().toString();
// Add to item as a DC field
// TaskLog tasklog = TaskLog.create(c, wi);
// tasklog.update();
// convert into personal workspace
WorkspaceItem wsi = workflowService.sendWorkflowItemBackSubmission(context, workflowItem, myEPerson, provenance, "");
log.info(LogManager.getHeader(context, "restart_workflow", "workflow_item_id="
+ workflowItem.getID() + "item_id=" + workflowItem.getItem().getID()
+ "collection_id=" + workflowItem.getCollection().getID()));
if (useWorkflowSendEmail) {
workflowService.start(context, wsi);
} else {
workflowService.startWithoutNotify(context, wsi);
}
i++;
}
System.out.println("All done, committing context");
context.complete();
System.exit(0);
} catch (Exception e) {
log.error("Error while sending all workflow items back to the workspace", e);
e.printStackTrace();
}
}
}