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-94f89814c4dfmaster
parent
09b675565d
commit
0748e2e601
|
|
@ -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.lock_tasks=Lock my tasks for this content item
|
||||||
cms.ui.workflow.no_users_were_selected=No users were selected.
|
cms.ui.workflow.no_users_were_selected=No users were selected.
|
||||||
cms.ui.workflow.num_tasks=Number of tasks
|
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.stop_workflow=Stop workflow
|
||||||
cms.ui.workflow.task.add=Add task
|
cms.ui.workflow.task.add=Add task
|
||||||
cms.ui.workflow.task.approve=Approve
|
cms.ui.workflow.task.approve=Approve
|
||||||
|
|
|
||||||
|
|
@ -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.lock_tasks=Meine Aufgaben f\u00fcr diesen Inhaltstyp reservieren
|
||||||
cms.ui.workflow.no_users_were_selected=Keine Benutzer ausgew\u00e4hlt.
|
cms.ui.workflow.no_users_were_selected=Keine Benutzer ausgew\u00e4hlt.
|
||||||
cms.ui.workflow.num_tasks=Anzahl der Aufgaben
|
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.stop_workflow=Arbeitsablauf stoppen
|
||||||
cms.ui.workflow.task.add=Aufgabe hinzuf\u00fcgen
|
cms.ui.workflow.task.add=Aufgabe hinzuf\u00fcgen
|
||||||
cms.ui.workflow.task.approve=Akzeptieren
|
cms.ui.workflow.task.approve=Akzeptieren
|
||||||
|
|
|
||||||
|
|
@ -46,183 +46,188 @@ import org.apache.log4j.Logger;
|
||||||
*/
|
*/
|
||||||
public final class AssignedTaskSection extends Section {
|
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 WorkflowRequestLocal m_workflow;
|
||||||
private final WorkflowFacade m_facade;
|
private final WorkflowFacade m_facade;
|
||||||
|
|
||||||
public AssignedTaskSection(final WorkflowRequestLocal workflow,
|
public AssignedTaskSection(final WorkflowRequestLocal workflow,
|
||||||
final Component subject) {
|
final Component subject) {
|
||||||
super(gz("cms.ui.workflow.task.assigned"));
|
super(gz("cms.ui.workflow.task.assigned"));
|
||||||
|
|
||||||
m_workflow = workflow;
|
m_workflow = workflow;
|
||||||
m_facade = new WorkflowFacade(m_workflow);
|
m_facade = new WorkflowFacade(m_workflow);
|
||||||
|
|
||||||
final ActionGroup group = new ActionGroup();
|
final ActionGroup group = new ActionGroup();
|
||||||
setBody(group);
|
setBody(group);
|
||||||
|
|
||||||
group.setSubject(subject);
|
group.setSubject(subject);
|
||||||
group.addAction(new RestartLink());
|
group.addAction(new RestartLink());
|
||||||
group.addAction(new LockLink());
|
group.addAction(new LockLink());
|
||||||
group.addAction(new UnlockLink());
|
group.addAction(new UnlockLink());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isVisible(final PageState state) {
|
public final boolean isVisible(final PageState state) {
|
||||||
return m_workflow.getWorkflow(state) != null;
|
return m_workflow.getWorkflow(state) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class RestartLink extends ActionLink {
|
private class RestartLink extends ActionLink {
|
||||||
|
|
||||||
RestartLink() {
|
RestartLink() {
|
||||||
super(new Label(gz("cms.ui.workflow.restart_stopped_workflow")));
|
super(new Label(gz("cms.ui.workflow.restart_stopped_workflow")));
|
||||||
|
|
||||||
addActionListener(new Listener());
|
addActionListener(new Listener());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isVisible(final PageState state) {
|
public final boolean isVisible(final PageState state) {
|
||||||
return m_facade.workflowState(state, Workflow.INIT) || m_facade.workflowState(state, Workflow.STOPPED);
|
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) {
|
public final void actionPerformed(final ActionEvent e) {
|
||||||
m_facade.restartWorkflow(e.getPageState());
|
m_facade.restartWorkflow(e.getPageState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class LockLink extends ActionLink {
|
private class LockLink extends ActionLink {
|
||||||
|
|
||||||
LockLink() {
|
LockLink() {
|
||||||
super(new Label(gz("cms.ui.workflow.task.assigned.lock_all")));
|
super(new Label(gz("cms.ui.workflow.task.assigned.lock_all")));
|
||||||
|
|
||||||
addActionListener(new Listener());
|
addActionListener(new Listener());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isVisible(final PageState state) {
|
public final boolean isVisible(final PageState state) {
|
||||||
return m_facade.workflowState(state, Workflow.STARTED) && 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 {
|
private class Listener implements ActionListener {
|
||||||
|
|
||||||
public final void actionPerformed(final ActionEvent e) {
|
public final void actionPerformed(final ActionEvent e) {
|
||||||
m_facade.lockTasks(e.getPageState());
|
m_facade.lockTasks(e.getPageState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class UnlockLink extends ActionLink {
|
private class UnlockLink extends ActionLink {
|
||||||
|
|
||||||
UnlockLink() {
|
UnlockLink() {
|
||||||
super(new Label(gz("cms.ui.workflow.task.assigned.unlock_all")));
|
super(new Label(gz("cms.ui.workflow.task.assigned.unlock_all")));
|
||||||
|
|
||||||
addActionListener(new UnlockLink.Listener());
|
addActionListener(new UnlockLink.Listener());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isVisible(final PageState state) {
|
public final boolean isVisible(final PageState state) {
|
||||||
return m_facade.workflowState(state, Workflow.STARTED) && 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 {
|
private class Listener implements ActionListener {
|
||||||
|
|
||||||
public final void actionPerformed(final ActionEvent e) {
|
public final void actionPerformed(final ActionEvent e) {
|
||||||
m_facade.unlockTasks(e.getPageState());
|
m_facade.unlockTasks(e.getPageState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class WorkflowFacade {
|
private class WorkflowFacade {
|
||||||
|
|
||||||
private final WorkflowRequestLocal m_flow;
|
private final WorkflowRequestLocal m_flow;
|
||||||
private final TaskListRequestLocal m_tasks;
|
private final TaskListRequestLocal m_tasks;
|
||||||
|
|
||||||
WorkflowFacade(final WorkflowRequestLocal flow) {
|
WorkflowFacade(final WorkflowRequestLocal flow) {
|
||||||
m_flow = flow;
|
m_flow = flow;
|
||||||
m_tasks = new TaskListRequestLocal();
|
m_tasks = new TaskListRequestLocal();
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TaskListRequestLocal extends RequestLocal {
|
private class TaskListRequestLocal extends RequestLocal {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
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 Engine engine = Engine.getInstance(CMSEngine.CMS_ENGINE_TYPE);
|
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) {
|
final ArrayList getTasks(final PageState state) {
|
||||||
return (ArrayList) get(state);
|
return (ArrayList) get(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final void restartWorkflow(final PageState state) {
|
final void restartWorkflow(final PageState state) {
|
||||||
final Workflow workflow = m_flow.getWorkflow(state);
|
final Workflow workflow = m_flow.getWorkflow(state);
|
||||||
workflow.start(Web.getContext().getUser());
|
workflow.start(Web.getContext().getUser());
|
||||||
workflow.save();
|
workflow.save();
|
||||||
}
|
|
||||||
|
|
||||||
final void lockTasks(final PageState state) {
|
// Lock tasks if not locked
|
||||||
final Iterator iter = m_tasks.getTasks(state).iterator();
|
if (!tasksLocked(state)) {
|
||||||
|
lockTasks(state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (iter.hasNext()) {
|
final void lockTasks(final PageState state) {
|
||||||
final CMSTask task = (CMSTask) iter.next();
|
final Iterator iter = m_tasks.getTasks(state).iterator();
|
||||||
|
|
||||||
if (relevant(task) && !task.isLocked()) {
|
while (iter.hasNext()) {
|
||||||
task.lock(Web.getContext().getUser());
|
final CMSTask task = (CMSTask) iter.next();
|
||||||
task.save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final void unlockTasks(final PageState state) {
|
if (relevant(task) && !task.isLocked()) {
|
||||||
final Iterator iter = m_tasks.getTasks(state).iterator();
|
task.lock(Web.getContext().getUser());
|
||||||
|
task.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (iter.hasNext()) {
|
final void unlockTasks(final PageState state) {
|
||||||
final CMSTask task = (CMSTask) iter.next();
|
final Iterator iter = m_tasks.getTasks(state).iterator();
|
||||||
|
|
||||||
if (relevant(task) && task.isLocked()) {
|
while (iter.hasNext()) {
|
||||||
task.unlock(Web.getContext().getUser());
|
final CMSTask task = (CMSTask) iter.next();
|
||||||
task.save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final boolean tasksLocked(final PageState state) {
|
if (relevant(task) && task.isLocked()) {
|
||||||
final Iterator iter = m_tasks.getTasks(state).iterator();
|
task.unlock(Web.getContext().getUser());
|
||||||
|
task.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (iter.hasNext()) {
|
final boolean tasksLocked(final PageState state) {
|
||||||
final CMSTask task = (CMSTask) iter.next();
|
final Iterator iter = m_tasks.getTasks(state).iterator();
|
||||||
|
|
||||||
if (relevant(task) && !task.isLocked()) {
|
while (iter.hasNext()) {
|
||||||
return false;
|
final CMSTask task = (CMSTask) iter.next();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
if (relevant(task) && !task.isLocked()) {
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final boolean workflowState(final PageState state, int processState) {
|
return true;
|
||||||
return m_flow.getWorkflow(state).getProcessState() == processState;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
final boolean tasksExist(final PageState state) {
|
final boolean workflowState(final PageState state, int processState) {
|
||||||
return !m_tasks.getTasks(state).isEmpty();
|
return m_flow.getWorkflow(state).getProcessState() == processState;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean relevant(final CMSTask task) {
|
final boolean tasksExist(final PageState state) {
|
||||||
return task.getTaskType().getID().equals(CMSTaskType.AUTHOR)
|
return !m_tasks.getTasks(state).isEmpty();
|
||||||
|| task.getTaskType().getID().equals(CMSTaskType.EDIT);
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected final static GlobalizedMessage gz(final String key) {
|
private boolean relevant(final CMSTask task) {
|
||||||
return GlobalizationUtil.globalize(key);
|
return task.getTaskType().getID().equals(CMSTaskType.AUTHOR)
|
||||||
}
|
|| task.getTaskType().getID().equals(CMSTaskType.EDIT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected final static String lz(final String key) {
|
protected final static GlobalizedMessage gz(final String key) {
|
||||||
return (String) gz(key).localize();
|
return GlobalizationUtil.globalize(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected final static String lz(final String key) {
|
||||||
|
return (String) gz(key).localize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue