[jboss-svn-commits] JBL Code SVN: r18469 - in labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse: flow/common/editor/editpart and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Feb 12 18:32:13 EST 2008


Author: KrisVerlaenen
Date: 2008-02-12 18:32:13 -0500 (Tue, 12 Feb 2008)
New Revision: 18469

Added:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/SampleCustomEditor.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/WorkEditor.java
Modified:
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementEditPart.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java
Log:
JBRULES-1465: RuleFlow work items should allow plugging in custom editors
 - Double clicking a work item node opens custom WorkEditor

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java	2008-02-12 22:41:00 UTC (rev 18468)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/WorkItemDefinitions.java	2008-02-12 23:32:13 UTC (rev 18469)
@@ -23,6 +23,7 @@
         emailDefinition.addParameter(new ParameterDefinitionImpl("Text", new StringDataType()));
         emailDefinition.setDisplayName("Email");
         emailDefinition.setIcon("icons/import_statement.gif");
+        emailDefinition.setCustomEditor("org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor");
         addWorkDefinition(emailDefinition);
         // Log
         WorkDefinitionExtensionImpl logDefinition = new WorkDefinitionExtensionImpl();

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementEditPart.java	2008-02-12 22:41:00 UTC (rev 18468)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/ElementEditPart.java	2008-02-12 23:32:13 UTC (rev 18469)
@@ -118,11 +118,17 @@
     public void performRequest(Request request) {
         if (request.getType() == RequestConstants.REQ_DIRECT_EDIT) {
             performDirectEdit();
+        } if (request.getType() == RequestConstants.REQ_OPEN) {
+            doubleClicked();
         } else {
             super.performRequest(request);
         }
     }
     
+    protected void doubleClicked() {
+        // do nothing
+    }
+    
     private void performDirectEdit() {
         if (manager == null) {
             manager = new ElementDirectEditManager(this, TextCellEditor.class,

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/SampleCustomEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/SampleCustomEditor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/SampleCustomEditor.java	2008-02-12 23:32:13 UTC (rev 18469)
@@ -0,0 +1,98 @@
+package org.drools.eclipse.flow.common.editor.editpart.work;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.process.core.ParameterDefinition;
+import org.drools.process.core.Work;
+import org.drools.process.core.WorkDefinition;
+import org.drools.process.core.impl.WorkImpl;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * Custom Work editor that can handle work definitions that only have
+ * String parameters.
+ * 
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class SampleCustomEditor extends EditBeanDialog implements WorkEditor {
+
+    private WorkDefinition workDefinition;
+    private Map<String, Text> texts = new HashMap<String, Text>(); 
+    
+    public SampleCustomEditor(Shell parentShell) {
+        super(parentShell, "Custom Work Editor");
+    }
+    
+    protected Control createDialogArea(Composite parent) {
+        Composite composite = (Composite) super.createDialogArea(parent);
+        GridLayout gridLayout = new GridLayout();
+        gridLayout.numColumns = 2;
+        composite.setLayout(gridLayout);
+        
+        Work work = (Work) getValue();
+        
+        Label nameLabel = new Label(composite, SWT.NONE);
+        nameLabel.setText("Name: ");
+        Text nameText = new Text(composite, SWT.NONE);
+        nameText.setEditable(false);
+        GridData gridData = new GridData();
+        gridData.grabExcessHorizontalSpace = true;
+        gridData.horizontalAlignment = GridData.FILL;
+        nameText.setLayoutData(gridData);
+        String name = work.getName();
+        nameText.setText(name == null ? "" : name);
+        
+        Set<ParameterDefinition> parameters = workDefinition.getParameters();
+        for (ParameterDefinition param: parameters) {
+            Label label = new Label(composite, SWT.NONE);
+            label.setText(param.getName() + ": ");
+            Text text = new Text(composite, SWT.NONE);
+            gridData = new GridData();
+            gridData.grabExcessHorizontalSpace = true;
+            gridData.horizontalAlignment = GridData.FILL;
+            text.setLayoutData(gridData);
+            texts.put(param.getName(), text);
+            Object value = work.getParameter(param.getName());
+            text.setText(value == null ? "" : value.toString());
+        }
+        
+        return composite;
+    }
+    
+    protected Object updateValue(Object value) {
+        Work work = new WorkImpl();
+        work.setName(((Work) value).getName());
+        for (Map.Entry<String, Text> entry: texts.entrySet()) {
+            String text = entry.getValue().getText();
+            work.setParameter(entry.getKey(), "".equals(text) ? null : text);
+        }
+        return work;
+    }
+        
+    public Work getWork() {
+        return (Work) getValue();
+    }
+
+    public void setWork(Work work) {
+        setValue(work);
+    }
+
+    public void setWorkDefinition(WorkDefinition workDefinition) {
+        this.workDefinition = workDefinition;
+    }
+
+    public void show() {
+        open();
+    }
+
+}

Added: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/WorkEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/WorkEditor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/common/editor/editpart/work/WorkEditor.java	2008-02-12 23:32:13 UTC (rev 18469)
@@ -0,0 +1,16 @@
+package org.drools.eclipse.flow.common.editor.editpart.work;
+
+import org.drools.process.core.Work;
+import org.drools.process.core.WorkDefinition;
+
+public interface WorkEditor {
+    
+    void setWorkDefinition(WorkDefinition definition);
+    
+    void setWork(Work work);
+    
+    void show();
+    
+    Work getWork();
+
+}

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java	2008-02-12 22:41:00 UTC (rev 18468)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/WorkItemEditPart.java	2008-02-12 23:32:13 UTC (rev 18469)
@@ -15,13 +15,17 @@
  * limitations under the License.
  */
 
+import java.lang.reflect.Constructor;
+
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.WorkItemDefinitions;
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
 import org.drools.eclipse.flow.common.editor.editpart.figure.ElementFigure;
+import org.drools.eclipse.flow.common.editor.editpart.work.WorkEditor;
 import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
 import org.drools.process.core.WorkDefinition;
 import org.drools.process.core.WorkDefinitionExtension;
+import org.drools.workflow.core.node.WorkItemNode;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.RoundedRectangle;
 import org.eclipse.draw2d.geometry.Dimension;
@@ -29,6 +33,7 @@
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
 
 /**
  * EditPart for a Task node.
@@ -38,11 +43,12 @@
 public class WorkItemEditPart extends ElementEditPart {
 
     private static final Color color = new Color(Display.getCurrent(), 255, 250, 205);
+
+    private transient WorkDefinition workDefinition;
     
     protected IFigure createFigure() {
         String icon = null;
-        String taskName = ((WorkItemWrapper) getElementWrapper()).getWorkItemNode().getWork().getName();
-        WorkDefinition workDefinition = WorkItemDefinitions.getWorkDefinition(taskName);
+        WorkDefinition workDefinition = getWorkDefinition();
         if (workDefinition instanceof WorkDefinitionExtension) {
             icon = ((WorkDefinitionExtension) workDefinition).getIcon();
         }
@@ -52,6 +58,42 @@
         return new TaskNodeFigure(icon);
     }
     
+    private WorkDefinition getWorkDefinition() {
+        if (this.workDefinition == null) {
+            String taskName = ((WorkItemWrapper) getElementWrapper()).getWorkItemNode().getWork().getName();
+            this.workDefinition = WorkItemDefinitions.getWorkDefinition(taskName);
+        }
+        return workDefinition;
+    }
+    
+    protected void doubleClicked() {
+        super.doubleClicked();
+        // open custom editor pane if one exists
+        WorkDefinition workDefinition = getWorkDefinition();
+        if (workDefinition instanceof WorkDefinitionExtension) {
+            String editor = ((WorkDefinitionExtension) workDefinition).getCustomEditor();
+            if (editor != null) {
+                openEditor(editor, workDefinition);
+            }
+        }
+    }
+    
+    private void openEditor(String editorClassName, WorkDefinition workDefinition) {
+        try {
+            Class<WorkEditor> editorClass = 
+                (Class<WorkEditor>) Class.forName(editorClassName);
+            Constructor<WorkEditor> constructor = editorClass.getConstructor(Shell.class);
+            WorkEditor editor = constructor.newInstance(getViewer().getControl().getShell());
+            editor.setWorkDefinition(workDefinition);
+            WorkItemNode workItemNode = ((WorkItemWrapper) getElementWrapper()).getWorkItemNode();
+            editor.setWork(workItemNode.getWork());
+            editor.show();
+            workItemNode.setWork(editor.getWork());
+        } catch (Throwable t) {
+            DroolsEclipsePlugin.log(t);
+        }
+    }
+    
     public static class TaskNodeFigure extends ElementFigure {
         
         public TaskNodeFigure(String icon) {




More information about the jboss-svn-commits mailing list