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.globalization.GlobalizedMessage;
|
||||||
import com.arsdigita.toolbox.ui.ActionGroup;
|
import com.arsdigita.toolbox.ui.ActionGroup;
|
||||||
import com.arsdigita.toolbox.ui.Section;
|
import com.arsdigita.toolbox.ui.Section;
|
||||||
import com.arsdigita.web.Web;
|
|
||||||
|
|
||||||
import org.libreccm.workflow.Workflow;
|
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.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.security.Shiro;
|
import org.libreccm.security.Shiro;
|
||||||
import org.libreccm.workflow.Task;
|
|
||||||
import org.libreccm.workflow.AssignableTask;
|
import org.libreccm.workflow.AssignableTask;
|
||||||
|
import org.libreccm.workflow.AssignableTaskManager;
|
||||||
import org.libreccm.workflow.AssignableTaskRepository;
|
import org.libreccm.workflow.AssignableTaskRepository;
|
||||||
import org.libreccm.workflow.WorkflowConstants;
|
|
||||||
import org.libreccm.workflow.WorkflowManager;
|
import org.libreccm.workflow.WorkflowManager;
|
||||||
import org.libreccm.workflow.WorkflowRepository;
|
import org.libreccm.workflow.WorkflowState;
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
import org.librecms.workflow.CmsTask;
|
import org.librecms.workflow.CmsTask;
|
||||||
import org.librecms.workflow.CmsTaskTypeOld;
|
import org.librecms.workflow.CmsTaskType;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -94,8 +88,8 @@ public final class AssignedTaskSection extends Section {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isVisible(final PageState state) {
|
public final boolean isVisible(final PageState state) {
|
||||||
return m_facade.workflowState(state, WorkflowConstants.INIT)
|
return m_facade.workflowState(state, WorkflowState.INIT)
|
||||||
|| m_facade.workflowState(state, WorkflowConstants.STOPPED);
|
|| m_facade.workflowState(state, WorkflowState.STOPPED);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Listener implements ActionListener {
|
private class Listener implements ActionListener {
|
||||||
|
|
@ -119,7 +113,7 @@ public final class AssignedTaskSection extends Section {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isVisible(final PageState state) {
|
public final boolean isVisible(final PageState state) {
|
||||||
return m_facade.workflowState(state, WorkflowConstants.STARTED)
|
return m_facade.workflowState(state, WorkflowState.STARTED)
|
||||||
&& m_facade.tasksExist(state)
|
&& m_facade.tasksExist(state)
|
||||||
&& !m_facade.tasksLocked(state);
|
&& !m_facade.tasksLocked(state);
|
||||||
}
|
}
|
||||||
|
|
@ -145,7 +139,7 @@ public final class AssignedTaskSection extends Section {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isVisible(final PageState state) {
|
public final boolean isVisible(final PageState state) {
|
||||||
return m_facade.workflowState(state, WorkflowConstants.STARTED)
|
return m_facade.workflowState(state, WorkflowState.STARTED)
|
||||||
&& m_facade.tasksExist(state)
|
&& m_facade.tasksExist(state)
|
||||||
&& m_facade.tasksLocked(state);
|
&& m_facade.tasksLocked(state);
|
||||||
}
|
}
|
||||||
|
|
@ -177,7 +171,8 @@ public final class AssignedTaskSection extends Section {
|
||||||
protected final Object initialValue(final PageState state) {
|
protected final Object initialValue(final PageState state) {
|
||||||
final Workflow workflow = m_flow.getWorkflow(state);
|
final Workflow workflow = m_flow.getWorkflow(state);
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
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);
|
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
||||||
return userTaskRepo.findEnabledTasksForWorkflow(shiro.getUser(),
|
return userTaskRepo.findEnabledTasksForWorkflow(shiro.getUser(),
|
||||||
workflow);
|
workflow);
|
||||||
|
|
@ -185,7 +180,7 @@ public final class AssignedTaskSection extends Section {
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
final List<AssignableTask> getTasks(final PageState state) {
|
final List<AssignableTask> getTasks(final PageState state) {
|
||||||
return (ArrayList<AssignableTask>) get(state);
|
return (List<AssignableTask>) get(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -205,28 +200,30 @@ public final class AssignedTaskSection extends Section {
|
||||||
|
|
||||||
final void lockTasks(final PageState state) {
|
final void lockTasks(final PageState state) {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final WorkflowManager workflowManager = cdiUtil.findBean(WorkflowManager.class);
|
final AssignableTaskManager taskManager = cdiUtil.findBean(
|
||||||
|
AssignableTaskManager.class);
|
||||||
|
|
||||||
for(final AssignableTask task : m_tasks.getTasks(state)) {
|
for (final AssignableTask task : m_tasks.getTasks(state)) {
|
||||||
if (relevant(task) && !task.isLocked()) {
|
if (relevant(task) && !task.isLocked()) {
|
||||||
workflowManager.lockTask(task);
|
taskManager.lockTask(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final void unlockTasks(final PageState state) {
|
final void unlockTasks(final PageState state) {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final WorkflowManager workflowManager = cdiUtil.findBean(WorkflowManager.class);
|
final AssignableTaskManager taskManager = cdiUtil.findBean(
|
||||||
|
AssignableTaskManager.class);
|
||||||
|
|
||||||
for(final AssignableTask task : m_tasks.getTasks(state)) {
|
for (final AssignableTask task : m_tasks.getTasks(state)) {
|
||||||
if (relevant(task) && task.isLocked()) {
|
if (relevant(task) && task.isLocked()) {
|
||||||
workflowManager.unlockTask(task);
|
taskManager.unlockTask(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final boolean tasksLocked(final PageState state) {
|
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()) {
|
if (relevant(task) && !task.isLocked()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -235,12 +232,11 @@ public final class AssignedTaskSection extends Section {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
final boolean workflowState(final PageState state, int processState) {
|
final boolean workflowState(final PageState state,
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
WorkflowState processState) {
|
||||||
final WorkflowManager workflowManager = cdiUtil.findBean(WorkflowManager.class);
|
|
||||||
final Workflow workflow = m_flow.getWorkflow(state);
|
final Workflow workflow = m_flow.getWorkflow(state);
|
||||||
|
|
||||||
return workflowManager.getState(workflow) == processState;
|
return workflow.getState() == processState;
|
||||||
}
|
}
|
||||||
|
|
||||||
final boolean tasksExist(final PageState state) {
|
final boolean tasksExist(final PageState state) {
|
||||||
|
|
@ -248,11 +244,15 @@ public final class AssignedTaskSection extends Section {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean relevant(final AssignableTask task) {
|
private boolean relevant(final AssignableTask task) {
|
||||||
return true;
|
if (task instanceof CmsTask) {
|
||||||
|
final CmsTask cmsTask = (CmsTask) task;
|
||||||
|
|
||||||
|
return cmsTask.getTaskType() == CmsTaskType.AUTHOR
|
||||||
|
|| cmsTask.getTaskType() == CmsTaskType.EDIT;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// ToDo
|
|
||||||
// return task.getTaskType().getID().equals(CMSTaskType.AUTHOR)
|
|
||||||
// || task.getTaskType().getID().equals(CMSTaskType.EDIT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -15,36 +15,36 @@
|
||||||
package com.arsdigita.cms.ui.workflow;
|
package com.arsdigita.cms.ui.workflow;
|
||||||
|
|
||||||
import com.arsdigita.bebop.FormProcessException;
|
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.FormSectionEvent;
|
||||||
import com.arsdigita.bebop.event.FormValidationListener;
|
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.CheckboxGroup;
|
||||||
|
import com.arsdigita.bebop.form.Option;
|
||||||
import com.arsdigita.bebop.form.OptionGroup;
|
import com.arsdigita.bebop.form.OptionGroup;
|
||||||
import com.arsdigita.bebop.form.SingleSelect;
|
import com.arsdigita.bebop.form.SingleSelect;
|
||||||
import com.arsdigita.bebop.form.TextArea;
|
import com.arsdigita.bebop.form.TextArea;
|
||||||
import com.arsdigita.bebop.form.TextField;
|
import com.arsdigita.bebop.form.TextField;
|
||||||
import com.arsdigita.bebop.parameters.IntegerParameter;
|
import com.arsdigita.bebop.parameters.IntegerParameter;
|
||||||
import com.arsdigita.cms.ui.BaseForm;
|
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.globalization.GlobalizedMessage;
|
||||||
import com.arsdigita.kernel.KernelConfig;
|
import com.arsdigita.util.UncheckedWrapperException;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.libreccm.workflow.Task;
|
import org.libreccm.workflow.Task;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
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.TaskRepository;
|
||||||
import org.libreccm.workflow.WorkflowManager;
|
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||||
import org.librecms.workflow.CmsTaskTypeRepository;
|
import org.librecms.workflow.CmsTaskType;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TooManyListenersException;
|
import java.util.TooManyListenersException;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
@ -55,9 +55,6 @@ import java.util.stream.Collectors;
|
||||||
*/
|
*/
|
||||||
class BaseTaskForm extends BaseForm {
|
class BaseTaskForm extends BaseForm {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager
|
|
||||||
.getLogger(BaseTaskForm.class);
|
|
||||||
|
|
||||||
final WorkflowRequestLocal m_workflow;
|
final WorkflowRequestLocal m_workflow;
|
||||||
|
|
||||||
final TextField m_name;
|
final TextField m_name;
|
||||||
|
|
@ -81,7 +78,7 @@ class BaseTaskForm extends BaseForm {
|
||||||
try {
|
try {
|
||||||
m_type.addPrintListener(new TaskTypePrintListener());
|
m_type.addPrintListener(new TaskTypePrintListener());
|
||||||
} catch (TooManyListenersException ex) {
|
} catch (TooManyListenersException ex) {
|
||||||
throw new RuntimeException(ex);
|
throw new UncheckedWrapperException(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_description = new Description("desc", 4000, true);
|
m_description = new Description("desc", 4000, true);
|
||||||
|
|
@ -142,30 +139,19 @@ class BaseTaskForm extends BaseForm {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
// Fix this one too
|
// Fix this one too
|
||||||
private class TaskTypePrintListener extends ListOptionPrintListener<CmsTaskTypeOld> {
|
private class TaskTypePrintListener implements PrintListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<CmsTaskTypeOld> getDataQuery(final PageState state) {
|
public void prepare(final PrintEvent event) {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final OptionGroup target = (OptionGroup) event.getTarget();
|
||||||
final CmsTaskTypeRepository taskTypeRepo = cdiUtil.findBean(
|
|
||||||
CmsTaskTypeRepository.class);
|
|
||||||
|
|
||||||
final List<CmsTaskTypeOld> taskTypes = taskTypeRepo.findAll();
|
for (final CmsTaskType type : CmsTaskType.values()) {
|
||||||
|
final GlobalizedMessage label = new GlobalizedMessage(
|
||||||
return taskTypes;
|
String.format("cms.workflow.task_type.%s", type.toString()),
|
||||||
|
CmsConstants.CMS_BUNDLE);
|
||||||
|
|
||||||
|
target.addOption(new Option(type.toString(), new Label(label)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -176,6 +162,7 @@ class BaseTaskForm extends BaseForm {
|
||||||
* new ones in since it is possible that Tasks will fire events when
|
* new ones in since it is possible that Tasks will fire events when
|
||||||
* dependencies are added and removed.
|
* dependencies are added and removed.
|
||||||
*
|
*
|
||||||
|
* XXX domlay
|
||||||
*/
|
*/
|
||||||
final void processDependencies(final Task task,
|
final void processDependencies(final Task task,
|
||||||
final String[] selectedDependencies) {
|
final String[] selectedDependencies) {
|
||||||
|
|
@ -188,8 +175,7 @@ class BaseTaskForm extends BaseForm {
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final TaskRepository taskRepo = cdiUtil.findBean(TaskRepository.class);
|
final TaskRepository taskRepo = cdiUtil.findBean(TaskRepository.class);
|
||||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
final TaskManager taskManager = cdiUtil.findBean(TaskManager.class);
|
||||||
WorkflowManager.class);
|
|
||||||
|
|
||||||
Long selectedId;
|
Long selectedId;
|
||||||
Object addedTask;
|
Object addedTask;
|
||||||
|
|
@ -203,11 +189,17 @@ class BaseTaskForm extends BaseForm {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
toRemove.values().forEach(taskToRemove -> workflowManager
|
for (final Task taskToRemove : toRemove.values()) {
|
||||||
.removeDependentTask(task, taskToRemove));
|
taskManager.removeDependentTask(task, taskToRemove);
|
||||||
|
}
|
||||||
|
|
||||||
toAdd.values().forEach(tasktoAdd -> workflowManager
|
for (final Task taskToAdd : toAdd.values()) {
|
||||||
.addDependentTask(task, tasktoAdd));
|
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.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.security.Shiro;
|
import org.libreccm.security.Shiro;
|
||||||
import org.libreccm.workflow.Task;
|
import org.libreccm.workflow.Task;
|
||||||
|
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.libreccm.workflow.WorkflowManager;
|
import org.libreccm.workflow.WorkflowManager;
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||||
import org.librecms.workflow.CmsTaskTypeRepository;
|
import org.librecms.workflow.CmsTaskType;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -151,10 +152,8 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
||||||
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
||||||
final User currentUser = shiro.getUser();
|
final User currentUser = shiro.getUser();
|
||||||
|
|
||||||
boolean visible = task.isLocked()
|
return task.isLocked() && (lockingUser == null
|
||||||
&& (lockingUser == null
|
|
||||||
|| lockingUser.equals(currentUser));
|
|| lockingUser.equals(currentUser));
|
||||||
return visible;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Listener implements ActionListener {
|
private class Listener implements ActionListener {
|
||||||
|
|
@ -164,18 +163,17 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
final TaskManager taskManager = cdiUtil.findBean(TaskManager.class);
|
||||||
WorkflowManager.class);
|
|
||||||
|
|
||||||
final Task task = m_task.getTask(state);
|
final Task task = m_task.getTask(state);
|
||||||
task.setTaskState("finished");
|
taskManager.finish(task);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void reset(final PageState state) {
|
public void reset(final PageState state) {
|
||||||
super.reset(state);
|
super.reset(state);
|
||||||
|
|
||||||
|
|
@ -211,14 +209,10 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected final Object initialValue(final PageState state) {
|
protected final Object initialValue(final PageState state) {
|
||||||
final String id = m_tasks.getRowSelectionModel().getSelectedKey(
|
final String key = m_tasks.getRowSelectionModel().getSelectedKey(
|
||||||
state).toString();
|
state).toString();
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
return CmsTaskType.valueOf(key);
|
||||||
final CmsTaskTypeRepository taskRepo = cdiUtil.findBean(
|
|
||||||
CmsTaskTypeRepository.class);
|
|
||||||
|
|
||||||
return taskRepo.findById(Long.parseLong(id));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -237,8 +231,6 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
||||||
ActionGroup.EDIT);
|
ActionGroup.EDIT);
|
||||||
m_actionGroup.addAction(new AdminVisible(deleteLink),
|
m_actionGroup.addAction(new AdminVisible(deleteLink),
|
||||||
ActionGroup.DELETE);
|
ActionGroup.DELETE);
|
||||||
// m_actionGroup.addAction(new AdminVisible(new StartLink()));
|
|
||||||
// m_actionGroup.addAction(new AdminVisible(new StopLink()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Properties extends PropertyList {
|
private class Properties extends PropertyList {
|
||||||
|
|
@ -247,20 +239,20 @@ abstract class BaseWorkflowItemPane extends BaseItemPane {
|
||||||
protected final List<Property> properties(final PageState state) {
|
protected final List<Property> properties(final PageState state) {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
final List<Property> props = super.properties(state);
|
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 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.name"),
|
||||||
flow.getName().getValue(defaultLocale)));
|
workflow.getName().getValue(defaultLocale)));
|
||||||
props.add(new Property(
|
props.add(new Property(
|
||||||
gz("cms.ui.description"),
|
gz("cms.ui.description"),
|
||||||
flow.getDescription().getValue(defaultLocale)));
|
workflow.getDescription().getValue(defaultLocale)));
|
||||||
// props.add(new Property(gz("cms.ui.workflow.current_state"),
|
props.add(new Property(gz("cms.ui.workflow.current_state"),
|
||||||
// flow.getStateString()));
|
workflow.getState().toString()));
|
||||||
props.add(new Property(gz("cms.ui.workflow.num_tasks"),
|
props.add(new Property(gz("cms.ui.workflow.num_tasks"),
|
||||||
String.valueOf(flow.getTasks().size())));
|
String.valueOf(workflow.getTasks().size())));
|
||||||
|
|
||||||
return props;
|
return props;
|
||||||
}
|
}
|
||||||
|
|
@ -24,10 +24,13 @@ import com.arsdigita.bebop.event.FormProcessListener;
|
||||||
import com.arsdigita.bebop.event.FormSectionEvent;
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
import com.arsdigita.bebop.form.TextArea;
|
import com.arsdigita.bebop.form.TextArea;
|
||||||
import com.arsdigita.cms.ui.BaseForm;
|
import com.arsdigita.cms.ui.BaseForm;
|
||||||
|
|
||||||
import org.librecms.workflow.CmsTask;
|
import org.librecms.workflow.CmsTask;
|
||||||
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.cdi.utils.CdiUtil;
|
||||||
|
import org.libreccm.workflow.TaskComment;
|
||||||
|
import org.libreccm.workflow.TaskManager;
|
||||||
import org.libreccm.workflow.TaskRepository;
|
import org.libreccm.workflow.TaskRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -69,9 +72,8 @@ class CommentAddForm extends BaseForm {
|
||||||
final CmsTask task = selectedTask.getTask(state);
|
final CmsTask task = selectedTask.getTask(state);
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final TaskRepository taskRepo = cdiUtil.findBean(TaskRepository.class);
|
final TaskRepository taskRepo = cdiUtil.findBean(TaskRepository.class);
|
||||||
|
final TaskManager taskManager = cdiUtil.findBean(TaskManager.class);
|
||||||
task.addComment((String)comment.getValue(state));
|
taskManager.addComment(task, (String) comment.getValue(state));
|
||||||
taskRepo.save(task);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -30,17 +30,17 @@ import com.arsdigita.bebop.form.OptionGroup;
|
||||||
import com.arsdigita.kernel.KernelConfig;
|
import com.arsdigita.kernel.KernelConfig;
|
||||||
|
|
||||||
import org.librecms.workflow.CmsTask;
|
import org.librecms.workflow.CmsTask;
|
||||||
import org.librecms.workflow.CmsTaskTypeOld;
|
|
||||||
|
|
||||||
import com.arsdigita.util.UncheckedWrapperException;
|
import com.arsdigita.util.UncheckedWrapperException;
|
||||||
|
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
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.TaskManager;
|
||||||
import org.libreccm.workflow.TaskRepository;
|
import org.libreccm.workflow.TaskRepository;
|
||||||
import org.libreccm.workflow.Workflow;
|
import org.libreccm.workflow.Workflow;
|
||||||
import org.libreccm.workflow.WorkflowManager;
|
import org.libreccm.workflow.WorkflowManager;
|
||||||
import org.librecms.workflow.CmsTaskTypeRepository;
|
import org.librecms.workflow.CmsTaskType;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
@ -105,9 +105,9 @@ class TaskAddForm extends BaseTaskForm {
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final TaskRepository taskRepo = cdiUtil.findBean(
|
final TaskRepository taskRepo = cdiUtil.findBean(
|
||||||
TaskRepository.class);
|
TaskRepository.class);
|
||||||
final CmsTaskTypeRepository taskTypeRepo = cdiUtil.findBean(CmsTaskTypeRepository.class);
|
|
||||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
final WorkflowManager workflowManager = cdiUtil.findBean(
|
||||||
WorkflowManager.class);
|
WorkflowManager.class);
|
||||||
|
final TaskManager taskManager = cdiUtil.findBean(TaskManager.class);
|
||||||
final ConfigurationManager confManager = cdiUtil.findBean(
|
final ConfigurationManager confManager = cdiUtil.findBean(
|
||||||
ConfigurationManager.class);
|
ConfigurationManager.class);
|
||||||
final KernelConfig kernelConfig = confManager.findConfiguration(
|
final KernelConfig kernelConfig = confManager.findConfiguration(
|
||||||
|
|
@ -120,13 +120,13 @@ class TaskAddForm extends BaseTaskForm {
|
||||||
defaultLocale,
|
defaultLocale,
|
||||||
((String) m_description.getValue(state)));
|
((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.setTaskType(taskType);
|
||||||
task.setActive(true);
|
task.setActive(true);
|
||||||
|
|
||||||
taskRepo.save(task);
|
taskRepo.save(task);
|
||||||
|
|
||||||
workflowManager.addTask(workflow, task);
|
taskManager.addTask(workflow, task);
|
||||||
|
|
||||||
processDependencies(task, (String[]) m_deps.getValue(state));
|
processDependencies(task, (String[]) m_deps.getValue(state));
|
||||||
|
|
||||||
|
|
@ -42,13 +42,13 @@ import org.librecms.workflow.CmsTask;
|
||||||
|
|
||||||
import com.arsdigita.globalization.GlobalizedMessage;
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
|
||||||
|
|
||||||
import com.arsdigita.util.UncheckedWrapperException;
|
import com.arsdigita.util.UncheckedWrapperException;
|
||||||
|
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.security.PermissionChecker;
|
import org.libreccm.security.PermissionChecker;
|
||||||
import org.libreccm.security.Role;
|
import org.libreccm.security.Role;
|
||||||
import org.libreccm.security.RoleRepository;
|
import org.libreccm.security.RoleRepository;
|
||||||
|
import org.libreccm.workflow.AssignableTaskManager;
|
||||||
import org.libreccm.workflow.TaskAssignment;
|
import org.libreccm.workflow.TaskAssignment;
|
||||||
import org.libreccm.workflow.WorkflowManager;
|
import org.libreccm.workflow.WorkflowManager;
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
|
|
@ -125,13 +125,14 @@ 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 WorkflowManager workflowManager = cdiUtil.findBean(
|
final AssignableTaskManager taskManager = cdiUtil.findBean(
|
||||||
WorkflowManager.class);
|
AssignableTaskManager.class);
|
||||||
final RoleRepository roleRepository = cdiUtil.findBean(
|
final RoleRepository roleRepository = cdiUtil.findBean(
|
||||||
RoleRepository.class);
|
RoleRepository.class);
|
||||||
|
|
||||||
task.getAssignments().forEach(assignment -> workflowManager
|
task.getAssignments().forEach(assignment -> {
|
||||||
.retractTask(task, assignment.getRole()));
|
taskManager.retractTask(task, assignment.getRole());
|
||||||
|
});
|
||||||
|
|
||||||
final String[] roleIds = (String[]) m_roles.getValue(state);
|
final String[] roleIds = (String[]) m_roles.getValue(state);
|
||||||
|
|
||||||
|
|
@ -139,7 +140,7 @@ class TaskAddRole extends CMSForm {
|
||||||
for (final String roleId : roleIds) {
|
for (final String roleId : roleIds) {
|
||||||
final Role role = roleRepository.findById(Long
|
final Role role = roleRepository.findById(Long
|
||||||
.parseLong(roleId));
|
.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);
|
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.configuration.ConfigurationManager;
|
||||||
import org.libreccm.workflow.Task;
|
import org.libreccm.workflow.Task;
|
||||||
import org.libreccm.workflow.TaskRepository;
|
import org.libreccm.workflow.TaskRepository;
|
||||||
import org.librecms.workflow.CmsTaskTypeOld;
|
import org.librecms.workflow.CmsTaskType;
|
||||||
import org.librecms.workflow.CmsTaskTypeRepository;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.TooManyListenersException;
|
import java.util.TooManyListenersException;
|
||||||
|
|
@ -52,13 +50,13 @@ import java.util.stream.Collectors;
|
||||||
*/
|
*/
|
||||||
class TaskEditForm extends BaseTaskForm {
|
class TaskEditForm extends BaseTaskForm {
|
||||||
|
|
||||||
private TaskRequestLocal m_task;
|
private TaskRequestLocal selectedTask;
|
||||||
|
|
||||||
public TaskEditForm(final WorkflowRequestLocal workflow,
|
public TaskEditForm(final WorkflowRequestLocal workflow,
|
||||||
final TaskRequestLocal task) {
|
final TaskRequestLocal selectedTask) {
|
||||||
super("task", gz("cms.ui.workflow.task.edit"), workflow);
|
super("task", gz("cms.ui.workflow.task.edit"), workflow);
|
||||||
|
|
||||||
m_task = task;
|
this.selectedTask = selectedTask;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
m_deps.addPrintListener(new DependencyPrinter());
|
m_deps.addPrintListener(new DependencyPrinter());
|
||||||
|
|
@ -89,7 +87,7 @@ class TaskEditForm extends BaseTaskForm {
|
||||||
final OptionGroup options) {
|
final OptionGroup options) {
|
||||||
final KernelConfig kernelConfig = KernelConfig.getConfig();
|
final KernelConfig kernelConfig = KernelConfig.getConfig();
|
||||||
final Locale defaultLocale = kernelConfig.getDefaultLocale();
|
final Locale defaultLocale = kernelConfig.getDefaultLocale();
|
||||||
if (m_task.getTask(state).getTaskId() != task.getTaskId()) {
|
if (selectedTask.getTask(state).getTaskId() != task.getTaskId()) {
|
||||||
options.addOption(new Option(
|
options.addOption(new Option(
|
||||||
Long.toString(task.getTaskId()),
|
Long.toString(task.getTaskId()),
|
||||||
task.getLabel().getValue(defaultLocale)));
|
task.getLabel().getValue(defaultLocale)));
|
||||||
|
|
@ -102,12 +100,11 @@ class TaskEditForm extends BaseTaskForm {
|
||||||
public final void init(final FormSectionEvent event)
|
public final void init(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
final PageState state = event.getPageState();
|
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_name.setValue(state, task.getLabel());
|
||||||
m_description.setValue(state, task.getDescription());
|
m_description.setValue(state, task.getDescription());
|
||||||
m_type.setValue(state, Long.toString(task.getTaskType()
|
m_type.setValue(state, task.getTaskType().toString());
|
||||||
.getTaskTypeId()));
|
|
||||||
|
|
||||||
final List<Task> dependencies = task.getDependsOn();
|
final List<Task> dependencies = task.getDependsOn();
|
||||||
final List<String> depIdList = dependencies.stream()
|
final List<String> depIdList = dependencies.stream()
|
||||||
|
|
@ -125,13 +122,11 @@ class TaskEditForm extends BaseTaskForm {
|
||||||
public final void process(final FormSectionEvent event)
|
public final void process(final FormSectionEvent event)
|
||||||
throws FormProcessException {
|
throws FormProcessException {
|
||||||
final PageState state = event.getPageState();
|
final PageState state = event.getPageState();
|
||||||
final CmsTask task = m_task.getTask(state);
|
final CmsTask task = selectedTask.getTask(state);
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final TaskRepository taskRepo = cdiUtil.findBean(
|
final TaskRepository taskRepo = cdiUtil.findBean(
|
||||||
TaskRepository.class);
|
TaskRepository.class);
|
||||||
final CmsTaskTypeRepository taskTypeRepo = cdiUtil.findBean(
|
|
||||||
CmsTaskTypeRepository.class);
|
|
||||||
final ConfigurationManager confManager = cdiUtil.findBean(
|
final ConfigurationManager confManager = cdiUtil.findBean(
|
||||||
ConfigurationManager.class);
|
ConfigurationManager.class);
|
||||||
final KernelConfig kernelConfig = confManager.findConfiguration(
|
final KernelConfig kernelConfig = confManager.findConfiguration(
|
||||||
|
|
@ -144,9 +139,7 @@ class TaskEditForm extends BaseTaskForm {
|
||||||
defaultLocale,
|
defaultLocale,
|
||||||
(String) m_description.getValue(state));
|
(String) m_description.getValue(state));
|
||||||
|
|
||||||
final CmsTaskTypeOld taskType = taskTypeRepo.findById((Long) m_type
|
task.setTaskType(CmsTaskType.valueOf((String)m_type.getValue(state)));
|
||||||
.getValue(state));
|
|
||||||
task.setTaskType(taskType);
|
|
||||||
|
|
||||||
taskRepo.save(task);
|
taskRepo.save(task);
|
||||||
|
|
||||||
|
|
@ -29,36 +29,40 @@ import com.arsdigita.bebop.form.Option;
|
||||||
import com.arsdigita.bebop.form.RadioGroup;
|
import com.arsdigita.bebop.form.RadioGroup;
|
||||||
import com.arsdigita.bebop.parameters.BooleanParameter;
|
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.cms.ui.ContentItemPage;
|
||||||
import com.arsdigita.globalization.GlobalizedMessage;
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.kernel.KernelConfig;
|
||||||
import com.arsdigita.util.UncheckedWrapperException;
|
import com.arsdigita.util.UncheckedWrapperException;
|
||||||
|
|
||||||
import org.librecms.workflow.CmsTask;
|
import org.librecms.workflow.CmsTask;
|
||||||
import org.librecms.workflow.CmsTaskTypeOld;
|
|
||||||
|
|
||||||
import com.arsdigita.web.RedirectSignal;
|
import com.arsdigita.web.RedirectSignal;
|
||||||
import com.arsdigita.web.URL;
|
import com.arsdigita.web.URL;
|
||||||
import com.arsdigita.web.Web;
|
|
||||||
|
|
||||||
import org.libreccm.workflow.Task;
|
import org.libreccm.workflow.Task;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.arsdigita.cms.CMSConfig;
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
|
import org.libreccm.configuration.ConfigurationManager;
|
||||||
import org.libreccm.security.PermissionChecker;
|
import org.libreccm.security.PermissionChecker;
|
||||||
import org.libreccm.security.Shiro;
|
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.TaskRepository;
|
||||||
|
import org.libreccm.workflow.Workflow;
|
||||||
import org.libreccm.workflow.WorkflowManager;
|
import org.libreccm.workflow.WorkflowManager;
|
||||||
import org.libreccm.workflow.WorkflowRepository;
|
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
import org.librecms.contentsection.ContentItem;
|
import org.librecms.contentsection.ContentItem;
|
||||||
import org.librecms.contentsection.ContentItemRepository;
|
import org.librecms.contentsection.ContentItemRepository;
|
||||||
|
import org.librecms.workflow.CmsTaskType;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
|
|
@ -82,10 +86,12 @@ public final class TaskFinishForm extends CommentAddForm {
|
||||||
m_task = task;
|
m_task = task;
|
||||||
|
|
||||||
m_approve = new RadioGroup(new BooleanParameter("approve"));
|
m_approve = new RadioGroup(new BooleanParameter("approve"));
|
||||||
m_approve.addOption(new Option("true",
|
m_approve.addOption(new Option(
|
||||||
lz("cms.ui.workflow.task.approve")));
|
"true",
|
||||||
m_approve.addOption(new Option("false",
|
new Label(gz("cms.ui.workflow.task.approve"))));
|
||||||
lz("cms.ui.workflow.task.reject")));
|
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"));
|
m_approvePrompt = new Label(gz("cms.ui.workflow.task.approve_prompt"));
|
||||||
|
|
||||||
|
|
@ -117,6 +123,7 @@ public final class TaskFinishForm extends CommentAddForm {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ValidationListener implements FormValidationListener {
|
private class ValidationListener implements FormValidationListener {
|
||||||
|
|
@ -135,6 +142,7 @@ public final class TaskFinishForm extends CommentAddForm {
|
||||||
CmsConstants.CMS_BUNDLE));
|
CmsConstants.CMS_BUNDLE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ProcessListener implements FormProcessListener {
|
private class ProcessListener implements FormProcessListener {
|
||||||
|
|
@ -166,6 +174,16 @@ public final class TaskFinishForm extends CommentAddForm {
|
||||||
|
|
||||||
final TaskRepository taskRepo = cdiUtil.findBean(
|
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)) {
|
if (requiresApproval(task)) {
|
||||||
LOGGER.debug("The task requires approval; checking to see "
|
LOGGER.debug("The task requires approval; checking to see "
|
||||||
|
|
@ -179,75 +197,77 @@ public final class TaskFinishForm extends CommentAddForm {
|
||||||
if (isApproved.equals(Boolean.TRUE)) {
|
if (isApproved.equals(Boolean.TRUE)) {
|
||||||
LOGGER.debug("The task is approved; finishing the task");
|
LOGGER.debug("The task is approved; finishing the task");
|
||||||
|
|
||||||
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
taskManager.finish(task);
|
||||||
final WorkflowManager workflowManager = cdiUtil.findBean(
|
|
||||||
WorkflowManager.class);
|
|
||||||
|
|
||||||
task.setActive(false);
|
|
||||||
finishedTask = true;
|
finishedTask = true;
|
||||||
} else {
|
} else {
|
||||||
LOGGER.debug("The task is rejected; reenabling dependent "
|
LOGGER.debug("The task is rejected; reenabling dependent "
|
||||||
+ "tasks");
|
+ "tasks");
|
||||||
|
|
||||||
// Reenable the previous tasks.
|
// Reenable the previous tasks.
|
||||||
final Iterator<Task> iter = task.getDependentTasks().
|
for (final Task dependent : task.getDependentTasks()) {
|
||||||
iterator();
|
LOGGER.debug("Reenabling task {}",
|
||||||
|
dependent.getLabel().getValue(
|
||||||
|
kernelConfig.getDefaultLocale()));
|
||||||
|
|
||||||
while (iter.hasNext()) {
|
taskManager.enable(dependent);
|
||||||
final Task dependent = (Task) iter.next();
|
|
||||||
|
|
||||||
if (LOGGER.isDebugEnabled()) {
|
|
||||||
LOGGER.debug("Reenabling task " + dependent.
|
|
||||||
getLabel());
|
|
||||||
}
|
|
||||||
|
|
||||||
dependent.setActive(true);
|
|
||||||
|
|
||||||
taskRepo.save(dependent);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOGGER.debug("The task does not require approval; finishing "
|
LOGGER.debug("The task does not require approval; finishing it");
|
||||||
+ "it");
|
|
||||||
|
|
||||||
task.setActive(false);
|
taskManager.disable(task);
|
||||||
taskRepo.save(task);
|
|
||||||
}
|
}
|
||||||
if (finishedTask) {
|
if (finishedTask) {
|
||||||
Iterator tasks = Engine.getInstance(CMSEngine.CMS_ENGINE_TYPE).
|
final TaskFinishFormController controller = cdiUtil.findBean(
|
||||||
getEnabledTasks(Web.getWebContext().getUser(),
|
TaskFinishFormController.class);
|
||||||
task.getParentID()).iterator();
|
final Workflow workflow = task.getWorkflow();
|
||||||
if (tasks.hasNext()) {
|
final User user = shiro.getUser();
|
||||||
CmsTask thisTask = (CmsTask) tasks.next();
|
final List<AssignableTask> tasks = controller.findEnabledTasks(
|
||||||
PermissionDescriptor thisTaskAccess = new PermissionDescriptor(
|
workflow);
|
||||||
thisTask.getTaskType().getPrivilege(), task.
|
for (final AssignableTask currentTask : tasks) {
|
||||||
getWorkflow().getObject(), user);
|
if (!(currentTask instanceof CmsTask)) {
|
||||||
if (PermissionService.checkPermission(thisTaskAccess)) {
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Lock task for user
|
final CmsTask currentCmsTask = (CmsTask) currentTask;
|
||||||
thisTask.lock((User) user);
|
final String privilege = currentCmsTask.getTaskType()
|
||||||
int targetTab = (thisTask.getTaskType().getID().equals(CmsTaskTypeOld.DEPLOY)) ? ContentItemPage.PUBLISHING_TAB : ContentItemPage.AUTHORING_TAB;
|
.getPrivilege();
|
||||||
throw new RedirectSignal(URL.there(state.getRequest(),
|
if (permissionChecker.isPermitted(privilege,
|
||||||
ContentItemPage.
|
workflow.getObject())) {
|
||||||
getItemURL(
|
//Lock task for current user
|
||||||
task.
|
assignableTaskManager.lockTask(currentCmsTask);
|
||||||
getItem(),
|
|
||||||
targetTab)),
|
if (CmsTaskType.DEPLOY == currentCmsTask.getTaskType()) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw new RedirectSignal(
|
||||||
|
URL.there(state.getRequest(),
|
||||||
|
ContentItemPage.getItemURL(
|
||||||
|
item,
|
||||||
|
ContentItemPage.PUBLISHING_TAB)),
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// redirect to /content-center if streamlined creation mode is active.
|
// redirect to /content-center if streamlined creation mode is active.
|
||||||
if (ContentSection.getConfig().getUseStreamlinedCreation()) {
|
final CMSConfig cmsConfig = confManager.findConfiguration(
|
||||||
throw new RedirectSignal(URL.there(state.getRequest(),
|
CMSConfig.class);
|
||||||
ContentCenter.getURL()),
|
if (cmsConfig.isUseStreamlinedCreation()) {
|
||||||
|
throw new RedirectSignal(
|
||||||
|
URL.there(state.getRequest(),
|
||||||
|
CmsConstants.CONTENT_CENTER_URL),
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean requiresApproval(final CmsTask task) {
|
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.security.Shiro;
|
||||||
import org.libreccm.workflow.Task;
|
import org.libreccm.workflow.Task;
|
||||||
import org.libreccm.workflow.AssignableTask;
|
import org.libreccm.workflow.AssignableTask;
|
||||||
|
import org.libreccm.workflow.AssignableTaskManager;
|
||||||
import org.libreccm.workflow.WorkflowManager;
|
import org.libreccm.workflow.WorkflowManager;
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||||
|
|
@ -167,13 +168,13 @@ final class TaskItemPane extends BaseItemPane {
|
||||||
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 WorkflowManager workflowManager = cdiUtil.findBean(
|
final AssignableTaskManager taskManager = cdiUtil.findBean(
|
||||||
WorkflowManager.class);
|
AssignableTaskManager.class);
|
||||||
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
final Shiro shiro = cdiUtil.findBean(Shiro.class);
|
||||||
|
|
||||||
final User user = shiro.getUser();
|
final User user = shiro.getUser();
|
||||||
|
|
||||||
final List<AssignableTask> tasks = workflowManager.lockedBy(user);
|
final List<AssignableTask> tasks = taskManager.lockedBy(user);
|
||||||
|
|
||||||
return tasks.contains(task);
|
return tasks.contains(task);
|
||||||
}
|
}
|
||||||
|
|
@ -256,9 +257,9 @@ final class TaskItemPane extends BaseItemPane {
|
||||||
if (hasAdmin(state)) {
|
if (hasAdmin(state)) {
|
||||||
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 WorkflowManager workflowManager = cdiUtil
|
final AssignableTaskManager taskManager = cdiUtil
|
||||||
.findBean(WorkflowManager.class);
|
.findBean(AssignableTaskManager.class);
|
||||||
workflowManager.lockTask(task);
|
taskManager.lockTask(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -290,9 +291,9 @@ final class TaskItemPane extends BaseItemPane {
|
||||||
if (hasAdmin(state)) {
|
if (hasAdmin(state)) {
|
||||||
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 WorkflowManager workflowManager = cdiUtil
|
final AssignableTaskManager taskManager = cdiUtil
|
||||||
.findBean(WorkflowManager.class);
|
.findBean(AssignableTaskManager.class);
|
||||||
workflowManager.unlockTask(task);
|
taskManager.unlockTask(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -319,7 +320,7 @@ final class TaskItemPane extends BaseItemPane {
|
||||||
props.add(new Property(gz("cms.ui.workflow.task.dependencies"),
|
props.add(new Property(gz("cms.ui.workflow.task.dependencies"),
|
||||||
deps(task)));
|
deps(task)));
|
||||||
props.add(new Property(gz("cms.ui.workflow.task.state"),
|
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"),
|
props.add(new Property(gz("cms.ui.workflow.task.locked"),
|
||||||
task.isLocked()
|
task.isLocked()
|
||||||
? lz("cms.ui.yes") : lz("cms.ui.no")));
|
? lz("cms.ui.yes") : lz("cms.ui.no")));
|
||||||
|
|
@ -383,13 +384,13 @@ final class TaskItemPane extends BaseItemPane {
|
||||||
.getRowKey());
|
.getRowKey());
|
||||||
|
|
||||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||||
final WorkflowManager workflowManager = cdiUtil
|
final AssignableTaskManager taskManager = cdiUtil
|
||||||
.findBean(WorkflowManager.class);
|
.findBean(AssignableTaskManager.class);
|
||||||
final RoleRepository roleRepo = cdiUtil.findBean(
|
final RoleRepository roleRepo = cdiUtil.findBean(
|
||||||
RoleRepository.class);
|
RoleRepository.class);
|
||||||
|
|
||||||
final Role role = roleRepo.findById(roleId);
|
final Role role = roleRepo.findById(roleId);
|
||||||
workflowManager.retractTask(task, role);
|
taskManager.retractTask(task, role);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -170,6 +170,7 @@ public class AssignableTaskManager {
|
||||||
* Retrieves a list of all tasks locked by a specific user.
|
* Retrieves a list of all tasks locked by a specific user.
|
||||||
*
|
*
|
||||||
* @param user The user which locks the tasks.
|
* @param user The user which locks the tasks.
|
||||||
|
*
|
||||||
* @return A list with all tasks locked by the specified user.
|
* @return A list with all tasks locked by the specified user.
|
||||||
*/
|
*/
|
||||||
@AuthorizationRequired
|
@AuthorizationRequired
|
||||||
|
|
@ -226,4 +227,14 @@ public class AssignableTaskManager {
|
||||||
finish(task);
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue