https://bugs.eclipse.org/bugs/show_bug.cgi?id=389905 - InputDataItem and
OutputDataItem fixes for MultiInstanceLoopCharacteristics. Also reworked
"Loop Characteristics" property section.
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractDetailComposite.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractDetailComposite.java
index d3f6b70..0983af2 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractDetailComposite.java
@@ -16,10 +16,7 @@
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
-import java.util.Stack;
-import org.eclipse.bpmn2.Bpmn2Package;
-import org.eclipse.bpmn2.modeler.core.adapters.InsertionAdapter;
import org.eclipse.bpmn2.modeler.core.merrimac.IConstants;
import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.BooleanObjectEditor;
import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.ComboObjectEditor;
@@ -36,8 +33,6 @@
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.util.BasicFeatureMap;
import org.eclipse.emf.ecore.util.EObjectContainmentEList;
@@ -59,7 +54,6 @@
import org.eclipse.ui.forms.events.IExpansionListener;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
/**
* This is a base class for all Property Sheet Sections. The Composite is used to render
@@ -454,7 +448,7 @@
String displayName = ModelUtil.getLabel(object, reference);
- ObjectEditor editor;
+ ObjectEditor editor = null;
if (ModelUtil.isMultiChoice(object, reference)) {
if (reference.isMany()) {
editor = new FeatureListObjectEditor(this,object,reference);
@@ -468,7 +462,8 @@
else {
editor = new TextObjectEditor(this,object,reference);
}
- editor.createControl(parent,displayName);
+ if (editor!=null)
+ editor.createControl(parent,displayName);
}
}
@@ -485,7 +480,6 @@
}
protected AbstractListComposite bindList(EObject object, EStructuralFeature feature, EClass listItemClass) {
-
AbstractListComposite tableComposite = null;
if (isModelObjectEnabled(object.eClass(), feature) || isModelObjectEnabled(listItemClass)) {
Class clazz = (listItemClass!=null) ?
@@ -503,6 +497,20 @@
}
return tableComposite;
}
+
+ protected AbstractListComposite bindList(Composite parent, EObject object, EStructuralFeature feature, EClass listItemClass) {
+
+ AbstractListComposite tableComposite = null;
+ if (isModelObjectEnabled(object.eClass(), feature) || isModelObjectEnabled(listItemClass)) {
+ Class clazz = (listItemClass!=null) ?
+ listItemClass.getInstanceClass() :
+ feature.getEType().getInstanceClass();
+ tableComposite = PropertiesCompositeFactory.createListComposite(clazz, parent, AbstractListComposite.DEFAULT_STYLE);
+ tableComposite.setListItemClass(listItemClass);
+ tableComposite.bindList(object, feature);
+ }
+ return tableComposite;
+ }
public void refresh() {
Display.getDefault().asyncExec( new Runnable() {
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/DefaultDetailComposite.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/DefaultDetailComposite.java
index cf6e9f9..15f60b3 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/DefaultDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/DefaultDetailComposite.java
@@ -16,7 +16,11 @@
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.bpmn2.Expression;
+import org.eclipse.bpmn2.FormalExpression;
import org.eclipse.bpmn2.impl.Bpmn2PackageImpl;
+import org.eclipse.bpmn2.modeler.core.adapters.InsertionAdapter;
+import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.ObjectEditor;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EAttribute;
@@ -24,6 +28,7 @@
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
public class DefaultDetailComposite extends AbstractDetailComposite {
@@ -215,6 +220,29 @@
}
}
+
+ protected void bindReference(Composite parent, EObject object, EReference reference) {
+ if (isModelObjectEnabled(object.eClass(), reference)) {
+ if (parent==null)
+ parent = getAttributesParent();
+
+ String displayName = ModelUtil.getLabel(object, reference);
+
+ if (reference.getEType() == PACKAGE.getExpression()) {
+ FormalExpression expression = (FormalExpression)object.eGet(reference);
+ if (expression==null) {
+ expression = FACTORY.createFormalExpression();
+ InsertionAdapter.add(object, reference, expression);
+ }
+ AbstractDetailComposite composite = PropertiesCompositeFactory.createDetailComposite(Expression.class, getAttributesParent(), SWT.BORDER);
+ composite.setBusinessObject(expression);
+ composite.setTitle(displayName);
+ }
+ else
+ super.bindReference(parent, object, reference);
+ }
+ }
+
/**
* Provider class for the Default Properties sheet tab.
* This simply returns a list of properties, containment ELists and references
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java
index 8d7c5b3..dbb6737 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java
@@ -13,14 +13,12 @@
package org.eclipse.bpmn2.modeler.core.merrimac.dialogs;
-import org.eclipse.bpmn2.modeler.core.Activator;
import org.eclipse.bpmn2.modeler.core.merrimac.IConstants;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
import org.eclipse.bpmn2.modeler.core.utils.ErrorUtils;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
import org.eclipse.bpmn2.modeler.core.validation.ValidationStatusAdapter;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
@@ -29,12 +27,9 @@
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.emf.validation.model.ConstraintStatus;
import org.eclipse.graphiti.mm.pictograms.Diagram;
-import org.eclipse.graphiti.platform.IPlatformImageConstants;
-import org.eclipse.graphiti.tb.ImageDecorator;
import org.eclipse.graphiti.ui.editor.DiagramEditor;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
index 68557da..e267ad5 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
@@ -35,6 +35,8 @@
import org.eclipse.bpmn2.Bpmn2Package;
import org.eclipse.bpmn2.Definitions;
+import org.eclipse.bpmn2.Expression;
+import org.eclipse.bpmn2.FormalExpression;
import org.eclipse.bpmn2.Import;
import org.eclipse.bpmn2.InputSet;
import org.eclipse.bpmn2.ItemDefinition;
@@ -318,6 +320,28 @@
return true;
}
+ // empty Expressions should not be saved
+ if (f!=null && f.getEType() == Bpmn2Package.eINSTANCE.getExpression()) {
+ Expression expression = (Expression)o.eGet(f);
+ if (expression==null)
+ return false;
+ if (expression instanceof FormalExpression) {
+ FormalExpression formalExpression = (FormalExpression)expression;
+ if (
+ (formalExpression.getBody()==null || formalExpression.getBody().isEmpty()) &&
+ (formalExpression.getLanguage()==null || formalExpression.getLanguage().isEmpty()) &&
+ formalExpression.getEvaluatesToTypeRef()==null) {
+ return false;
+ }
+ }
+ }
+
+ // don't serialize the "body" attribute of FormalExpressions because the expression text
+ // is already in the CDATA section of the <bpmn2:expression> element. This would cause
+ // the expression text to be duplicated on deserialization.
+ if (Bpmn2Package.eINSTANCE.getFormalExpression_Body().equals(f))
+ return false;
+
return super.shouldSaveFeature(o, f);
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java
index 4b719d6..e325f69 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java
@@ -1006,20 +1006,22 @@
public static boolean setValue(TransactionalEditingDomain domain, final EObject object, final EStructuralFeature feature, final Object value) {
ExtendedPropertiesAdapter adapter = AdapterUtil.adapt(object, ExtendedPropertiesAdapter.class);
Object oldValue = adapter==null ? object.eGet(feature) : adapter.getFeatureDescriptor(feature).getValue();
- boolean valueChanged = (value != oldValue);
- if (value!=null && oldValue!=null)
- valueChanged = !value.equals(oldValue);
+ final Object newValue = (feature instanceof EReference && !(value instanceof EObject)) ? null : value;
+
+ boolean valueChanged = (newValue != oldValue);
+ if (newValue!=null && oldValue!=null)
+ valueChanged = !newValue.equals(oldValue);
if (valueChanged) {
try {
- if (value instanceof EObject) {
+ if (newValue instanceof EObject) {
// make sure the new object is added to its control first
// so that it inherits the control's Resource and EditingDomain
// before we try to change its value.
- InsertionAdapter.executeIfNeeded((EObject)value);
+ InsertionAdapter.executeIfNeeded((EObject)newValue);
}
- if (value==null){ // DO NOT use isEmpty() because this erases an object's anyAttribute feature!
+ if (newValue==null){ // DO NOT use isEmpty() because this erases an object's anyAttribute feature!
domain.getCommandStack().execute(new RecordingCommand(domain) {
@Override
protected void doExecute() {
@@ -1028,7 +1030,7 @@
});
}
else if (adapter!=null) { // use the Extended Properties adapter if there is one
- adapter.getFeatureDescriptor(feature).setValue(value);
+ adapter.getFeatureDescriptor(feature).setValue(newValue);
}
else {
// fallback is to set the new value here using good ol' EObject.eSet()
@@ -1036,10 +1038,10 @@
@Override
protected void doExecute() {
if (object.eGet(feature) instanceof List) {
- ((List)object.eGet(feature)).add(value);
+ ((List)object.eGet(feature)).add(newValue);
}
else
- object.eSet(feature, value);
+ object.eSet(feature, newValue);
}
});
}
diff --git a/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/util/ModelResourceImpl.java b/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/util/ModelResourceImpl.java
index cbd83c3..dbfc8f5 100644
--- a/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/util/ModelResourceImpl.java
+++ b/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/util/ModelResourceImpl.java
@@ -32,7 +32,6 @@
import org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.model.ModelPackage;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
@@ -94,8 +93,6 @@
protected boolean shouldSaveFeature(EObject o, EStructuralFeature f) {
if (Bpmn2Package.eINSTANCE.getDocumentation_Text().equals(f))
return false;
- if (Bpmn2Package.eINSTANCE.getFormalExpression_Body().equals(f))
- return false;
return super.shouldSaveFeature(o, f);
}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/FormalExpressionPropertiesAdapter.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/FormalExpressionPropertiesAdapter.java
index d25baec..4e59392 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/FormalExpressionPropertiesAdapter.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/FormalExpressionPropertiesAdapter.java
@@ -18,9 +18,12 @@
import org.eclipse.bpmn2.SequenceFlow;
import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesAdapter;
import org.eclipse.bpmn2.modeler.core.adapters.FeatureDescriptor;
+import org.eclipse.bpmn2.modeler.core.adapters.InsertionAdapter;
import org.eclipse.bpmn2.modeler.core.adapters.ObjectDescriptor;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
/**
* @author Bob Brodt
@@ -39,6 +42,24 @@
setFeatureDescriptor(body,
new FeatureDescriptor<FormalExpression>(adapterFactory,object,body) {
+ @Override
+
+ public void setValue(Object context, final Object value) {
+ final FormalExpression formalExpression = adopt(context);
+ InsertionAdapter.executeIfNeeded(formalExpression);
+ TransactionalEditingDomain editingDomain = getEditingDomain(formalExpression);
+ if (editingDomain == null) {
+ formalExpression.setBody(value.toString());
+ } else {
+ editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) {
+ @Override
+ protected void doExecute() {
+ formalExpression.setBody(value.toString());
+ }
+ });
+ }
+ }
+
@Override
public String getDisplayName(Object context) {
FormalExpression expression = adopt(context);
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/MultiInstanceLoopCharacteristicsDetailComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/MultiInstanceLoopCharacteristicsDetailComposite.java
index 03658ce..f0cbfa4 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/MultiInstanceLoopCharacteristicsDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/MultiInstanceLoopCharacteristicsDetailComposite.java
@@ -2,12 +2,15 @@
import org.eclipse.bpmn2.Bpmn2Package;
import org.eclipse.bpmn2.DataInput;
+import org.eclipse.bpmn2.Expression;
import org.eclipse.bpmn2.MultiInstanceBehavior;
import org.eclipse.bpmn2.MultiInstanceLoopCharacteristics;
+import org.eclipse.bpmn2.modeler.core.adapters.InsertionAdapter;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractListComposite;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultDetailComposite;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.PropertiesCompositeFactory;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultDetailComposite.AbstractPropertiesProvider;
import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.ComboObjectEditor;
import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.FeatureEditingDialog;
@@ -24,15 +27,16 @@
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
public class MultiInstanceLoopCharacteristicsDetailComposite extends DefaultDetailComposite {
- ObjectEditor noneBehaviorEditor;
- ObjectEditor oneBehaviorEditor;
+ ObjectEditor noneBehaviorEventEditor;
+ ObjectEditor oneBehaviorEventEditor;
AbstractListComposite complexBehaviorList;
-
+
public MultiInstanceLoopCharacteristicsDetailComposite(Composite parent, int style) {
super(parent, style);
}
@@ -47,17 +51,17 @@
propertiesProvider = new AbstractPropertiesProvider(object) {
String[] properties = new String[] {
"anyAttribute",
- "isSequential", // attr
- "inputDataItem", // ref
- "outputDataItem", // ref
- "completionCondition", // ref
- "loopCardinality", // ref
- "loopDataInputRef", // ref
- "loopDataOutputRef", // ref
- "behavior", // attr
- "noneBehaviorEventRef", // ref
- "oneBehaviorEventRef", // ref
- "complexBehaviorDefinition", // list
+ "isSequential",
+ "inputDataItem",
+ "outputDataItem",
+ "loopDataInputRef",
+ "loopDataOutputRef",
+ "completionCondition",
+ "loopCardinality",
+ "behavior",
+ "noneBehaviorEventRef",
+ "oneBehaviorEventRef",
+ "complexBehaviorDefinition",
};
@Override
@@ -69,6 +73,14 @@
return propertiesProvider;
}
+ @Override
+ protected void cleanBindings() {
+ super.cleanBindings();
+ noneBehaviorEventEditor = null;
+ oneBehaviorEventEditor = null;
+ complexBehaviorList = null;
+ }
+
public void createBindings(EObject be) {
super.createBindings(be);
}
@@ -80,57 +92,64 @@
@Override
protected boolean updateObject(Object result) {
MultiInstanceLoopCharacteristics lc = (MultiInstanceLoopCharacteristics)object;
- boolean update = super.updateObject(result);
- if (update) {
+ boolean updated = super.updateObject(result);
+ if (updated) {
switch (lc.getBehavior()) {
case ALL:
- if (noneBehaviorEditor!=null) {
- noneBehaviorEditor.setVisible(false);
+ if (noneBehaviorEventEditor!=null) {
+ noneBehaviorEventEditor.setVisible(false);
}
- if (oneBehaviorEditor!=null) {
- oneBehaviorEditor.setVisible(false);
+ if (oneBehaviorEventEditor!=null) {
+ oneBehaviorEventEditor.setVisible(false);
}
if (complexBehaviorList!=null) {
complexBehaviorList.setVisible(false);
}
break;
case NONE:
- if (noneBehaviorEditor!=null) {
- noneBehaviorEditor.setVisible(true);
+ if (noneBehaviorEventEditor!=null) {
+ noneBehaviorEventEditor.setVisible(true);
}
- if (oneBehaviorEditor!=null) {
- oneBehaviorEditor.setVisible(false);
+ if (oneBehaviorEventEditor!=null) {
+ oneBehaviorEventEditor.setVisible(false);
}
if (complexBehaviorList!=null) {
complexBehaviorList.setVisible(false);
}
break;
case ONE:
- if (noneBehaviorEditor!=null) {
- noneBehaviorEditor.setVisible(false);
+ if (noneBehaviorEventEditor!=null) {
+ noneBehaviorEventEditor.setVisible(false);
}
- if (oneBehaviorEditor!=null) {
- oneBehaviorEditor.setVisible(true);
+ if (oneBehaviorEventEditor!=null) {
+ oneBehaviorEventEditor.setVisible(true);
}
if (complexBehaviorList!=null) {
complexBehaviorList.setVisible(false);
}
break;
case COMPLEX:
- if (noneBehaviorEditor!=null) {
- noneBehaviorEditor.setVisible(false);
+ if (noneBehaviorEventEditor!=null) {
+ noneBehaviorEventEditor.setVisible(false);
}
- if (oneBehaviorEditor!=null) {
- oneBehaviorEditor.setVisible(false);
+ if (oneBehaviorEventEditor!=null) {
+ oneBehaviorEventEditor.setVisible(false);
}
if (complexBehaviorList!=null) {
complexBehaviorList.setVisible(true);
}
break;
}
- redrawPage();
+ Display.getDefault().asyncExec( new Runnable() {
+
+ @Override
+ public void run() {
+ redrawPage();
+ }
+
+ });
}
- return update;
+ return updated;
}
};
editor.createControl(parent,label);
@@ -143,32 +162,32 @@
MultiInstanceLoopCharacteristics lc = (MultiInstanceLoopCharacteristics)object;
EStructuralFeature f;
- if (reference.getName().equals("inputDataItem")) {
+ if (reference == PACKAGE.getMultiInstanceLoopCharacteristics_InputDataItem()) {
f = Bpmn2Package.eINSTANCE.getMultiInstanceLoopCharacteristics_InputDataItem();
if (isModelObjectEnabled(lc.eClass(), f)) {
DataIoObjectEditor inputDataItemEditor = new DataIoObjectEditor(lc,f);
inputDataItemEditor.createControl(getAttributesParent(), "Input Paramter");
}
}
- else if (reference.getName().equals("outputDataItem")) {
+ else if (reference == PACKAGE.getMultiInstanceLoopCharacteristics_OutputDataItem()) {
f = Bpmn2Package.eINSTANCE.getMultiInstanceLoopCharacteristics_OutputDataItem();
if (isModelObjectEnabled(lc.eClass(), f)) {
DataIoObjectEditor outputDataItemEditor = new DataIoObjectEditor(lc,f);
outputDataItemEditor.createControl(getAttributesParent(), "Output Paramter");
}
}
- else if (reference.getName().equals("noneBehaviorEventRef")) {
+ else if (reference == PACKAGE.getMultiInstanceLoopCharacteristics_NoneBehaviorEventRef()) {
String displayName = ModelUtil.getLabel(object, reference);
- noneBehaviorEditor = new ComboObjectEditor(this,object,reference);
- noneBehaviorEditor.createControl(parent,displayName);
- noneBehaviorEditor.setVisible( lc.getBehavior() == MultiInstanceBehavior.NONE );
+ noneBehaviorEventEditor = new ComboObjectEditor(this,object,reference);
+ noneBehaviorEventEditor.createControl(parent,displayName);
+ noneBehaviorEventEditor.setVisible( lc.getBehavior() == MultiInstanceBehavior.NONE );
}
- else if (reference.getName().equals("oneBehaviorEventRef")) {
+ else if (reference == PACKAGE.getMultiInstanceLoopCharacteristics_OneBehaviorEventRef()) {
String displayName = ModelUtil.getLabel(object, reference);
- oneBehaviorEditor = new ComboObjectEditor(this,object,reference);
- oneBehaviorEditor.createControl(parent,displayName);
- oneBehaviorEditor.setVisible( lc.getBehavior() == MultiInstanceBehavior.ONE );
+ oneBehaviorEventEditor = new ComboObjectEditor(this,object,reference);
+ oneBehaviorEventEditor.createControl(parent,displayName);
+ oneBehaviorEventEditor.setVisible( lc.getBehavior() == MultiInstanceBehavior.ONE );
}
else
super.bindReference(parent, object, reference);
@@ -177,7 +196,7 @@
protected AbstractListComposite bindList(EObject object, EStructuralFeature feature, EClass listItemClass) {
MultiInstanceLoopCharacteristics lc = (MultiInstanceLoopCharacteristics)object;
if (feature.getName().equals("complexBehaviorDefinition")) {
- complexBehaviorList = super.bindList(object, feature, listItemClass);
+ complexBehaviorList = super.bindList(getAttributesParent(), object, feature, listItemClass);
complexBehaviorList.setVisible( lc.getBehavior() == MultiInstanceBehavior.COMPLEX );
return complexBehaviorList;
}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/StandardLoopCharacteristicsDetailComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/StandardLoopCharacteristicsDetailComposite.java
index 349dc0c..d8eb51e 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/StandardLoopCharacteristicsDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/StandardLoopCharacteristicsDetailComposite.java
@@ -1,28 +1,12 @@
package org.eclipse.bpmn2.modeler.ui.property.tasks;
-import org.eclipse.bpmn2.Expression;
-import org.eclipse.bpmn2.StandardLoopCharacteristics;
-import org.eclipse.bpmn2.modeler.core.adapters.InsertionAdapter;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultDetailComposite;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.PropertiesCompositeFactory;
-import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.transaction.RecordingCommand;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
public class StandardLoopCharacteristicsDetailComposite extends DefaultDetailComposite {
- AbstractDetailComposite loopConditionComposite = null;
- AbstractDetailComposite loopMaximumComposite = null;
-
public StandardLoopCharacteristicsDetailComposite(Composite parent, int style) {
super(parent, style);
}
@@ -30,44 +14,24 @@
public StandardLoopCharacteristicsDetailComposite(AbstractBpmn2PropertySection section) {
super(section);
}
-
- @Override
- protected void cleanBindings() {
- super.cleanBindings();
- loopConditionComposite = null;
- loopMaximumComposite = null;
- }
-
- public Composite getAttributesParent() {
- return super.getAttributesParent();
- }
- public void createBindings(EObject be) {
- getAttributesParent();
-
- bindAttribute(be,"testBefore");
-
- if (be instanceof StandardLoopCharacteristics) {
-
- final StandardLoopCharacteristics lc = (StandardLoopCharacteristics) be;
-
- Expression loopConditionExpression = lc.getLoopCondition();
- if (loopConditionExpression==null) {
- loopConditionExpression = FACTORY.createFormalExpression();
- InsertionAdapter.add(lc, PACKAGE.getStandardLoopCharacteristics_LoopCondition(), loopConditionExpression);
- }
- loopConditionComposite = PropertiesCompositeFactory.createDetailComposite(Expression.class, getAttributesParent(), SWT.NONE);
- loopConditionComposite.setBusinessObject(loopConditionExpression);
- loopConditionComposite.setTitle("Loop Condition");
-
- Expression loopMaximumExpression = lc.getLoopMaximum();
- if (loopMaximumExpression==null) {
- loopMaximumExpression = FACTORY.createFormalExpression();
- InsertionAdapter.add(lc, PACKAGE.getStandardLoopCharacteristics_LoopMaximum(), loopMaximumExpression);
- }
- loopMaximumComposite = PropertiesCompositeFactory.createDetailComposite(Expression.class, getAttributesParent(), SWT.NONE);
- loopMaximumComposite.setBusinessObject(loopMaximumExpression);
- loopMaximumComposite.setTitle("Loop Maximum");
+ @Override
+ public AbstractPropertiesProvider getPropertiesProvider(EObject object) {
+ if (propertiesProvider==null) {
+ propertiesProvider = new AbstractPropertiesProvider(object) {
+ String[] properties = new String[] {
+ "anyAttribute",
+ "testBefore",
+ "loopCondition",
+ "loopMaximum",
+ };
+
+ @Override
+ public String[] getProperties() {
+ return properties;
+ }
+ };
}
+ return propertiesProvider;
}
}