[jbpm-commits] JBoss JBPM SVN: r2896 - in projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client: widgets and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Nov 12 16:42:38 EST 2008


Author: heiko.braun at jboss.com
Date: 2008-11-12 16:42:38 -0500 (Wed, 12 Nov 2008)
New Revision: 2896

Added:
   projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TokenEditor.java
   projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TokenForm.java
Modified:
   projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java
Log:
Refactor token management into dedicated TokenEditor (sweet)

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 20:07:07 UTC (rev 2895)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/process/ProcessInstanceListEditor.java	2008-11-12 21:42:38 UTC (rev 2896)
@@ -23,14 +23,17 @@
 
 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.*;
-import com.gwtext.client.widgets.*;
+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.widgets.event.ButtonListenerAdapter;
-import com.gwtext.client.widgets.form.*;
+import com.gwtext.client.widgets.form.DateField;
+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 com.gwtext.client.widgets.layout.ColumnLayout;
@@ -40,17 +43,11 @@
 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 org.jboss.bpm.console.client.widgets.TokenEditor;
 
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Set;
-
 /**
  * @author Heiko.Braun <heiko.braun at jboss.com>
  *
@@ -62,14 +59,7 @@
    private ProcessDefinition parent;
    private ProcessInstanceList instanceList;
 
-   private FormPanel tokenForm;
-   private Button signalButton;
-   final ArrayReader reader = new ArrayReader(new RecordDef(
-         new FieldDef[]{
-               new StringFieldDef("signal")
-         }
-   ));
-
+   private Panel tokenEditorPanel;
    private ProcessInstance selectedInstance;
 
    public ProcessInstanceListEditor(ProcessDefinition proc, MainView view)
@@ -109,10 +99,10 @@
       // ----------------------------------------
 
       Panel detailsForm = assembleDetailsForm();
-      Panel tokenForm = assembleTokenForm();
+      tokenEditorPanel = new Panel("Tokens");      
 
       tabPanel.add( detailsForm );
-      tabPanel.add( tokenForm );
+      tabPanel.add(tokenEditorPanel);
 
       // ----------------------------------
 
@@ -131,71 +121,6 @@
 
    }
 
-   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()
    {
       // ---------------
@@ -268,8 +193,20 @@
                   detailsForm.getForm().loadRecord(record);
                   detailsForm.doLayout();
 
+                  TokenEditor.SignalCallback callback = new TokenEditor.SignalCallback()
+                  {
+                     public void onSignalToken(TokenReference tok, String signal)
+                     {
+                        Log.debug("signal -> " +signal );
+                     }
+                  };
+
                   // token form update
-                  populateTokenForm(selectedInstance);
+                  tokenEditorPanel.clear();
+                  tokenEditorPanel.add(   // TODO: LRU caching (i.e. last 5)
+                        new TokenEditor(selectedInstance, callback)
+                  );
+                  tokenEditorPanel.doLayout();
                }
             }
       );
@@ -279,47 +216,17 @@
       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;
+      final FormPanel formPanel = new FormPanel();
+      formPanel.setLabelAlign(Position.LEFT);
+      formPanel.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+      formPanel.setHeader(false);
+      formPanel.setFrame(false);
+      formPanel.setBorder(false);
+      formPanel.setPaddings(5, 5, 5, 0);
+      formPanel.setLabelWidth(120);
+      return formPanel;
    }
 
    private void persistStateChange()

Added: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TokenEditor.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TokenEditor.java	                        (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TokenEditor.java	2008-11-12 21:42:38 UTC (rev 2896)
@@ -0,0 +1,125 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.widgets;
+
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.data.Node;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.layout.HorizontalLayout;
+import com.gwtext.client.widgets.tree.TreeNode;
+import com.gwtext.client.widgets.tree.TreePanel;
+import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
+import org.jboss.bpm.console.client.model.ProcessInstance;
+import org.jboss.bpm.console.client.model.jbpm3.TokenReference;
+
+/**
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ */
+public class TokenEditor extends Panel
+{
+   
+   private TokenForm tokenForm;
+
+   public TokenEditor(final ProcessInstance instance, final SignalCallback callback)
+   {
+      super();
+
+      this.setHeader(false);
+      this.setBorder(false);
+      this.setFrame(false);
+
+      this.setLayout(new HorizontalLayout(10));
+
+      this.add( new TokenTree(instance.getRootToken(),
+            new TokenSelectionCallback()
+            {
+               public void onSelectedToken(TokenReference tok)
+               {                  
+                  // update form
+                  tokenForm.display(instance, tok);
+               }
+            }
+      ) );
+
+      tokenForm = new TokenForm(callback);
+      tokenForm.display(instance); // shows the root token
+      this.add(tokenForm);
+   }
+
+   class TokenTree extends TreePanel
+   {
+      private TokenSelectionCallback callback;
+
+      public TokenTree(final TokenReference rootToken,
+                       final TokenSelectionCallback callback)
+      {
+         this.callback = callback;
+
+         TreeNode outermost = new TreeNode("Tokens");
+         TreeNode rootNode = buildTreeNode(rootToken);
+         outermost.appendChild(rootNode);
+
+         buildChildNodes(rootNode, rootToken);
+
+         setRootVisible(true);
+         setRootNode(outermost);
+         outermost.setExpanded(true);
+      }
+
+      private void buildChildNodes(TreeNode parent, TokenReference rootToken)
+      {
+         for(final TokenReference childToken : rootToken.getChildren())
+         {
+            TreeNode child = buildTreeNode(childToken);
+            buildChildNodes(child, childToken); // recursive
+            parent.appendChild(child);
+         }
+      }
+
+      private TreeNode buildTreeNode(final TokenReference tok)
+      {
+         TreeNode treeNode = new TreeNode("Token " +tok.getId());
+         treeNode.setExpanded(true);
+         treeNode.addListener(
+               new TreeNodeListenerAdapter()
+               {
+                  public void onClick(Node node, EventObject eventObject)
+                  {
+                     callback.onSelectedToken(tok);
+                  }
+               }
+         );
+         return treeNode;
+      }
+   }
+
+   interface TokenSelectionCallback
+   {
+      void onSelectedToken(TokenReference tok);
+   }
+
+   public interface SignalCallback
+   {
+      void onSignalToken(TokenReference tok, String signal);
+   }
+}
+

Added: projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TokenForm.java
===================================================================
--- projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TokenForm.java	                        (rev 0)
+++ projects/gwt-console/trunk/war/src/main/java/org/jboss/bpm/console/client/widgets/TokenForm.java	2008-11-12 21:42:38 UTC (rev 2896)
@@ -0,0 +1,176 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.bpm.console.client.widgets;
+
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.Position;
+import com.gwtext.client.data.*;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.MessageBox;
+import com.gwtext.client.widgets.Panel;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtext.client.widgets.form.ComboBox;
+import com.gwtext.client.widgets.form.Form;
+import com.gwtext.client.widgets.form.FormPanel;
+import com.gwtext.client.widgets.form.TextField;
+import org.jboss.bpm.console.client.UIConstants;
+import org.jboss.bpm.console.client.model.ProcessInstance;
+import org.jboss.bpm.console.client.model.jbpm3.TokenReference;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Heiko.Braun <heiko.braun at jboss.com>
+ */
+public class TokenForm extends Panel
+{
+   private FormPanel tokenForm;
+   private Button signalButton;
+   final ArrayReader reader = new ArrayReader(new RecordDef(
+         new FieldDef[]{
+               new StringFieldDef("signal")
+         }
+   ));
+
+   private TokenReference lastSelectedToken;
+
+   public TokenForm(final TokenEditor.SignalCallback callback)
+   {
+      super();
+
+      this.setHeader(false);
+      this.setBorder(false);
+      this.setFrame(false);
+
+      tokenForm = new FormPanel();
+      tokenForm.setLabelAlign(Position.LEFT);
+      tokenForm.setWidth(UIConstants.EDITOR_PANEL_WIDTH);
+      tokenForm.setHeader(false);
+      tokenForm.setFrame(false);
+      tokenForm.setBorder(false);
+      tokenForm.setPaddings(5, 5, 5, 0);
+      tokenForm.setLabelWidth(120);
+
+      // ----------
+
+      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
+                     callback.onSignalToken(lastSelectedToken, signalValue);
+               }
+            }
+      );
+
+      tokenForm.addButton(signalButton);
+
+      // -------------------
+            
+      this.add(tokenForm);
+
+   }
+
+   /**
+    * display the root token
+    */
+   void display(ProcessInstance processInstance)
+   {
+      display(processInstance, processInstance.getRootToken());      
+   }
+
+   /**
+    * display a particular token
+    */
+   void display(ProcessInstance processInstance, TokenReference tok)
+   {      
+      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(processInstance.isSuspended())
+            signalButton.disable();
+         else
+            signalButton.enable();
+
+      }
+
+      // -----------
+
+
+      lastSelectedToken = tok;
+   }
+
+   private MemoryProxy createMemoryProxy(List signals)
+   {
+      return new MemoryProxy(
+            new Object[][]{ signals.toArray()}
+      );
+   }
+}




More information about the jbpm-commits mailing list