CCM NG/ccm-cms: Work on the forms for Workflow management
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4449 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
5fb80631c9
commit
ae05156a71
|
|
@ -28,25 +28,19 @@ import com.arsdigita.bebop.event.ActionListener;
|
|||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.toolbox.ui.ActionGroup;
|
||||
import com.arsdigita.toolbox.ui.Section;
|
||||
import com.arsdigita.web.Web;
|
||||
|
||||
import org.libreccm.workflow.Workflow;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.security.Shiro;
|
||||
import org.libreccm.workflow.Task;
|
||||
import org.libreccm.workflow.AssignableTask;
|
||||
import org.libreccm.workflow.AssignableTaskManager;
|
||||
import org.libreccm.workflow.AssignableTaskRepository;
|
||||
import org.libreccm.workflow.WorkflowConstants;
|
||||
import org.libreccm.workflow.WorkflowManager;
|
||||
import org.libreccm.workflow.WorkflowRepository;
|
||||
import org.libreccm.workflow.WorkflowState;
|
||||
import org.librecms.CmsConstants;
|
||||
import org.librecms.workflow.CmsTask;
|
||||
import org.librecms.workflow.CmsTaskTypeOld;
|
||||
import org.librecms.workflow.CmsTaskType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -94,8 +88,8 @@ public final class AssignedTaskSection extends Section {
|
|||
|
||||
@Override
|
||||
public final boolean isVisible(final PageState state) {
|
||||
return m_facade.workflowState(state, WorkflowConstants.INIT)
|
||||
|| m_facade.workflowState(state, WorkflowConstants.STOPPED);
|
||||
return m_facade.workflowState(state, WorkflowState.INIT)
|
||||
|| m_facade.workflowState(state, WorkflowState.STOPPED);
|
||||
}
|
||||
|
||||
private class Listener implements ActionListener {
|
||||
|
|
@ -119,9 +113,9 @@ public final class AssignedTaskSection extends Section {
|
|||
|
||||
@Override
|
||||
public final boolean isVisible(final PageState state) {
|
||||
return m_facade.workflowState(state, WorkflowConstants.STARTED)
|
||||
&& m_facade.tasksExist(state)
|
||||
&& !m_facade.tasksLocked(state);
|
||||
return m_facade.workflowState(state, WorkflowState.STARTED)
|
||||
&& m_facade.tasksExist(state)
|
||||
&& !m_facade.tasksLocked(state);
|
||||
}
|
||||
|
||||
private class Listener implements ActionListener {
|
||||
|
|
@ -145,9 +139,9 @@ public final class AssignedTaskSection extends Section {
|
|||
|
||||
@Override
|
||||
public final boolean isVisible(final PageState state) {
|
||||
return m_facade.workflowState(state, WorkflowConstants.STARTED)
|
||||
&& m_facade.tasksExist(state)
|
||||
&& m_facade.tasksLocked(state);
|
||||
return m_facade.workflowState(state, WorkflowState.STARTED)
|
||||
&& m_facade.tasksExist(state)
|
||||
&& m_facade.tasksLocked(state);
|
||||
}
|
||||
|
||||
private class Listener implements ActionListener {
|
||||
|
|
@ -177,23 +171,24 @@ public final class AssignedTaskSection extends Section {
|
|||
protected final Object initialValue(final PageState state) {
|
||||
final Workflow workflow = m_flow.getWorkflow(state);
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final AssignableTaskRepository userTaskRepo = cdiUtil.findBean(AssignableTaskRepository.class);
|
||||
final AssignableTaskRepository userTaskRepo = cdiUtil.findBean(
|
||||
AssignableTaskRepository.class);
|
||||
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
||||
return userTaskRepo.findEnabledTasksForWorkflow(shiro.getUser(),
|
||||
return userTaskRepo.findEnabledTasksForWorkflow(shiro.getUser(),
|
||||
workflow);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
final List<AssignableTask> getTasks(final PageState state) {
|
||||
return (ArrayList<AssignableTask>) get(state);
|
||||
return (List<AssignableTask>) get(state);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
final void restartWorkflow(final PageState state) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||
WorkflowManager.class);
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||
WorkflowManager.class);
|
||||
final Workflow workflow = m_flow.getWorkflow(state);
|
||||
workflowManager.start(workflow);
|
||||
|
||||
|
|
@ -205,42 +200,43 @@ public final class AssignedTaskSection extends Section {
|
|||
|
||||
final void lockTasks(final PageState state) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(WorkflowManager.class);
|
||||
|
||||
for(final AssignableTask task : m_tasks.getTasks(state)) {
|
||||
final AssignableTaskManager taskManager = cdiUtil.findBean(
|
||||
AssignableTaskManager.class);
|
||||
|
||||
for (final AssignableTask task : m_tasks.getTasks(state)) {
|
||||
if (relevant(task) && !task.isLocked()) {
|
||||
workflowManager.lockTask(task);
|
||||
taskManager.lockTask(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final void unlockTasks(final PageState state) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(WorkflowManager.class);
|
||||
|
||||
for(final AssignableTask task : m_tasks.getTasks(state)) {
|
||||
final AssignableTaskManager taskManager = cdiUtil.findBean(
|
||||
AssignableTaskManager.class);
|
||||
|
||||
for (final AssignableTask task : m_tasks.getTasks(state)) {
|
||||
if (relevant(task) && task.isLocked()) {
|
||||
workflowManager.unlockTask(task);
|
||||
taskManager.unlockTask(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final boolean tasksLocked(final PageState state) {
|
||||
for(final AssignableTask task : m_tasks.getTasks(state)) {
|
||||
for (final AssignableTask task : m_tasks.getTasks(state)) {
|
||||
if (relevant(task) && !task.isLocked()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
final boolean workflowState(final PageState state, int processState) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(WorkflowManager.class);
|
||||
final boolean workflowState(final PageState state,
|
||||
WorkflowState processState) {
|
||||
final Workflow workflow = m_flow.getWorkflow(state);
|
||||
|
||||
return workflowManager.getState(workflow) == processState;
|
||||
|
||||
return workflow.getState() == processState;
|
||||
}
|
||||
|
||||
final boolean tasksExist(final PageState state) {
|
||||
|
|
@ -248,11 +244,15 @@ public final class AssignedTaskSection extends Section {
|
|||
}
|
||||
|
||||
private boolean relevant(final AssignableTask task) {
|
||||
return true;
|
||||
|
||||
// ToDo
|
||||
// return task.getTaskType().getID().equals(CMSTaskType.AUTHOR)
|
||||
// || task.getTaskType().getID().equals(CMSTaskType.EDIT);
|
||||
if (task instanceof CmsTask) {
|
||||
final CmsTask cmsTask = (CmsTask) task;
|
||||
|
||||
return cmsTask.getTaskType() == CmsTaskType.AUTHOR
|
||||
|| cmsTask.getTaskType() == CmsTaskType.EDIT;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -15,36 +15,36 @@
|
|||
package com.arsdigita.cms.ui.workflow;
|
||||
|
||||
import com.arsdigita.bebop.FormProcessException;
|
||||
import com.arsdigita.bebop.PageState;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.event.FormValidationListener;
|
||||
import com.arsdigita.bebop.event.PrintEvent;
|
||||
import com.arsdigita.bebop.event.PrintListener;
|
||||
import com.arsdigita.bebop.form.CheckboxGroup;
|
||||
import com.arsdigita.bebop.form.Option;
|
||||
import com.arsdigita.bebop.form.OptionGroup;
|
||||
import com.arsdigita.bebop.form.SingleSelect;
|
||||
import com.arsdigita.bebop.form.TextArea;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.parameters.IntegerParameter;
|
||||
import com.arsdigita.cms.ui.BaseForm;
|
||||
import com.arsdigita.cms.ui.ListOptionPrintListener;
|
||||
|
||||
import org.librecms.workflow.CmsTaskTypeOld;
|
||||
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.kernel.KernelConfig;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.libreccm.workflow.Task;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.workflow.CircularTaskDependencyException;
|
||||
import org.libreccm.workflow.TaskManager;
|
||||
import org.libreccm.workflow.TaskRepository;
|
||||
import org.libreccm.workflow.WorkflowManager;
|
||||
import org.librecms.CmsConstants;
|
||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||
import org.librecms.workflow.CmsTaskTypeRepository;
|
||||
import org.librecms.workflow.CmsTaskType;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.TooManyListenersException;
|
||||
import java.util.stream.Collectors;
|
||||
|
|
@ -55,9 +55,6 @@ import java.util.stream.Collectors;
|
|||
*/
|
||||
class BaseTaskForm extends BaseForm {
|
||||
|
||||
private static final Logger LOGGER = LogManager
|
||||
.getLogger(BaseTaskForm.class);
|
||||
|
||||
final WorkflowRequestLocal m_workflow;
|
||||
|
||||
final TextField m_name;
|
||||
|
|
@ -81,7 +78,7 @@ class BaseTaskForm extends BaseForm {
|
|||
try {
|
||||
m_type.addPrintListener(new TaskTypePrintListener());
|
||||
} catch (TooManyListenersException ex) {
|
||||
throw new RuntimeException(ex);
|
||||
throw new UncheckedWrapperException(ex);
|
||||
}
|
||||
|
||||
m_description = new Description("desc", 4000, true);
|
||||
|
|
@ -142,30 +139,19 @@ class BaseTaskForm extends BaseForm {
|
|||
}
|
||||
*/
|
||||
// Fix this one too
|
||||
private class TaskTypePrintListener extends ListOptionPrintListener<CmsTaskTypeOld> {
|
||||
private class TaskTypePrintListener implements PrintListener {
|
||||
|
||||
@Override
|
||||
protected List<CmsTaskTypeOld> getDataQuery(final PageState state) {
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CmsTaskTypeRepository taskTypeRepo = cdiUtil.findBean(
|
||||
CmsTaskTypeRepository.class);
|
||||
public void prepare(final PrintEvent event) {
|
||||
final OptionGroup target = (OptionGroup) event.getTarget();
|
||||
|
||||
final List<CmsTaskTypeOld> taskTypes = taskTypeRepo.findAll();
|
||||
for (final CmsTaskType type : CmsTaskType.values()) {
|
||||
final GlobalizedMessage label = new GlobalizedMessage(
|
||||
String.format("cms.workflow.task_type.%s", type.toString()),
|
||||
CmsConstants.CMS_BUNDLE);
|
||||
|
||||
return taskTypes;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey(final CmsTaskTypeOld taskType) {
|
||||
return Long.toString(taskType.getTaskTypeId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValue(final CmsTaskTypeOld taskType) {
|
||||
final KernelConfig kernelConfig = KernelConfig.getConfig();
|
||||
final Locale defaultLocale = kernelConfig.getDefaultLocale();
|
||||
return taskType.getName().getValue(defaultLocale);
|
||||
target.addOption(new Option(type.toString(), new Label(label)));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -176,6 +162,7 @@ class BaseTaskForm extends BaseForm {
|
|||
* new ones in since it is possible that Tasks will fire events when
|
||||
* dependencies are added and removed.
|
||||
*
|
||||
* XXX domlay
|
||||
*/
|
||||
final void processDependencies(final Task task,
|
||||
final String[] selectedDependencies) {
|
||||
|
|
@ -188,8 +175,7 @@ class BaseTaskForm extends BaseForm {
|
|||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final TaskRepository taskRepo = cdiUtil.findBean(TaskRepository.class);
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||
WorkflowManager.class);
|
||||
final TaskManager taskManager = cdiUtil.findBean(TaskManager.class);
|
||||
|
||||
Long selectedId;
|
||||
Object addedTask;
|
||||
|
|
@ -203,11 +189,17 @@ class BaseTaskForm extends BaseForm {
|
|||
}
|
||||
}
|
||||
|
||||
toRemove.values().forEach(taskToRemove -> workflowManager
|
||||
.removeDependentTask(task, taskToRemove));
|
||||
for (final Task taskToRemove : toRemove.values()) {
|
||||
taskManager.removeDependentTask(task, taskToRemove);
|
||||
}
|
||||
|
||||
toAdd.values().forEach(tasktoAdd -> workflowManager
|
||||
.addDependentTask(task, tasktoAdd));
|
||||
for (final Task taskToAdd : toAdd.values()) {
|
||||
try {
|
||||
taskManager.addDependentTask(task, taskToAdd);
|
||||
} catch(CircularTaskDependencyException ex) {
|
||||
throw new UncheckedWrapperException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -46,12 +46,13 @@ import com.arsdigita.web.Web;
|
|||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.security.Shiro;
|
||||
import org.libreccm.workflow.Task;
|
||||
import org.libreccm.workflow.TaskManager;
|
||||
import org.libreccm.workflow.TaskRepository;
|
||||
import org.libreccm.workflow.Workflow;
|
||||
import org.libreccm.workflow.WorkflowManager;
|
||||
import org.librecms.CmsConstants;
|
||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||
import org.librecms.workflow.CmsTaskTypeRepository;
|
||||
import org.librecms.workflow.CmsTaskType;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
|
@ -151,10 +152,8 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
|||
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
||||
final User currentUser = shiro.getUser();
|
||||
|
||||
boolean visible = task.isLocked()
|
||||
&& (lockingUser == null
|
||||
|| lockingUser.equals(currentUser));
|
||||
return visible;
|
||||
return task.isLocked() && (lockingUser == null
|
||||
|| lockingUser.equals(currentUser));
|
||||
}
|
||||
|
||||
private class Listener implements ActionListener {
|
||||
|
|
@ -164,18 +163,17 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
|||
final PageState state = event.getPageState();
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||
WorkflowManager.class);
|
||||
final TaskManager taskManager = cdiUtil.findBean(TaskManager.class);
|
||||
|
||||
final Task task = m_task.getTask(state);
|
||||
task.setTaskState("finished");
|
||||
|
||||
taskManager.finish(task);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset(final PageState state) {
|
||||
super.reset(state);
|
||||
|
||||
|
|
@ -211,14 +209,10 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
|||
|
||||
@Override
|
||||
protected final Object initialValue(final PageState state) {
|
||||
final String id = m_tasks.getRowSelectionModel().getSelectedKey(
|
||||
final String key = m_tasks.getRowSelectionModel().getSelectedKey(
|
||||
state).toString();
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final CmsTaskTypeRepository taskRepo = cdiUtil.findBean(
|
||||
CmsTaskTypeRepository.class);
|
||||
|
||||
return taskRepo.findById(Long.parseLong(id));
|
||||
return CmsTaskType.valueOf(key);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -237,8 +231,6 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
|||
ActionGroup.EDIT);
|
||||
m_actionGroup.addAction(new AdminVisible(deleteLink),
|
||||
ActionGroup.DELETE);
|
||||
// m_actionGroup.addAction(new AdminVisible(new StartLink()));
|
||||
// m_actionGroup.addAction(new AdminVisible(new StopLink()));
|
||||
}
|
||||
|
||||
private class Properties extends PropertyList {
|
||||
|
|
@ -247,20 +239,20 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
|||
protected final List<Property> properties(final PageState state) {
|
||||
@SuppressWarnings("unchecked")
|
||||
final List<Property> props = super.properties(state);
|
||||
final Workflow flow = (Workflow) m_workflow.get(state);
|
||||
final Workflow workflow = (Workflow) m_workflow.get(state);
|
||||
|
||||
final KernelConfig kernelConfig = KernelConfig.getConfig();
|
||||
final Locale defaultLocale = kernelConfig.getDefaultLocale();
|
||||
|
||||
props.add(new Property(gz("cms.ui.name"),
|
||||
flow.getName().getValue(defaultLocale)));
|
||||
workflow.getName().getValue(defaultLocale)));
|
||||
props.add(new Property(
|
||||
gz("cms.ui.description"),
|
||||
flow.getDescription().getValue(defaultLocale)));
|
||||
// props.add(new Property(gz("cms.ui.workflow.current_state"),
|
||||
// flow.getStateString()));
|
||||
workflow.getDescription().getValue(defaultLocale)));
|
||||
props.add(new Property(gz("cms.ui.workflow.current_state"),
|
||||
workflow.getState().toString()));
|
||||
props.add(new Property(gz("cms.ui.workflow.num_tasks"),
|
||||
String.valueOf(flow.getTasks().size())));
|
||||
String.valueOf(workflow.getTasks().size())));
|
||||
|
||||
return props;
|
||||
}
|
||||
|
|
@ -24,10 +24,13 @@ import com.arsdigita.bebop.event.FormProcessListener;
|
|||
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||
import com.arsdigita.bebop.form.TextArea;
|
||||
import com.arsdigita.cms.ui.BaseForm;
|
||||
|
||||
import org.librecms.workflow.CmsTask;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.workflow.TaskComment;
|
||||
import org.libreccm.workflow.TaskManager;
|
||||
import org.libreccm.workflow.TaskRepository;
|
||||
|
||||
/**
|
||||
|
|
@ -69,9 +72,8 @@ class CommentAddForm extends BaseForm {
|
|||
final CmsTask task = selectedTask.getTask(state);
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final TaskRepository taskRepo = cdiUtil.findBean(TaskRepository.class);
|
||||
|
||||
task.addComment((String)comment.getValue(state));
|
||||
taskRepo.save(task);
|
||||
final TaskManager taskManager = cdiUtil.findBean(TaskManager.class);
|
||||
taskManager.addComment(task, (String) comment.getValue(state));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -30,17 +30,17 @@ import com.arsdigita.bebop.form.OptionGroup;
|
|||
import com.arsdigita.kernel.KernelConfig;
|
||||
|
||||
import org.librecms.workflow.CmsTask;
|
||||
import org.librecms.workflow.CmsTaskTypeOld;
|
||||
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.configuration.ConfigurationManager;
|
||||
import org.libreccm.workflow.Task;
|
||||
import org.libreccm.workflow.TaskManager;
|
||||
import org.libreccm.workflow.TaskRepository;
|
||||
import org.libreccm.workflow.Workflow;
|
||||
import org.libreccm.workflow.WorkflowManager;
|
||||
import org.librecms.workflow.CmsTaskTypeRepository;
|
||||
import org.librecms.workflow.CmsTaskType;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
|
@ -105,9 +105,9 @@ class TaskAddForm extends BaseTaskForm {
|
|||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final TaskRepository taskRepo = cdiUtil.findBean(
|
||||
TaskRepository.class);
|
||||
final CmsTaskTypeRepository taskTypeRepo = cdiUtil.findBean(CmsTaskTypeRepository.class);
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||
WorkflowManager.class);
|
||||
final TaskManager taskManager = cdiUtil.findBean(TaskManager.class);
|
||||
final ConfigurationManager confManager = cdiUtil.findBean(
|
||||
ConfigurationManager.class);
|
||||
final KernelConfig kernelConfig = confManager.findConfiguration(
|
||||
|
|
@ -120,13 +120,13 @@ class TaskAddForm extends BaseTaskForm {
|
|||
defaultLocale,
|
||||
((String) m_description.getValue(state)));
|
||||
|
||||
final CmsTaskTypeOld taskType = taskTypeRepo.findById((Long) m_type.getValue(state));
|
||||
final CmsTaskType taskType = CmsTaskType.valueOf((String) m_type.getValue(state));
|
||||
task.setTaskType(taskType);
|
||||
task.setActive(true);
|
||||
|
||||
taskRepo.save(task);
|
||||
|
||||
workflowManager.addTask(workflow, task);
|
||||
taskManager.addTask(workflow, task);
|
||||
|
||||
processDependencies(task, (String[]) m_deps.getValue(state));
|
||||
|
||||
|
|
@ -42,13 +42,13 @@ import org.librecms.workflow.CmsTask;
|
|||
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
|
||||
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.security.PermissionChecker;
|
||||
import org.libreccm.security.Role;
|
||||
import org.libreccm.security.RoleRepository;
|
||||
import org.libreccm.workflow.AssignableTaskManager;
|
||||
import org.libreccm.workflow.TaskAssignment;
|
||||
import org.libreccm.workflow.WorkflowManager;
|
||||
import org.librecms.CmsConstants;
|
||||
|
|
@ -109,7 +109,7 @@ class TaskAddRole extends CMSForm {
|
|||
final List<Role> roles = assignments.stream()
|
||||
.map(TaskAssignment::getRole)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
|
||||
m_roles.setValue(state, roles);
|
||||
}
|
||||
|
||||
|
|
@ -125,13 +125,14 @@ class TaskAddRole extends CMSForm {
|
|||
final CmsTask task = m_task.getTask(state);
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||
WorkflowManager.class);
|
||||
final AssignableTaskManager taskManager = cdiUtil.findBean(
|
||||
AssignableTaskManager.class);
|
||||
final RoleRepository roleRepository = cdiUtil.findBean(
|
||||
RoleRepository.class);
|
||||
|
||||
task.getAssignments().forEach(assignment -> workflowManager
|
||||
.retractTask(task, assignment.getRole()));
|
||||
task.getAssignments().forEach(assignment -> {
|
||||
taskManager.retractTask(task, assignment.getRole());
|
||||
});
|
||||
|
||||
final String[] roleIds = (String[]) m_roles.getValue(state);
|
||||
|
||||
|
|
@ -139,7 +140,7 @@ class TaskAddRole extends CMSForm {
|
|||
for (final String roleId : roleIds) {
|
||||
final Role role = roleRepository.findById(Long
|
||||
.parseLong(roleId));
|
||||
workflowManager.assignTask(task, role);
|
||||
taskManager.assignTask(task, role);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -201,8 +202,4 @@ class TaskAddRole extends CMSForm {
|
|||
return new GlobalizedMessage(key, CmsConstants.CMS_BUNDLE);
|
||||
}
|
||||
|
||||
private static String lz(final String key) {
|
||||
return (String) gz(key).localize();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -37,10 +37,8 @@ import org.libreccm.cdi.utils.CdiUtil;
|
|||
import org.libreccm.configuration.ConfigurationManager;
|
||||
import org.libreccm.workflow.Task;
|
||||
import org.libreccm.workflow.TaskRepository;
|
||||
import org.librecms.workflow.CmsTaskTypeOld;
|
||||
import org.librecms.workflow.CmsTaskTypeRepository;
|
||||
import org.librecms.workflow.CmsTaskType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.TooManyListenersException;
|
||||
|
|
@ -52,13 +50,13 @@ import java.util.stream.Collectors;
|
|||
*/
|
||||
class TaskEditForm extends BaseTaskForm {
|
||||
|
||||
private TaskRequestLocal m_task;
|
||||
private TaskRequestLocal selectedTask;
|
||||
|
||||
public TaskEditForm(final WorkflowRequestLocal workflow,
|
||||
final TaskRequestLocal task) {
|
||||
final TaskRequestLocal selectedTask) {
|
||||
super("task", gz("cms.ui.workflow.task.edit"), workflow);
|
||||
|
||||
m_task = task;
|
||||
this.selectedTask = selectedTask;
|
||||
|
||||
try {
|
||||
m_deps.addPrintListener(new DependencyPrinter());
|
||||
|
|
@ -89,7 +87,7 @@ class TaskEditForm extends BaseTaskForm {
|
|||
final OptionGroup options) {
|
||||
final KernelConfig kernelConfig = KernelConfig.getConfig();
|
||||
final Locale defaultLocale = kernelConfig.getDefaultLocale();
|
||||
if (m_task.getTask(state).getTaskId() != task.getTaskId()) {
|
||||
if (selectedTask.getTask(state).getTaskId() != task.getTaskId()) {
|
||||
options.addOption(new Option(
|
||||
Long.toString(task.getTaskId()),
|
||||
task.getLabel().getValue(defaultLocale)));
|
||||
|
|
@ -102,12 +100,11 @@ class TaskEditForm extends BaseTaskForm {
|
|||
public final void init(final FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
final PageState state = event.getPageState();
|
||||
final CmsTask task = m_task.getTask(state);
|
||||
final CmsTask task = selectedTask.getTask(state);
|
||||
|
||||
m_name.setValue(state, task.getLabel());
|
||||
m_description.setValue(state, task.getDescription());
|
||||
m_type.setValue(state, Long.toString(task.getTaskType()
|
||||
.getTaskTypeId()));
|
||||
m_type.setValue(state, task.getTaskType().toString());
|
||||
|
||||
final List<Task> dependencies = task.getDependsOn();
|
||||
final List<String> depIdList = dependencies.stream()
|
||||
|
|
@ -125,13 +122,11 @@ class TaskEditForm extends BaseTaskForm {
|
|||
public final void process(final FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
final PageState state = event.getPageState();
|
||||
final CmsTask task = m_task.getTask(state);
|
||||
final CmsTask task = selectedTask.getTask(state);
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final TaskRepository taskRepo = cdiUtil.findBean(
|
||||
TaskRepository.class);
|
||||
final CmsTaskTypeRepository taskTypeRepo = cdiUtil.findBean(
|
||||
CmsTaskTypeRepository.class);
|
||||
final ConfigurationManager confManager = cdiUtil.findBean(
|
||||
ConfigurationManager.class);
|
||||
final KernelConfig kernelConfig = confManager.findConfiguration(
|
||||
|
|
@ -144,9 +139,7 @@ class TaskEditForm extends BaseTaskForm {
|
|||
defaultLocale,
|
||||
(String) m_description.getValue(state));
|
||||
|
||||
final CmsTaskTypeOld taskType = taskTypeRepo.findById((Long) m_type
|
||||
.getValue(state));
|
||||
task.setTaskType(taskType);
|
||||
task.setTaskType(CmsTaskType.valueOf((String)m_type.getValue(state)));
|
||||
|
||||
taskRepo.save(task);
|
||||
|
||||
|
|
@ -29,36 +29,40 @@ import com.arsdigita.bebop.form.Option;
|
|||
import com.arsdigita.bebop.form.RadioGroup;
|
||||
import com.arsdigita.bebop.parameters.BooleanParameter;
|
||||
|
||||
import org.librecms.contentsection.ContentSection;
|
||||
|
||||
import com.arsdigita.cms.ContentCenter;
|
||||
import com.arsdigita.cms.ui.ContentItemPage;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.kernel.KernelConfig;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
|
||||
import org.librecms.workflow.CmsTask;
|
||||
import org.librecms.workflow.CmsTaskTypeOld;
|
||||
|
||||
import com.arsdigita.web.RedirectSignal;
|
||||
import com.arsdigita.web.URL;
|
||||
import com.arsdigita.web.Web;
|
||||
|
||||
import org.libreccm.workflow.Task;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.arsdigita.cms.CMSConfig;
|
||||
import org.libreccm.cdi.utils.CdiUtil;
|
||||
import org.libreccm.configuration.ConfigurationManager;
|
||||
import org.libreccm.security.PermissionChecker;
|
||||
import org.libreccm.security.Shiro;
|
||||
import org.libreccm.security.User;
|
||||
import org.libreccm.workflow.AssignableTask;
|
||||
import org.libreccm.workflow.AssignableTaskManager;
|
||||
import org.libreccm.workflow.TaskManager;
|
||||
import org.libreccm.workflow.TaskRepository;
|
||||
import org.libreccm.workflow.Workflow;
|
||||
import org.libreccm.workflow.WorkflowManager;
|
||||
import org.libreccm.workflow.WorkflowRepository;
|
||||
import org.librecms.CmsConstants;
|
||||
import org.librecms.contentsection.ContentItem;
|
||||
import org.librecms.contentsection.ContentItemRepository;
|
||||
import org.librecms.workflow.CmsTaskType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -71,7 +75,7 @@ import org.librecms.contentsection.ContentItemRepository;
|
|||
public final class TaskFinishForm extends CommentAddForm {
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger(
|
||||
TaskFinishForm.class);
|
||||
TaskFinishForm.class);
|
||||
private final TaskRequestLocal m_task;
|
||||
private final Label m_approvePrompt;
|
||||
private final RadioGroup m_approve;
|
||||
|
|
@ -82,10 +86,12 @@ public final class TaskFinishForm extends CommentAddForm {
|
|||
m_task = task;
|
||||
|
||||
m_approve = new RadioGroup(new BooleanParameter("approve"));
|
||||
m_approve.addOption(new Option("true",
|
||||
lz("cms.ui.workflow.task.approve")));
|
||||
m_approve.addOption(new Option("false",
|
||||
lz("cms.ui.workflow.task.reject")));
|
||||
m_approve.addOption(new Option(
|
||||
"true",
|
||||
new Label(gz("cms.ui.workflow.task.approve"))));
|
||||
m_approve.addOption(new Option(
|
||||
"false",
|
||||
new Label(gz("cms.ui.workflow.task.reject"))));
|
||||
|
||||
m_approvePrompt = new Label(gz("cms.ui.workflow.task.approve_prompt"));
|
||||
|
||||
|
|
@ -117,13 +123,14 @@ public final class TaskFinishForm extends CommentAddForm {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class ValidationListener implements FormValidationListener {
|
||||
|
||||
@Override
|
||||
public final void validate(final FormSectionEvent e)
|
||||
throws FormProcessException {
|
||||
throws FormProcessException {
|
||||
LOGGER.debug("Validating task finish");
|
||||
|
||||
final PageState state = e.getPageState();
|
||||
|
|
@ -131,17 +138,18 @@ public final class TaskFinishForm extends CommentAddForm {
|
|||
|
||||
if (requiresApproval(task) && m_approve.getValue(state) == null) {
|
||||
throw new FormProcessException(new GlobalizedMessage(
|
||||
"cms.ui.workflow.task.approval_or_reject_required",
|
||||
CmsConstants.CMS_BUNDLE));
|
||||
"cms.ui.workflow.task.approval_or_reject_required",
|
||||
CmsConstants.CMS_BUNDLE));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class ProcessListener implements FormProcessListener {
|
||||
|
||||
@Override
|
||||
public final void process(final FormSectionEvent event)
|
||||
throws FormProcessException {
|
||||
throws FormProcessException {
|
||||
LOGGER.debug("Processing task finish");
|
||||
|
||||
final PageState state = event.getPageState();
|
||||
|
|
@ -150,26 +158,36 @@ public final class TaskFinishForm extends CommentAddForm {
|
|||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final PermissionChecker permissionChecker = cdiUtil.findBean(
|
||||
PermissionChecker.class);
|
||||
PermissionChecker.class);
|
||||
final ContentItemRepository itemRepo = cdiUtil.findBean(
|
||||
ContentItemRepository.class);
|
||||
ContentItemRepository.class);
|
||||
final Optional<ContentItem> item = itemRepo.findItemWithWorkflow(
|
||||
task.getWorkflow());
|
||||
task.getWorkflow());
|
||||
|
||||
if (!item.isPresent()) {
|
||||
throw new UncheckedWrapperException(
|
||||
"Workflow not assigned to an item");
|
||||
"Workflow not assigned to an item");
|
||||
}
|
||||
|
||||
permissionChecker.checkPermission(task.getTaskType().getPrivilege(),
|
||||
item.get());
|
||||
|
||||
final TaskRepository taskRepo = cdiUtil.findBean(
|
||||
TaskRepository.class);
|
||||
TaskRepository.class);
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||
WorkflowManager.class);
|
||||
final TaskManager taskManager = cdiUtil.findBean(TaskManager.class);
|
||||
final AssignableTaskManager assignableTaskManager = cdiUtil
|
||||
.findBean(AssignableTaskManager.class);
|
||||
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
||||
final ConfigurationManager confManager = cdiUtil.findBean(
|
||||
ConfigurationManager.class);
|
||||
final KernelConfig kernelConfig = confManager.findConfiguration(
|
||||
KernelConfig.class);
|
||||
|
||||
if (requiresApproval(task)) {
|
||||
LOGGER.debug("The task requires approval; checking to see "
|
||||
+ "if it's approved");
|
||||
+ "if it's approved");
|
||||
|
||||
// XXX I think the fact that this returns a Boolean is
|
||||
// the effect of broken parameter marshalling in
|
||||
|
|
@ -179,75 +197,77 @@ public final class TaskFinishForm extends CommentAddForm {
|
|||
if (isApproved.equals(Boolean.TRUE)) {
|
||||
LOGGER.debug("The task is approved; finishing the task");
|
||||
|
||||
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||
WorkflowManager.class);
|
||||
|
||||
task.setActive(false);
|
||||
taskManager.finish(task);
|
||||
finishedTask = true;
|
||||
} else {
|
||||
LOGGER.debug("The task is rejected; reenabling dependent "
|
||||
+ "tasks");
|
||||
+ "tasks");
|
||||
|
||||
// Reenable the previous tasks.
|
||||
final Iterator<Task> iter = task.getDependentTasks().
|
||||
iterator();
|
||||
for (final Task dependent : task.getDependentTasks()) {
|
||||
LOGGER.debug("Reenabling task {}",
|
||||
dependent.getLabel().getValue(
|
||||
kernelConfig.getDefaultLocale()));
|
||||
|
||||
while (iter.hasNext()) {
|
||||
final Task dependent = (Task) iter.next();
|
||||
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("Reenabling task " + dependent.
|
||||
getLabel());
|
||||
}
|
||||
|
||||
dependent.setActive(true);
|
||||
|
||||
taskRepo.save(dependent);
|
||||
taskManager.enable(dependent);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
LOGGER.debug("The task does not require approval; finishing "
|
||||
+ "it");
|
||||
LOGGER.debug("The task does not require approval; finishing it");
|
||||
|
||||
task.setActive(false);
|
||||
taskRepo.save(task);
|
||||
taskManager.disable(task);
|
||||
}
|
||||
if (finishedTask) {
|
||||
Iterator tasks = Engine.getInstance(CMSEngine.CMS_ENGINE_TYPE).
|
||||
getEnabledTasks(Web.getWebContext().getUser(),
|
||||
task.getParentID()).iterator();
|
||||
if (tasks.hasNext()) {
|
||||
CmsTask thisTask = (CmsTask) tasks.next();
|
||||
PermissionDescriptor thisTaskAccess = new PermissionDescriptor(
|
||||
thisTask.getTaskType().getPrivilege(), task.
|
||||
getWorkflow().getObject(), user);
|
||||
if (PermissionService.checkPermission(thisTaskAccess)) {
|
||||
final TaskFinishFormController controller = cdiUtil.findBean(
|
||||
TaskFinishFormController.class);
|
||||
final Workflow workflow = task.getWorkflow();
|
||||
final User user = shiro.getUser();
|
||||
final List<AssignableTask> tasks = controller.findEnabledTasks(
|
||||
workflow);
|
||||
for (final AssignableTask currentTask : tasks) {
|
||||
if (!(currentTask instanceof CmsTask)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final CmsTask currentCmsTask = (CmsTask) currentTask;
|
||||
final String privilege = currentCmsTask.getTaskType()
|
||||
.getPrivilege();
|
||||
if (permissionChecker.isPermitted(privilege,
|
||||
workflow.getObject())) {
|
||||
//Lock task for current user
|
||||
assignableTaskManager.lockTask(currentCmsTask);
|
||||
|
||||
if (CmsTaskType.DEPLOY == currentCmsTask.getTaskType()) {
|
||||
|
||||
} else {
|
||||
throw new RedirectSignal(
|
||||
URL.there(state.getRequest(),
|
||||
ContentItemPage.getItemURL(
|
||||
item,
|
||||
ContentItemPage.PUBLISHING_TAB)),
|
||||
true);
|
||||
}
|
||||
|
||||
// Lock task for user
|
||||
thisTask.lock((User) user);
|
||||
int targetTab = (thisTask.getTaskType().getID().equals(CmsTaskTypeOld.DEPLOY)) ? ContentItemPage.PUBLISHING_TAB : ContentItemPage.AUTHORING_TAB;
|
||||
throw new RedirectSignal(URL.there(state.getRequest(),
|
||||
ContentItemPage.
|
||||
getItemURL(
|
||||
task.
|
||||
getItem(),
|
||||
targetTab)),
|
||||
true);
|
||||
}
|
||||
}
|
||||
|
||||
// redirect to /content-center if streamlined creation mode is active.
|
||||
if (ContentSection.getConfig().getUseStreamlinedCreation()) {
|
||||
throw new RedirectSignal(URL.there(state.getRequest(),
|
||||
ContentCenter.getURL()),
|
||||
true);
|
||||
final CMSConfig cmsConfig = confManager.findConfiguration(
|
||||
CMSConfig.class);
|
||||
if (cmsConfig.isUseStreamlinedCreation()) {
|
||||
throw new RedirectSignal(
|
||||
URL.there(state.getRequest(),
|
||||
CmsConstants.CONTENT_CENTER_URL),
|
||||
true);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static boolean requiresApproval(final CmsTask task) {
|
||||
return !task.getTaskType().getID().equals(CmsTaskTypeOld.AUTHOR);
|
||||
return task.getTaskType() != CmsTaskType.AUTHOR;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -50,6 +50,7 @@ import org.libreccm.security.RoleRepository;
|
|||
import org.libreccm.security.Shiro;
|
||||
import org.libreccm.workflow.Task;
|
||||
import org.libreccm.workflow.AssignableTask;
|
||||
import org.libreccm.workflow.AssignableTaskManager;
|
||||
import org.libreccm.workflow.WorkflowManager;
|
||||
import org.librecms.CmsConstants;
|
||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||
|
|
@ -167,13 +168,13 @@ final class TaskItemPane extends BaseItemPane {
|
|||
final CmsTask task = m_task.getTask(state);
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||
WorkflowManager.class);
|
||||
final AssignableTaskManager taskManager = cdiUtil.findBean(
|
||||
AssignableTaskManager.class);
|
||||
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
||||
|
||||
final User user = shiro.getUser();
|
||||
|
||||
final List<AssignableTask> tasks = workflowManager.lockedBy(user);
|
||||
final List<AssignableTask> tasks = taskManager.lockedBy(user);
|
||||
|
||||
return tasks.contains(task);
|
||||
}
|
||||
|
|
@ -256,9 +257,9 @@ final class TaskItemPane extends BaseItemPane {
|
|||
if (hasAdmin(state)) {
|
||||
final CmsTask task = m_task.getTask(state);
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil
|
||||
.findBean(WorkflowManager.class);
|
||||
workflowManager.lockTask(task);
|
||||
final AssignableTaskManager taskManager = cdiUtil
|
||||
.findBean(AssignableTaskManager.class);
|
||||
taskManager.lockTask(task);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -290,9 +291,9 @@ final class TaskItemPane extends BaseItemPane {
|
|||
if (hasAdmin(state)) {
|
||||
final CmsTask task = m_task.getTask(state);
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil
|
||||
.findBean(WorkflowManager.class);
|
||||
workflowManager.unlockTask(task);
|
||||
final AssignableTaskManager taskManager = cdiUtil
|
||||
.findBean(AssignableTaskManager.class);
|
||||
taskManager.unlockTask(task);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -319,7 +320,7 @@ final class TaskItemPane extends BaseItemPane {
|
|||
props.add(new Property(gz("cms.ui.workflow.task.dependencies"),
|
||||
deps(task)));
|
||||
props.add(new Property(gz("cms.ui.workflow.task.state"),
|
||||
task.getTaskState()));
|
||||
task.getTaskState().toString()));
|
||||
props.add(new Property(gz("cms.ui.workflow.task.locked"),
|
||||
task.isLocked()
|
||||
? lz("cms.ui.yes") : lz("cms.ui.no")));
|
||||
|
|
@ -334,7 +335,7 @@ final class TaskItemPane extends BaseItemPane {
|
|||
|
||||
return dependencies.stream()
|
||||
.map(dependency -> dependency.getLabel().getValue(
|
||||
defaultLocale))
|
||||
defaultLocale))
|
||||
.collect(Collectors.joining(", "));
|
||||
}
|
||||
|
||||
|
|
@ -383,13 +384,13 @@ final class TaskItemPane extends BaseItemPane {
|
|||
.getRowKey());
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final WorkflowManager workflowManager = cdiUtil
|
||||
.findBean(WorkflowManager.class);
|
||||
final AssignableTaskManager taskManager = cdiUtil
|
||||
.findBean(AssignableTaskManager.class);
|
||||
final RoleRepository roleRepo = cdiUtil.findBean(
|
||||
RoleRepository.class);
|
||||
|
||||
final Role role = roleRepo.findById(roleId);
|
||||
workflowManager.retractTask(task, role);
|
||||
taskManager.retractTask(task, role);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -123,8 +123,8 @@ public class AssignableTaskManager {
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param task
|
||||
*
|
||||
* @param task
|
||||
*/
|
||||
@AuthorizationRequired
|
||||
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
|
||||
|
|
@ -133,14 +133,14 @@ public class AssignableTaskManager {
|
|||
if (task == null) {
|
||||
throw new IllegalArgumentException("Can't lock task null.");
|
||||
}
|
||||
|
||||
|
||||
if (task.isLocked()) {
|
||||
throw new IllegalArgumentException(String.format(
|
||||
"Task %s is already locked by user \"%s\".",
|
||||
Objects.toString(task),
|
||||
task.getLockingUser().getName()));
|
||||
}
|
||||
|
||||
|
||||
task.setLocked(true);
|
||||
task.setLockingUser(shiro.getUser());
|
||||
|
||||
|
|
@ -149,7 +149,7 @@ public class AssignableTaskManager {
|
|||
|
||||
/**
|
||||
* Unlocks a task.
|
||||
*
|
||||
*
|
||||
* @param task The task to unlock.
|
||||
*/
|
||||
@AuthorizationRequired
|
||||
|
|
@ -159,7 +159,7 @@ public class AssignableTaskManager {
|
|||
if (task == null) {
|
||||
throw new IllegalArgumentException("Can't unlock task null.");
|
||||
}
|
||||
|
||||
|
||||
task.setLocked(false);
|
||||
task.setLockingUser(null);
|
||||
|
||||
|
|
@ -168,19 +168,20 @@ public class AssignableTaskManager {
|
|||
|
||||
/**
|
||||
* Retrieves a list of all tasks locked by a specific user.
|
||||
*
|
||||
*
|
||||
* @param user The user which locks the tasks.
|
||||
*
|
||||
* @return A list with all tasks locked by the specified user.
|
||||
*/
|
||||
@AuthorizationRequired
|
||||
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public List<AssignableTask> lockedBy(final User user) {
|
||||
|
||||
|
||||
if (user == null) {
|
||||
throw new IllegalArgumentException("user can't be null.");
|
||||
}
|
||||
|
||||
|
||||
final TypedQuery<AssignableTask> query = entityManager.createNamedQuery(
|
||||
"UserTask.findLockedBy", AssignableTask.class);
|
||||
query.setParameter("user", user);
|
||||
|
|
@ -190,7 +191,7 @@ public class AssignableTaskManager {
|
|||
|
||||
/**
|
||||
* Finishes a {@link AssignableTask}.
|
||||
*
|
||||
*
|
||||
* @param task The task to finish.
|
||||
*/
|
||||
@AuthorizationRequired
|
||||
|
|
@ -213,8 +214,8 @@ public class AssignableTaskManager {
|
|||
|
||||
/**
|
||||
* Finishes a {@link AssignableTask} with a comment.
|
||||
*
|
||||
* @param task The task to finish.
|
||||
*
|
||||
* @param task The task to finish.
|
||||
* @param comment The comment to add to the task.
|
||||
*/
|
||||
@AuthorizationRequired
|
||||
|
|
@ -226,4 +227,14 @@ public class AssignableTaskManager {
|
|||
finish(task);
|
||||
}
|
||||
|
||||
public List<AssignableTask> findAssignedTasks(final Workflow workflow,
|
||||
final List<Role> roles) {
|
||||
final TypedQuery<AssignableTask> query = entityManager.createNamedQuery(
|
||||
"AssignableTask.findAssignedTasks", AssignableTask.class);
|
||||
query.setParameter("workflow", workflow);
|
||||
query.setParameter("roles", roles);
|
||||
|
||||
return query.getResultList();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ public class Task implements Identifiable, Serializable {
|
|||
@Column(name = "TASK_ID")
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private long taskId;
|
||||
|
||||
|
||||
/**
|
||||
* The UUID of the task.
|
||||
*/
|
||||
|
|
@ -205,11 +205,11 @@ public class Task implements Identifiable, Serializable {
|
|||
public String getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
|
||||
protected void setUuid(final String uuid) {
|
||||
this.uuid = uuid;
|
||||
}
|
||||
|
||||
|
||||
public LocalizedString getLabel() {
|
||||
return label;
|
||||
}
|
||||
|
|
@ -374,7 +374,7 @@ public class Task implements Identifiable, Serializable {
|
|||
public String toString(final String data) {
|
||||
return String.format("%s{ "
|
||||
+ "taskId = %d, "
|
||||
+ "uuid = \"%s\", "
|
||||
+ "uuid = \"%s\", "
|
||||
+ "label = %s, "
|
||||
+ "active = %b, "
|
||||
+ "taskState = \"%s\", "
|
||||
|
|
|
|||
Loading…
Reference in New Issue