[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