Link "Arbeitsablauf starten" (#1988)

* Linktext geändert
* Task werden beim Neustarten über AssignedTaskSection nun automatisch reserviert, falls diese noch nicht reserviert sind. 

Zu beachten ist, daß der Workflow und Reservierung der Tasks von einander unabhängig sind. Das Stoppen eines Workflows hat keinen Einfluß auf den Reservierungstatus der Tasks.

git-svn-id: https://svn.libreccm.org/ccm/trunk@2456 8810af33-2d31-482b-a856-94f89814c4df
master
quasi 2013-11-25 07:07:47 +00:00
parent 09b675565d
commit 0748e2e601
3 changed files with 141 additions and 136 deletions

View File

@ -709,7 +709,7 @@ cms.ui.workflow.intro=Select a workflow or add a new one
cms.ui.workflow.lock_tasks=Lock my tasks for this content item
cms.ui.workflow.no_users_were_selected=No users were selected.
cms.ui.workflow.num_tasks=Number of tasks
cms.ui.workflow.restart_stopped_workflow=Restart stopped workflow
cms.ui.workflow.restart_stopped_workflow=Start workflow
cms.ui.workflow.stop_workflow=Stop workflow
cms.ui.workflow.task.add=Add task
cms.ui.workflow.task.approve=Approve

View File

@ -706,7 +706,7 @@ cms.ui.workflow.intro=Arbeitsablauf w\u00e4hlen oder einen neuen hinzuf\u00fcgen
cms.ui.workflow.lock_tasks=Meine Aufgaben f\u00fcr diesen Inhaltstyp reservieren
cms.ui.workflow.no_users_were_selected=Keine Benutzer ausgew\u00e4hlt.
cms.ui.workflow.num_tasks=Anzahl der Aufgaben
cms.ui.workflow.restart_stopped_workflow=Gestoppten Arbeitsablauf erneut starten
cms.ui.workflow.restart_stopped_workflow=Arbeitsablauf starten
cms.ui.workflow.stop_workflow=Arbeitsablauf stoppen
cms.ui.workflow.task.add=Aufgabe hinzuf\u00fcgen
cms.ui.workflow.task.approve=Akzeptieren

View File

@ -46,183 +46,188 @@ import org.apache.log4j.Logger;
*/
public final class AssignedTaskSection extends Section {
private static final Logger s_log = Logger.getLogger(AssignedTaskSection.class);
private final WorkflowRequestLocal m_workflow;
private final WorkflowFacade m_facade;
private static final Logger s_log = Logger.getLogger(AssignedTaskSection.class);
private final WorkflowRequestLocal m_workflow;
private final WorkflowFacade m_facade;
public AssignedTaskSection(final WorkflowRequestLocal workflow,
final Component subject) {
super(gz("cms.ui.workflow.task.assigned"));
public AssignedTaskSection(final WorkflowRequestLocal workflow,
final Component subject) {
super(gz("cms.ui.workflow.task.assigned"));
m_workflow = workflow;
m_facade = new WorkflowFacade(m_workflow);
m_workflow = workflow;
m_facade = new WorkflowFacade(m_workflow);
final ActionGroup group = new ActionGroup();
setBody(group);
final ActionGroup group = new ActionGroup();
setBody(group);
group.setSubject(subject);
group.addAction(new RestartLink());
group.addAction(new LockLink());
group.addAction(new UnlockLink());
}
group.setSubject(subject);
group.addAction(new RestartLink());
group.addAction(new LockLink());
group.addAction(new UnlockLink());
}
@Override
public final boolean isVisible(final PageState state) {
return m_workflow.getWorkflow(state) != null;
}
@Override
public final boolean isVisible(final PageState state) {
return m_workflow.getWorkflow(state) != null;
}
private class RestartLink extends ActionLink {
private class RestartLink extends ActionLink {
RestartLink() {
super(new Label(gz("cms.ui.workflow.restart_stopped_workflow")));
RestartLink() {
super(new Label(gz("cms.ui.workflow.restart_stopped_workflow")));
addActionListener(new Listener());
}
addActionListener(new Listener());
}
@Override
public final boolean isVisible(final PageState state) {
return m_facade.workflowState(state, Workflow.INIT) || m_facade.workflowState(state, Workflow.STOPPED);
}
@Override
public final boolean isVisible(final PageState state) {
return m_facade.workflowState(state, Workflow.INIT) || m_facade.workflowState(state, Workflow.STOPPED);
}
private class Listener implements ActionListener {
private class Listener implements ActionListener {
public final void actionPerformed(final ActionEvent e) {
m_facade.restartWorkflow(e.getPageState());
}
}
}
public final void actionPerformed(final ActionEvent e) {
m_facade.restartWorkflow(e.getPageState());
}
}
}
private class LockLink extends ActionLink {
private class LockLink extends ActionLink {
LockLink() {
super(new Label(gz("cms.ui.workflow.task.assigned.lock_all")));
LockLink() {
super(new Label(gz("cms.ui.workflow.task.assigned.lock_all")));
addActionListener(new Listener());
}
addActionListener(new Listener());
}
@Override
public final boolean isVisible(final PageState state) {
return m_facade.workflowState(state, Workflow.STARTED) && m_facade.tasksExist(state) && !m_facade.tasksLocked(state);
}
@Override
public final boolean isVisible(final PageState state) {
return m_facade.workflowState(state, Workflow.STARTED) && m_facade.tasksExist(state) && !m_facade.tasksLocked(state);
}
private class Listener implements ActionListener {
private class Listener implements ActionListener {
public final void actionPerformed(final ActionEvent e) {
m_facade.lockTasks(e.getPageState());
}
}
}
public final void actionPerformed(final ActionEvent e) {
m_facade.lockTasks(e.getPageState());
}
}
}
private class UnlockLink extends ActionLink {
private class UnlockLink extends ActionLink {
UnlockLink() {
super(new Label(gz("cms.ui.workflow.task.assigned.unlock_all")));
UnlockLink() {
super(new Label(gz("cms.ui.workflow.task.assigned.unlock_all")));
addActionListener(new UnlockLink.Listener());
}
addActionListener(new UnlockLink.Listener());
}
@Override
public final boolean isVisible(final PageState state) {
return m_facade.workflowState(state, Workflow.STARTED) && m_facade.tasksExist(state) && m_facade.tasksLocked(state);
}
@Override
public final boolean isVisible(final PageState state) {
return m_facade.workflowState(state, Workflow.STARTED) && m_facade.tasksExist(state) && m_facade.tasksLocked(state);
}
private class Listener implements ActionListener {
private class Listener implements ActionListener {
public final void actionPerformed(final ActionEvent e) {
m_facade.unlockTasks(e.getPageState());
}
}
}
public final void actionPerformed(final ActionEvent e) {
m_facade.unlockTasks(e.getPageState());
}
}
}
private class WorkflowFacade {
private class WorkflowFacade {
private final WorkflowRequestLocal m_flow;
private final TaskListRequestLocal m_tasks;
private final WorkflowRequestLocal m_flow;
private final TaskListRequestLocal m_tasks;
WorkflowFacade(final WorkflowRequestLocal flow) {
m_flow = flow;
m_tasks = new TaskListRequestLocal();
}
WorkflowFacade(final WorkflowRequestLocal flow) {
m_flow = flow;
m_tasks = new TaskListRequestLocal();
}
private class TaskListRequestLocal extends RequestLocal {
private class TaskListRequestLocal extends RequestLocal {
@Override
protected final Object initialValue(final PageState state) {
final Workflow workflow = m_flow.getWorkflow(state);
final Engine engine = Engine.getInstance(CMSEngine.CMS_ENGINE_TYPE);
return engine.getEnabledTasks(Web.getContext().getUser(), workflow.getID());
}
@Override
protected final Object initialValue(final PageState state) {
final Workflow workflow = m_flow.getWorkflow(state);
final Engine engine = Engine.getInstance(CMSEngine.CMS_ENGINE_TYPE);
return engine.getEnabledTasks(Web.getContext().getUser(), workflow.getID());
}
final ArrayList getTasks(final PageState state) {
return (ArrayList) get(state);
}
}
final ArrayList getTasks(final PageState state) {
return (ArrayList) get(state);
}
}
final void restartWorkflow(final PageState state) {
final Workflow workflow = m_flow.getWorkflow(state);
workflow.start(Web.getContext().getUser());
workflow.save();
}
final void restartWorkflow(final PageState state) {
final Workflow workflow = m_flow.getWorkflow(state);
workflow.start(Web.getContext().getUser());
workflow.save();
final void lockTasks(final PageState state) {
final Iterator iter = m_tasks.getTasks(state).iterator();
// Lock tasks if not locked
if (!tasksLocked(state)) {
lockTasks(state);
}
}
while (iter.hasNext()) {
final CMSTask task = (CMSTask) iter.next();
final void lockTasks(final PageState state) {
final Iterator iter = m_tasks.getTasks(state).iterator();
if (relevant(task) && !task.isLocked()) {
task.lock(Web.getContext().getUser());
task.save();
}
}
}
while (iter.hasNext()) {
final CMSTask task = (CMSTask) iter.next();
final void unlockTasks(final PageState state) {
final Iterator iter = m_tasks.getTasks(state).iterator();
if (relevant(task) && !task.isLocked()) {
task.lock(Web.getContext().getUser());
task.save();
}
}
}
while (iter.hasNext()) {
final CMSTask task = (CMSTask) iter.next();
final void unlockTasks(final PageState state) {
final Iterator iter = m_tasks.getTasks(state).iterator();
if (relevant(task) && task.isLocked()) {
task.unlock(Web.getContext().getUser());
task.save();
}
}
}
while (iter.hasNext()) {
final CMSTask task = (CMSTask) iter.next();
final boolean tasksLocked(final PageState state) {
final Iterator iter = m_tasks.getTasks(state).iterator();
if (relevant(task) && task.isLocked()) {
task.unlock(Web.getContext().getUser());
task.save();
}
}
}
while (iter.hasNext()) {
final CMSTask task = (CMSTask) iter.next();
final boolean tasksLocked(final PageState state) {
final Iterator iter = m_tasks.getTasks(state).iterator();
if (relevant(task) && !task.isLocked()) {
return false;
}
}
while (iter.hasNext()) {
final CMSTask task = (CMSTask) iter.next();
return true;
}
if (relevant(task) && !task.isLocked()) {
return false;
}
}
final boolean workflowState(final PageState state, int processState) {
return m_flow.getWorkflow(state).getProcessState() == processState;
}
return true;
}
final boolean tasksExist(final PageState state) {
return !m_tasks.getTasks(state).isEmpty();
}
final boolean workflowState(final PageState state, int processState) {
return m_flow.getWorkflow(state).getProcessState() == processState;
}
private boolean relevant(final CMSTask task) {
return task.getTaskType().getID().equals(CMSTaskType.AUTHOR)
|| task.getTaskType().getID().equals(CMSTaskType.EDIT);
}
}
final boolean tasksExist(final PageState state) {
return !m_tasks.getTasks(state).isEmpty();
}
protected final static GlobalizedMessage gz(final String key) {
return GlobalizationUtil.globalize(key);
}
private boolean relevant(final CMSTask task) {
return task.getTaskType().getID().equals(CMSTaskType.AUTHOR)
|| task.getTaskType().getID().equals(CMSTaskType.EDIT);
}
}
protected final static String lz(final String key) {
return (String) gz(key).localize();
}
protected final static GlobalizedMessage gz(final String key) {
return GlobalizationUtil.globalize(key);
}
protected final static String lz(final String key) {
return (String) gz(key).localize();
}
}