CCM NG/ccm-cms Tab Workflows

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4629 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2017-03-14 18:56:16 +00:00
parent e1d7afe473
commit 7df8f22248
11 changed files with 289 additions and 102 deletions

View File

@ -53,37 +53,38 @@ import java.util.stream.Collectors;
*/ */
class BaseTaskForm extends BaseForm { class BaseTaskForm extends BaseForm {
final WorkflowRequestLocal m_workflow; private final WorkflowRequestLocal workflowRequestLocal;
final TextField m_name; private final TextField nameTextField;
final TextArea m_description; private final TextArea descriptionTextArea;
final OptionGroup m_type; private final OptionGroup typeOptionGroup;
final OptionGroup m_deps; private final OptionGroup dependenciesOptionGroup;
BaseTaskForm(final String key, BaseTaskForm(final String key,
final GlobalizedMessage message, final GlobalizedMessage message,
final WorkflowRequestLocal workflow) { final WorkflowRequestLocal workflowRequestLocal) {
super(key, message); super(key, message);
m_workflow = workflow; this.workflowRequestLocal = workflowRequestLocal;
m_name = new Name("name", 200, true); nameTextField = new Name("name", 200, true);
addField(gz("cms.ui.workflow.task.name"), m_name); addField(gz("cms.ui.workflow.task.name"), nameTextField);
m_type = new SingleSelect(new StringParameter("task_type")); typeOptionGroup = new SingleSelect(new StringParameter("task_type"));
addField(gz("cms.ui.workflow.task.type"), m_type); addField(gz("cms.ui.workflow.task.type"), typeOptionGroup);
try { try {
m_type.addPrintListener(new TaskTypePrintListener()); typeOptionGroup.addPrintListener(new TaskTypePrintListener());
} catch (TooManyListenersException ex) { } catch (TooManyListenersException ex) {
throw new UncheckedWrapperException(ex); throw new UncheckedWrapperException(ex);
} }
m_description = new Description("desc", 4000, true); descriptionTextArea = new Description("desc", 4000, true);
addField(gz("cms.ui.workflow.task.description"), m_description); addField(gz("cms.ui.workflow.task.description"), descriptionTextArea);
m_deps = new CheckboxGroup("dep"); dependenciesOptionGroup = new CheckboxGroup("dep");
addField(gz("cms.ui.workflow.task.dependencies"), m_deps); addField(gz("cms.ui.workflow.task.dependencies"),
dependenciesOptionGroup);
addAction(new Finish()); addAction(new Finish());
addAction(new Cancel()); addAction(new Cancel());
@ -95,15 +96,38 @@ class BaseTaskForm extends BaseForm {
private class ValidationListener implements FormValidationListener { private class ValidationListener implements FormValidationListener {
@Override @Override
public final void validate(final FormSectionEvent e) public final void validate(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final String name = (String) m_name.getValue(e.getPageState()); final String name = (String) nameTextField.getValue(event
.getPageState());
// XXX do a dupe check here ala commented out code below // XXX do a dupe check here ala commented out code below
} }
} }
protected WorkflowRequestLocal getWorkflowRequestLocal() {
return workflowRequestLocal;
}
protected TextField getNameTextField() {
return nameTextField;
}
protected TextArea getDescriptionTextArea() {
return descriptionTextArea;
}
protected OptionGroup getTypeOptionGroup() {
return typeOptionGroup;
}
protected OptionGroup getDependenciesOptionGroup() {
return dependenciesOptionGroup;
}
/* /*
protected void addValidationListener() { protected void addValidationListener() {
addValidationListener(new DataQueryExistsListener(ERROR_MSG) { addValidationListener(new DataQueryExistsListener(ERROR_MSG) {
@ -192,8 +216,8 @@ class BaseTaskForm extends BaseForm {
for (final Task taskToAdd : toAdd.values()) { for (final Task taskToAdd : toAdd.values()) {
try { try {
taskManager.addDependentTask(task, taskToAdd); taskManager.addDependentTask(task, taskToAdd);
} catch(CircularTaskDependencyException ex) { } catch (CircularTaskDependencyException ex) {
throw new UncheckedWrapperException(ex); throw new UncheckedWrapperException(ex);
} }
} }

View File

@ -49,7 +49,6 @@ import org.libreccm.workflow.TaskManager;
import org.libreccm.workflow.TaskRepository; import org.libreccm.workflow.TaskRepository;
import org.libreccm.workflow.Workflow; import org.libreccm.workflow.Workflow;
import org.librecms.contentsection.privileges.AdminPrivileges; import org.librecms.contentsection.privileges.AdminPrivileges;
import org.librecms.workflow.CmsTaskType;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;

View File

@ -60,7 +60,8 @@ class TaskAddForm extends BaseTaskForm {
m_model = model; m_model = model;
try { try {
m_deps.addPrintListener(new DependencyPrinter()); getDependenciesOptionGroup()
.addPrintListener(new DependencyPrinter());
} catch (TooManyListenersException tmle) { } catch (TooManyListenersException tmle) {
throw new UncheckedWrapperException(tmle); throw new UncheckedWrapperException(tmle);
} }
@ -77,12 +78,14 @@ class TaskAddForm extends BaseTaskForm {
final WorkflowAdminPaneController controller = cdiUtil final WorkflowAdminPaneController controller = cdiUtil
.findBean(WorkflowAdminPaneController.class); .findBean(WorkflowAdminPaneController.class);
final List<Task> tasks = controller final List<Task> tasks = controller
.getTasksForWorkflow(m_workflow.getWorkflow(state)); .getTasksForWorkflow(getWorkflowRequestLocal()
.getWorkflow(state));
final OptionGroup options = (OptionGroup) event.getTarget(); final OptionGroup options = (OptionGroup) event.getTarget();
final KernelConfig kernelConfig = KernelConfig.getConfig(); final KernelConfig kernelConfig = KernelConfig.getConfig();
final Locale defaultLocale = kernelConfig.getDefaultLocale(); final Locale defaultLocale = kernelConfig.getDefaultLocale();
options.clearOptions();
tasks.forEach(task -> options.addOption(new Option( tasks.forEach(task -> options.addOption(new Option(
Long.toString(task.getTaskId()), Long.toString(task.getTaskId()),
task.getLabel().getValue(defaultLocale)))); task.getLabel().getValue(defaultLocale))));
@ -103,11 +106,12 @@ class TaskAddForm extends BaseTaskForm {
.findBean(WorkflowAdminPaneController.class); .findBean(WorkflowAdminPaneController.class);
final CmsTask task = controller.addTask( final CmsTask task = controller.addTask(
m_workflow.getWorkflow(state), getWorkflowRequestLocal().getWorkflow(state),
(String) m_name.getValue(state), (String) getNameTextField().getValue(state),
(String) m_description.getValue(state), (String) getDescriptionTextArea().getValue(state),
CmsTaskType.valueOf((String) m_type.getValue(state)), CmsTaskType.valueOf((String) getTypeOptionGroup()
(String[]) m_deps.getValue(state)); .getValue(state)),
(String[]) getDependenciesOptionGroup().getValue(state));
m_model.setSelectedKey(state, task.getTaskId()); m_model.setSelectedKey(state, task.getTaskId());
} }

View File

@ -105,10 +105,11 @@ class TaskAddRole extends CMSForm {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final CmsTask task = m_task.getTask(state); final CmsTask task = m_task.getTask(state);
final List<TaskAssignment> assignments = task.getAssignments(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final List<Role> roles = assignments.stream() final WorkflowAdminPaneController controller = cdiUtil
.map(TaskAssignment::getRole) .findBean(WorkflowAdminPaneController.class);
.collect(Collectors.toList());
final List<Role> roles = controller.findAssignees(task);
m_roles.setValue(state, roles); m_roles.setValue(state, roles);
} }
@ -125,24 +126,28 @@ class TaskAddRole extends CMSForm {
final CmsTask task = m_task.getTask(state); final CmsTask task = m_task.getTask(state);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssignableTaskManager taskManager = cdiUtil.findBean( final WorkflowAdminPaneController controller = cdiUtil
AssignableTaskManager.class); .findBean(WorkflowAdminPaneController.class);
final RoleRepository roleRepository = cdiUtil.findBean( // final AssignableTaskManager taskManager = cdiUtil.findBean(
RoleRepository.class); // AssignableTaskManager.class);
// final RoleRepository roleRepository = cdiUtil.findBean(
task.getAssignments().forEach(assignment -> { // RoleRepository.class);
taskManager.retractTask(task, assignment.getRole()); //
}); // task.getAssignments().forEach(assignment -> {
// taskManager.retractTask(task, assignment.getRole());
// });
final String[] roleIds = (String[]) m_roles.getValue(state); final String[] roleIds = (String[]) m_roles.getValue(state);
if (roleIds != null) { // if (roleIds != null) {
for (final String roleId : roleIds) { // for (final String roleId : roleIds) {
final Role role = roleRepository.findById(Long // final Role role = roleRepository.findById(Long
.parseLong(roleId)).get(); // .parseLong(roleId)).get();
taskManager.assignTask(task, role); // taskManager.assignTask(task, role);
} // }
} // }
controller.assignTask(task, roleIds);
} }
} }
@ -182,8 +187,11 @@ class TaskAddRole extends CMSForm {
@Override @Override
protected List<Role> getDataQuery(final PageState state) { protected List<Role> getDataQuery(final PageState state) {
final ContentSection section = CMS.getContext().getContentSection(); final ContentSection section = CMS.getContext().getContentSection();
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final WorkflowAdminPaneController controller = cdiUtil
.findBean(WorkflowAdminPaneController.class);
return section.getRoles(); return controller.findRoles(section);
} }
@Override @Override

View File

@ -37,6 +37,7 @@ import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.configuration.ConfigurationManager; import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.workflow.Task; import org.libreccm.workflow.Task;
import org.libreccm.workflow.TaskRepository; import org.libreccm.workflow.TaskRepository;
import org.libreccm.workflow.Workflow;
import org.librecms.workflow.CmsTaskType; import org.librecms.workflow.CmsTaskType;
import java.util.List; import java.util.List;
@ -59,7 +60,8 @@ class TaskEditForm extends BaseTaskForm {
this.selectedTask = selectedTask; this.selectedTask = selectedTask;
try { try {
m_deps.addPrintListener(new DependencyPrinter()); getDependenciesOptionGroup()
.addPrintListener(new DependencyPrinter());
} catch (TooManyListenersException tmle) { } catch (TooManyListenersException tmle) {
throw new UncheckedWrapperException(tmle); throw new UncheckedWrapperException(tmle);
} }
@ -73,9 +75,15 @@ class TaskEditForm extends BaseTaskForm {
@Override @Override
public final void prepare(final PrintEvent event) { public final void prepare(final PrintEvent event) {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final List<Task> tasks = m_workflow.getWorkflow(state).getTasks(); final Workflow workflow = getWorkflowRequestLocal()
.getWorkflow(state);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final WorkflowAdminPaneController controller = cdiUtil
.findBean(WorkflowAdminPaneController.class);
final List<Task> tasks = controller.getTasksForWorkflow(workflow);
final OptionGroup options = (OptionGroup) event.getTarget(); final OptionGroup options = (OptionGroup) event.getTarget();
options.clearOptions();
tasks.forEach(task -> addOption(task, state, options)); tasks.forEach(task -> addOption(task, state, options));
} }
@ -102,16 +110,27 @@ class TaskEditForm extends BaseTaskForm {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final CmsTask task = selectedTask.getTask(state); final CmsTask task = selectedTask.getTask(state);
m_name.setValue(state, task.getLabel()); final Locale defaultLocale = KernelConfig
m_description.setValue(state, task.getDescription()); .getConfig()
m_type.setValue(state, task.getTaskType().toString()); .getDefaultLocale();
final List<Task> dependencies = task.getDependsOn(); getNameTextField().setValue(state,
final List<String> depIdList = dependencies.stream() task.getLabel().getValue(defaultLocale));
getDescriptionTextArea().setValue(
state,
task.getDescription().getValue(defaultLocale));
getTypeOptionGroup().setValue(state, task.getTaskType().toString());
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final WorkflowAdminPaneController controller = cdiUtil.findBean(
WorkflowAdminPaneController.class);
final List<Task> dependencies = controller.getDependencies(task);
final List<String> depIdList = dependencies.stream()
.map(dependency -> Long.toString(dependency.getTaskId())) .map(dependency -> Long.toString(dependency.getTaskId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
m_deps.setValue(state, depIdList.toArray()); getDependenciesOptionGroup().setValue(state, depIdList.toArray());
} }
} }
@ -124,26 +143,19 @@ class TaskEditForm extends BaseTaskForm {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final CmsTask task = selectedTask.getTask(state); final CmsTask task = selectedTask.getTask(state);
final String name = (String) getNameTextField().getValue(state);
final String desc = (String) getDescriptionTextArea()
.getValue(state);
final CmsTaskType taskType = CmsTaskType
.valueOf((String) getTypeOptionGroup().getValue(state));
final String[] deps = (String[]) getDependenciesOptionGroup()
.getValue(state);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final TaskRepository taskRepo = cdiUtil.findBean( final WorkflowAdminPaneController controller = cdiUtil
TaskRepository.class); .findBean(WorkflowAdminPaneController.class);
final ConfigurationManager confManager = cdiUtil.findBean(
ConfigurationManager.class);
final KernelConfig kernelConfig = confManager.findConfiguration(
KernelConfig.class);
final Locale defaultLocale = kernelConfig.getDefaultLocale();
task.getLabel().addValue(defaultLocale, controller.updateTask(task, name, desc, taskType, deps);
(String) m_name.getValue(state));
task.getDescription().addValue(
defaultLocale,
(String) m_description.getValue(state));
task.setTaskType(CmsTaskType.valueOf((String)m_type.getValue(state)));
taskRepo.save(task);
processDependencies(task, (String[]) m_deps.getValue(state));
} }
} }

View File

@ -310,9 +310,9 @@ final class TaskItemPane extends BaseItemPane {
final KernelConfig kernelConfig = KernelConfig.getConfig(); final KernelConfig kernelConfig = KernelConfig.getConfig();
final Locale defaultLocale = kernelConfig.getDefaultLocale(); final Locale defaultLocale = kernelConfig.getDefaultLocale();
props.add(new Property(gz("cms.ui.name"), props.add(new Property(gz("cms.ui.workflow.task.name"),
task.getLabel().getValue(defaultLocale))); task.getLabel().getValue(defaultLocale)));
props.add(new Property(gz("cms.ui.description"), props.add(new Property(gz("cms.ui.workflow.task.description"),
task.getDescription().getValue( task.getDescription().getValue(
defaultLocale))); defaultLocale)));
props.add(new Property(gz("cms.ui.workflow.task.dependencies"), props.add(new Property(gz("cms.ui.workflow.task.dependencies"),
@ -373,7 +373,7 @@ final class TaskItemPane extends BaseItemPane {
public RoleTable() { public RoleTable() {
super(new RoleTableModelBuilder(m_task), super(new RoleTableModelBuilder(m_task),
new String[]{ new String[]{
lz("cms.ui.name"), // XXX globz lz("cms.ui.workflow.task.role.name"),
lz("cms.ui.workflow.task.role.delete") lz("cms.ui.workflow.task.role.delete")
}); });
@ -391,17 +391,12 @@ final class TaskItemPane extends BaseItemPane {
if (column == 1) { if (column == 1) {
if (hasAdmin(state)) { if (hasAdmin(state)) {
final CmsTask task = m_task.getTask(state); final CmsTask task = m_task.getTask(state);
final Long roleId = Long.parseLong((String) event
.getRowKey());
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final AssignableTaskManager taskManager = cdiUtil final WorkflowAdminPaneController controller =
.findBean(AssignableTaskManager.class); cdiUtil.findBean(WorkflowAdminPaneController.class);
final RoleRepository roleRepo = cdiUtil.findBean( controller.removeAssignment(task,
RoleRepository.class); (String) event.getRowKey());
final Role role = roleRepo.findById(roleId).get();
taskManager.retractTask(task, role);
} }
} }
} }
@ -436,7 +431,6 @@ final class TaskItemPane extends BaseItemPane {
private class Model implements TableModel { private class Model implements TableModel {
private final List<Role> roles; private final List<Role> roles;
private Role role;
private int index = -1; private int index = -1;
private Model(final CmsTask task) { private Model(final CmsTask task) {
@ -460,14 +454,14 @@ final class TaskItemPane extends BaseItemPane {
@Override @Override
public final Object getKeyAt(final int column) { public final Object getKeyAt(final int column) {
return Long.toString(role.getRoleId()); return Long.toString(roles.get(index).getRoleId());
} }
@Override @Override
public final Object getElementAt(final int column) { public final Object getElementAt(final int column) {
switch (column) { switch (column) {
case 0: case 0:
return role.getName(); return roles.get(index).getName();
case 1: case 1:
return lz("cms.ui.workflow.task.role.delete"); return lz("cms.ui.workflow.task.role.delete");
default: default:

View File

@ -25,9 +25,10 @@ import com.arsdigita.util.UncheckedWrapperException;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.configuration.ConfigurationManager; import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.security.Role; import org.libreccm.security.Role;
import org.libreccm.security.RoleRepository;
import org.libreccm.workflow.AssignableTaskManager;
import org.libreccm.workflow.CircularTaskDependencyException; import org.libreccm.workflow.CircularTaskDependencyException;
import org.libreccm.workflow.Task; import org.libreccm.workflow.Task;
import org.libreccm.workflow.TaskManager; import org.libreccm.workflow.TaskManager;
@ -35,7 +36,6 @@ import org.libreccm.workflow.TaskRepository;
import org.libreccm.workflow.Workflow; import org.libreccm.workflow.Workflow;
import org.libreccm.workflow.WorkflowRepository; import org.libreccm.workflow.WorkflowRepository;
import org.libreccm.workflow.WorkflowTemplate; import org.libreccm.workflow.WorkflowTemplate;
import org.libreccm.workflow.WorkflowTemplateMarshaller;
import org.libreccm.workflow.WorkflowTemplateRepository; import org.libreccm.workflow.WorkflowTemplateRepository;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionManager; import org.librecms.contentsection.ContentSectionManager;
@ -44,6 +44,7 @@ import org.librecms.workflow.CmsTask;
import org.librecms.workflow.CmsTaskType; import org.librecms.workflow.CmsTaskType;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -53,6 +54,7 @@ import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.management.relation.RoleInfo;
import javax.transaction.Transactional; import javax.transaction.Transactional;
/** /**
@ -86,6 +88,12 @@ public class WorkflowAdminPaneController {
@Inject @Inject
private TaskManager taskManager; private TaskManager taskManager;
@Inject
private AssignableTaskManager assignableTaskManager;
@Inject
private RoleRepository roleRepo;
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
public List<WorkflowTemplate> retrieveWorkflows(final ContentSection section) { public List<WorkflowTemplate> retrieveWorkflows(final ContentSection section) {
@ -160,7 +168,7 @@ public class WorkflowAdminPaneController {
task.getLabel().addValue(defaultLocale, name); task.getLabel().addValue(defaultLocale, name);
task.getDescription().addValue(defaultLocale, desc); task.getDescription().addValue(defaultLocale, desc);
task.setTaskType(type); task.setTaskType(type);
task.setActive(true); // task.setActive(true);
taskRepo.save(task); taskRepo.save(task);
@ -171,6 +179,31 @@ public class WorkflowAdminPaneController {
return task; return task;
} }
@Transactional(Transactional.TxType.REQUIRED)
public void updateTask(final Task task,
final String name,
final String desc,
final CmsTaskType type,
final String[] deps) {
final KernelConfig kernelConfig = confManager.findConfiguration(
KernelConfig.class);
final Locale defaultLocale = kernelConfig.getDefaultLocale();
final CmsTask theTask = (CmsTask) taskRepo
.findById(task.getTaskId())
.orElseThrow(() -> new IllegalArgumentException(String.format(
"No Task with ID %d in the database. Where did that ID come from?",
task.getTaskId())));
theTask.getLabel().addValue(defaultLocale, name);
theTask.getDescription().addValue(defaultLocale, desc);
theTask.setTaskType(type);
taskRepo.save(theTask);
processDependencies(theTask, deps);
}
/** /**
* This method decides which dependencies have to be removed and which ones * This method decides which dependencies have to be removed and which ones
* newly added. Unfortunately we cannot just do "remove all", and add the * newly added. Unfortunately we cannot just do "remove all", and add the
@ -226,6 +259,10 @@ public class WorkflowAdminPaneController {
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
TaskTableModelData getTaskTableModelData(final Workflow workflow) { TaskTableModelData getTaskTableModelData(final Workflow workflow) {
final KernelConfig kernelConfig = confManager
.findConfiguration(KernelConfig.class);
final Locale defaultLocale = kernelConfig.getDefaultLocale();
final Map<Task, String> dependencies = new HashMap<>(); final Map<Task, String> dependencies = new HashMap<>();
final Iterator<Task> tasksIter = getTasksForWorkflow(workflow) final Iterator<Task> tasksIter = getTasksForWorkflow(workflow)
@ -240,7 +277,7 @@ public class WorkflowAdminPaneController {
Task dep = deps.next(); Task dep = deps.next();
graphSet.addEdge(task, dep, null); graphSet.addEdge(task, dep, null);
buffer buffer
.append(dep.getLabel()) .append(dep.getLabel().getValue(defaultLocale))
.append(", "); .append(", ");
} }
@ -269,7 +306,9 @@ public class WorkflowAdminPaneController {
break; break;
} }
final Iterator<Task> taskIterator = tasks.iterator(); //final Iterator<Task> taskIterator = tasks.iterator();
final Iterator<Task> taskIterator = getTasksForWorkflow(workflow)
.iterator();
return new TaskTableModelData(taskIterator, dependencies); return new TaskTableModelData(taskIterator, dependencies);
} }
@ -289,4 +328,65 @@ public class WorkflowAdminPaneController {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@Transactional(Transactional.TxType.REQUIRED)
public List<Role> findRoles(final ContentSection section) {
final ContentSection contentSection = sectionRepo
.findById(section.getObjectId())
.orElseThrow(() -> new IllegalArgumentException(String.format(
"No ContentSection with ID %d in the database. "
+ "Where did that ID come from?",
section.getObjectId())));
return new ArrayList<>(contentSection.getRoles());
}
@Transactional(Transactional.TxType.REQUIRED)
public void assignTask(final Task task, final String[] roleIds) {
final CmsTask theTask = (CmsTask) taskRepo
.findById(task.getTaskId())
.orElseThrow(() -> new IllegalArgumentException(String.format(
"No Task with ID %d in the database. Where did that ID come from?",
task.getTaskId())));
theTask.getAssignments()
.forEach(assignment -> assignableTaskManager
.retractTask(theTask, assignment.getRole()));
if (roleIds != null) {
final List<Role> roles = Arrays
.stream(roleIds)
.map(roleId -> Long.parseLong(roleId))
.map(roleId -> roleRepo.findById(roleId).orElseThrow(
() -> new IllegalArgumentException(String.format(
"No role with ID %d in the database. "
+ "Where did that ID come from?", roleId))))
.collect(Collectors.toList());
roles.forEach(role -> assignableTaskManager
.assignTask(theTask, role));
}
}
@Transactional(Transactional.TxType.REQUIRED)
public void removeAssignment(final Task task, final String roleId ) {
final Role role = roleRepo
.findById(Long.parseLong(roleId))
.orElseThrow(() -> new IllegalArgumentException(String.format(
"No Role with ID %d in the database. Where did that ID come from?",
roleId)));
final CmsTask theTask = (CmsTask) taskRepo
.findById(task.getTaskId())
.orElseThrow(() -> new IllegalArgumentException(String.format(
"No Task with ID %d in the database. Where did that ID come from?",
task.getTaskId())));
assignableTaskManager.retractTask(theTask, role);
}
} }

View File

@ -166,3 +166,18 @@ cms.workflow.task_type.AUTHOR=Author
cms.workflow.task_type.EDIT=Edit cms.workflow.task_type.EDIT=Edit
cms.workflow.task_type.DEPLOY=Deploy cms.workflow.task_type.DEPLOY=Deploy
cms.ui.workflow.task.state=Status cms.ui.workflow.task.state=Status
cms.ui.workflow.task.return=Return to workflow
cms.ui.workflow.task.details=Task details
cms.ui.workflow.task.state.none=None
cms.ui.workflow.task.locked=Locked?
cms.ui.no=No
cms.ui.yes=Yes
cms.ui.workflow.task.lock=Lock task
cms.ui.workflow.task.edit=Edit task
cms.ui.workflow.task.delete=Delete task
cms.ui.workflow.task.delete_prompt=Are you sure you want to delete this task?
cms.ui.workflow.task.roles=Roles to which this task is assigned:
cms.ui.workflow.task.role.none=This task has not been assigned to any roles
cms.ui.workflow.task.role.add=Assign this task to a role
cms.ui.workflow.task.role.delete=Remove
cms.ui.workflow.task.role.name=Role

View File

@ -165,3 +165,18 @@ cms.workflow.task_type.AUTHOR=Verfassen
cms.workflow.task_type.EDIT=Bearbeiten cms.workflow.task_type.EDIT=Bearbeiten
cms.workflow.task_type.DEPLOY=Ver\u00f6ffentlichen cms.workflow.task_type.DEPLOY=Ver\u00f6ffentlichen
cms.ui.workflow.task.state=Status cms.ui.workflow.task.state=Status
cms.ui.workflow.task.return=Zur\u00fcck zum Arbeitsablauf
cms.ui.workflow.task.details=Aufgabe Details
cms.ui.workflow.task.state.none=Kein Status
cms.ui.workflow.task.locked=Reserviert?
cms.ui.no=Nein
cms.ui.yes=Ja
cms.ui.workflow.task.lock=Aufgabe reservieren
cms.ui.workflow.task.edit=Aufgabe bearbeiten
cms.ui.workflow.task.delete=Aufgabe l\u00f6schen
cms.ui.workflow.task.delete_prompt=Sind Sie sicher, dass Sie diese Aufgabe l\u00f6schen wollen?
cms.ui.workflow.task.roles=Diese Aufgabe wurde folgenden Rollen zugeordnet:
cms.ui.workflow.task.role.none=Diese Aufgabe ist keiner Rolle zugeordnet
cms.ui.workflow.task.role.add=Diese Aufgabe einer Rolle zuordnen
cms.ui.workflow.task.role.delete=Entfernen
cms.ui.workflow.task.role.name=Rolle

View File

@ -134,3 +134,18 @@ cms.workflow.task_type.AUTHOR=Author
cms.workflow.task_type.EDIT=Edit cms.workflow.task_type.EDIT=Edit
cms.workflow.task_type.DEPLOY=Deploy cms.workflow.task_type.DEPLOY=Deploy
cms.ui.workflow.task.state=Status cms.ui.workflow.task.state=Status
cms.ui.workflow.task.return=Return to workflow
cms.ui.workflow.task.details=Task details
cms.ui.workflow.task.state.none=None
cms.ui.workflow.task.locked=Locked?
cms.ui.no=No
cms.ui.yes=Yes
cms.ui.workflow.task.lock=Lock task
cms.ui.workflow.task.edit=Edit task
cms.ui.workflow.task.delete=Delete task
cms.ui.workflow.task.delete_prompt=Are you sure you want to delete this task?
cms.ui.workflow.task.roles=Roles to which this task is assigned:
cms.ui.workflow.task.role.none=This task has not been assigned to any roles
cms.ui.workflow.task.role.add=Assign this task to a role
cms.ui.workflow.task.role.delete=Remove
cms.ui.workflow.task.role.name=Role

View File

@ -201,6 +201,7 @@ public class Task implements Identifiable, Serializable {
dependentTasks = new ArrayList<>(); dependentTasks = new ArrayList<>();
dependsOn = new ArrayList<>(); dependsOn = new ArrayList<>();
comments = new ArrayList<>(); comments = new ArrayList<>();
active = false;
} }
public long getTaskId() { public long getTaskId() {
@ -387,9 +388,9 @@ public class Task implements Identifiable, Serializable {
+ "label = %s, " + "label = %s, "
+ "active = %b, " + "active = %b, "
+ "taskState = \"%s\", " + "taskState = \"%s\", "
+ "workflow = %s, " // + "workflow = %s, "
+ "dependentTasks = %s, " // + "dependentTasks = %s, "
+ "dependsOn = %s%s" // + "dependsOn = %s%s"
+ " }", + " }",
super.toString(), super.toString(),
taskId, taskId,
@ -397,9 +398,9 @@ public class Task implements Identifiable, Serializable {
Objects.toString(label), Objects.toString(label),
active, active,
taskState, taskState,
Objects.toString(workflow), // Objects.toString(workflow),
Objects.toString(dependentTasks), // Objects.toString(dependentTasks),
Objects.toString(dependsOn), // Objects.toString(dependsOn),
data); data);
} }