CCM NG/ccm-cms Tab Workflows
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4629 8810af33-2d31-482b-a856-94f89814c4dfccm-docs
parent
c3ef6517d9
commit
3552c04a1e
|
|
@ -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) {
|
||||||
|
|
@ -193,7 +217,7 @@ 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
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()
|
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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue