[jbpm-commits] JBoss JBPM SVN: r2895 - in projects/gwt-console/trunk: rpc/src/main/java/org/jboss/bpm/console/server/gson and 4 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Wed Nov 12 15:07:07 EST 2008
Author: heiko.braun at jboss.com
Date: 2008-11-12 15:07:07 -0500 (Wed, 12 Nov 2008)
New Revision: 2895
Modified:
projects/gwt-console/trunk/rpc/src/main/java/org/jboss/bpm/console/client/model/jbpm3/TokenReference.java
projects/gwt-console/trunk/rpc/src/main/java/org/jboss/bpm/console/server/gson/GsonFactory.java
projects/gwt-console/trunk/server/src/main/java/org/jboss/bpm/console/server/dao/internal/Transform.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/model/DTOParser.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java
projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONWalk.java
Log:
Offer available signals when working on tokens
Modified: projects/gwt-console/trunk/rpc/src/main/java/org/jboss/bpm/console/client/model/jbpm3/TokenReference.java
===================================================================
--- projects/gwt-console/trunk/rpc/src/main/java/org/jboss/bpm/console/client/model/jbpm3/TokenReference.java 2008-11-12 16:51:13 UTC (rev 2894)
+++ projects/gwt-console/trunk/rpc/src/main/java/org/jboss/bpm/console/client/model/jbpm3/TokenReference.java 2008-11-12 20:07:07 UTC (rev 2895)
@@ -24,6 +24,8 @@
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Set;
import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
/**
* @author Heiko.Braun <heiko.braun at jboss.com>
@@ -32,15 +34,43 @@
public class TokenReference
{
private long id;
+ private String name;
+
+ private String currentNodeName;
+
private Set<TokenReference> children = new HashSet<TokenReference>();
+ private List<String> availableSignals = new ArrayList<String>();
- public TokenReference(long id)
+ public TokenReference(long id, String name, String nodeName)
{
this.id = id;
+ this.name = name!=null ? name : "";
+ this.currentNodeName = nodeName;
}
+ public long getId()
+ {
+ return id;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
public Set<TokenReference> getChildren()
{
return children;
}
+
+ public List<String> getAvailableSignals()
+ {
+ return availableSignals;
+ }
+
+ public String getCurrentNodeName()
+ {
+ return currentNodeName;
+ }
+
}
Modified: projects/gwt-console/trunk/rpc/src/main/java/org/jboss/bpm/console/server/gson/GsonFactory.java
===================================================================
--- projects/gwt-console/trunk/rpc/src/main/java/org/jboss/bpm/console/server/gson/GsonFactory.java 2008-11-12 16:51:13 UTC (rev 2894)
+++ projects/gwt-console/trunk/rpc/src/main/java/org/jboss/bpm/console/server/gson/GsonFactory.java 2008-11-12 20:07:07 UTC (rev 2895)
@@ -32,7 +32,7 @@
public static Gson createInstance()
{
Gson gson = new GsonBuilder()
- .setDateFormat("y-M-d HH:mm:ss")
+ .setDateFormat("yyyy-M-d HH:mm:ss")
.registerTypeAdapter(java.sql.Timestamp.class, new SQLDateTypeAdapter())
.create();
return gson;
Modified: projects/gwt-console/trunk/server/src/main/java/org/jboss/bpm/console/server/dao/internal/Transform.java
===================================================================
--- projects/gwt-console/trunk/server/src/main/java/org/jboss/bpm/console/server/dao/internal/Transform.java 2008-11-12 16:51:13 UTC (rev 2894)
+++ projects/gwt-console/trunk/server/src/main/java/org/jboss/bpm/console/server/dao/internal/Transform.java 2008-11-12 20:07:07 UTC (rev 2895)
@@ -61,7 +61,7 @@
private static TokenReference tokenReference(Token t0)
{
- TokenReference rootToken = new TokenReference(t0.getId());
+ TokenReference token = new TokenReference(t0.getId(), t0.getName(), t0.getNode().getName());
Map children = t0.getChildren();
if(children!=null)
@@ -69,10 +69,18 @@
for(Object o : children.values())
{
Token t1 = (Token)o;
- rootToken.getChildren().add( Transform.tokenReference(t1) );
+ token.getChildren().add( Transform.tokenReference(t1) );
}
}
- return rootToken;
+
+ // signals
+ for(Object tr0 : t0.getNode().getLeavingTransitionsList())
+ {
+ Transition transition = (Transition)tr0;
+ token.getAvailableSignals().add(transition.getName());
+ }
+
+ return token;
}
public static void doTransition(org.jbpm.graph.exe.ProcessInstance p0, String nextState)
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/model/DTOParser.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/model/DTOParser.java 2008-11-12 16:51:13 UTC (rev 2894)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/model/DTOParser.java 2008-11-12 20:07:07 UTC (rev 2895)
@@ -24,6 +24,7 @@
import com.google.gwt.json.client.*;
import org.jboss.bpm.console.client.model.forms.FieldDef;
import org.jboss.bpm.console.client.model.forms.FormDef;
+import org.jboss.bpm.console.client.model.jbpm3.TokenReference;
import org.jboss.bpm.console.client.util.JSONWalk;
import java.util.ArrayList;
@@ -179,6 +180,7 @@
public static ProcessInstance parseProcessInstance(JSONObject root)
{
+ //Log.debug("parse " + root);
long id = JSONWalk.on(root).next("instanceId").asLong();
long parentId = JSONWalk.on(root).next("parentId").asLong();
@@ -191,10 +193,44 @@
boolean suspended = JSONWalk.on(root).next("suspended").asBool();
- return new ProcessInstance(
+ ProcessInstance processInstance = new ProcessInstance(
id, parentId,
start, end,
suspended
);
+
+ // tokens
+ JSONObject tokJso = JSONWalk.on(root).next("rootToken").asObject();
+ TokenReference rootToken = parseTokenReference(tokJso);
+ processInstance.setRootToken(rootToken);
+ return processInstance;
}
+
+ public static TokenReference parseTokenReference(JSONObject jso)
+ {
+ long rootTokenId = JSONWalk.on(jso).next("id").asLong();
+ String name = JSONWalk.on(jso).next("name").asString();
+ String nodeName = JSONWalk.on(jso).next("currentNodeName").asString();
+ TokenReference rt = new TokenReference(rootTokenId, name, nodeName);
+
+ JSONArray signals = JSONWalk.on(jso).next("availableSignals").asArray();
+ for(int i=0; i<signals.size(); i++)
+ {
+ JSONValue jsonValue = signals.get(i);
+ if(jsonValue.toString().equals("null"))
+ continue; // TODO: JBPM-1828
+ JSONString item = jsonValue.isString();
+ rt.getAvailableSignals().add(item.stringValue());
+ }
+
+ JSONArray childArr = JSONWalk.on(jso).next("children").asArray();
+ for(int i=0; i<childArr.size(); i++)
+ {
+ JSONObject item = childArr.get(i).isObject();
+ rt.getChildren().add(parseTokenReference(item));
+ }
+
+ return rt;
+ }
+
}
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java 2008-11-12 16:51:13 UTC (rev 2894)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceList.java 2008-11-12 20:07:07 UTC (rev 2895)
@@ -48,7 +48,7 @@
private Map<Integer, ProcessInstance> row2InstanceMap = new HashMap<Integer, ProcessInstance>();
private ProcessDefinition parent;
- private static final String DATE_FORMAT = "y-m-j H:i:s"; //08-10-02 13:51:27
+ private static final String DATE_FORMAT = "yyyy-m-j H:i:s"; //08-10-02 13:51:27
public ProcessInstanceList(ProcessDefinition procDef, String titleName, MainView view)
{
@@ -178,13 +178,6 @@
public static ProcessInstance transform(Record r)
{
- /*ProcessInstance processInstance = new ProcessInstance(
- Long.valueOf(r.getAsString("instanceId")),
- Long.valueOf( r.getAsString("parentId")),
- r.getAsDate("startDate"),
- r.getAsDate("endDate"),
- r.getAsBoolean("suspended"));*/
-
ProcessInstance processInstance = null;
try
{
@@ -210,7 +203,7 @@
//new ColumnConfig("Key", "key", 50, true),
new ColumnConfig("State", "state", 100, true, null, "expand"),
new ColumnConfig("Start Date", "startDate", 125, true, new DateRenderer("startDate")),
- new ColumnConfig("End Date", "endDate", 125, true, new DateRenderer("endDate"))
+ //new ColumnConfig("End Date", "endDate", 125, true, new DateRenderer("endDate"))
}
);
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java 2008-11-12 16:51:13 UTC (rev 2894)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java 2008-11-12 20:07:07 UTC (rev 2895)
@@ -23,31 +23,34 @@
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.http.client.*;
+import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.user.client.ui.ListBox;
import com.gwtext.client.core.EventObject;
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.TabPanel;
+import com.gwtext.client.data.*;
+import com.gwtext.client.widgets.*;
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.form.*;
import com.gwtext.client.widgets.grid.RowSelectionModel;
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
import com.gwtext.client.widgets.layout.ColumnLayout;
import com.gwtext.client.widgets.layout.ColumnLayoutData;
-import com.gwtext.client.widgets.layout.FormLayout;
import org.jboss.bpm.console.client.Editor;
import org.jboss.bpm.console.client.MainView;
import org.jboss.bpm.console.client.UIConstants;
import org.jboss.bpm.console.client.model.ProcessDefinition;
import org.jboss.bpm.console.client.model.ProcessInstance;
+import org.jboss.bpm.console.client.model.DTOParser;
+import org.jboss.bpm.console.client.model.jbpm3.TokenReference;
+import org.jboss.bpm.console.client.util.JSONWalk;
import org.jboss.bpm.console.client.widgets.HelpPanel;
import org.jboss.bpm.console.client.widgets.TeaserPanel;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Set;
+
/**
* @author Heiko.Braun <heiko.braun at jboss.com>
*
@@ -55,12 +58,20 @@
*/
public class ProcessInstanceListEditor extends Editor
{
-
+ private MainView view;
private ProcessDefinition parent;
- private ProcessInstance selectedInstance;
- private MainView view;
private ProcessInstanceList instanceList;
+ private FormPanel tokenForm;
+ private Button signalButton;
+ final ArrayReader reader = new ArrayReader(new RecordDef(
+ new FieldDef[]{
+ new StringFieldDef("signal")
+ }
+ ));
+
+ private ProcessInstance selectedInstance;
+
public ProcessInstanceListEditor(ProcessDefinition proc, MainView view)
{
super();
@@ -80,32 +91,33 @@
leftHand.setFrame(false);
leftHand.setHeader(false);
leftHand.setBorder(false);
-
+
instanceList = new ProcessInstanceList(
- proc, "Process Instances", view
+ proc, "Process Instances", view
);
// ---------------
TabPanel tabPanel = new TabPanel();
tabPanel.setPaddings(10);
- tabPanel.setPlain(true);
+ tabPanel.setPlain(true);
tabPanel.setActiveTab(0);
tabPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
- PaddedPanel tabPadding = new PaddedPanel(tabPanel, 0,10,0,10);
+ PaddedPanel tabPadding = new PaddedPanel(tabPanel, 0,10,0,10);
// ----------------------------------------
Panel detailsForm = assembleDetailsForm();
-
+ Panel tokenForm = assembleTokenForm();
- tabPanel.add(detailsForm);
- tabPanel.add( new Panel("Advanced") );
+ tabPanel.add( detailsForm );
+ tabPanel.add( tokenForm );
+
// ----------------------------------
-
- HelpPanel help = new HelpPanel(UIConstants.TEASER_PANEL_WIDTH, 200, "Managing process instances");
+ HelpPanel help = new HelpPanel(UIConstants.TEASER_PANEL_WIDTH, 200, "Managing process instances");
+
TeaserPanel teaserPanel = new TeaserPanel();
teaserPanel.add(help);
@@ -113,12 +125,77 @@
leftHand.add(instanceList);
leftHand.add(tabPadding);
-
+
this.add(leftHand, new ColumnLayoutData(0.7) );
- this.add(teaserPanel , new ColumnLayoutData(0.3) );
+ this.add(teaserPanel , new ColumnLayoutData(0.3) );
}
+ private Panel assembleTokenForm()
+ {
+ Panel outerFormPanel = new Panel();
+ outerFormPanel.setTitle("Tokens");
+ outerFormPanel.setBorder(false);
+ outerFormPanel.setFrame(false);
+
+ tokenForm = createBaseFormPanel();
+
+ TextField idField = new TextField("Id", "id", 230);
+ idField.setReadOnly(true);
+ tokenForm.add(idField);
+
+ //tokenForm.add(new TextField("Token Name", "name", 230));
+ TextField nameField = new TextField("Current Node Name", "nodeName", 230);
+ nameField.setReadOnly(true);
+ tokenForm.add(nameField);
+
+
+ MemoryProxy dataProxy = createMemoryProxy(new ArrayList<String>());
+ Store store = new Store(dataProxy, reader);
+ store.load();
+
+ ComboBox cb = new ComboBox();
+ cb.setFieldLabel("Signal");
+ cb.setHiddenName("signal");
+ cb.setStore(store);
+ cb.setDisplayField("signal");
+ cb.setMode(ComboBox.LOCAL);
+ cb.setTriggerAction(ComboBox.ALL);
+ cb.setEmptyText("");
+ cb.setSelectOnFocus(true);
+ cb.setWidth(190);
+ cb.setEditable(false);
+ tokenForm.add(cb);
+
+ signalButton = new Button("Signal",
+ new ButtonListenerAdapter()
+ {
+
+ public void onClick(Button button, EventObject eventObject)
+ {
+ ComboBox cb = (ComboBox)tokenForm.getForm().findField("signal");
+ String signalValue = cb.getValueAsString();
+ if(signalValue.equals(""))
+ MessageBox.alert("Please select a signal");
+ else
+ Log.debug("Singal -> " + signalValue); // TODO: integration
+ }
+ }
+ );
+
+ tokenForm.addButton(signalButton);
+ outerFormPanel.add(tokenForm);
+
+ return outerFormPanel;
+ }
+
+ private MemoryProxy createMemoryProxy(List signals)
+ {
+ return new MemoryProxy(
+ new Object[][]{ signals.toArray()}
+ );
+ }
+
private Panel assembleDetailsForm()
{
// ---------------
@@ -130,14 +207,7 @@
// ---------------
- final FormPanel detailsForm = new FormPanel();
- detailsForm.setLabelAlign(Position.LEFT);
- detailsForm.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
- detailsForm.setHeader(false);
- detailsForm.setFrame(false);
- detailsForm.setBorder(false);
- detailsForm.setPaddings(5, 5, 5, 0);
- detailsForm.setLabelWidth(120);
+ final FormPanel detailsForm = createBaseFormPanel();
// ---------------
@@ -145,30 +215,30 @@
detailsForm.add(new TextField("Key", "key", 230));
detailsForm.add(new TextField("State", "state", 230));
detailsForm.add(new DateField("Start Date", "startDate", 230));
- detailsForm.add(new DateField("End Date", "endDate", 230));
+ //detailsForm.add(new DateField("End Date", "endDate", 230));
final Button suspendButton = new Button("Suspend",
- new ButtonListenerAdapter()
- {
+ new ButtonListenerAdapter()
+ {
- public void onClick(Button button, EventObject eventObject)
- {
- selectedInstance.setState(ProcessInstance.STATE.SUSPENDED);
- persistStateChange();
- }
- }
+ public void onClick(Button button, EventObject eventObject)
+ {
+ selectedInstance.setState(ProcessInstance.STATE.SUSPENDED);
+ persistStateChange();
+ }
+ }
);
final Button resumeButton = new Button("Resume",
- new ButtonListenerAdapter()
- {
+ new ButtonListenerAdapter()
+ {
- public void onClick(Button button, EventObject eventObject)
- {
- selectedInstance.setState(ProcessInstance.STATE.RUNNING);
- persistStateChange();
- }
- }
+ public void onClick(Button button, EventObject eventObject)
+ {
+ selectedInstance.setState(ProcessInstance.STATE.RUNNING);
+ persistStateChange();
+ }
+ }
);
detailsForm.addButton(suspendButton);
@@ -178,26 +248,30 @@
final RowSelectionModel sm = new RowSelectionModel(true);
sm.addListener(
- new RowSelectionListenerAdapter()
- {
- public void onRowSelect(RowSelectionModel sm, int rowIndex, Record record)
- {
- selectedInstance = ProcessInstanceList.transform(record);
- if(selectedInstance.isSuspended())
- {
- suspendButton.disable();
- resumeButton.enable();
- }
- else
- {
- resumeButton.disable();
- suspendButton.enable();
- }
+ new RowSelectionListenerAdapter()
+ {
+ public void onRowSelect(RowSelectionModel sm, int rowIndex, Record record)
+ {
+ selectedInstance = ProcessInstanceList.transform(record);
- detailsForm.getForm().loadRecord(record);
- detailsForm.doLayout();
- }
- }
+ if(selectedInstance.isSuspended())
+ {
+ suspendButton.disable();
+ resumeButton.enable();
+ }
+ else
+ {
+ resumeButton.disable();
+ suspendButton.enable();
+ }
+
+ detailsForm.getForm().loadRecord(record);
+ detailsForm.doLayout();
+
+ // token form update
+ populateTokenForm(selectedInstance);
+ }
+ }
);
instanceList.setRowSelectionModel(sm);
@@ -205,30 +279,73 @@
return outerFormPanel;
}
+ /**
+ * on row selection callback
+ */
+ private void populateTokenForm(ProcessInstance selectedInstance)
+ {
+ TokenReference tok = selectedInstance.getRootToken();
+ Form form = tokenForm.getForm();
+
+ if(form.findField("id")!=null) // TODO: the fields are not initialized on first callback?
+ {
+ form.findField("id").setRawValue(tok.getId()+"");
+ form.findField("nodeName").setRawValue(tok.getCurrentNodeName());
+
+ // refresh combo box
+ ComboBox cb = (ComboBox)form.findField("signal");
+ cb.reset();
+
+ MemoryProxy dataProxy = createMemoryProxy(tok.getAvailableSignals());
+ Store store = new Store(dataProxy, reader);
+ store.load();
+ cb.setStore(store);
+
+ // suspended instances cannot be signaled
+ if(selectedInstance.isSuspended())
+ signalButton.disable();
+ else
+ signalButton.enable();
+ }
+ }
+
+ private FormPanel createBaseFormPanel()
+ {
+ final FormPanel detailsForm = new FormPanel();
+ detailsForm.setLabelAlign(Position.LEFT);
+ detailsForm.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+ detailsForm.setHeader(false);
+ detailsForm.setFrame(false);
+ detailsForm.setBorder(false);
+ detailsForm.setPaddings(5, 5, 5, 0);
+ detailsForm.setLabelWidth(120);
+ return detailsForm;
+ }
+
private void persistStateChange()
{
RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, view.getUrlBuilder().getStateChangeURL(
- selectedInstance.getInstanceId(), selectedInstance.getState())
+ selectedInstance.getInstanceId(), selectedInstance.getState())
);
try
{
rb.sendRequest(null,
- new RequestCallback() {
+ new RequestCallback() {
- public void onResponseReceived(Request request, Response response)
- {
- // testSuccess
- instanceList.reloadStore();
- selectedInstance = null;
- }
+ public void onResponseReceived(Request request, Response response)
+ {
+ // testSuccess
+ instanceList.reloadStore();
+ selectedInstance = null;
+ }
- public void onError(Request request, Throwable t)
- {
- // Unknown error
- Log.error("Unknown error", t);
- }
- });
+ public void onError(Request request, Throwable t)
+ {
+ // Unknown error
+ Log.error("Unknown error", t);
+ }
+ });
}
catch (RequestException e1)
{
Modified: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONWalk.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONWalk.java 2008-11-12 16:51:13 UTC (rev 2894)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/util/JSONWalk.java 2008-11-12 20:07:07 UTC (rev 2895)
@@ -21,16 +21,15 @@
*/
package org.jboss.bpm.console.client.util;
+import com.google.gwt.json.client.JSONArray;
+import com.google.gwt.json.client.JSONException;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONValue;
-import com.google.gwt.json.client.JSONException;
-import com.google.gwt.json.client.JSONArray;
+import org.jboss.bpm.console.client.model.util.SimpleDateFormat;
+import java.util.Date;
import java.util.Iterator;
-import java.util.Date;
-import org.jboss.bpm.console.client.model.util.SimpleDateParser;
-
/**
* @author Heiko.Braun <heiko.braun at jboss.com>
*/
@@ -148,7 +147,8 @@
{
if(value.isString()!=null)
{
- return SimpleDateParser.parse(value.isString().stringValue(), "dd-MM-yy HH:mm:ss");
+ SimpleDateFormat df = new SimpleDateFormat();
+ return df.parse(value.isString().stringValue());
}
else
{
More information about the jbpm-commits
mailing list