[jbpm-commits] JBoss JBPM SVN: r2553 - in jbpm3/trunk/modules/gwt-console: server/src/main/java/org/jboss/bpm/console/server and 6 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Oct 16 06:53:32 EDT 2008
Author: heiko.braun at jboss.com
Date: 2008-10-16 06:53:31 -0400 (Thu, 16 Oct 2008)
New Revision: 2553
Modified:
jbpm3/trunk/modules/gwt-console/rpc/src/main/java/org/jboss/bpm/console/client/model/ProcessInstance.java
jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/ProcessManagement.java
jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/ProcessDAO.java
jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/JBPM3ProcessDAO.java
jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/MockProcessDAO.java
jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/Transform.java
jbpm3/trunk/modules/gwt-console/server/src/main/webapp/index.html
jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/RestURL.java
jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java
jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java
jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/widgets/RemoteListView.java
Log:
Added suspend/resume capabilties to both the UI and the console server
Modified: jbpm3/trunk/modules/gwt-console/rpc/src/main/java/org/jboss/bpm/console/client/model/ProcessInstance.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/rpc/src/main/java/org/jboss/bpm/console/client/model/ProcessInstance.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/rpc/src/main/java/org/jboss/bpm/console/client/model/ProcessInstance.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -36,7 +36,7 @@
private long parentId;
private String key;
- private enum STATE {CREATED, STARTED, SUSPENDED, ENDED};
+ public enum STATE {RUNNING, SUSPENDED, ENDED};
private Date startDate;
private Date endDate;
@@ -54,6 +54,13 @@
public ProcessInstance(long id, long parentId, Date startDate, Date endDate, boolean suspended)
{
+
+ if(null==startDate)
+ throw new IllegalArgumentException("An instance requires a start date");
+
+ if(endDate!=null && suspended)
+ throw new IllegalArgumentException("An instance cannot be ended and suspended at the same time");
+
this.instanceId = id;
this.parentId = parentId;
this.startDate = startDate;
@@ -62,16 +69,17 @@
initLifecycle();
}
+ /**
+ * If not ENDED or SUSPENDED the instance is RUNNING
+ */
private void initLifecycle()
{
if(hasEnded())
- this.lifecycle = new Lifecycle(STATE.ENDED);
+ this.lifecycle = new Lifecycle(this, STATE.ENDED);
else if(isSuspended())
- this.lifecycle = new Lifecycle(STATE.SUSPENDED);
- else if (isStarted())
- this.lifecycle = new Lifecycle(STATE.STARTED);
+ this.lifecycle = new Lifecycle(this, STATE.SUSPENDED);
else
- this.lifecycle = new Lifecycle(STATE.CREATED);
+ this.lifecycle = new Lifecycle(this, STATE.RUNNING);
this.state = lifecycle.getState();
}
@@ -115,6 +123,11 @@
return this.state;
}
+ public void setState(String nextState)
+ {
+ setState(STATE.valueOf(nextState));
+ }
+
public void setState(STATE nextState)
{
this.lifecycle = this.lifecycle.transitionTo(nextState);
@@ -143,32 +156,30 @@
this.endDate = endDate;
}
- public boolean isStarted()
+ public boolean isRunning()
{
- return this.startDate!=null;
+ return this.startDate!=null && !isSuspended();
}
public boolean hasEnded()
{
- return isStarted() && this.endDate!=null;
+ return this.startDate!=null
+ && this.endDate!=null;
}
public boolean isSuspended()
{
- return isStarted() && suspended;
+ return null==this.endDate && suspended;
}
-
- public void setSuspended(boolean suspended)
- {
- this.suspended = suspended;
- }
-
+
private class Lifecycle
{
private STATE current;
+ private ProcessInstance instance;
- public Lifecycle(STATE current)
+ public Lifecycle(ProcessInstance instance, STATE current)
{
+ this.instance = instance;
this.current = current;
}
@@ -177,27 +188,35 @@
Lifecycle nextLifecycle = null;
switch(next)
- {
- case STARTED:
- if(!STATE.ENDED.equals(current))
+ {
+ case SUSPENDED: // only RUNNING instances can be SUSPENDED
+ if(STATE.RUNNING.equals(current))
{
- nextLifecycle = new Lifecycle(next);
+ nextLifecycle = new Lifecycle(instance, next);
+ instance.suspended = true;
+ break;
}
- break;
- case SUSPENDED:
- if(STATE.STARTED.equals(current))
+ else
{
- nextLifecycle = new Lifecycle(next);
+ throw new IllegalTransitionException(current, next);
+ }
+ case ENDED: // both RUNNING and SUSPENDED instances can be ENDED
+ if(STATE.RUNNING.equals(current) || STATE.SUSPENDED.equals(current))
+ {
+ nextLifecycle = new Lifecycle(instance, next);
+ instance.suspended = false;
+ instance.endDate = new Date();
break;
}
else
{
throw new IllegalTransitionException(current, next);
}
- case ENDED:
- if(STATE.STARTED.equals(current) || STATE.SUSPENDED.equals(current))
+ case RUNNING: // only SUSPENDED instances can become RUNNING
+ if(STATE.SUSPENDED.equals(current))
{
- nextLifecycle = new Lifecycle(next);
+ nextLifecycle = new Lifecycle(instance, next);
+ instance.suspended = false;
break;
}
else
Modified: jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/ProcessManagement.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/ProcessManagement.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/ProcessManagement.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -102,19 +102,21 @@
}
@POST
- @Path("instances/{id}/remove")
+ @Path("instances/{id}/state/{next}")
@Produces("application/json")
- public Response removeInstancesJSON(
+ public Response changeState(
@PathParam("id")
long instanceId,
+ @PathParam("next")
+ String next,
@Context
HttpServletRequest request)
{
- ProcessInstanceWrapper wrapper =
- new ProcessInstanceWrapper(getProcessDAO(request).removeInstance(instanceId));
- return createJsonResponse(wrapper);
+ getProcessDAO(request).changeState(instanceId, next);
+ return Response.ok().build();
}
+
private Response createJsonResponse(Object wrapper)
{
Gson gson = GsonFactory.createInstance();
Modified: jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/ProcessDAO.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/ProcessDAO.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/ProcessDAO.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -43,5 +43,5 @@
ProcessInstance getInstanceById(long instanceId);
- List<ProcessInstance> removeInstance(long instanceId);
+ void changeState(long instanceId, String nextState);
}
Modified: jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/JBPM3ProcessDAO.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/JBPM3ProcessDAO.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/JBPM3ProcessDAO.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -80,8 +80,13 @@
return Transform.processInstance(instance);
}
- public List<ProcessInstance> removeInstance(long instanceId)
+
+ public void changeState(long instanceId, String nextState)
{
- throw new RuntimeException("Not implemented");
+ org.jbpm.graph.exe.ProcessInstance p0 = delegate.getActualInstance(instanceId);
+ Transform.doTransition(p0, nextState);
+
+ // persist
+
}
}
Modified: jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/MockProcessDAO.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/MockProcessDAO.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/MockProcessDAO.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -103,27 +103,25 @@
return instances;
}
- public List<ProcessInstance> removeInstance(long instanceId)
+
+ public void changeState(long instanceId, String nextState)
{
- System.out.println("Remove instance " + instanceId);
+ System.out.println("Change instance state" + instanceId + " to " + nextState);
- ProcessInstance toBeRemoved = null;
+ ProcessInstance toBeChanged = null;
for(ProcessInstance instance : instances)
{
if(instanceId == instance.getInstanceId())
- toBeRemoved = instance;
+ toBeChanged = instance;
}
- if(null==toBeRemoved)
+ if(null==toBeChanged)
throw new IllegalArgumentException("No process with id " + instanceId);
- else
- instances.remove(toBeRemoved);
-
- return instances;
+
+ toBeChanged.setState(nextState);
}
-
public ProcessInstance getInstanceById(long instanceId)
{
ProcessInstance match = null;
Modified: jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/Transform.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/Transform.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/server/src/main/java/org/jboss/bpm/console/server/dao/internal/Transform.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -45,4 +45,26 @@
long instanceId = i0.getId();
return new ProcessInstance(instanceId, processId, start, end, suspended);
}
+
+ public static void doTransition(org.jbpm.graph.exe.ProcessInstance p0, String nextState)
+ {
+ ProcessInstance instance = Transform.processInstance(p0);
+ instance.setState(nextState); // has lifecycle build in, hence the extra round
+
+ switch(instance.getState())
+ {
+ case ENDED:
+ p0.setEnd(instance.getEndDate());
+ p0.end();
+ break;
+ case SUSPENDED:
+ p0.suspend();
+ break;
+ case RUNNING:
+ if(p0.isSuspended())
+ p0.resume();
+ }
+
+ }
+
}
Modified: jbpm3/trunk/modules/gwt-console/server/src/main/webapp/index.html
===================================================================
--- jbpm3/trunk/modules/gwt-console/server/src/main/webapp/index.html 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/server/src/main/webapp/index.html 2008-10-16 10:53:31 UTC (rev 2553)
@@ -40,9 +40,9 @@
<tr>
<td>POST</td>
- <td>/rs/process/instances/{instanceId}/remove</td>
- <td>Removes a particular process instance</td>
- <td>application/json</td>
+ <td>/rs/process/instances/{id}/state/{next}</td>
+ <td>Change instance state (RUNNING, SUSPENDED, ENDED)</td>
+ <td>*/*</td>
</tr>
<tr>
Modified: jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/RestURL.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/RestURL.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/RestURL.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -21,6 +21,8 @@
*/
package org.jboss.bpm.console.client;
+import org.jboss.bpm.console.client.model.ProcessInstance;
+
/**
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
@@ -72,16 +74,12 @@
return getBaseUrl() + "/rs/user/roles?roleCheck="+sb.toString();
}
+ @Deprecated
public String getRemoveDefinitionURL(long processId)
{
return getBaseUrl() + "/rs/process/definitions/" + processId + "/remove";
}
- public String getRemoveInstanceURL(long instanceId)
- {
- return getBaseUrl() + "/rs/process/instances/" + instanceId + "/remove";
- }
-
public String getProcessImageURL(long processId)
{
return getBaseUrl() + "/rs/jbpm3/definitions/" + processId + "/image";
@@ -96,4 +94,9 @@
{
return getBaseUrl() + "/rs/jbpm3/instances/" + instanceId + "/activeNodeInfo";
}
+
+ public String getStateChangeURL(long instanceId, ProcessInstance.STATE state)
+ {
+ return getBaseUrl() + "/rs/process/instances/" + instanceId + "/state/"+state;
+ }
}
Modified: jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -80,7 +80,8 @@
if("yes".equals( btnID) )
{
ProcessInstance instance = row2InstanceMap.get(row);
- String url = view.getRestURL().getRemoveInstanceURL(instance.getInstanceId());
+ instance.setState(ProcessInstance.STATE.ENDED);
+ String url = view.getRestURL().getStateChangeURL(instance.getInstanceId(), instance.getState());
RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, url);
try
Modified: jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -21,23 +21,26 @@
*/
package org.jboss.bpm.console.client.process;
+import com.google.gwt.http.client.*;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Function;
+import com.gwtext.client.core.Position;
+import com.gwtext.client.data.Record;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.PaddedPanel;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.form.DateField;
+import com.gwtext.client.widgets.form.FieldSet;
+import com.gwtext.client.widgets.form.FormPanel;
+import com.gwtext.client.widgets.form.TextField;
+import com.gwtext.client.widgets.grid.RowSelectionModel;
+import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
import org.jboss.bpm.console.client.ConsoleView;
import org.jboss.bpm.console.client.model.ProcessDefinition;
import org.jboss.bpm.console.client.model.ProcessInstance;
import org.jboss.bpm.console.client.widgets.EditorView;
import org.jboss.bpm.console.client.widgets.UIConstants;
-import com.gwtext.client.widgets.form.FieldSet;
-import com.gwtext.client.widgets.form.TextField;
-import com.gwtext.client.widgets.form.DateField;
-import com.gwtext.client.widgets.form.FormPanel;
-import com.gwtext.client.widgets.PaddedPanel;
-import com.gwtext.client.widgets.Panel;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.grid.RowSelectionModel;
-import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
-import com.gwtext.client.core.Position;
-import com.gwtext.client.core.Function;
-import com.gwtext.client.data.Record;
/**
* @author Heiko.Braun <heiko.braun at jboss.com>
@@ -48,21 +51,25 @@
{
private ProcessDefinition parent;
+ private ProcessInstance selectedInstance;
+ private ConsoleView view;
+ private ProcessInstanceList instanceList;
public ProcessInstanceListEditor(ProcessDefinition proc, ConsoleView view)
{
super();
+ this.view = view;
this.setId(ProcessInstanceEditor.ID+"."+proc.getName());
parent = proc;
// ---------------
- ProcessInstanceList list = new ProcessInstanceList(
+ instanceList = new ProcessInstanceList(
proc, "Process Instances", view
);
- this.add(list);
+ this.add(instanceList);
// ---------------
@@ -100,9 +107,29 @@
formPanel.add(inner);
- final Button suspendButton = new Button("Suspend");
- final Button resumeButton = new Button("Resume");
+ final Button suspendButton = new Button("Suspend",
+ new ButtonListenerAdapter()
+ {
+ public void onClick(Button button, EventObject eventObject)
+ {
+ selectedInstance.setState(ProcessInstance.STATE.SUSPENDED);
+ persistStateChange();
+ }
+ }
+ );
+ final Button resumeButton = new Button("Resume",
+ new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ selectedInstance.setState(ProcessInstance.STATE.RUNNING);
+ persistStateChange();
+ }
+ }
+ );
+
formPanel.addButton(suspendButton);
formPanel.addButton(resumeButton);
@@ -114,8 +141,8 @@
{
public void onRowSelect(RowSelectionModel sm, int rowIndex, Record record)
{
- ProcessInstance pi = ProcessInstanceList.transform(record);
- if(pi.isSuspended())
+ selectedInstance = ProcessInstanceList.transform(record);
+ if(selectedInstance.isSuspended())
{
suspendButton.disable();
resumeButton.enable();
@@ -131,10 +158,10 @@
}
}
);
- list.getGrid().setSelectionModel(sm);
+ instanceList.getGrid().setSelectionModel(sm);
//select the first row after a little delay so that the rows are rendered
- list.getGrid().doOnRender(
+ instanceList.getGrid().doOnRender(
new Function()
{
public void execute() {
@@ -148,7 +175,40 @@
}
+ private void persistStateChange()
+ {
+ RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, view.getRestURL().getStateChangeURL(
+ selectedInstance.getInstanceId(), selectedInstance.getState())
+ );
+ try
+ {
+ rb.sendRequest(null,
+ new RequestCallback() {
+
+ public void onResponseReceived(Request request, Response response)
+ {
+ // success
+ instanceList.reloadStore();
+ selectedInstance = null;
+ }
+
+ public void onError(Request request, Throwable t)
+ {
+ // Unknown error
+ view.setError(t.getMessage());
+ t.printStackTrace(System.out);
+ }
+ });
+ }
+ catch (RequestException e1)
+ {
+ view.setError(e1.getMessage());
+ e1.printStackTrace();
+ }
+ }
+
+
public String getEditorId()
{
return getId();
Modified: jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/widgets/RemoteListView.java
===================================================================
--- jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/widgets/RemoteListView.java 2008-10-16 09:53:22 UTC (rev 2552)
+++ jbpm3/trunk/modules/gwt-console/war/src/main/java/org/jboss/bpm/console/client/widgets/RemoteListView.java 2008-10-16 10:53:31 UTC (rev 2553)
@@ -236,7 +236,7 @@
return grid;
}
- protected void reloadStore()
+ public void reloadStore()
{
store.load(0,PAGE_SIZE);
}
More information about the jbpm-commits
mailing list