Author: koen.aers(a)jboss.com
Date: 2009-03-30 21:40:58 -0400 (Mon, 30 Mar 2009)
New Revision: 14385
Added:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/command/ChangePropertyCommand.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/AssignmentSection.java
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/plugin.xml
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editor/JpdlDeserializer.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editpart/ProcessNodeGraphicalEditPart.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/HumanTask.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/SequenceFlow.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/AdvancedSection.java
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/NameSection.java
Log:
support for assigment type, assignment expression and expression language in properties
view of human tasks
Modified: trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/plugin.xml
===================================================================
--- trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/plugin.xml 2009-03-31 01:39:48 UTC (rev
14384)
+++ trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/plugin.xml 2009-03-31 01:40:58 UTC (rev
14385)
@@ -244,6 +244,10 @@
id="org.jboss.tools.jpdl4.general"
label="General"/>
<propertyTab
+ category="general"
+ id="org.jboss.tools.jpdl4.assignment"
+ label="Assignment"/>
+ <propertyTab
afterTab="org.jboss.tools.jpdl4.general"
category="details"
id="org.jboss.tools.jpdl4.details"
@@ -277,6 +281,12 @@
<input type="org.jboss.tools.flow.jpdl4.model.ProcessNode"/>
<input type="org.jboss.tools.flow.jpdl4.model.Process"/>
</propertySection>
+ <propertySection
+ class="org.jboss.tools.flow.jpdl4.properties.AssignmentSection"
+ id="org.jboss.tools.jpdl4.assignment"
+ tab="org.jboss.tools.jpdl4.assignment">
+ <input type="org.jboss.tools.flow.jpdl4.model.HumanTask"/>
+ </propertySection>
</propertySections>
</extension>
<extension
Added:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/command/ChangePropertyCommand.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/command/ChangePropertyCommand.java
(rev 0)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/command/ChangePropertyCommand.java 2009-03-31
01:40:58 UTC (rev 14385)
@@ -0,0 +1,44 @@
+package org.jboss.tools.flow.jpdl4.command;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.ui.views.properties.IPropertySource;
+
+public class ChangePropertyCommand extends Command {
+
+ private IPropertySource target;
+ private Object newValue;
+ private Object oldValue;
+ private Object propertyId;
+
+
+ public void execute() {
+ if (oldValue == null) {
+ oldValue = target.getPropertyValue(propertyId);
+ }
+ target.setPropertyValue(propertyId, newValue);
+ }
+
+ public boolean canExecute() {
+ return target != null;
+ }
+
+ public void setPropertyId(Object propertyId) {
+ this.propertyId = propertyId;
+ }
+
+ public void setNewValue(Object newValue) {
+ this.newValue = newValue;
+ }
+
+ public void setOldValue(Object oldValue) {
+ this.oldValue = oldValue;
+ }
+
+ public void setTarget(IPropertySource target) {
+ this.target = target;
+ }
+
+ public void undo() {
+ target.setPropertyValue(propertyId, oldValue);
+ }
+}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editor/JpdlDeserializer.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editor/JpdlDeserializer.java 2009-03-31
01:39:48 UTC (rev 14384)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editor/JpdlDeserializer.java 2009-03-31
01:40:58 UTC (rev 14385)
@@ -233,7 +233,7 @@
private void addGraphics(ConnectionWrapper wrapper, Element element) {
String graphics = element.getAttribute("g");
- if (graphics != null) {
+ if (graphics != null && !"".equals(graphics)) {
int pos = graphics.lastIndexOf(':');
String labelInfo, bendpointInfo = null;
if (pos != -1) {
@@ -242,10 +242,10 @@
} else {
labelInfo = graphics;
}
- if (labelInfo != null) {
+ if (labelInfo != null && !"".equals(labelInfo)) {
addLabelInfo(wrapper, labelInfo);
}
- if (bendpointInfo != null) {
+ if (bendpointInfo != null && !"".equals(bendpointInfo)) {
addBendpointInfo(wrapper, bendpointInfo);
}
}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editpart/ProcessNodeGraphicalEditPart.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editpart/ProcessNodeGraphicalEditPart.java 2009-03-31
01:39:48 UTC (rev 14384)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/editpart/ProcessNodeGraphicalEditPart.java 2009-03-31
01:40:58 UTC (rev 14385)
@@ -12,6 +12,7 @@
protected void createEditPolicies() {
super.createEditPolicies();
+ removeEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE);
installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new
ProcessNodeGraphicalNodeEditPolicy());
}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/HumanTask.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/HumanTask.java 2009-03-31
01:39:48 UTC (rev 14384)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/HumanTask.java 2009-03-31
01:40:58 UTC (rev 14385)
@@ -1,10 +1,124 @@
package org.jboss.tools.flow.jpdl4.model;
+import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+import org.eclipse.ui.views.properties.TextPropertyDescriptor;
+
public class HumanTask extends Task {
- protected boolean isPropagationExclusive() {
- return true;
+ private static String ASSIGNMENT_LABEL = "Assignment";
+
+ public static final String ASSIGNMENT_TYPE =
"org.jboss.tools.flow.jpdl4.model.task.assignment.type";
+ public static final String ASSIGNMENT_EXPRESSION =
"org.jboss.tools.flow.jpdl4.model.task.assignment.expression";
+ public static final String ASSIGNMENT_EXPRESSION_LANGUAGE =
"org.jboss.tools.flow.jpdl4.model.task.assignment.expression.language";
+
+ public static final String ASSIGNEE = "assignee";
+ public static final String CANDIDATE_GROUPS = "candidate-groups";
+ public static final String CANDIDATE_USERS = "candidate-users";
+ public static final String SWIMLANE = "swimlane";
+ public static final String NONE = "none";
+
+ public static final String[] ASSIGNMENT_TYPES = {
+ ASSIGNEE, CANDIDATE_GROUPS, CANDIDATE_USERS, SWIMLANE, NONE
+ };
+
+ private String assignmentType = NONE;
+ private String assignmentExpression = "";
+ private String assignmentExpressionLanguage = "";
+
+ public HumanTask() {
+ setMetaData("propertySource", new PropertySource());
}
+
+ private class PropertySource implements IPropertySource {
+
+ private IPropertyDescriptor[] propertyDescriptors;
+
+ private void initializePropertyDescriptors() {
+ PropertyDescriptor assignmentTypeDescriptor =
+ new ComboBoxPropertyDescriptor(ASSIGNMENT_TYPE, "Type", ASSIGNMENT_TYPES);
+ assignmentTypeDescriptor.setCategory(ASSIGNMENT_LABEL);
+ PropertyDescriptor assignmentExpressionDescriptor =
+ new TextPropertyDescriptor(ASSIGNMENT_EXPRESSION, "Expression");
+ assignmentExpressionDescriptor.setCategory(ASSIGNMENT_LABEL);
+ PropertyDescriptor assignmentExpressionLanguageDescriptor =
+ new TextPropertyDescriptor(ASSIGNMENT_EXPRESSION_LANGUAGE, "Language");
+ assignmentExpressionLanguageDescriptor.setCategory(ASSIGNMENT_LABEL);
+ propertyDescriptors = new IPropertyDescriptor[] {
+ assignmentTypeDescriptor,
+ assignmentExpressionDescriptor,
+ assignmentExpressionLanguageDescriptor
+ };
+ }
+
+ public Object getEditableValue() {
+ return null;
+ }
+
+ public IPropertyDescriptor[] getPropertyDescriptors() {
+ if (propertyDescriptors == null) {
+ initializePropertyDescriptors();
+ }
+ return propertyDescriptors;
+ }
+
+ private int getAssignmentTypesIndex(String assignmentType) {
+ int result = 0;
+ for (String type : ASSIGNMENT_TYPES) {
+ if (type.equals(assignmentType)) {
+ break;
+ }
+ result++;
+ }
+ return result;
+ }
+
+ public Object getPropertyValue(Object id) {
+ if (ASSIGNMENT_TYPE.equals(id)) {
+ return getAssignmentTypesIndex(assignmentType);
+ } else if (ASSIGNMENT_EXPRESSION.equals(id)) {
+ return assignmentExpression;
+ } else if (ASSIGNMENT_EXPRESSION_LANGUAGE.equals(id)) {
+ return assignmentExpressionLanguage;
+ }
+ return null;
+ }
+
+ public boolean isPropertySet(Object id) {
+ if (ASSIGNMENT_TYPE.equals(id)) {
+ return true;
+ } else if (ASSIGNMENT_EXPRESSION.equals(id)) {
+ return !"".equals(assignmentExpression);
+ } else if (ASSIGNMENT_EXPRESSION_LANGUAGE.equals(id)) {
+ return !"".equals(assignmentExpressionLanguage);
+ }
+ return false;
+ }
+
+ public void resetPropertyValue(Object id) {
+ if (ASSIGNMENT_TYPE.equals(id)) {
+ assignmentType = NONE;
+ } else if (ASSIGNMENT_EXPRESSION.equals(id)) {
+ assignmentExpression = "";
+ } else if (ASSIGNMENT_EXPRESSION_LANGUAGE.equals(id)) {
+ assignmentExpressionLanguage = "";
+ }
+ }
+
+ public void setPropertyValue(Object id, Object value) {
+ if (ASSIGNMENT_TYPE.equals(id)) {
+ assignmentType = ASSIGNMENT_TYPES[(Integer)value];
+ } else if (ASSIGNMENT_EXPRESSION.equals(id)) {
+ assignmentExpression = (String)value;
+ } else if (ASSIGNMENT_EXPRESSION_LANGUAGE.equals(id)) {
+ assignmentExpressionLanguage = (String)value;
+ }
+ }
+
+ }
+
}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/SequenceFlow.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/SequenceFlow.java 2009-03-31
01:39:48 UTC (rev 14384)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/model/SequenceFlow.java 2009-03-31
01:40:58 UTC (rev 14385)
@@ -54,7 +54,11 @@
private class PropertySource implements IPropertySource, IPropertyId {
private IPropertyDescriptor[] propertyDescriptors = new IPropertyDescriptor[] {
- new TextPropertyDescriptor(NAME, "Name") {}
+ new TextPropertyDescriptor(NAME, "Name") {
+ public String getCategory() {
+ return "General";
+ }
+ }
};
public Object getEditableValue() {
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/AdvancedSection.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/AdvancedSection.java 2009-03-31
01:39:48 UTC (rev 14384)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/AdvancedSection.java 2009-03-31
01:40:58 UTC (rev 14385)
@@ -7,7 +7,7 @@
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
public class AdvancedSection extends AdvancedPropertySection {
-
+
public void createControls(Composite parent,
final TabbedPropertySheetPage atabbedPropertySheetPage) {
super.createControls(parent, atabbedPropertySheetPage);
@@ -16,5 +16,5 @@
page.setRootEntry(new UndoablePropertySheetEntry(commandStack));
}
}
-
+
}
Added:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/AssignmentSection.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/AssignmentSection.java
(rev 0)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/AssignmentSection.java 2009-03-31
01:40:58 UTC (rev 14385)
@@ -0,0 +1,195 @@
+package org.jboss.tools.flow.jpdl4.properties;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.gef.commands.CommandStack;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.jboss.tools.flow.jpdl4.command.ChangePropertyCommand;
+import org.jboss.tools.flow.jpdl4.model.HumanTask;
+
+public class AssignmentSection extends AbstractPropertySection {
+
+ private CCombo typeCombo;
+ private CLabel typeLabel;
+ private Text expressionText;
+ private CLabel expressionLabel;
+ private Text languageText;
+ private CLabel languageLabel;
+
+// private Composite parent;
+
+ private IPropertySource input;
+
+ private CommandStack commandStack;
+
+// private CommandStackListener commandStackListener = new CommandStackListener() {
+// public void commandStackChanged(EventObject event) {
+// if (!parent.isDisposed()) {
+// refresh();
+// }
+// }
+// };
+
+ public void createControls(Composite parent,
+ TabbedPropertySheetPage aTabbedPropertySheetPage) {
+ super.createControls(parent, aTabbedPropertySheetPage);
+// this.parent = parent;
+ if (aTabbedPropertySheetPage instanceof JpdlPropertySheetPage) {
+ commandStack = ((JpdlPropertySheetPage)aTabbedPropertySheetPage).getCommandStack();
+// commandStack.addCommandStackListener(commandStackListener);
+ }
+ Composite composite = getWidgetFactory().createFlatFormComposite(parent);
+ createTypeLabel(composite);
+ createTypeCombo(composite);
+ createExpressionLabel(composite);
+ createExpressionText(composite);
+ createLanguageLabel(composite);
+ createLanguageText(composite);
+ }
+
+
+ private void createTypeLabel(Composite parent) {
+ typeLabel = getWidgetFactory().createCLabel(parent, "Type");
+ FormData data = new FormData();
+ data.left = new FormAttachment(0, 0);
+ data.top = new FormAttachment(0, 0);
+ typeLabel.setLayoutData(data);
+ }
+
+ private void createTypeCombo(Composite parent) {
+ typeCombo = getWidgetFactory().createCCombo(parent);
+ typeCombo.setItems(HumanTask.ASSIGNMENT_TYPES);
+ FormData data = new FormData();
+ data.top = new FormAttachment(0, 5);
+ data.left = new FormAttachment(0, 85);
+ typeCombo.setLayoutData(data);
+ }
+
+ private void createExpressionLabel(Composite parent) {
+ expressionLabel = getWidgetFactory().createCLabel(parent, "Expression");
+ FormData data = new FormData();
+ data.left = new FormAttachment(0, 0);
+ data.top = new FormAttachment(typeCombo, 4);
+ expressionLabel.setLayoutData(data);
+ }
+
+ private void createExpressionText(Composite parent) {
+ expressionText = getWidgetFactory().createText(parent, "");
+ FormData data = new FormData();
+ data.top = new FormAttachment(typeCombo, 2);
+ data.right = new FormAttachment(100, 0);
+ data.left = new FormAttachment(0, 80);
+ expressionText.setLayoutData(data);
+ }
+
+ private void createLanguageLabel(Composite parent) {
+ languageLabel = getWidgetFactory().createCLabel(parent, "Language");
+ FormData data = new FormData();
+ data.left = new FormAttachment(0, 0);
+ data.top = new FormAttachment(expressionText, 2);
+ languageLabel.setLayoutData(data);
+ }
+
+ private void createLanguageText(Composite parent) {
+ languageText = getWidgetFactory().createText(parent, "");
+ FormData data = new FormData();
+ data.top = new FormAttachment(expressionText, 0);
+ data.left = new FormAttachment(0, 80);
+ data.right = new FormAttachment(100, 0);
+ languageText.setLayoutData(data);
+ }
+
+ public void setInput(IWorkbenchPart part, ISelection selection) {
+ super.setInput(part, selection);
+ if (selection instanceof IStructuredSelection) {
+ Object object = ((IStructuredSelection)selection).getFirstElement();
+ if (object instanceof IAdaptable) {
+ object = ((IAdaptable)object).getAdapter(IPropertySource.class);
+ if (object instanceof IPropertySource) {
+ input = (IPropertySource)object;
+ return;
+ }
+ }
+ }
+ input = null;
+ }
+
+ private SelectionListener typeComboSelectionListener = new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ changeProperty(HumanTask.ASSIGNMENT_TYPE, typeCombo.getSelectionIndex());
+ }
+ };
+
+ private ModifyListener expressionTextModifyListener = new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ changeProperty(HumanTask.ASSIGNMENT_EXPRESSION, expressionText.getText());
+ }
+ };
+
+ private ModifyListener languageTextModifyListener = new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ changeProperty(HumanTask.ASSIGNMENT_EXPRESSION_LANGUAGE, languageText.getText());
+ }
+ };
+
+ protected void changeProperty(Object propertyId, Object newValue) {
+ if (commandStack == null || input == null) return;
+ Object oldValue = input.getPropertyValue(propertyId);
+ if (oldValue == newValue) return;
+ ChangePropertyCommand changePropertyCommand = new ChangePropertyCommand();
+ changePropertyCommand.setPropertyId(propertyId);
+ changePropertyCommand.setTarget(input);
+ changePropertyCommand.setNewValue(newValue);
+ commandStack.execute(changePropertyCommand);
+ }
+
+ protected void unhookListeners() {
+ typeCombo.removeSelectionListener(typeComboSelectionListener);
+ expressionText.removeModifyListener(expressionTextModifyListener);
+ languageText.removeModifyListener(languageTextModifyListener);
+ }
+
+ protected void hookListeners() {
+ typeCombo.addSelectionListener(typeComboSelectionListener);
+ expressionText.addModifyListener(expressionTextModifyListener);
+ languageText.addModifyListener(languageTextModifyListener);
+ }
+
+ protected void updateValues() {
+ if (input == null) {
+ typeCombo.setText(HumanTask.NONE);
+ expressionText.setText("");
+ languageText.setText("");
+ } else {
+ typeCombo.setText(HumanTask.ASSIGNMENT_TYPES[(Integer)input.getPropertyValue(HumanTask.ASSIGNMENT_TYPE)]);
+ expressionText.setText((String)input.getPropertyValue(HumanTask.ASSIGNMENT_EXPRESSION));
+ languageText.setText((String)input.getPropertyValue(HumanTask.ASSIGNMENT_EXPRESSION_LANGUAGE));
+ }
+ }
+
+ public void aboutToBeShown() {
+ refresh();
+ }
+
+ public void refresh() {
+ unhookListeners();
+ updateValues();
+ hookListeners();
+ }
+
+}
Modified:
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/NameSection.java
===================================================================
---
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/NameSection.java 2009-03-31
01:39:48 UTC (rev 14384)
+++
trunk/jbpm/plugins/org.jboss.tools.flow.jpdl4/src/org/jboss/tools/flow/jpdl4/properties/NameSection.java 2009-03-31
01:40:58 UTC (rev 14385)
@@ -49,7 +49,9 @@
};
public void dispose() {
- commandStack.removeCommandStackListener(commandStackListener);
+ if (commandStack != null) {
+ commandStack.removeCommandStackListener(commandStackListener);
+ }
super.dispose();
}