/** * Return the workflow item to the workspace of the submitter. The workflow item is removed, and a * workspace item created. * * @param c Context * @param wfi WorkflowItem to be 'dismantled' * @return the workspace item */ protected WorkspaceItem returnToWorkspace(Context c, BasicWorkflowItem wfi) throws SQLException, IOException, AuthorizeException { // FIXME: How should this interact with the workflow system? // FIXME: Remove license // FIXME: Provenance statement? // Create the new workspace item row WorkspaceItem workspaceItem = workspaceItemService.create(c, wfi); workspaceItem.setMultipleFiles(wfi.hasMultipleFiles()); workspaceItem.setMultipleTitles(wfi.hasMultipleTitles()); workspaceItem.setPublishedBefore(wfi.isPublishedBefore()); workspaceItemService.update(c, workspaceItem); // myitem.update(); log.info( LogManager.getHeader( c, "return_to_workspace", "workflow_item_id=" + wfi.getID() + "workspace_item_id=" + workspaceItem.getID())); // Now remove the workflow object manually from the database workflowItemService.deleteWrapper(c, wfi); return workspaceItem; }
/** * Claim-tasks action. * * @param redirector unused. * @param resolver unused. * @param objectModel Cocoon's object model. * @param source unused. * @param parameters unused. * @return null. * @throws java.lang.Exception passed through. */ @Override public Map act( Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws Exception { Request request = ObjectModelHelper.getRequest(objectModel); Context context = ContextUtil.obtainContext(objectModel); // Or the user selected a checkbox full of workflow IDs String[] workflowIDs = request.getParameterValues("workflowID"); if (workflowIDs != null) { for (String workflowID : workflowIDs) { BasicWorkflowItem workflowItem = basicWorkflowItemService.find(context, Integer.valueOf(workflowID)); int state = workflowItem.getState(); // Only unclaim tasks that are already claimed. if (state == BasicWorkflowServiceImpl.WFSTATE_STEP1POOL || state == BasicWorkflowServiceImpl.WFSTATE_STEP2POOL || state == BasicWorkflowServiceImpl.WFSTATE_STEP3POOL) { basicWorkflowService.claim(context, workflowItem, context.getCurrentUser()); } } } return null; }
@Override public void deleteCollection(Context context, Collection collection) throws SQLException, IOException, AuthorizeException { collection.setWorkflowGroup(1, null); collection.setWorkflowGroup(2, null); collection.setWorkflowGroup(3, null); workflowItemService.deleteByCollection(context, collection); }
@Override public List<String> getEPersonDeleteConstraints(Context context, EPerson ePerson) throws SQLException { List<String> resultList = new ArrayList<>(); List<BasicWorkflowItem> workflowItems = workflowItemService.findByOwner(context, ePerson); if (CollectionUtils.isNotEmpty(workflowItems)) { resultList.add("workflowitem"); } List<TaskListItem> taskListItems = taskListItemService.findByEPerson(context, ePerson); if (CollectionUtils.isNotEmpty(taskListItems)) { resultList.add("tasklistitem"); } return resultList; }
@Override public BasicWorkflowItem start(Context context, WorkspaceItem wsi) throws SQLException, AuthorizeException, IOException { // FIXME Check auth Item myitem = wsi.getItem(); Collection collection = wsi.getCollection(); log.info( LogManager.getHeader( context, "start_workflow", "workspace_item_id=" + wsi.getID() + "item_id=" + myitem.getID() + "collection_id=" + collection.getID())); // record the start of the workflow w/provenance message recordStart(context, myitem); // create the WorkflowItem BasicWorkflowItem wfi = workflowItemService.create(context, myitem, collection); wfi.setMultipleFiles(wsi.hasMultipleFiles()); wfi.setMultipleTitles(wsi.hasMultipleTitles()); wfi.setPublishedBefore(wsi.isPublishedBefore()); // remove the WorkspaceItem workspaceItemService.deleteWrapper(context, wsi); // now get the workflow started wfi.setState(WFSTATE_SUBMIT); advance(context, wfi, null); // Return the workflow item return wfi; }
// returns true if archived protected boolean doState( Context context, BasicWorkflowItem workflowItem, int newstate, EPerson newowner) throws SQLException, IOException, AuthorizeException { Collection mycollection = workflowItem.getCollection(); Group mygroup = null; boolean archived = false; // Gather our old data for launching the workflow event int oldState = workflowItem.getState(); workflowItem.setState(newstate); switch (newstate) { case WFSTATE_STEP1POOL: // any reviewers? // if so, add them to the tasklist workflowItem.setOwner(null); // get reviewers (group 1 ) mygroup = collectionService.getWorkflowGroup(mycollection, 1); if ((mygroup != null) && !(groupService.isEmpty(mygroup))) { // get a list of all epeople in group (or any subgroups) List<EPerson> epa = groupService.allMembers(context, mygroup); // there were reviewers, change the state // and add them to the list createTasks(context, workflowItem, epa); workflowItemService.update(context, workflowItem); // email notification notifyGroupOfTask(context, workflowItem, mygroup, epa); } else { // no reviewers, skip ahead workflowItem.setState(WFSTATE_STEP1); archived = advance(context, workflowItem, null, true, false); } break; case WFSTATE_STEP1: // remove reviewers from tasklist // assign owner taskListItemService.deleteByWorkflowItem(context, workflowItem); workflowItem.setOwner(newowner); break; case WFSTATE_STEP2POOL: // clear owner // any approvers? // if so, add them to tasklist // if not, skip to next state workflowItem.setOwner(null); // get approvers (group 2) mygroup = collectionService.getWorkflowGroup(mycollection, 2); if ((mygroup != null) && !(groupService.isEmpty(mygroup))) { // get a list of all epeople in group (or any subgroups) List<EPerson> epa = groupService.allMembers(context, mygroup); // there were approvers, change the state // timestamp, and add them to the list createTasks(context, workflowItem, epa); // email notification notifyGroupOfTask(context, workflowItem, mygroup, epa); } else { // no reviewers, skip ahead workflowItem.setState(WFSTATE_STEP2); archived = advance(context, workflowItem, null, true, false); } break; case WFSTATE_STEP2: // remove admins from tasklist // assign owner taskListItemService.deleteByWorkflowItem(context, workflowItem); workflowItem.setOwner(newowner); break; case WFSTATE_STEP3POOL: // any editors? // if so, add them to tasklist workflowItem.setOwner(null); mygroup = collectionService.getWorkflowGroup(mycollection, 3); if ((mygroup != null) && !(groupService.isEmpty(mygroup))) { // get a list of all epeople in group (or any subgroups) List<EPerson> epa = groupService.allMembers(context, mygroup); // there were editors, change the state // timestamp, and add them to the list createTasks(context, workflowItem, epa); // email notification notifyGroupOfTask(context, workflowItem, mygroup, epa); } else { // no editors, skip ahead workflowItem.setState(WFSTATE_STEP3); archived = advance(context, workflowItem, null, true, false); } break; case WFSTATE_STEP3: // remove editors from tasklist // assign owner taskListItemService.deleteByWorkflowItem(context, workflowItem); workflowItem.setOwner(newowner); break; case WFSTATE_ARCHIVE: // put in archive in one transaction // remove workflow tasks taskListItemService.deleteByWorkflowItem(context, workflowItem); mycollection = workflowItem.getCollection(); Item myitem = archive(context, workflowItem); // now email notification notifyOfArchive(context, myitem, mycollection); archived = true; break; } logWorkflowEvent( context, workflowItem.getItem(), workflowItem, context.getCurrentUser(), newstate, newowner, mycollection, oldState, mygroup); if (!archived) { workflowItemService.update(context, workflowItem); } return archived; }
@Override public List<BasicWorkflowItem> getPooledTasks(Context context, EPerson e) throws SQLException { return workflowItemService.findPooledTasks(context, e); }
@Override public List<BasicWorkflowItem> getOwnedTasks(Context context, EPerson e) throws java.sql.SQLException { return workflowItemService.findByOwner(context, e); }