diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties
index 0403daa2a..2fd235783 100755
--- a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties
+++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties
@@ -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=Gestoppter Arbeitsablauf erneut starten
+cms.ui.workflow.restart_stopped_workflow=Gestoppten Arbeitsablauf erneut starten
cms.ui.workflow.stop_workflow=Arbeitsablauf stoppen
cms.ui.workflow.task.add=Aufgabe hinzuf\u00fcgen
cms.ui.workflow.task.approve=Akzeptieren
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskSection.java b/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskSection.java
index 49a2a77dc..38adbda73 100755
--- a/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskSection.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskSection.java
@@ -35,25 +35,23 @@ import com.arsdigita.toolbox.ui.Section;
import com.arsdigita.web.Web;
import com.arsdigita.workflow.simple.Engine;
import com.arsdigita.workflow.simple.Workflow;
-import org.apache.log4j.Logger;
-
import java.util.ArrayList;
import java.util.Iterator;
+import org.apache.log4j.Logger;
/**
- *
+ * @author unknown
+ * @author Sören Bernstein
* @version $Id: AssignedTaskSection.java 1280 2006-07-27 09:12:09Z cgyg9330 $
*/
public final class AssignedTaskSection extends Section {
- private static final Logger s_log = Logger.getLogger
- (AssignedTaskSection.class);
-
+ 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) {
+ final Component subject) {
super(gz("cms.ui.workflow.task.assigned"));
m_workflow = workflow;
@@ -63,26 +61,52 @@ public final class AssignedTaskSection extends Section {
setBody(group);
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;
}
+ private class RestartLink extends ActionLink {
+
+ RestartLink() {
+ super(new Label(gz("cms.ui.workflow.restart_stopped_workflow")));
+
+ addActionListener(new Listener());
+ }
+
+ @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 {
+
+ public final void actionPerformed(final ActionEvent e) {
+ m_facade.restartWorkflow(e.getPageState());
+ }
+ }
+ }
+
private class LockLink extends ActionLink {
+
LockLink() {
super(new Label(gz("cms.ui.workflow.task.assigned.lock_all")));
addActionListener(new Listener());
}
+ @Override
public final boolean isVisible(final PageState state) {
- return m_facade.tasksExist(state) && !m_facade.tasksLocked(state);
+ return m_facade.workflowState(state, Workflow.STARTED) && m_facade.tasksExist(state) && !m_facade.tasksLocked(state);
}
private class Listener implements ActionListener {
+
public final void actionPerformed(final ActionEvent e) {
m_facade.lockTasks(e.getPageState());
}
@@ -90,17 +114,20 @@ public final class AssignedTaskSection extends Section {
}
private class UnlockLink extends ActionLink {
+
UnlockLink() {
super(new Label(gz("cms.ui.workflow.task.assigned.unlock_all")));
- addActionListener(new Listener());
+ addActionListener(new UnlockLink.Listener());
}
+ @Override
public final boolean isVisible(final PageState state) {
- return m_facade.tasksExist(state) && m_facade.tasksLocked(state);
+ return m_facade.workflowState(state, Workflow.STARTED) && m_facade.tasksExist(state) && m_facade.tasksLocked(state);
}
private class Listener implements ActionListener {
+
public final void actionPerformed(final ActionEvent e) {
m_facade.unlockTasks(e.getPageState());
}
@@ -108,6 +135,7 @@ public final class AssignedTaskSection extends Section {
}
private class WorkflowFacade {
+
private final WorkflowRequestLocal m_flow;
private final TaskListRequestLocal m_tasks;
@@ -117,11 +145,12 @@ public final class AssignedTaskSection extends Section {
}
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());
+ return engine.getEnabledTasks(Web.getContext().getUser(), workflow.getID());
}
final ArrayList getTasks(final PageState state) {
@@ -129,6 +158,12 @@ public final class AssignedTaskSection extends Section {
}
}
+ 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();
@@ -169,13 +204,17 @@ public final class AssignedTaskSection extends Section {
return true;
}
+ final boolean workflowState(final PageState state, int processState) {
+ return m_flow.getWorkflow(state).getProcessState() == processState;
+ }
+
final boolean tasksExist(final PageState state) {
return !m_tasks.getTasks(state).isEmpty();
}
private boolean relevant(final CMSTask task) {
return task.getTaskType().getID().equals(CMSTaskType.AUTHOR)
- || task.getTaskType().getID().equals(CMSTaskType.EDIT);
+ || task.getTaskType().getID().equals(CMSTaskType.EDIT);
}
}
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskTable.java b/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskTable.java
index d29a3f342..a11398bf8 100755
--- a/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskTable.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskTable.java
@@ -33,9 +33,8 @@ import com.arsdigita.cms.workflow.CMSTask;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.User;
import com.arsdigita.web.Web;
-import org.apache.log4j.Logger;
-
import java.math.BigDecimal;
+import org.apache.log4j.Logger;
/**
*
@@ -63,6 +62,7 @@ public final class AssignedTaskTable extends Table {
}
private static class LockListener extends TableActionAdapter {
+ @Override
public final void cellSelected(final TableActionEvent e) {
final int column = e.getColumn().intValue();
@@ -91,7 +91,7 @@ public final class AssignedTaskTable extends Table {
BoxPanel p = new BoxPanel();
User lockingUser = (User) value;
if (lockingUser != null) {
- StringBuffer sb = new StringBuffer("Locked by
");
+ StringBuilder sb = new StringBuilder("Locked by
");
if (lockingUser.equals(Web.getContext().getUser())) {
sb.append("you");
p.add(new ControlLink(new Label(
diff --git a/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskTableModelBuilder.java b/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskTableModelBuilder.java
index 717a568c9..4e7777802 100755
--- a/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskTableModelBuilder.java
+++ b/ccm-cms/src/com/arsdigita/cms/ui/workflow/AssignedTaskTableModelBuilder.java
@@ -28,19 +28,17 @@ import com.arsdigita.util.Assert;
import com.arsdigita.web.Web;
import com.arsdigita.workflow.simple.Engine;
import com.arsdigita.workflow.simple.Workflow;
+import java.util.Collections;
+import java.util.Iterator;
import org.apache.log4j.Logger;
-import java.util.Iterator;
-
/**
- *
- *
+ *
+ *
*/
class AssignedTaskTableModelBuilder extends AbstractTableModelBuilder {
- private static final Logger s_log = Logger.getLogger
- (AssignedTaskTableModelBuilder.class);
-
+ private static final Logger s_log = Logger.getLogger(AssignedTaskTableModelBuilder.class);
private final WorkflowRequestLocal m_workflow;
public AssignedTaskTableModelBuilder(final WorkflowRequestLocal workflow) {
@@ -52,18 +50,24 @@ class AssignedTaskTableModelBuilder extends AbstractTableModelBuilder {
}
private static class Model implements TableModel {
+
private final Iterator m_iter;
private CMSTask m_task;
Model(final Workflow workflow) {
Assert.exists(workflow, Workflow.class);
- final Engine engine = Engine.getInstance(CMSEngine.CMS_ENGINE_TYPE);
+ if (workflow.getProcessState() == Workflow.STARTED) {
- Assert.exists(engine, Engine.class);
+ final Engine engine = Engine.getInstance(CMSEngine.CMS_ENGINE_TYPE);
+
+ Assert.exists(engine, Engine.class);
+
+ m_iter = engine.getEnabledTasks(Web.getContext().getUser(), workflow.getID()).iterator();
+ } else {
+ m_iter = Collections.emptyList().iterator();
+ }
- m_iter = engine.getEnabledTasks
- (Web.getContext().getUser(), workflow.getID()).iterator();
}
public final int getColumnCount() {
@@ -86,17 +90,17 @@ class AssignedTaskTableModelBuilder extends AbstractTableModelBuilder {
public final Object getElementAt(final int column) {
switch (column) {
- case 0:
- return m_task.getLabel();
- case 1:
- // SF patch [ 1587168 ] Show locking user
- return m_task.isLocked() ? m_task.getLockedUser() : null;
- case 2:
- return m_task.getTaskType().getID().equals(CMSTaskType.DEPLOY) ?
- (Object) new Label("") : // null should work as well
- (Object) lz("cms.ui.workflow.task.finish");
- default:
- throw new IllegalStateException();
+ case 0:
+ return m_task.getLabel();
+ case 1:
+ // SF patch [ 1587168 ] Show locking user
+ return m_task.isLocked() ? m_task.getLockedUser() : null;
+ case 2:
+ return m_task.getTaskType().getID().equals(CMSTaskType.DEPLOY)
+ ? (Object) new Label("") : // null should work as well
+ (Object) lz("cms.ui.workflow.task.finish");
+ default:
+ throw new IllegalStateException();
}
}
}