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(); } } }