diff options
author | Bob Brodt | 2014-04-23 18:17:05 +0000 |
---|---|---|
committer | Bob Brodt | 2014-04-23 18:17:05 +0000 |
commit | 40a5f2e4bc0f983d94fb8a0eb2bc5c59cc40b97d (patch) | |
tree | 917898f65fcd07ff00936fcc7eb9a460043a2828 | |
parent | c746d94c28b67ec1cf541a4a995ca24fc7ed4b49 (diff) | |
download | org.eclipse.bpmn2-modeler-40a5f2e4bc0f983d94fb8a0eb2bc5c59cc40b97d.tar.gz org.eclipse.bpmn2-modeler-40a5f2e4bc0f983d94fb8a0eb2bc5c59cc40b97d.tar.xz org.eclipse.bpmn2-modeler-40a5f2e4bc0f983d94fb8a0eb2bc5c59cc40b97d.zip |
Bug 432797 - isCollection marker on DataObject, DataInput and DataOutput
not handled properly
30 files changed, 380 insertions, 280 deletions
diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/ExtendedPropertiesProvider.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/ExtendedPropertiesProvider.java index 0ce9cce3..b2133d6c 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/ExtendedPropertiesProvider.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/ExtendedPropertiesProvider.java @@ -222,10 +222,6 @@ public class ExtendedPropertiesProvider { if (feature.getEType() instanceof EEnum) { return true; } - - if (feature instanceof EReference) { - return !((EReference)feature).isContainment(); - } ExtendedPropertiesAdapter adapter = ExtendedPropertiesAdapter.adapt(object, feature); if (adapter != null) { @@ -233,6 +229,10 @@ public class ExtendedPropertiesProvider { if (result instanceof Boolean) return ((Boolean) result); } + + if (feature instanceof EReference && feature.isMany()) { + return !((EReference)feature).isContainment(); + } return getChoiceOfValues(object, feature) != null; } diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/FeatureDescriptor.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/FeatureDescriptor.java index 79a60b86..8e2402bf 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/FeatureDescriptor.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/FeatureDescriptor.java @@ -19,6 +19,7 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.List; +import org.eclipse.bpmn2.Category; import org.eclipse.bpmn2.Definitions; import org.eclipse.bpmn2.RootElement; import org.eclipse.bpmn2.modeler.core.Activator; @@ -97,9 +98,9 @@ public class FeatureDescriptor<T extends EObject> extends ObjectDescriptor<T> { else { // If the referenced type is an EObject, we'll get an "E Class" label // so use the feature name instead. - if (feature instanceof EReference && !(getEType().getInstanceClass()==EObject.class)) - label = ExtendedPropertiesProvider.getLabel(getEType()); - else +// if (feature instanceof EReference && !(getEType().getInstanceClass()==EObject.class)) +// label = ExtendedPropertiesProvider.getLabel(getEType()); +// else label = ModelUtil.toCanonicalString(feature.getName()); } } diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/data/AddDataFeature.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/data/AddDataFeature.java index 64759604..dfd2919c 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/data/AddDataFeature.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/data/AddDataFeature.java @@ -74,19 +74,19 @@ public abstract class AddDataFeature<T extends ItemAwareElement> extends Abstrac edge.setForeground(manageColor(StyleUtil.CLASS_FOREGROUND)); edge.setLineWidth(1); - if (isSupportCollectionMarkers()) { - int whalf = width / 2; - createCollectionShape(containerShape, new int[] { whalf - 2, height - 8, whalf - 2, height }); - createCollectionShape(containerShape, new int[] { whalf, height - 8, whalf, height }); - createCollectionShape(containerShape, new int[] { whalf + 2, height - 8, whalf + 2, height }); - - String value = "false"; //$NON-NLS-1$ - EStructuralFeature feature = ((EObject)businessObject).eClass().getEStructuralFeature("isCollection"); //$NON-NLS-1$ - if (feature!=null && businessObject.eGet(feature)!=null) - value = ((Boolean)businessObject.eGet(feature)).toString(); - - Graphiti.getPeService().setPropertyValue(containerShape, Properties.COLLECTION_PROPERTY, value); - } + // Create the "is collection" marker + int whalf = width / 2; + createCollectionShape(containerShape, new int[] { whalf - 2, height - 8, whalf - 2, height }); + createCollectionShape(containerShape, new int[] { whalf, height - 8, whalf, height }); + createCollectionShape(containerShape, new int[] { whalf + 2, height - 8, whalf + 2, height }); + + String value = "false"; //$NON-NLS-1$ + EStructuralFeature feature = ((EObject)businessObject).eClass().getEStructuralFeature("isCollection"); //$NON-NLS-1$ + if (feature!=null && businessObject.eGet(feature)!=null) + value = ((Boolean)businessObject.eGet(feature)).toString(); + + Graphiti.getPeService().setPropertyValue(containerShape, Properties.COLLECTION_PROPERTY, value); + boolean isImport = context.getProperty(DIImport.IMPORT_PROPERTY) != null; createDIShape(containerShape, businessObject, !isImport); @@ -130,10 +130,6 @@ public abstract class AddDataFeature<T extends ItemAwareElement> extends Abstrac public int getWidth() { return GraphicsUtil.DATA_WIDTH; } - - protected boolean isSupportCollectionMarkers() { - return true; - } public abstract String getName(T t); }
\ No newline at end of file diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/label/UpdateLabelFeature.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/label/UpdateLabelFeature.java index 00ade918..bd6fcdfb 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/label/UpdateLabelFeature.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/features/label/UpdateLabelFeature.java @@ -15,6 +15,8 @@ package org.eclipse.bpmn2.modeler.core.features.label; import static org.eclipse.bpmn2.modeler.core.utils.FeatureSupport.getChildElementOfType; import org.eclipse.bpmn2.BaseElement; +import org.eclipse.bpmn2.DataState; +import org.eclipse.bpmn2.ItemAwareElement; import org.eclipse.bpmn2.modeler.core.features.AbstractBpmn2UpdateFeature; import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil; import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil; @@ -22,7 +24,6 @@ import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.IReason; import org.eclipse.graphiti.features.context.IUpdateContext; -import org.eclipse.graphiti.features.impl.AbstractUpdateFeature; import org.eclipse.graphiti.features.impl.Reason; import org.eclipse.graphiti.mm.algorithms.AbstractText; import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm; @@ -47,7 +48,7 @@ public class UpdateLabelFeature extends AbstractBpmn2UpdateFeature { if (element == null) { return false; } - return ModelUtil.hasName(element); + return hasLabel(element); } @Override @@ -63,7 +64,7 @@ public class UpdateLabelFeature extends AbstractBpmn2UpdateFeature { Shape textShape = getChildElementOfType(container, TEXT_ELEMENT, Boolean.toString(true), Shape.class); if (textShape!=null) { - String oldLabel = ModelUtil.getName(element); + String oldLabel = getLabel(element); if (oldLabel==null || oldLabel.isEmpty()) oldLabel = ""; //$NON-NLS-1$ String newLabel = ""; //$NON-NLS-1$ @@ -82,54 +83,60 @@ public class UpdateLabelFeature extends AbstractBpmn2UpdateFeature { @Override public boolean update(IUpdateContext context) { + IGaService gaService = Graphiti.getGaService(); PictogramElement pe = (PictogramElement) context.getPictogramElement(); BaseElement element = (BaseElement) BusinessObjectUtil.getFirstElementOfType(context.getPictogramElement(), BaseElement.class); Shape textShape = getChildElementOfType(pe, TEXT_ELEMENT, Boolean.toString(true), Shape.class); if (textShape!=null) { - AbstractText text = (AbstractText) textShape.getGraphicsAlgorithm(); - String name = ModelUtil.getName(element); - if (name == null) { - name = ""; //$NON-NLS-1$ + AbstractText textGA = (AbstractText) textShape.getGraphicsAlgorithm(); + String label = getLabel(element); + if (label == null) { + label = ""; //$NON-NLS-1$ } - text.setValue(name); + textGA.setValue(label); - // TODO: figure out why this causes the undo stack to be flushed if Text old value == new value - layoutPictogramElement(context.getPictogramElement()); - } - - if (pe instanceof ContainerShape) { - IGaService gaService = Graphiti.getGaService(); - ContainerShape container = (ContainerShape)pe; - - Shape shape = container.getChildren().get(0); // Otherwise, this would never be reached! - if (!(shape.getGraphicsAlgorithm() instanceof AbstractText)) - return true; - - GraphicsAlgorithm textGA = container.getGraphicsAlgorithm(); - AbstractText text = (AbstractText) shape.getGraphicsAlgorithm(); - - int oldWidth = textGA.getWidth() - GraphicsUtil.SHAPE_PADDING; - int x = textGA.getX() + ((oldWidth + GraphicsUtil.SHAPE_PADDING) / 2); - int y = textGA.getY(); + ContainerShape containerShape = (ContainerShape)textShape.eContainer(); + GraphicsAlgorithm containerGA = containerShape.getGraphicsAlgorithm(); - BaseElement o = BusinessObjectUtil.getFirstElementOfType(context.getPictogramElement(), BaseElement.class); - String name = ModelUtil.getName(o); + int oldWidth = containerGA.getWidth() - GraphicsUtil.SHAPE_PADDING; + int x = containerGA.getX() + ((oldWidth + GraphicsUtil.SHAPE_PADDING) / 2); + int y = containerGA.getY(); - if (name == null) { - gaService.setLocationAndSize(textGA, x, y, 0, 0); - gaService.setLocationAndSize(text, 0, 0, 0, 0); - container.setVisible(false); + if (label.isEmpty()) { + gaService.setLocationAndSize(containerGA, x, y, 0, 0); + gaService.setLocationAndSize(textGA, 0, 0, 0, 0); + containerShape.setVisible(false); } else { - int newWidth = GraphicsUtil.getLabelWidth(text); - int newHeight = GraphicsUtil.getLabelHeight(text); + int newWidth = GraphicsUtil.getLabelWidth(textGA); + int newHeight = GraphicsUtil.getLabelHeight(textGA); x = x - ((newWidth + GraphicsUtil.SHAPE_PADDING) / 2); - gaService.setLocationAndSize(textGA, x, y, newWidth + GraphicsUtil.SHAPE_PADDING, newHeight + GraphicsUtil.SHAPE_PADDING); - gaService.setLocationAndSize(text, 0, 0, newWidth + GraphicsUtil.TEXT_PADDING, newHeight + GraphicsUtil.TEXT_PADDING); - container.setVisible(true); + gaService.setLocationAndSize(containerGA, x, y, newWidth + GraphicsUtil.SHAPE_PADDING, newHeight + GraphicsUtil.SHAPE_PADDING); + gaService.setLocationAndSize(textGA, 0, 0, newWidth + GraphicsUtil.TEXT_PADDING, newHeight + GraphicsUtil.TEXT_PADDING); + containerShape.setVisible(true); } } return true; } + + protected boolean hasLabel(BaseElement element) { + return ModelUtil.hasName(element); + } + + protected String getLabel(BaseElement element) { + // Unfortunately this needs to be aware of ItemAwareElements, which have a + // Data State (the Data State needs to appear below the element's label in []) + // The UpdateLabelFeature is checked in BPMN2FeatureProvider AFTER the Update + // Feature for Data Objects is executed - this wipes out the Label provided by + // ItemAwareElementUpdateFeature. + String label = ModelUtil.getName(element); + if (element instanceof ItemAwareElement) { + DataState state = ((ItemAwareElement)element).getDataState(); + if (state!=null && state.getName()!=null) { + return label + "\n[" + state.getName() + "]"; + } + } + return label; + } }
\ No newline at end of file diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractDetailComposite.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractDetailComposite.java index f36d8de1..0a49b86b 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractDetailComposite.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractDetailComposite.java @@ -283,6 +283,9 @@ public abstract class AbstractDetailComposite extends ListAndDetailCompositeBase text.setLayoutData(data); text.setText(value==null ? "" : value); text.setEditable(false); + text.setBackground(text.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); + text.setForeground(text.getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND)); + text.setData(AbstractObjectEditingDialog.DO_NOT_ADAPT, Boolean.TRUE); return text; } diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ComboObjectEditor.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ComboObjectEditor.java index 551dab0e..eb91f96e 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ComboObjectEditor.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ComboObjectEditor.java @@ -28,6 +28,7 @@ import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite; import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; @@ -405,7 +406,7 @@ public class ComboObjectEditor extends MultivalueObjectEditor { @Override public void notifyChanged(Notification notification) { super.notifyChanged(notification); - if (notification.getEventType() == -1 || itemsChanged()) { + if (notification.getEventType() == -1 || (notification.getFeature()==feature) && itemsChanged()) { fillCombo(); } } diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureEditingDialog.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureEditingDialog.java index 661d3078..f41e07c7 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureEditingDialog.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureEditingDialog.java @@ -14,7 +14,6 @@ package org.eclipse.bpmn2.modeler.core.merrimac.dialogs; import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesProvider; -import org.eclipse.bpmn2.modeler.core.merrimac.clad.PropertiesCompositeFactory; import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerFactory; import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; import org.eclipse.emf.ecore.EClass; @@ -27,8 +26,6 @@ import org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl; import org.eclipse.graphiti.ui.editor.DiagramEditor; import org.eclipse.jface.window.Window; import org.eclipse.osgi.util.NLS; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; public class FeatureEditingDialog extends ObjectEditingDialog { @@ -71,6 +68,8 @@ public class FeatureEditingDialog extends ObjectEditingDialog { else if (feature.getEType() instanceof EClass) featureEType = (EClass)feature.getEType(); } + if (newObject==null) + cancel = true; if (cancel) { rollbackTransaction(); diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureListObjectEditor.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureListObjectEditor.java index 3fc93ca9..8fbef027 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureListObjectEditor.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureListObjectEditor.java @@ -95,8 +95,8 @@ public class FeatureListObjectEditor extends MultivalueObjectEditor { text = getToolkit().createText(composite, ""); //$NON-NLS-1$ text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); - text.setEditable(false); - + setEditable(false); + references = getValue(); updateTextField(); diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java index 9a15fd0e..af46ab5e 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/ObjectEditor.java @@ -40,6 +40,7 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.widgets.FormToolkit; @@ -348,4 +349,14 @@ public abstract class ObjectEditor implements INotifyChangedListener { protected boolean canRemove() { return false; } + + public void setEditable(boolean editable) { + Control control = getControl(); + if (control instanceof Text) { + ((Text)control).setEditable(editable); + control.setBackground(control.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); + control.setForeground(control.getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND)); + control.setData(AbstractObjectEditingDialog.DO_NOT_ADAPT, Boolean.TRUE); + } + } } diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java index 67a543a8..4dd15d33 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java @@ -16,7 +16,6 @@ package org.eclipse.bpmn2.modeler.core.merrimac.dialogs; import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesAdapter; 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.emf.common.notify.Notification; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; @@ -113,10 +112,6 @@ public class TextObjectEditor extends ObjectEditor { } - public void setEditable(boolean editable) { - text.setEditable(editable); - } - @Override public void setObject(EObject object) { super.setObject(object); diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/ModelEnablements.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/ModelEnablements.java index e522a380..08a3c0d1 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/ModelEnablements.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/ModelEnablements.java @@ -404,6 +404,7 @@ public class ModelEnablements { } } } + return false; } return true; } diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/FeatureSupport.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/FeatureSupport.java index 0b48b119..05046310 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/FeatureSupport.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/FeatureSupport.java @@ -644,6 +644,12 @@ public class FeatureSupport { return (T) pe; } } + + // also search the linked objects + PictogramElement pe = BusinessObjectUtil.getFirstElementOfType(container, PictogramElement.class); + if (pe!=null) { + return getChildElementOfType(pe, property, expectedValue, clazz); + } return null; } diff --git a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/plugin.xml b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/plugin.xml index 56eb287b..f170c733 100644 --- a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/plugin.xml +++ b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/plugin.xml @@ -1036,7 +1036,6 @@ <enable object="ScriptTask" feature="script"/> <enable object="ScriptTask" feature="scriptFormat"/> <enable object="SequenceFlow" feature="auditing"/> - <enable object="SequenceFlow" feature="categoryValueRef"/> <enable object="SequenceFlow" feature="conditionExpression"/> <enable object="SequenceFlow" feature="documentation"/> <enable object="SequenceFlow" feature="extensionDefinitions"/> diff --git a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDefinitionsPropertyComposite.java b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDefinitionsPropertyComposite.java index 6e5f6d70..faf03b31 100644 --- a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDefinitionsPropertyComposite.java +++ b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDefinitionsPropertyComposite.java @@ -54,7 +54,6 @@ public class JbpmDefinitionsPropertyComposite extends DefinitionsPropertyComposi String[] properties = new String[] { "name", //$NON-NLS-1$ "imports", //$NON-NLS-1$ - "rootElements#ItemDefinition", //$NON-NLS-1$ "rootElements#Resource", //$NON-NLS-1$ "rootElements#Message", //$NON-NLS-1$ "rootElements#Error", //$NON-NLS-1$ diff --git a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/messages.properties b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/messages.properties index ceab1eb2..e49f2f5c 100644 --- a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/messages.properties +++ b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/messages.properties @@ -17,7 +17,7 @@ JbpmCallActivityDetailComposite_Title=Called Activity JbpmCommonEventDetailComposite_Error_Message=Can not add more than one Event Definition JbpmCommonEventDetailComposite_Error_Title=Not Supported JbpmCommonEventDetailComposite_Title=Event Definitions -JbpmDataItemsDetailComposite_Title=Global List for {0} +JbpmDataItemsDetailComposite_Title=Global Variables for {0} JbpmDataItemsPropertySection_Dialog_Cancelled=Dialog Cancelled JbpmDataItemsPropertySection_Duplicate_Import=Import Already Exists JbpmDefinitionsPropertyComposite_Imports_Title=Imports diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/Bpmn2EditorItemProviderAdapterFactory.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/Bpmn2EditorItemProviderAdapterFactory.java index c6718dea..44e6d337 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/Bpmn2EditorItemProviderAdapterFactory.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/Bpmn2EditorItemProviderAdapterFactory.java @@ -44,6 +44,7 @@ import org.eclipse.bpmn2.FlowNode; import org.eclipse.bpmn2.FormalExpression; import org.eclipse.bpmn2.Gateway; import org.eclipse.bpmn2.GlobalScriptTask; +import org.eclipse.bpmn2.Group; import org.eclipse.bpmn2.Import; import org.eclipse.bpmn2.InputOutputSpecification; import org.eclipse.bpmn2.InputSet; @@ -109,6 +110,7 @@ import org.eclipse.bpmn2.modeler.ui.adapters.properties.EventPropertiesAdapter; import org.eclipse.bpmn2.modeler.ui.adapters.properties.FlowElementPropertiesAdapter; import org.eclipse.bpmn2.modeler.ui.adapters.properties.FormalExpressionPropertiesAdapter; import org.eclipse.bpmn2.modeler.ui.adapters.properties.GlobalScriptTaskPropertiesAdapter; +import org.eclipse.bpmn2.modeler.ui.adapters.properties.GroupPropertiesAdapter; import org.eclipse.bpmn2.modeler.ui.adapters.properties.ImportPropertiesAdapter; import org.eclipse.bpmn2.modeler.ui.adapters.properties.InputSetPropertiesAdapter; import org.eclipse.bpmn2.modeler.ui.adapters.properties.InterfacePropertiesAdapter; @@ -752,5 +754,13 @@ public class Bpmn2EditorItemProviderAdapterFactory extends Bpmn2ItemProviderAdap return new DocumentationPropertiesAdapter(adapterFactory,object); } + @Override + public ExtendedPropertiesAdapter caseGroup(Group object) { + ExtendedPropertiesAdapter adapter = getTargetRuntimeAdapter(object); + if (adapter!=null) + return adapter; + return new GroupPropertiesAdapter(adapterFactory,object); + } + }; } diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/CategoryValuePropertiesAdapter.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/CategoryValuePropertiesAdapter.java index b6397c0b..39eff6a3 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/CategoryValuePropertiesAdapter.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/CategoryValuePropertiesAdapter.java @@ -79,7 +79,7 @@ public class CategoryValuePropertiesAdapter extends ExtendedPropertiesAdapter<Ca private static String getDisplayName(CategoryValue categoryValue) { Category category = (Category) categoryValue.eContainer(); - String prefix = category==null ? "" : category.getName() + ":"; + String prefix = (category==null || category.getName()==null) ? "" : category.getName() + ":"; String suffix = categoryValue.getValue(); return prefix + suffix; } diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/GroupPropertiesAdapter.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/GroupPropertiesAdapter.java new file mode 100644 index 00000000..d390b755 --- /dev/null +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/GroupPropertiesAdapter.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012, 2013, 2014 Red Hat, Inc. + * All rights reserved. + * This program is made available under the terms of the + * Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + * + * @author Bob Brodt + ******************************************************************************/ + +package org.eclipse.bpmn2.modeler.ui.adapters.properties; + +import java.util.List; + +import org.eclipse.bpmn2.Bpmn2Factory; +import org.eclipse.bpmn2.Bpmn2Package; +import org.eclipse.bpmn2.Category; +import org.eclipse.bpmn2.CategoryValue; +import org.eclipse.bpmn2.Definitions; +import org.eclipse.bpmn2.Group; +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.utils.ModelUtil; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.jface.dialogs.InputDialog; +import org.eclipse.jface.window.Window; + +/** + * + */ +public class GroupPropertiesAdapter extends ExtendedPropertiesAdapter<Group> { + + /** + * @param adapterFactory + * @param object + */ + public GroupPropertiesAdapter(AdapterFactory adapterFactory, Group object) { + super(adapterFactory, object); + + EStructuralFeature feature = Bpmn2Package.eINSTANCE.getGroup_CategoryValueRef(); + setProperty(feature, UI_CAN_CREATE_NEW, Boolean.TRUE); + + this.setFeatureDescriptor(feature, new FeatureDescriptor<Group>(this, object, feature) { + + @Override + public EObject createFeature(Resource resource, EClass eclass) { + Category category = null; + CategoryValue categoryValue = null; + Definitions definitions = ModelUtil.getDefinitions(resource); + List<Category> categories = ModelUtil.getAllRootElements(definitions, Category.class); + if (categories.size()==0) { + category = (Category) Bpmn2Factory.eINSTANCE.create(Bpmn2Package.eINSTANCE.getCategory()); + ModelUtil.setID(category, resource); + InsertionAdapter.add(definitions, Bpmn2Package.eINSTANCE.getDefinitions_RootElements(), category); + } + else { + category = categories.get(0); + } + String title = "Create Category"; + InputDialog dialog = new InputDialog(null, title, "Enter Category", "", null); + if (dialog.open() == Window.OK) { + String name = dialog.getValue(); + if (!name.isEmpty()) { + categoryValue = (CategoryValue) Bpmn2Factory.eINSTANCE.create(Bpmn2Package.eINSTANCE.getCategoryValue()); + ModelUtil.setID(categoryValue,resource); + categoryValue.setValue(name); + category.getCategoryValue().add(categoryValue); + } + } + return categoryValue; + } + + }); + } + +} diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java index 8a05f5aa..c15bbfc5 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java @@ -95,32 +95,6 @@ public class InterfacePropertiesAdapter extends ExtendedPropertiesAdapter<Interf super(owner, object, feature); owner.setProperty(feature, UI_IS_MULTI_CHOICE, Boolean.FALSE); - - owner.setObjectDescriptor(new ObjectDescriptor<T>(owner,object) { - @Override - public String getTextValue() { - return owner.getFeatureDescriptor(feature).getTextValue(); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof BaseElement) { - BaseElement other = (BaseElement)obj; - String otherName = ModelUtil.getName(other); - Object otherValue = other.eGet(feature); - if (ModelUtil.compare(otherName, ModelUtil.getName(object))) { - if (ModelUtil.compare(otherValue, (object).eGet(feature))) - return true; - } - } - return false; - } - - @Override - public String getLabel() { - return Messages.Interface_Implementation_Label; - } - }); } @Override diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2DiagramTypeProvider.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2DiagramTypeProvider.java index 09400931..2c7c4044 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2DiagramTypeProvider.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2DiagramTypeProvider.java @@ -15,6 +15,7 @@ package org.eclipse.bpmn2.modeler.ui.diagram; import java.lang.reflect.Constructor; import java.util.ArrayList; +import org.eclipse.bpmn2.DataState; import org.eclipse.bpmn2.ParticipantMultiplicity; import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime; import org.eclipse.bpmn2.modeler.ui.Activator; @@ -103,6 +104,10 @@ public class Bpmn2DiagramTypeProvider extends AbstractDiagramTypeProvider { if (cbo==null) continue; } + else if (cbo instanceof DataState) { + // this requires a change in the PE's label + cbo = ((DataState)cbo).eContainer(); + } final PictogramElement[] allPictogramElementsForBusinessObject = featureProvider.getAllPictogramElementsForBusinessObject(cbo); for (PictogramElement pe : allPictogramElementsForBusinessObject) { changedAndRelatedBOs.add(pe); diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/AbstractDataFeatureContainer.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/AbstractDataFeatureContainer.java index 25fe439b..03c64e94 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/AbstractDataFeatureContainer.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/AbstractDataFeatureContainer.java @@ -20,7 +20,6 @@ import org.eclipse.bpmn2.DataObjectReference; import org.eclipse.bpmn2.Definitions; import org.eclipse.bpmn2.modeler.core.features.BaseElementFeatureContainer; import org.eclipse.bpmn2.modeler.core.features.data.MoveDataFeature; -import org.eclipse.bpmn2.modeler.core.features.label.UpdateLabelFeature; import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil; import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil; import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; @@ -29,12 +28,10 @@ import org.eclipse.bpmn2.modeler.ui.features.LayoutBaseElementTextFeature; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.ecore.EObject; import org.eclipse.graphiti.features.IDeleteFeature; -import org.eclipse.graphiti.features.IDirectEditingFeature; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.ILayoutFeature; import org.eclipse.graphiti.features.IMoveShapeFeature; import org.eclipse.graphiti.features.IResizeShapeFeature; -import org.eclipse.graphiti.features.IUpdateFeature; import org.eclipse.graphiti.features.context.IDeleteContext; import org.eclipse.graphiti.features.context.IResizeShapeContext; import org.eclipse.graphiti.features.context.impl.DeleteContext; @@ -46,11 +43,6 @@ import org.eclipse.graphiti.services.Graphiti; public abstract class AbstractDataFeatureContainer extends BaseElementFeatureContainer { @Override - public IUpdateFeature getUpdateFeature(IFeatureProvider fp) { - return new UpdateLabelFeature(fp); - } - - @Override public ILayoutFeature getLayoutFeature(IFeatureProvider fp) { return new LayoutBaseElementTextFeature(fp) { diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataInputFeatureContainer.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataInputFeatureContainer.java index 0d18f406..8e78f6c2 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataInputFeatureContainer.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataInputFeatureContainer.java @@ -12,24 +12,21 @@ ******************************************************************************/ package org.eclipse.bpmn2.modeler.ui.features.data; -import org.eclipse.bpmn2.BaseElement; import org.eclipse.bpmn2.Bpmn2Package; import org.eclipse.bpmn2.DataInput; +import org.eclipse.bpmn2.modeler.core.features.MultiUpdateFeature; import org.eclipse.bpmn2.modeler.core.features.data.AbstractCreateDataInputOutputFeature; import org.eclipse.bpmn2.modeler.core.features.data.AddDataFeature; -import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerFactory; -import org.eclipse.bpmn2.modeler.core.model.ModelHandler; +import org.eclipse.bpmn2.modeler.core.features.label.UpdateLabelFeature; import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil; -import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; import org.eclipse.bpmn2.modeler.core.utils.StyleUtil; import org.eclipse.bpmn2.modeler.ui.ImageProvider; import org.eclipse.emf.ecore.EClass; import org.eclipse.graphiti.features.IAddFeature; import org.eclipse.graphiti.features.ICreateFeature; import org.eclipse.graphiti.features.IFeatureProvider; +import org.eclipse.graphiti.features.IUpdateFeature; import org.eclipse.graphiti.features.context.IAddContext; -import org.eclipse.graphiti.features.context.ICreateContext; -import org.eclipse.graphiti.mm.GraphicsAlgorithmContainer; import org.eclipse.graphiti.mm.algorithms.Polygon; import org.eclipse.graphiti.mm.pictograms.ContainerShape; @@ -50,17 +47,20 @@ public class DataInputFeatureContainer extends AbstractDataFeatureContainer { return new AddDataInputFeature(fp); } + @Override + public IUpdateFeature getUpdateFeature(IFeatureProvider fp) { + MultiUpdateFeature multiUpdate = new MultiUpdateFeature(fp); + multiUpdate.addUpdateFeature(new UpdateItemAwareElementFeature<DataInput>(fp)); + multiUpdate.addUpdateFeature(new UpdateLabelFeature(fp)); + return multiUpdate; + } + public class AddDataInputFeature extends AddDataFeature<DataInput> { public AddDataInputFeature(IFeatureProvider fp) { super(fp); } @Override - protected boolean isSupportCollectionMarkers() { - return false; - } - - @Override protected void decorateShape(IAddContext context, ContainerShape containerShape, DataInput businessObject) { Polygon p = (Polygon)getGraphicsAlgorithm(containerShape); Polygon arrow = GraphicsUtil.createDataArrow(p); diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataObjectFeatureContainer.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataObjectFeatureContainer.java index 1e25482f..a3584205 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataObjectFeatureContainer.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataObjectFeatureContainer.java @@ -18,6 +18,7 @@ import java.util.List; import org.eclipse.bpmn2.Bpmn2Package; import org.eclipse.bpmn2.DataObject; import org.eclipse.bpmn2.DataObjectReference; +import org.eclipse.bpmn2.Definitions; import org.eclipse.bpmn2.FlowElement; import org.eclipse.bpmn2.modeler.core.features.AbstractCreateFlowElementFeature; import org.eclipse.bpmn2.modeler.core.features.MultiUpdateFeature; @@ -37,6 +38,11 @@ import org.eclipse.graphiti.features.ICreateFeature; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.IUpdateFeature; import org.eclipse.graphiti.features.context.ICreateContext; +import org.eclipse.graphiti.features.context.IUpdateContext; +import org.eclipse.graphiti.features.context.impl.UpdateContext; +import org.eclipse.graphiti.mm.pictograms.ContainerShape; +import org.eclipse.graphiti.mm.pictograms.PictogramElement; +import org.eclipse.graphiti.services.Graphiti; import org.eclipse.graphiti.ui.internal.util.ui.PopupMenu; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; @@ -64,7 +70,32 @@ public class DataObjectFeatureContainer extends AbstractDataFeatureContainer { @Override public IUpdateFeature getUpdateFeature(IFeatureProvider fp) { MultiUpdateFeature multiUpdate = new MultiUpdateFeature(fp); - multiUpdate.addUpdateFeature(new UpdateDataObjectFeature(fp)); + multiUpdate.addUpdateFeature(new UpdateItemAwareElementFeature<DataObject>(fp) { + @Override + public boolean update(IUpdateContext context) { + if (super.update(context)) { + + // Also update any DataObjectReferences + Object bo = getBusinessObjectForPictogramElement(context.getPictogramElement()); + Definitions definitions = ModelUtil.getDefinitions(bo); + TreeIterator<EObject> iter = definitions.eAllContents(); + while (iter.hasNext()) { + EObject o = iter.next(); + if (o instanceof DataObjectReference) { + for (PictogramElement pe : Graphiti.getLinkService().getPictogramElements(getDiagram(), o)) { + if (pe instanceof ContainerShape) { + UpdateContext newContext = new UpdateContext(pe); + IUpdateFeature f = this.getFeatureProvider().getUpdateFeature(newContext); + f.update(newContext); + } + } + } + } + return true; + } + return false; + } + }); multiUpdate.addUpdateFeature(new UpdateLabelFeature(fp)); return multiUpdate; } diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataObjectReferenceFeatureContainer.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataObjectReferenceFeatureContainer.java index b98a2b7b..c2e75947 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataObjectReferenceFeatureContainer.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataObjectReferenceFeatureContainer.java @@ -24,6 +24,7 @@ import org.eclipse.graphiti.features.IAddFeature; import org.eclipse.graphiti.features.ICreateFeature; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.IUpdateFeature; +import org.eclipse.graphiti.mm.pictograms.PictogramElement; public class DataObjectReferenceFeatureContainer extends AbstractDataFeatureContainer { @@ -45,7 +46,14 @@ public class DataObjectReferenceFeatureContainer extends AbstractDataFeatureCont @Override public IUpdateFeature getUpdateFeature(IFeatureProvider fp) { MultiUpdateFeature multiUpdate = new MultiUpdateFeature(fp); - multiUpdate.addUpdateFeature(new UpdateDataObjectFeature(fp)); + multiUpdate.addUpdateFeature(new UpdateItemAwareElementFeature<DataObjectReference>(fp) { + @Override + protected Object getBusinessObjectForPictogramElement(PictogramElement pe) { + DataObjectReference object = (DataObjectReference)super.getBusinessObjectForPictogramElement(pe); + return object.getDataObjectRef(); + } + + }); multiUpdate.addUpdateFeature(new UpdateLabelFeature(fp)); return multiUpdate; } diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataOutputFeatureContainer.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataOutputFeatureContainer.java index de60faf9..bf7507bc 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataOutputFeatureContainer.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataOutputFeatureContainer.java @@ -12,29 +12,21 @@ ******************************************************************************/ package org.eclipse.bpmn2.modeler.ui.features.data; -import java.io.IOException; - -import org.eclipse.bpmn2.BaseElement; import org.eclipse.bpmn2.Bpmn2Package; -import org.eclipse.bpmn2.DataInput; import org.eclipse.bpmn2.DataOutput; -import org.eclipse.bpmn2.ItemAwareElement; +import org.eclipse.bpmn2.modeler.core.features.MultiUpdateFeature; import org.eclipse.bpmn2.modeler.core.features.data.AbstractCreateDataInputOutputFeature; import org.eclipse.bpmn2.modeler.core.features.data.AddDataFeature; -import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerFactory; -import org.eclipse.bpmn2.modeler.core.model.ModelHandler; -import org.eclipse.bpmn2.modeler.core.model.ModelHandlerLocator; +import org.eclipse.bpmn2.modeler.core.features.label.UpdateLabelFeature; import org.eclipse.bpmn2.modeler.core.utils.GraphicsUtil; -import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; import org.eclipse.bpmn2.modeler.core.utils.StyleUtil; import org.eclipse.bpmn2.modeler.ui.ImageProvider; import org.eclipse.emf.ecore.EClass; import org.eclipse.graphiti.features.IAddFeature; import org.eclipse.graphiti.features.ICreateFeature; import org.eclipse.graphiti.features.IFeatureProvider; +import org.eclipse.graphiti.features.IUpdateFeature; import org.eclipse.graphiti.features.context.IAddContext; -import org.eclipse.graphiti.features.context.ICreateContext; -import org.eclipse.graphiti.mm.GraphicsAlgorithmContainer; import org.eclipse.graphiti.mm.algorithms.Polygon; import org.eclipse.graphiti.mm.pictograms.ContainerShape; @@ -55,17 +47,20 @@ public class DataOutputFeatureContainer extends AbstractDataFeatureContainer { return new AddDataOutputFeature(fp); } + @Override + public IUpdateFeature getUpdateFeature(IFeatureProvider fp) { + MultiUpdateFeature multiUpdate = new MultiUpdateFeature(fp); + multiUpdate.addUpdateFeature(new UpdateItemAwareElementFeature<DataOutput>(fp)); + multiUpdate.addUpdateFeature(new UpdateLabelFeature(fp)); + return multiUpdate; + } + public class AddDataOutputFeature extends AddDataFeature<DataOutput> { public AddDataOutputFeature(IFeatureProvider fp) { super(fp); } @Override - protected boolean isSupportCollectionMarkers() { - return false; - } - - @Override protected void decorateShape(IAddContext context, ContainerShape containerShape, DataOutput businessObject) { Polygon p = (Polygon)getGraphicsAlgorithm(containerShape); Polygon arrow = GraphicsUtil.createDataArrow(p); diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataStoreReferenceFeatureContainer.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataStoreReferenceFeatureContainer.java index 7953c3ab..23000de1 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataStoreReferenceFeatureContainer.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/DataStoreReferenceFeatureContainer.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.bpmn2.Bpmn2Package; +import org.eclipse.bpmn2.DataOutput; import org.eclipse.bpmn2.DataStore; import org.eclipse.bpmn2.DataStoreReference; import org.eclipse.bpmn2.modeler.core.di.DIImport; @@ -23,6 +24,7 @@ import org.eclipse.bpmn2.modeler.core.features.AbstractBpmn2AddElementFeature; import org.eclipse.bpmn2.modeler.core.features.AbstractCreateFlowElementFeature; import org.eclipse.bpmn2.modeler.core.features.BaseElementFeatureContainer; import org.eclipse.bpmn2.modeler.core.features.IFeatureContainer; +import org.eclipse.bpmn2.modeler.core.features.MultiUpdateFeature; import org.eclipse.bpmn2.modeler.core.features.data.MoveDataFeature; import org.eclipse.bpmn2.modeler.core.features.label.LabelFeatureContainer; import org.eclipse.bpmn2.modeler.core.features.label.UpdateLabelFeature; @@ -84,7 +86,10 @@ public class DataStoreReferenceFeatureContainer extends BaseElementFeatureContai @Override public IUpdateFeature getUpdateFeature(IFeatureProvider fp) { - return new UpdateLabelFeature(fp); + MultiUpdateFeature multiUpdate = new MultiUpdateFeature(fp); + multiUpdate.addUpdateFeature(new UpdateItemAwareElementFeature<DataStoreReference>(fp)); + multiUpdate.addUpdateFeature(new UpdateLabelFeature(fp)); + return multiUpdate; } @Override diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/UpdateDataObjectFeature.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/UpdateDataObjectFeature.java deleted file mode 100644 index 28947aba..00000000 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/UpdateDataObjectFeature.java +++ /dev/null @@ -1,139 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011, 2012, 2013 Red Hat, Inc. - * All rights reserved. - * This program is made available under the terms of the - * Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - ******************************************************************************/ -package org.eclipse.bpmn2.modeler.ui.features.data; - -import java.util.Iterator; - -import org.eclipse.bpmn2.DataObject; -import org.eclipse.bpmn2.DataObjectReference; -import org.eclipse.bpmn2.DataState; -import org.eclipse.bpmn2.Definitions; -import org.eclipse.bpmn2.modeler.core.features.AbstractBpmn2UpdateFeature; -import org.eclipse.bpmn2.modeler.core.features.data.Properties; -import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; -import org.eclipse.emf.common.util.TreeIterator; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.graphiti.features.IFeatureProvider; -import org.eclipse.graphiti.features.IReason; -import org.eclipse.graphiti.features.IUpdateFeature; -import org.eclipse.graphiti.features.context.IUpdateContext; -import org.eclipse.graphiti.features.context.impl.UpdateContext; -import org.eclipse.graphiti.features.impl.Reason; -import org.eclipse.graphiti.mm.algorithms.Polyline; -import org.eclipse.graphiti.mm.pictograms.ContainerShape; -import org.eclipse.graphiti.mm.pictograms.PictogramElement; -import org.eclipse.graphiti.mm.pictograms.Shape; -import org.eclipse.graphiti.services.Graphiti; -import org.eclipse.graphiti.services.IPeService; - -public class UpdateDataObjectFeature extends AbstractBpmn2UpdateFeature { - - - public UpdateDataObjectFeature(IFeatureProvider fp) { - super(fp); - } - - @Override - public boolean canUpdate(IUpdateContext context) { - Object o = getBusinessObjectForPictogramElement(context.getPictogramElement()); - return o instanceof DataObject || o instanceof DataObjectReference; - } - - @Override - public IReason updateNeeded(IUpdateContext context) { - IReason reason = super.updateNeeded(context); - if (reason.toBoolean()) - return reason; - - IPeService peService = Graphiti.getPeService(); - ContainerShape container = (ContainerShape) context.getPictogramElement(); - Object bo = getBusinessObjectForPictogramElement(container); - DataObject data = null; - if (bo instanceof DataObject) - data = (DataObject) bo; - else if (bo instanceof DataObjectReference) { - DataObjectReference dataRef = (DataObjectReference)bo; - data = dataRef.getDataObjectRef(); - Object dataStateProperty = peService.getPropertyValue(container,Properties.DATASTATE_PROPERTY); - String dataState = getDataStateAsString(dataRef); - if (!dataState.equals(dataStateProperty)) - return Reason.createTrueReason("Data State Changed"); - } - - boolean isCollection = Boolean.parseBoolean(peService.getPropertyValue(container, - Properties.COLLECTION_PROPERTY)); - return data.isIsCollection() != isCollection ? Reason.createTrueReason("Cardinality Changed") : Reason.createFalseReason(); - } - - @Override - public boolean update(IUpdateContext context) { - IPeService peService = Graphiti.getPeService(); - ContainerShape container = (ContainerShape) context.getPictogramElement(); - Object bo = getBusinessObjectForPictogramElement(container); - DataObject data = null; - if (bo instanceof DataObject) - data = (DataObject) bo; - else if (bo instanceof DataObjectReference) { - data = ((DataObjectReference)bo).getDataObjectRef(); - DataObjectReference dataRef = (DataObjectReference)bo; - String dataState = getDataStateAsString(dataRef); - peService.setPropertyValue(container, Properties.DATASTATE_PROPERTY, dataState); - } - - boolean drawCollectionMarker = data.isIsCollection(); - - Iterator<Shape> iterator = peService.getAllContainedShapes(container).iterator(); - while (iterator.hasNext()) { - Shape shape = iterator.next(); - String prop = peService.getPropertyValue(shape, Properties.HIDEABLE_PROPERTY); - if (prop != null && new Boolean(prop)) { - Polyline line = (Polyline) shape.getGraphicsAlgorithm(); - line.setLineVisible(drawCollectionMarker); - } - } - - peService.setPropertyValue(container, Properties.COLLECTION_PROPERTY, - Boolean.toString(data.isIsCollection())); - - // Also update any DataObjectReferences - if (bo instanceof DataObject) { - Definitions definitions = ModelUtil.getDefinitions(data); - TreeIterator<EObject> iter = definitions.eAllContents(); - while (iter.hasNext()) { - EObject o = iter.next(); - if (o instanceof DataObjectReference) { - for (PictogramElement pe : Graphiti.getLinkService().getPictogramElements(getDiagram(), o)) { - if (pe instanceof ContainerShape) { - UpdateContext newContext = new UpdateContext(pe); - IUpdateFeature f = this.getFeatureProvider().getUpdateFeature(newContext); - f.update(newContext); - } - } - } - } - } - - return true; - } - - private String getDataStateAsString(DataObjectReference dataRef) { - DataState dataState = dataRef.getDataState(); - if (dataState==null) - return ""; - String name = dataState.getName(); - if (name==null || name.isEmpty()) - name = "no_name"; - String id = dataState.getId(); - if (id==null || id.isEmpty()) - id = "no_id"; - return name + " - " + id; - } -} diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/UpdateItemAwareElementFeature.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/UpdateItemAwareElementFeature.java new file mode 100644 index 00000000..49ea12dc --- /dev/null +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/data/UpdateItemAwareElementFeature.java @@ -0,0 +1,116 @@ +/******************************************************************************* + * Copyright (c) 2011, 2012, 2013, 2014 Red Hat, Inc. + * All rights reserved. + * This program is made available under the terms of the + * Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + * + * @author Bob Brodt + ******************************************************************************/ + +package org.eclipse.bpmn2.modeler.ui.features.data; + +import java.util.Iterator; + +import org.eclipse.bpmn2.DataState; +import org.eclipse.bpmn2.ItemAwareElement; +import org.eclipse.bpmn2.modeler.core.features.AbstractBpmn2UpdateFeature; +import org.eclipse.bpmn2.modeler.core.features.data.Properties; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.graphiti.features.IFeatureProvider; +import org.eclipse.graphiti.features.IReason; +import org.eclipse.graphiti.features.context.IUpdateContext; +import org.eclipse.graphiti.features.impl.Reason; +import org.eclipse.graphiti.mm.algorithms.Polyline; +import org.eclipse.graphiti.mm.pictograms.ContainerShape; +import org.eclipse.graphiti.mm.pictograms.Shape; +import org.eclipse.graphiti.services.Graphiti; +import org.eclipse.graphiti.services.IPeService; + +public class UpdateItemAwareElementFeature<T extends ItemAwareElement> extends AbstractBpmn2UpdateFeature { + + public UpdateItemAwareElementFeature(IFeatureProvider fp) { + super(fp); + } + + @Override + public boolean canUpdate(IUpdateContext context) { + Object o = getBusinessObjectForPictogramElement(context.getPictogramElement()); + return o instanceof ItemAwareElement; + } + + @Override + public IReason updateNeeded(IUpdateContext context) { + IReason reason = super.updateNeeded(context); + if (reason.toBoolean()) + return reason; + + IPeService peService = Graphiti.getPeService(); + ContainerShape container = (ContainerShape) context.getPictogramElement(); + ItemAwareElement element = (ItemAwareElement) getBusinessObjectForPictogramElement(container); + + EStructuralFeature isCollection = element.eClass().getEStructuralFeature("isCollection"); + if (isCollection!=null) { + boolean newIsCollection = (boolean) element.eGet(isCollection); + boolean oldIsCollection = Boolean.parseBoolean(peService.getPropertyValue(container, Properties.COLLECTION_PROPERTY)); + if (newIsCollection != oldIsCollection) + return Reason.createTrueReason("Cardinality Changed"); + } + + String newDataState = getDataStateAsString(element); + Object oldDataState = peService.getPropertyValue(container,Properties.DATASTATE_PROPERTY); + + if (!newDataState.equals(oldDataState)) + return Reason.createTrueReason("Data State Changed"); + + return Reason.createFalseReason(); + } + + @Override + public boolean update(IUpdateContext context) { + IPeService peService = Graphiti.getPeService(); + ContainerShape container = (ContainerShape) context.getPictogramElement(); + ItemAwareElement element = (ItemAwareElement) getBusinessObjectForPictogramElement(container); + + // Update the "is collection" feature if the ItemAwareElement has one + EStructuralFeature isCollection = element.eClass().getEStructuralFeature("isCollection"); + if (isCollection!=null) { + boolean newIsCollection = (boolean) element.eGet(isCollection); + + // Find the shape that represents the "is collection" marker + Iterator<Shape> iterator = peService.getAllContainedShapes(container).iterator(); + while (iterator.hasNext()) { + Shape shape = iterator.next(); + String prop = peService.getPropertyValue(shape, Properties.HIDEABLE_PROPERTY); + if (prop != null && new Boolean(prop)) { + Polyline line = (Polyline) shape.getGraphicsAlgorithm(); + line.setLineVisible(newIsCollection); + } + } + + peService.setPropertyValue(container, Properties.COLLECTION_PROPERTY, Boolean.toString(newIsCollection)); + } + + // Update the Data State + String newDataState = getDataStateAsString(element); + peService.setPropertyValue(container, Properties.DATASTATE_PROPERTY, newDataState); + + return true; + } + + private String getDataStateAsString(ItemAwareElement element) { + DataState dataState = element.getDataState(); + if (dataState==null) + return ""; + String name = dataState.getName(); + if (name==null || name.isEmpty()) + name = "no_name"; + String id = dataState.getId(); + if (id==null || id.isEmpty()) + id = "no_id"; + return name + " - " + id; + } +}
\ No newline at end of file diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeContentProvider.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeContentProvider.java index c4a208bf..fb4a8795 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeContentProvider.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeContentProvider.java @@ -16,6 +16,7 @@ package org.eclipse.bpmn2.modeler.ui.property.providers; import java.util.List; import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.ITypeParameter; /** * @author Bob Brodt @@ -28,7 +29,6 @@ public class JavaTypeContentProvider extends AbstractContentProvider { public void collectElements(Object input, List list) { if (input instanceof IType) { list.add(input); - return; } } diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeTreeNode.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeTreeNode.java index 8372946b..2f61f215 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeTreeNode.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeTreeNode.java @@ -22,6 +22,7 @@ import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.ITypeParameter; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.swt.graphics.Image; |