Missed one
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/ModelHandler.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/ModelHandler.java
index a1f6a1b..953f681 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/ModelHandler.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/ModelHandler.java
@@ -582,6 +582,7 @@
FlowElementsContainer container = getFlowElementContainer(target);
if (container.getLaneSets().isEmpty()) {
LaneSet laneSet = create(LaneSet.class);
+ laneSet.setName("Lane Set "+ModelUtil.getIDNumber( laneSet.getId() ));
container.getLaneSets().add(laneSet);
}
container.getLaneSets().get(0).getLanes().add(lane);
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractListComposite.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractListComposite.java
index e21344f..bca83cd 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractListComposite.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/AbstractListComposite.java
@@ -14,6 +14,7 @@
package org.eclipse.bpmn2.modeler.core.merrimac.clad;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import org.eclipse.bpmn2.modeler.core.Activator;
@@ -22,11 +23,13 @@
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.BasicFeatureMap;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.util.FeatureMap;
import org.eclipse.emf.ecore.util.FeatureMap.Entry;
import org.eclipse.emf.edit.provider.INotifyChangedListener;
@@ -702,12 +705,71 @@
return section;
}
+ @SuppressWarnings("unchecked")
@Override
public void notifyChanged(Notification notification) {
- if (this.businessObject == notification.getNotifier() &&
- this.feature == notification.getFeature()) {
- final EList<EObject> list = (EList<EObject>)businessObject.eGet(feature);
- tableViewer.setInput(list);
+ EList<EObject> table = (EList<EObject>)businessObject.eGet(feature);
+ Object n = notification.getNotifier();
+ if (table.contains(n)) {
+ tableViewer.setInput(table);
+ return; // quick exit before the exhaustive search that follows
}
+ if (n instanceof EObject) {
+ HashSet<Object> visited = new HashSet<Object>();
+ if (refreshIfNeededRecursive((EObject)n, table, visited))
+ return;
+ }
+ }
+
+ @SuppressWarnings("rawtypes")
+ private boolean refreshIfNeededRecursive(EObject value, EList<EObject> table, HashSet<Object> visited) {
+ for (EStructuralFeature f : value.eClass().getEAllStructuralFeatures()) {
+ try {
+ Object v = value.eGet(f);
+ if (!visited.contains(v)) {
+ visited.add(v);
+ if (v instanceof List) {
+ if (!((List)v).isEmpty())
+ if (refreshIfNeededRecursive((List)v, table, visited))
+ return true;
+ }
+ else if (v instanceof EObject) {
+ if (refreshIfNeeded((EObject)v, table))
+ return true;
+ }
+ }
+ }
+ catch (Exception e) {
+ // some getters may throw exceptions - ignore those
+ }
+ }
+ return refreshIfNeeded(value, table);
+ }
+
+ static int count = 0;
+ @SuppressWarnings("rawtypes")
+ private boolean refreshIfNeededRecursive(List list, EList<EObject> table, HashSet<Object> visited) {
+ for (Object v : list) {
+ if (!visited.contains(v)) {
+ visited.add(v);
+ if (v instanceof List) {
+ if (refreshIfNeededRecursive((List)v, table, visited))
+ return true;
+ }
+ else if (v instanceof EObject) {
+ if (refreshIfNeededRecursive((EObject)v, table, visited))
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean refreshIfNeeded(EObject value, EList<EObject> table) {
+ if (table.contains(value)) {
+ tableViewer.setInput(table);
+ return true;
+ }
+ return false;
}
}
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/ListAndDetailCompositeBase.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/ListAndDetailCompositeBase.java
index d61d91f..991a057 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/ListAndDetailCompositeBase.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/ListAndDetailCompositeBase.java
@@ -241,12 +241,20 @@
if (c instanceof Composite) {
getAllChildWidgets((Composite)c,kids);
}
- if (!c.isDisposed())
- kids.add(c);
+ if (!c.isDisposed() &&
+ c.getData(IConstants.NOTIFY_CHANGE_LISTENER_KEY) instanceof INotifyChangedListener) {
+ kids.add(c);
+ }
}
}
}
+ // TODO: Figure out a broader method of detecting model changes.
+ // This listener is only called AFTER a transaction has committed,
+ // it will not receive notification of model changes inside a txn.
+ // So, while this works in the Property Sheet pages, things like
+ // the ObjectEditingDialog (which makes changes in the current txn)
+ // will not cause other widgets in the dialog to be notified.
@Override
public void resourceSetChanged(ResourceSetChangeEvent event) {
final List<Notification> notifications = new ArrayList<Notification>();
@@ -267,7 +275,7 @@
Display.getDefault().asyncExec( new Runnable() {
public void run() {
List<Control>kids = new ArrayList<Control>();
- Composite parent = ListAndDetailCompositeBase.this.getParent();
+ Composite parent = ListAndDetailCompositeBase.this;
AbstractBpmn2PropertySection section = ListAndDetailCompositeBase.this.getPropertySection();
if (section!=null && section.getTabbedPropertySheetPage()!=null) {
parent = (Composite)section.getTabbedPropertySheetPage().getControl();
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/TableColumn.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/TableColumn.java
index 65a1784..4da5d74 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/TableColumn.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/clad/TableColumn.java
@@ -36,6 +36,7 @@
// The column cell editor
protected CellEditor cellEditor = null;
protected boolean editable = true;
+ protected String headerText = null;
public TableColumn(EObject o, EStructuralFeature f) {
this(null,o,f);
@@ -46,6 +47,16 @@
object = o;
feature = f;
}
+
+ public TableColumn(EObject o, String f) {
+ this(null,o,f);
+ }
+
+ public TableColumn(AbstractListComposite abstractListComposite, EObject o, String f) {
+ this.listComposite = abstractListComposite;
+ object = o;
+ feature = o.eClass().getEStructuralFeature(f);
+ }
public void setOwner(AbstractListComposite abstractListComposite) {
this.listComposite = abstractListComposite;
@@ -55,8 +66,15 @@
tableViewer = t;
}
+ public void setHeaderText(String text) {
+ headerText = text;
+ }
+
@Override
public String getHeaderText() {
+ if (headerText!=null)
+ return headerText;
+
String text = "";
if (feature!=null) {
if (feature.eContainer() instanceof EClass) {
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureEditingDialog.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureEditingDialog.java
index 20f8b7e..a3fa7ca 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureEditingDialog.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/FeatureEditingDialog.java
@@ -18,10 +18,14 @@
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl;
import org.eclipse.graphiti.ui.editor.DiagramEditor;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.emf.transaction.RecordingCommand;
public class FeatureEditingDialog extends ObjectEditingDialog {
@@ -42,7 +46,7 @@
ModelSubclassSelectionDialog dialog = new ModelSubclassSelectionDialog(editor, object, feature);
if (dialog.open()==Window.OK){
eclass = (EClass)dialog.getResult()[0];
- newObject = ModelUtil.createFeature(object, feature, eclass);
+ newObject = createNewObject(object, feature, eclass);
}
else
cancel = true;
@@ -53,6 +57,23 @@
return content;
}
+ protected EObject createNewObject(final EObject object, final EStructuralFeature feature, final EClass eclass) {
+ final EObject[] result = new EObject[1];
+ final TransactionalEditingDomain domain = (TransactionalEditingDomainImpl)editor.getEditingDomain();
+ if (domain!=null) {
+ domain.getCommandStack().execute(new RecordingCommand(domain) {
+ @Override
+ protected void doExecute() {
+ result[0] = ModelUtil.createFeature(object, feature, eclass);
+ }
+ });
+ }
+ else {
+ result[0] = ModelUtil.createFeature(object, feature, eclass);
+ }
+ return result[0];
+ }
+
public void aboutToOpen() {
String title;
if (createNew)
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 d2d2dce..cdaa1e3 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
@@ -958,12 +958,11 @@
if (valueChanged) {
try {
- InsertionAdapter insertionAdapter = AdapterUtil.adapt(value, InsertionAdapter.class);
- if (insertionAdapter!=null) {
+ if (value 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.execute();
+ InsertionAdapter.executeIfNeeded((EObject)value);
}
if (isEmpty(value)){
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 1315fb0..b5b1c6d 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
@@ -1,240 +1,247 @@
-/*******************************************************************************
- * Copyright (c) 2011 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
- ******************************************************************************/
-/**
- * <copyright>
- * </copyright>
- *
- * $Id$
- */
-package org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.model.util;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.bpmn2.Bpmn2Package;
-import org.eclipse.bpmn2.CallActivity;
-import org.eclipse.bpmn2.CallableElement;
-import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerFactory;
-import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerResourceImpl;
-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.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.EAttributeImpl;
-import org.eclipse.emf.ecore.util.BasicFeatureMap;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.emf.ecore.xmi.XMLHelper;
-import org.eclipse.emf.ecore.xmi.XMLLoad;
-import org.eclipse.emf.ecore.xmi.XMLResource;
-import org.eclipse.emf.ecore.xmi.XMLSave;
-import org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl;
-import org.eclipse.emf.ecore.xmi.impl.XMLString;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Resource </b> associated with the package.
- * <!-- end-user-doc -->
- * @see org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.model.util.ModelResourceFactoryImpl
- * @generated NOT
- */
-public class ModelResourceImpl extends Bpmn2ModelerResourceImpl {
-
- /**
- * Creates an instance of the resource.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @param uri the URI of the new resource.
- * @generated NOT
- */
- public ModelResourceImpl(URI uri) {
- super(uri);
- }
-
-
- /**
- * Override this method to hook in our own XmlHandler
- */
- @Override
- protected XMLLoad createXMLLoad() {
- return new XMLLoadImpl(createXMLHelper()) {
- @Override
- protected DefaultHandler makeDefaultHandler() {
- return new ModelXmlHandler(resource, helper, options);
- }
- };
- }
-
- @Override
- protected XMLSave createXMLSave() {
- return new Bpmn2ModelerXMLSave(createXMLHelper()) {
-
- private boolean needTargetNamespace = true;
-
- @Override
- 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);
- }
-
- @Override
- protected void init(XMLResource resource, Map<?, ?> options) {
- super.init(resource, options);
- doc = new XMLString(Integer.MAX_VALUE, publicId, systemId, null) {
- @Override
- public void addAttribute(String name, String value) {
- if ("targetNamespace".equals(name))
- needTargetNamespace = false;
- else if (XSI_SCHEMA_LOCATION.equals(name)) {
- value = "http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd";
- }
- super.addAttribute(name, value);
- }
- };
- }
-
- @Override
- protected void addNamespaceDeclarations() {
- if (needTargetNamespace)
- doc.addAttribute("targetNamespace", ModelPackage.eNS_URI);
- super.addNamespaceDeclarations();
- }
- };
- }
-
- /**
- * We need extend the standard SAXXMLHandler to hook into the handling of attribute references
- * which may be either simple ID Strings or QNames. We'll search through all of the objects'
- * IDs first to find the one we're looking for. If not, we'll try a QName search.
- */
- protected static class ModelXmlHandler extends Bpmn2ModelerXmlHandler {
-
- public ModelXmlHandler(XMLResource xmiResource, XMLHelper helper, Map<?, ?> options) {
- super(xmiResource, helper, options);
- }
-
- @Override
- public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
- for (int i=0; i<attributes.getLength(); ++i ) {
- String n = attributes.getQName(i);
- if (n.startsWith("xmlns:")) {
- String v = attributes.getValue(i);
- if (ModelPackage.eINSTANCE.getNsURI().equals(v)) {
- Bpmn2ModelerFactory.setEnableModelExtensions(false);
- break;
- }
- }
- }
- super.startElement(uri, localName, qName, attributes);
- }
-
- @Override
- public void endDocument() {
- super.endDocument();
- Bpmn2ModelerFactory.setEnableModelExtensions(true);
- }
-
- @SuppressWarnings("unchecked")
- @Override
- protected void processElement(String name, String prefix, String localName) {
-
- super.processElement(name, prefix, localName);
-
- // ugly hack for https://bugs.eclipse.org/bugs/show_bug.cgi?id=355686
- // Remove the "type" attribute from the feature parentMap if there is one.
- // The XSI type will have already been used to construct the EObject,
- // so any "type" in the feature parentMap will be a duplicate which will
- // cause problems during parsing.
- // See also getXSIType()
- EObject childObject = objects.peekEObject();
- if (childObject!=null) {
- try {
- EStructuralFeature anyAttribute = childObject.eClass().getEStructuralFeature(Bpmn2Package.BASE_ELEMENT__ANY_ATTRIBUTE);
- if (anyAttribute!=null) {
- List<BasicFeatureMap.Entry> anyMap = (List<BasicFeatureMap.Entry>)childObject.eGet(anyAttribute);
- if (anyMap!=null) {
- List<BasicFeatureMap.Entry> removed = new ArrayList<BasicFeatureMap.Entry>();
- for (BasicFeatureMap.Entry fe : anyMap) {
- if (fe.getEStructuralFeature() instanceof EAttribute) {
- EAttributeImpl a = (EAttributeImpl)fe.getEStructuralFeature();
- String n = a.getName();
- String ns = a.getExtendedMetaData().getNamespace();
- if (TYPE.equals(n) && XSI_URI.equals(ns)) {
- removed.add(fe);
- }
- }
- }
- if (removed.size()>0)
- anyMap.removeAll(removed);
- }
- }
- }
- catch(Exception e) {
- }
- }
- }
-
- @Override
- protected String getXSIType() {
- if (isNamespaceAware)
- return attribs.getValue(ExtendedMetaData.XSI_URI,
- XMLResource.TYPE);
-
- // If an parameter specifies multiple xsi:type data types, the last one wins.
- // NOTE: we must check for "type" in any namespace with the URI
- // "http://www.w3.org/2001/XMLSchema-instance"
- String value = null;
- int length = attribs.getLength();
- for (int i = 0; i < length; ++i) {
- attribs.getQName(i);
- String localpart= attribs.getLocalName(i);
- String prefix = null;
- int ci = localpart.lastIndexOf(':');
- if (ci>0) {
- prefix = localpart.substring(0, ci);
- localpart = localpart.substring(ci+1);
- }
- if (TYPE.equals(localpart)) {
- String uri = helper.getNamespaceURI(prefix);
- if (XSI_URI.equals(uri)) {
- value = attribs.getValue(i);
- }
- }
- }
- return value;
- }
-
- @Override
- protected void setValueFromId(EObject object, EReference eReference, String ids) {
- // the CalledElementRef in CallActivity is just an ID. This means we need
- // to create a CallableElement which is simply a proxy, not a real object.
- if (object instanceof CallActivity) {
- CallActivity ca = (CallActivity)object;
- CallableElement ce = Bpmn2ModelerFactory.create(CallableElement.class);
- ((InternalEObject)ce).eSetProxyURI(URI.createURI(ids));
- ca.setCalledElementRef(ce);
- }
- else
- super.setValueFromId(object, eReference, ids);
- }
- }
-} //ModelResourceImpl
+/*******************************************************************************
+ * Copyright (c) 2011 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
+ ******************************************************************************/
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.model.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.CallActivity;
+import org.eclipse.bpmn2.CallableElement;
+import org.eclipse.bpmn2.Interface;
+import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerFactory;
+import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerResourceImpl;
+import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
+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.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.EAttributeImpl;
+import org.eclipse.emf.ecore.util.BasicFeatureMap;
+import org.eclipse.emf.ecore.util.ExtendedMetaData;
+import org.eclipse.emf.ecore.xmi.XMLHelper;
+import org.eclipse.emf.ecore.xmi.XMLLoad;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.ecore.xmi.XMLSave;
+import org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMLString;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Resource </b> associated with the package.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.model.util.ModelResourceFactoryImpl
+ * @generated NOT
+ */
+public class ModelResourceImpl extends Bpmn2ModelerResourceImpl {
+
+ /**
+ * Creates an instance of the resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param uri the URI of the new resource.
+ * @generated NOT
+ */
+ public ModelResourceImpl(URI uri) {
+ super(uri);
+ }
+
+
+ /**
+ * Override this method to hook in our own XmlHandler
+ */
+ @Override
+ protected XMLLoad createXMLLoad() {
+ return new XMLLoadImpl(createXMLHelper()) {
+ @Override
+ protected DefaultHandler makeDefaultHandler() {
+ return new ModelXmlHandler(resource, helper, options);
+ }
+ };
+ }
+
+ @Override
+ protected XMLSave createXMLSave() {
+ return new Bpmn2ModelerXMLSave(createXMLHelper()) {
+
+ private boolean needTargetNamespace = true;
+
+ @Override
+ 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);
+ }
+
+ @Override
+ protected void init(XMLResource resource, Map<?, ?> options) {
+ super.init(resource, options);
+ doc = new XMLString(Integer.MAX_VALUE, publicId, systemId, null) {
+ @Override
+ public void addAttribute(String name, String value) {
+ if ("targetNamespace".equals(name))
+ needTargetNamespace = false;
+ else if (XSI_SCHEMA_LOCATION.equals(name)) {
+ value = "http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd";
+ }
+ super.addAttribute(name, value);
+ }
+ };
+ }
+
+ @Override
+ protected void addNamespaceDeclarations() {
+ if (needTargetNamespace)
+ doc.addAttribute("targetNamespace", ModelPackage.eNS_URI);
+ super.addNamespaceDeclarations();
+ }
+ };
+ }
+
+ /**
+ * We need extend the standard SAXXMLHandler to hook into the handling of attribute references
+ * which may be either simple ID Strings or QNames. We'll search through all of the objects'
+ * IDs first to find the one we're looking for. If not, we'll try a QName search.
+ */
+ protected static class ModelXmlHandler extends Bpmn2ModelerXmlHandler {
+
+ public ModelXmlHandler(XMLResource xmiResource, XMLHelper helper, Map<?, ?> options) {
+ super(xmiResource, helper, options);
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+ for (int i=0; i<attributes.getLength(); ++i ) {
+ String n = attributes.getQName(i);
+ if (n.startsWith("xmlns:")) {
+ String v = attributes.getValue(i);
+ if (ModelPackage.eINSTANCE.getNsURI().equals(v)) {
+ Bpmn2ModelerFactory.setEnableModelExtensions(false);
+ break;
+ }
+ }
+ }
+ super.startElement(uri, localName, qName, attributes);
+ }
+
+ @Override
+ public void endDocument() {
+ super.endDocument();
+ Bpmn2ModelerFactory.setEnableModelExtensions(true);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void processElement(String name, String prefix, String localName) {
+
+ super.processElement(name, prefix, localName);
+
+ // ugly hack for https://bugs.eclipse.org/bugs/show_bug.cgi?id=355686
+ // Remove the "type" attribute from the feature parentMap if there is one.
+ // The XSI type will have already been used to construct the EObject,
+ // so any "type" in the feature parentMap will be a duplicate which will
+ // cause problems during parsing.
+ // See also getXSIType()
+ EObject childObject = objects.peekEObject();
+ if (childObject!=null) {
+ try {
+ EStructuralFeature anyAttribute = childObject.eClass().getEStructuralFeature(Bpmn2Package.BASE_ELEMENT__ANY_ATTRIBUTE);
+ if (anyAttribute!=null) {
+ List<BasicFeatureMap.Entry> anyMap = (List<BasicFeatureMap.Entry>)childObject.eGet(anyAttribute);
+ if (anyMap!=null) {
+ List<BasicFeatureMap.Entry> removed = new ArrayList<BasicFeatureMap.Entry>();
+ for (BasicFeatureMap.Entry fe : anyMap) {
+ if (fe.getEStructuralFeature() instanceof EAttribute) {
+ EAttributeImpl a = (EAttributeImpl)fe.getEStructuralFeature();
+ String n = a.getName();
+ String ns = a.getExtendedMetaData().getNamespace();
+ if (TYPE.equals(n) && XSI_URI.equals(ns)) {
+ removed.add(fe);
+ }
+ }
+ }
+ if (removed.size()>0)
+ anyMap.removeAll(removed);
+ }
+ }
+ }
+ catch(Exception e) {
+ }
+ }
+ }
+
+ @Override
+ protected String getXSIType() {
+ if (isNamespaceAware)
+ return attribs.getValue(ExtendedMetaData.XSI_URI,
+ XMLResource.TYPE);
+
+ // If an parameter specifies multiple xsi:type data types, the last one wins.
+ // NOTE: we must check for "type" in any namespace with the URI
+ // "http://www.w3.org/2001/XMLSchema-instance"
+ String value = null;
+ int length = attribs.getLength();
+ for (int i = 0; i < length; ++i) {
+ attribs.getQName(i);
+ String localpart= attribs.getLocalName(i);
+ String prefix = null;
+ int ci = localpart.lastIndexOf(':');
+ if (ci>0) {
+ prefix = localpart.substring(0, ci);
+ localpart = localpart.substring(ci+1);
+ }
+ if (TYPE.equals(localpart)) {
+ String uri = helper.getNamespaceURI(prefix);
+ if (XSI_URI.equals(uri)) {
+ value = attribs.getValue(i);
+ }
+ }
+ }
+ return value;
+ }
+
+ @Override
+ protected void setValueFromId(EObject object, EReference eReference, String ids) {
+ if (object instanceof CallActivity) {
+ // the CalledElementRef in CallActivity is just an ID. This means we need
+ // to create a CallableElement which is simply a proxy, not a real object.
+ CallActivity ca = (CallActivity)object;
+ CallableElement ce = Bpmn2ModelerFactory.create(CallableElement.class);
+ ((InternalEObject)ce).eSetProxyURI(URI.createURI(ids));
+ ca.setCalledElementRef(ce);
+ }
+ else if (object instanceof Interface && eReference==Bpmn2Package.eINSTANCE.getInterface_ImplementationRef()) {
+ // the Interface.implementationRef is yet again just a string
+ Interface iface = (Interface)object;
+ iface.setImplementationRef( ModelUtil.createStringWrapper(ids) );
+ }
+ else
+ super.setValueFromId(object, eReference, ids);
+ }
+ }
+} //ModelResourceImpl
diff --git a/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDefinitionsPropertySection.java b/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDefinitionsPropertySection.java
index 8c3b64c..8a6dd18 100644
--- a/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDefinitionsPropertySection.java
+++ b/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDefinitionsPropertySection.java
@@ -1,36 +1,144 @@
-/*******************************************************************************
- * Copyright (c) 2011 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.runtime.jboss.jbpm5.property;
-
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
-import org.eclipse.bpmn2.modeler.ui.property.diagrams.DefinitionsPropertySection;
-import org.eclipse.bpmn2.modeler.ui.property.tasks.TaskDetailComposite;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * @author Bob Brodt
- *
- */
-public class JbpmDefinitionsPropertySection extends DefinitionsPropertySection {
-
- @Override
- protected AbstractDetailComposite createSectionRoot() {
- return new JbpmDefinitionsPropertyComposite(this);
- }
-
- @Override
- public AbstractDetailComposite createSectionRoot(Composite parent, int style) {
- return new JbpmDefinitionsPropertyComposite(parent,style);
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2011 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.runtime.jboss.jbpm5.property;
+
+import org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.Message;
+import org.eclipse.bpmn2.Property;
+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.DefaultListComposite;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.ListCompositeColumnProvider;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.PropertiesCompositeFactory;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.TableColumn;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultDetailComposite.AbstractPropertiesProvider;
+import org.eclipse.bpmn2.modeler.ui.property.data.ItemAwareElementDetailComposite;
+import org.eclipse.bpmn2.modeler.ui.property.data.MessageDetailComposite;
+import org.eclipse.bpmn2.modeler.ui.property.data.MessageListComposite;
+import org.eclipse.bpmn2.modeler.ui.property.diagrams.DefinitionsPropertySection;
+import org.eclipse.bpmn2.modeler.ui.property.tasks.TaskDetailComposite;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Bob Brodt
+ *
+ */
+public class JbpmDefinitionsPropertySection extends DefinitionsPropertySection {
+ static {
+ PropertiesCompositeFactory.register(Message.class, JbpmMessageDetailComposite.class);
+ PropertiesCompositeFactory.register(Message.class, JbpmMessageListComposite.class);
+ }
+
+ @Override
+ protected AbstractDetailComposite createSectionRoot() {
+ return new JbpmDefinitionsPropertyComposite(this);
+ }
+
+ @Override
+ public AbstractDetailComposite createSectionRoot(Composite parent, int style) {
+ return new JbpmDefinitionsPropertyComposite(parent,style);
+ }
+ public class JbpmMessageDetailComposite extends DefaultDetailComposite {
+
+ private AbstractPropertiesProvider propertiesProvider;
+
+ public JbpmMessageDetailComposite(Composite parent, int style) {
+ super(parent, style);
+ }
+
+ /**
+ * @param section
+ */
+ public JbpmMessageDetailComposite(AbstractBpmn2PropertySection section) {
+ super(section);
+ }
+
+ @Override
+ public AbstractPropertiesProvider getPropertiesProvider(EObject object) {
+ if (propertiesProvider==null) {
+ propertiesProvider = new AbstractPropertiesProvider(object) {
+ String[] properties = new String[] {
+ "id",
+ "itemRef"
+ };
+
+ @Override
+ public String[] getProperties() {
+ return properties;
+ }
+ };
+ }
+ return propertiesProvider;
+ }
+
+ @Override
+ protected void bindAttribute(Composite parent, EObject object, EAttribute attribute, String label) {
+ if ("id".equals(attribute.getName()))
+ label = "Name";
+ super.bindAttribute(parent, object, attribute, label);
+ }
+
+ @Override
+ protected boolean isModelObjectEnabled(String className, String featureName) {
+ return true;
+ }
+ }
+
+ public class JbpmMessageListComposite extends DefaultListComposite {
+
+ public JbpmMessageListComposite(AbstractBpmn2PropertySection section, int style) {
+ super(section, style);
+ // TODO Auto-generated constructor stub
+ }
+
+ public JbpmMessageListComposite(AbstractBpmn2PropertySection section) {
+ super(section,
+ AbstractListComposite.SHOW_DETAILS |
+ AbstractListComposite.ADD_BUTTON |
+ AbstractListComposite.MOVE_BUTTONS |
+ AbstractListComposite.DELETE_BUTTON);
+ }
+
+ public JbpmMessageListComposite(Composite parent, int style) {
+ super(parent,
+ AbstractListComposite.SHOW_DETAILS |
+ AbstractListComposite.ADD_BUTTON |
+ AbstractListComposite.MOVE_BUTTONS |
+ AbstractListComposite.DELETE_BUTTON);
+ }
+
+ @Override
+ public ListCompositeColumnProvider getColumnProvider(EObject object, EStructuralFeature feature) {
+ if (columnProvider==null) {
+ columnProvider = new ListCompositeColumnProvider(this, false);
+ TableColumn tc = new TableColumn(object,Bpmn2Package.eINSTANCE.getBaseElement_Id());
+ tc.setHeaderText("Name");
+ columnProvider.add(tc);
+ columnProvider.add(new TableColumn(object,Bpmn2Package.eINSTANCE.getMessage_ItemRef()));
+ }
+ return columnProvider;
+ }
+
+ @Override
+ protected boolean isModelObjectEnabled(String className, String featureName) {
+ return true;
+ }
+ }
+
+}
diff --git a/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDescriptionPropertySection.java b/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDescriptionPropertySection.java
index f5dfe71..5c23f13 100644
--- a/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDescriptionPropertySection.java
+++ b/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmDescriptionPropertySection.java
@@ -1,101 +1,101 @@
-/*******************************************************************************
- * Copyright (c) 2011 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.runtime.jboss.jbpm5.property;
-
-import org.eclipse.bpmn2.BaseElement;
-import org.eclipse.bpmn2.Participant;
-import org.eclipse.bpmn2.Process;
-import org.eclipse.bpmn2.di.BPMNDiagram;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
-import org.eclipse.bpmn2.modeler.ui.property.DescriptionPropertySection;
-import org.eclipse.bpmn2.modeler.ui.property.tasks.TaskDetailComposite;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IWorkbenchPart;
-
-/**
- * This is an empty tab section which simply exists to hide the "Basic" tab
- * defined the editor UI plugin.
- *
- * @author Bob Brodt
- *
- */
-public class JbpmDescriptionPropertySection extends DescriptionPropertySection {
-
- @Override
- public boolean appliesTo(IWorkbenchPart part, ISelection selection) {
- return getBusinessObjectForSelection(selection) != null;
- }
-
- @Override
- protected AbstractDetailComposite createSectionRoot() {
- return new JbpmDescriptionPropertyComposite(this);
- }
-
- @Override
- public AbstractDetailComposite createSectionRoot(Composite parent, int style) {
- return new JbpmDescriptionPropertyComposite(parent,style);
- }
-
- public JbpmDescriptionPropertySection() {
- super();
- // TODO Auto-generated constructor stub
- }
-
- public class JbpmDescriptionPropertyComposite extends DescriptionPropertyComposite {
-
- public JbpmDescriptionPropertyComposite(
- AbstractBpmn2PropertySection section) {
- super(section);
- }
-
- public JbpmDescriptionPropertyComposite(Composite parent, int style) {
- super(parent, style);
- }
-
- @Override
- public void createBindings(EObject be) {
- // for BPMNDiagram objects, pick out the Process and render the Process attributes
- Process process = null;
- if (be instanceof Participant) {
- process = ((Participant) be).getProcessRef();
- } else if (be instanceof BPMNDiagram) {
- BaseElement bpmnElement = ((BPMNDiagram)be).getPlane().getBpmnElement();
- if (bpmnElement instanceof Process)
- process = (Process)bpmnElement;
- }
-
- if (process==null) {
- // display the default Description tab
- super.createBindings(be);
- }
- else {
- // create our own for Process
- bindDescription(be);
-
- bindAttribute(process, "id");
- bindAttribute(process, "name");
- bindAttribute(process, "anyAttribute");
- bindAttribute(process, "processType");
- bindAttribute(process, "isExecutable");
- bindAttribute(process, "isClosed");
-// bindList(process, "properties"); // this has moved to JbpmDataItemsDetailComposite
- bindList(process, "laneSets");
- }
- }
-
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2011 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.runtime.jboss.jbpm5.property;
+
+import org.eclipse.bpmn2.BaseElement;
+import org.eclipse.bpmn2.Participant;
+import org.eclipse.bpmn2.Process;
+import org.eclipse.bpmn2.di.BPMNDiagram;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
+import org.eclipse.bpmn2.modeler.ui.property.DescriptionPropertySection;
+import org.eclipse.bpmn2.modeler.ui.property.tasks.TaskDetailComposite;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbenchPart;
+
+/**
+ * This is an empty tab section which simply exists to hide the "Basic" tab
+ * defined the editor UI plugin.
+ *
+ * @author Bob Brodt
+ *
+ */
+public class JbpmDescriptionPropertySection extends DescriptionPropertySection {
+
+ @Override
+ public boolean appliesTo(IWorkbenchPart part, ISelection selection) {
+ return getBusinessObjectForSelection(selection) != null;
+ }
+
+ @Override
+ protected AbstractDetailComposite createSectionRoot() {
+ return new JbpmDescriptionPropertyComposite(this);
+ }
+
+ @Override
+ public AbstractDetailComposite createSectionRoot(Composite parent, int style) {
+ return new JbpmDescriptionPropertyComposite(parent,style);
+ }
+
+ public JbpmDescriptionPropertySection() {
+ super();
+ // TODO Auto-generated constructor stub
+ }
+
+ public class JbpmDescriptionPropertyComposite extends DescriptionPropertyComposite {
+
+ public JbpmDescriptionPropertyComposite(
+ AbstractBpmn2PropertySection section) {
+ super(section);
+ }
+
+ public JbpmDescriptionPropertyComposite(Composite parent, int style) {
+ super(parent, style);
+ }
+
+ @Override
+ public void createBindings(EObject be) {
+ // for BPMNDiagram objects, pick out the Process and render the Process attributes
+ Process process = null;
+ if (be instanceof Participant) {
+ process = ((Participant) be).getProcessRef();
+ } else if (be instanceof BPMNDiagram) {
+ BaseElement bpmnElement = ((BPMNDiagram)be).getPlane().getBpmnElement();
+ if (bpmnElement instanceof Process)
+ process = (Process)bpmnElement;
+ }
+
+ if (process==null) {
+ // display the default Description tab
+ super.createBindings(be);
+ }
+ else {
+ // create our own for Process
+ bindDescription(be);
+
+ bindAttribute(process, "id");
+ bindAttribute(process, "name");
+ bindAttribute(process, "anyAttribute");
+ bindAttribute(process, "processType");
+ bindAttribute(process, "isExecutable");
+ bindAttribute(process, "isClosed");
+// bindList(process, "properties"); // this has moved to JbpmDataItemsDetailComposite
+// bindList(process, "laneSets"); // don't need this
+ }
+ }
+
+ }
+}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java
index 339c01d..77f8873 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java
@@ -49,6 +49,7 @@
String text = ModelUtil.getStringWrapperValue( iface.getImplementationRef() ); // + type;
if (text==null)
return ModelUtil.getDisplayName(iface.getImplementationRef());
+ return text;
}
return "";
}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/MessagePropertiesAdapter.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/MessagePropertiesAdapter.java
index 2f66ec1..5b51b09 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/MessagePropertiesAdapter.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/MessagePropertiesAdapter.java
@@ -1,50 +1,75 @@
-/*******************************************************************************
- * Copyright (c) 2011 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 org.eclipse.bpmn2.Bpmn2Package;
-import org.eclipse.bpmn2.Error;
-import org.eclipse.bpmn2.Message;
-import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesAdapter;
-import org.eclipse.bpmn2.modeler.core.adapters.ObjectDescriptor;
-import org.eclipse.bpmn2.modeler.ui.features.choreography.ChoreographyUtil;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.resource.Resource;
-
-/**
- * @author Gary Brown
- *
- */
-public class MessagePropertiesAdapter extends RootElementPropertiesAdapter<Message> {
-
- /**
- * @param adapterFactory
- * @param object
- */
- public MessagePropertiesAdapter(AdapterFactory adapterFactory, Message object) {
- super(adapterFactory, object);
-
- setObjectDescriptor(new RootElementObjectDescriptor<Message>(adapterFactory, object) {
- @Override
- public String getDisplayName(Object context) {
- final Message mesg = adopt(context);
- String text = ChoreographyUtil.getMessageName(mesg);
- return text;
- }
- });
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2011 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 org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.Error;
+import org.eclipse.bpmn2.ItemAwareElement;
+import org.eclipse.bpmn2.ItemDefinition;
+import org.eclipse.bpmn2.Message;
+import org.eclipse.bpmn2.modeler.core.adapters.AdapterUtil;
+import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesAdapter;
+import org.eclipse.bpmn2.modeler.core.adapters.FeatureDescriptor;
+import org.eclipse.bpmn2.modeler.core.adapters.ObjectDescriptor;
+import org.eclipse.bpmn2.modeler.ui.features.choreography.ChoreographyUtil;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+
+/**
+ * @author Gary Brown
+ *
+ */
+public class MessagePropertiesAdapter extends RootElementPropertiesAdapter<Message> {
+
+ /**
+ * @param adapterFactory
+ * @param object
+ */
+ public MessagePropertiesAdapter(AdapterFactory adapterFactory, Message object) {
+ super(adapterFactory, object);
+
+ EStructuralFeature ref = Bpmn2Package.eINSTANCE.getMessage_ItemRef();
+
+ setFeatureDescriptor(ref, new FeatureDescriptor<Message>(adapterFactory, object, ref) {
+
+ @Override
+ public String getDisplayName(Object context) {
+ EObject object = this.object;
+ ItemDefinition itemDefinition = null;
+ if (object instanceof Message) {
+ itemDefinition = (ItemDefinition) object.eGet(feature);
+ }
+ if (itemDefinition!=null) {
+ ExtendedPropertiesAdapter<ItemDefinition> adapter =
+ (ExtendedPropertiesAdapter<ItemDefinition>) AdapterUtil.adapt(itemDefinition, ExtendedPropertiesAdapter.class);
+ return adapter.getFeatureDescriptor(Bpmn2Package.eINSTANCE.getItemDefinition_StructureRef()).getDisplayName(itemDefinition);
+ }
+ return super.getDisplayName(context);
+ }
+
+ });
+
+ setObjectDescriptor(new RootElementObjectDescriptor<Message>(adapterFactory, object) {
+ @Override
+ public String getDisplayName(Object context) {
+ final Message mesg = adopt(context);
+ String text = ChoreographyUtil.getMessageName(mesg);
+ return text;
+ }
+ });
+ }
+
+}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/InterfacePropertySection.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/InterfacePropertySection.java
index 447934d..cbcc520 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/InterfacePropertySection.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/InterfacePropertySection.java
@@ -1,272 +1,284 @@
-package org.eclipse.bpmn2.modeler.ui.property.data;
-
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.bpmn2.BaseElement;
-import org.eclipse.bpmn2.Bpmn2Package;
-import org.eclipse.bpmn2.CallableElement;
-import org.eclipse.bpmn2.Definitions;
-import org.eclipse.bpmn2.Interface;
-import org.eclipse.bpmn2.Participant;
-import org.eclipse.bpmn2.Process;
-import org.eclipse.bpmn2.di.BPMNDiagram;
-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.DefaultListComposite;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultPropertySection;
-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.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.graphiti.mm.pictograms.PictogramElement;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.dialogs.ListDialog;
-
-public class InterfacePropertySection extends DefaultPropertySection {
-
- static {
- PropertiesCompositeFactory.register(Interface.class, InterfaceDetailComposite.class);
- }
-
- @Override
- protected AbstractDetailComposite createSectionRoot() {
- return new InterfaceSectionRoot(this);
- }
-
- public InterfacePropertySection() {
- super();
- }
-
- @Override
- protected EObject getBusinessObjectForPictogramElement(PictogramElement pe) {
- EObject bo = super.getBusinessObjectForPictogramElement(pe);
- if (bo instanceof Participant) {
- return bo;
- } else if (bo instanceof BPMNDiagram) {
- BaseElement be = ((BPMNDiagram)bo).getPlane().getBpmnElement();
- if (be instanceof Process)
- return be;
- } else if (bo instanceof CallableElement) {
- return bo;
- }
-
- return null;
- }
-
- public class InterfaceSectionRoot extends DefaultDetailComposite {
-
- DefinedInterfaceListComposite definedInterfacesTable;
- ProvidedInterfaceListComposite providedInterfacesTable;
-
- /**
- * @param parent
- * @param style
- */
- public InterfaceSectionRoot(Composite parent, int style) {
- super(parent, style);
- }
-
- /**
- * @param section
- */
- public InterfaceSectionRoot(AbstractBpmn2PropertySection section) {
- super(section);
- }
-
- @Override
- public void cleanBindings() {
- super.cleanBindings();
- definedInterfacesTable = null;
- providedInterfacesTable = null;
- }
-
- @Override
- public void createBindings(EObject be) {
- definedInterfacesTable = new DefinedInterfaceListComposite(this);
- definedInterfacesTable.bindList(be);
-
- if (be instanceof Participant) {
- providedInterfacesTable = new ProvidedInterfaceListComposite(this);
- providedInterfacesTable.bindList(be, getFeature(be, "interfaceRefs"));
- }
- else if (be instanceof CallableElement) {
- CallableElement ce = (CallableElement)be;
- providedInterfacesTable = new ProvidedInterfaceListComposite(this);
- providedInterfacesTable.bindList(be, getFeature(be, "supportedInterfaceRefs"));
- }
- }
- }
-
- public class DefinedInterfaceListComposite extends DefaultListComposite {
-
- /**
- * @param section
- * @param style
- */
- public DefinedInterfaceListComposite(Composite parent) {
- super(parent,
- AbstractListComposite.SHOW_DETAILS |
- AbstractListComposite.ADD_BUTTON |
- AbstractListComposite.MOVE_BUTTONS |
- AbstractListComposite.DELETE_BUTTON);
- }
-
- @Override
- public EClass getListItemClass(EObject object, EStructuralFeature feature) {
- return listItemClass = Bpmn2Package.eINSTANCE.getInterface();
- }
-
- public void bindList(EObject theobject) {
- Definitions defs = ModelUtil.getDefinitions(theobject);
- super.bindList(defs, Bpmn2Package.eINSTANCE.getDefinitions_RootElements());
- setTitle("All Defined Interfaces");
- }
-
- @Override
- protected EObject addListItem(EObject object, EStructuralFeature feature) {
- Interface iface = (Interface) ModelUtil.createObject(object.eResource(), PACKAGE.getInterface());
-
- EList<EObject> list = (EList<EObject>)object.eGet(feature);
- list.add(iface);
- return iface;
- }
- }
-
- public class ProvidedInterfaceListComposite extends DefaultListComposite {
-
- /**
- * @param section
- * @param style
- */
- public ProvidedInterfaceListComposite(Composite parent) {
- super(parent,
- // only allow details editing in DefinedInterfacesTable
-// AbstractListComposite.SHOW_DETAILS |
- AbstractListComposite.ADD_BUTTON |
- AbstractListComposite.MOVE_BUTTONS |
- AbstractListComposite.REMOVE_BUTTON);
- }
-
- public void bindList(final EObject theobject, final EStructuralFeature thefeature) {
- super.bindList(theobject, thefeature);
- if (theobject instanceof Participant)
- setTitle("Interfaces Provided by Participant");
- else if (theobject instanceof CallableElement)
- setTitle("Interfaces Provided by Process");
- }
-
- @Override
- protected EObject addListItem(EObject object, EStructuralFeature feature) {
- Definitions defs = ModelUtil.getDefinitions(object);
- final List<Interface>items = new ArrayList<Interface>();
- for (EObject o : defs.getRootElements()) {
- if (o instanceof Interface) {
- if (object instanceof Participant) {
- Participant participant = (Participant)object;
- if (!participant.getInterfaceRefs().contains(o))
- items.add((Interface)o);
- } else if (object instanceof CallableElement) {
- CallableElement callableElement = (CallableElement)object;
- if (!callableElement.getSupportedInterfaceRefs().contains(o))
- items.add((Interface)o);
- }
- }
- }
- Interface iface = null;
- ListDialog dialog = new ListDialog(getShell());
- if (items.size()>1) {
- dialog.setContentProvider(new IStructuredContentProvider() {
-
- @Override
- public void dispose() {
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
-
- @Override
- public Object[] getElements(Object inputElement) {
- return items.toArray();
- }
-
- });
- dialog.setLabelProvider(new ILabelProvider() {
-
- @Override
- public void addListener(ILabelProviderListener listener) {
- }
-
- @Override
- public void dispose() {
- }
-
- @Override
- public boolean isLabelProperty(Object element, String property) {
- return false;
- }
-
- @Override
- public void removeListener(ILabelProviderListener listener) {
- }
-
- @Override
- public Image getImage(Object element) {
- return null;
- }
-
- @Override
- public String getText(Object element) {
- return ModelUtil.getName((BaseElement)element);
- }
-
- });
- dialog.setTitle("Interfaces");
- dialog.setMessage("Select the Interface provided by this Process");
- dialog.setAddCancelButton(true);
- dialog.setHelpAvailable(false);
- dialog.setInput(new Object());
-
- if (dialog.open() == Window.OK) {
- iface = (Interface)dialog.getResult()[0];
- }
- }
- else if (items.size()==1) {
- iface = items.get(0);
- }
- else {
- MessageDialog.openInformation(getShell(), "No Defined Interfaces",
- "There are no new Interfaces to add.\n"+
- "Please create a new Interface in the \"Defined Interfaces\" first."
- );
- }
-
- if (iface!=null) {
- if (object instanceof Participant) {
- Participant participant = (Participant)object;
- participant.getInterfaceRefs().add(iface);
- } else if (object instanceof CallableElement) {
- CallableElement callableElement = (CallableElement)object;
- callableElement.getSupportedInterfaceRefs().add(iface);
- }
- }
-
- return iface;
- }
- }
-
-}
+package org.eclipse.bpmn2.modeler.ui.property.data;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.bpmn2.BaseElement;
+import org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.CallableElement;
+import org.eclipse.bpmn2.Definitions;
+import org.eclipse.bpmn2.Interface;
+import org.eclipse.bpmn2.Participant;
+import org.eclipse.bpmn2.Process;
+import org.eclipse.bpmn2.di.BPMNDiagram;
+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.DefaultListComposite;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultPropertySection;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.ListCompositeColumnProvider;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.PropertiesCompositeFactory;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.TableColumn;
+import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerFactory;
+import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.dialogs.ListDialog;
+
+public class InterfacePropertySection extends DefaultPropertySection {
+
+ static {
+ PropertiesCompositeFactory.register(Interface.class, InterfaceDetailComposite.class);
+ }
+
+ @Override
+ protected AbstractDetailComposite createSectionRoot() {
+ return new InterfaceSectionRoot(this);
+ }
+
+ public InterfacePropertySection() {
+ super();
+ }
+
+ @Override
+ protected EObject getBusinessObjectForPictogramElement(PictogramElement pe) {
+ EObject bo = super.getBusinessObjectForPictogramElement(pe);
+ if (bo instanceof Participant) {
+ return bo;
+ } else if (bo instanceof BPMNDiagram) {
+ BaseElement be = ((BPMNDiagram)bo).getPlane().getBpmnElement();
+ if (be instanceof Process)
+ return be;
+ } else if (bo instanceof CallableElement) {
+ return bo;
+ }
+
+ return null;
+ }
+
+ public class InterfaceSectionRoot extends DefaultDetailComposite {
+
+ DefinedInterfaceListComposite definedInterfacesTable;
+ ProvidedInterfaceListComposite providedInterfacesTable;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public InterfaceSectionRoot(Composite parent, int style) {
+ super(parent, style);
+ }
+
+ /**
+ * @param section
+ */
+ public InterfaceSectionRoot(AbstractBpmn2PropertySection section) {
+ super(section);
+ }
+
+ @Override
+ public void cleanBindings() {
+ super.cleanBindings();
+ definedInterfacesTable = null;
+ providedInterfacesTable = null;
+ }
+
+ @Override
+ public void createBindings(EObject be) {
+ definedInterfacesTable = new DefinedInterfaceListComposite(this);
+ definedInterfacesTable.bindList(be);
+
+ if (be instanceof Participant) {
+ providedInterfacesTable = new ProvidedInterfaceListComposite(this);
+ providedInterfacesTable.bindList(be, getFeature(be, "interfaceRefs"));
+ }
+ else if (be instanceof CallableElement) {
+ CallableElement ce = (CallableElement)be;
+ providedInterfacesTable = new ProvidedInterfaceListComposite(this);
+ providedInterfacesTable.bindList(be, getFeature(be, "supportedInterfaceRefs"));
+ }
+ }
+ }
+
+ public class DefinedInterfaceListComposite extends DefaultListComposite {
+
+ /**
+ * @param section
+ * @param style
+ */
+ public DefinedInterfaceListComposite(Composite parent) {
+ super(parent,
+ AbstractListComposite.SHOW_DETAILS |
+ AbstractListComposite.ADD_BUTTON |
+ AbstractListComposite.MOVE_BUTTONS |
+ AbstractListComposite.DELETE_BUTTON);
+ }
+
+ @Override
+ public EClass getListItemClass(EObject object, EStructuralFeature feature) {
+ return listItemClass = Bpmn2Package.eINSTANCE.getInterface();
+ }
+
+ public void bindList(EObject theobject) {
+ Definitions defs = ModelUtil.getDefinitions(theobject);
+ super.bindList(defs, Bpmn2Package.eINSTANCE.getDefinitions_RootElements());
+ setTitle("All Defined Interfaces");
+ }
+
+ @Override
+ protected EObject addListItem(EObject object, EStructuralFeature feature) {
+ Interface iface = (Interface) ModelUtil.createObject(object.eResource(), PACKAGE.getInterface());
+
+ EList<EObject> list = (EList<EObject>)object.eGet(feature);
+ list.add(iface);
+ return iface;
+ }
+
+ @Override
+ public ListCompositeColumnProvider getColumnProvider(EObject object, EStructuralFeature feature) {
+ if (columnProvider==null) {
+ columnProvider = new ListCompositeColumnProvider(this, false);
+ columnProvider.add(new TableColumn(object, Bpmn2Package.eINSTANCE.getInterface_Name()));
+ columnProvider.add(new TableColumn(object,Bpmn2Package.eINSTANCE.getInterface_ImplementationRef()));
+ }
+ return columnProvider;
+ }
+ }
+
+ public class ProvidedInterfaceListComposite extends DefaultListComposite {
+
+ /**
+ * @param section
+ * @param style
+ */
+ public ProvidedInterfaceListComposite(Composite parent) {
+ super(parent,
+ // only allow details editing in DefinedInterfacesTable
+// AbstractListComposite.SHOW_DETAILS |
+ AbstractListComposite.ADD_BUTTON |
+ AbstractListComposite.MOVE_BUTTONS |
+ AbstractListComposite.REMOVE_BUTTON);
+ }
+
+ public void bindList(final EObject theobject, final EStructuralFeature thefeature) {
+ super.bindList(theobject, thefeature);
+ if (theobject instanceof Participant)
+ setTitle("Interfaces Provided by Participant");
+ else if (theobject instanceof CallableElement)
+ setTitle("Interfaces Provided by Process");
+ }
+
+ @Override
+ protected EObject addListItem(EObject object, EStructuralFeature feature) {
+ Definitions defs = ModelUtil.getDefinitions(object);
+ final List<Interface>items = new ArrayList<Interface>();
+ for (EObject o : defs.getRootElements()) {
+ if (o instanceof Interface) {
+ if (object instanceof Participant) {
+ Participant participant = (Participant)object;
+ if (!participant.getInterfaceRefs().contains(o))
+ items.add((Interface)o);
+ } else if (object instanceof CallableElement) {
+ CallableElement callableElement = (CallableElement)object;
+ if (!callableElement.getSupportedInterfaceRefs().contains(o))
+ items.add((Interface)o);
+ }
+ }
+ }
+ Interface iface = null;
+ ListDialog dialog = new ListDialog(getShell());
+ if (items.size()>1) {
+ dialog.setContentProvider(new IStructuredContentProvider() {
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ return items.toArray();
+ }
+
+ });
+ dialog.setLabelProvider(new ILabelProvider() {
+
+ @Override
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ @Override
+ public void removeListener(ILabelProviderListener listener) {
+ }
+
+ @Override
+ public Image getImage(Object element) {
+ return null;
+ }
+
+ @Override
+ public String getText(Object element) {
+ return ModelUtil.getName((BaseElement)element);
+ }
+
+ });
+ dialog.setTitle("Interfaces");
+ dialog.setMessage("Select the Interface provided by this Process");
+ dialog.setAddCancelButton(true);
+ dialog.setHelpAvailable(false);
+ dialog.setInput(new Object());
+
+ if (dialog.open() == Window.OK) {
+ iface = (Interface)dialog.getResult()[0];
+ }
+ }
+ else if (items.size()==1) {
+ iface = items.get(0);
+ }
+ else {
+ MessageDialog.openInformation(getShell(), "No Defined Interfaces",
+ "There are no new Interfaces to add.\n"+
+ "Please create a new Interface in the \"Defined Interfaces\" first."
+ );
+ }
+
+ if (iface!=null) {
+ if (object instanceof Participant) {
+ Participant participant = (Participant)object;
+ participant.getInterfaceRefs().add(iface);
+ } else if (object instanceof CallableElement) {
+ CallableElement callableElement = (CallableElement)object;
+ callableElement.getSupportedInterfaceRefs().add(iface);
+ }
+ }
+
+ return iface;
+ }
+ }
+
+}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/MessageListComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/MessageListComposite.java
new file mode 100644
index 0000000..e3b0d31
--- /dev/null
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/MessageListComposite.java
@@ -0,0 +1,45 @@
+package org.eclipse.bpmn2.modeler.ui.property.data;
+
+import org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractListComposite;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultListComposite;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.ListCompositeColumnProvider;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.TableColumn;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.swt.widgets.Composite;
+
+public class MessageListComposite extends DefaultListComposite {
+
+ public MessageListComposite(AbstractBpmn2PropertySection section, int style) {
+ super(section, style);
+ // TODO Auto-generated constructor stub
+ }
+
+ public MessageListComposite(AbstractBpmn2PropertySection section) {
+ super(section,
+ AbstractListComposite.SHOW_DETAILS |
+ AbstractListComposite.ADD_BUTTON |
+ AbstractListComposite.MOVE_BUTTONS |
+ AbstractListComposite.DELETE_BUTTON);
+ }
+
+ public MessageListComposite(Composite parent, int style) {
+ super(parent,
+ AbstractListComposite.SHOW_DETAILS |
+ AbstractListComposite.ADD_BUTTON |
+ AbstractListComposite.MOVE_BUTTONS |
+ AbstractListComposite.DELETE_BUTTON);
+ }
+
+ @Override
+ public ListCompositeColumnProvider getColumnProvider(EObject object, EStructuralFeature feature) {
+ if (columnProvider==null) {
+ columnProvider = new ListCompositeColumnProvider(this, false);
+ columnProvider.add(new TableColumn(object,Bpmn2Package.eINSTANCE.getMessage_Name()));
+ columnProvider.add(new TableColumn(object,Bpmn2Package.eINSTANCE.getMessage_ItemRef()));
+ }
+ return columnProvider;
+ }
+}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/MessagePropertySection.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/MessagePropertySection.java
index 9d50db7..30a23dd 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/MessagePropertySection.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/data/MessagePropertySection.java
@@ -1,51 +1,52 @@
-/*******************************************************************************
- * Copyright (c) 2011 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 Innar Made
- ******************************************************************************/
-package org.eclipse.bpmn2.modeler.ui.property.data;
-
-import org.eclipse.bpmn2.Message;
-import org.eclipse.bpmn2.Property;
-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.PropertiesCompositeFactory;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.graphiti.mm.pictograms.PictogramElement;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
-
-public class MessagePropertySection extends AbstractBpmn2PropertySection implements ITabbedPropertyConstants {
- static {
- PropertiesCompositeFactory.register(Message.class, MessageDetailComposite.class);
- PropertiesCompositeFactory.register(Property.class, ItemAwareElementDetailComposite.class);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.bpmn2.modeler.ui.property.AbstractBpmn2PropertySection#createSectionRoot()
- */
- @Override
- protected AbstractDetailComposite createSectionRoot() {
- return new MessageDetailComposite(this);
- }
-
- @Override
- public AbstractDetailComposite createSectionRoot(Composite parent, int style) {
- return new MessageDetailComposite(parent,style);
- }
-
- @Override
- protected EObject getBusinessObjectForPictogramElement(PictogramElement pe) {
- EObject be = super.getBusinessObjectForPictogramElement(pe);
- if (be instanceof Message)
- return be;
- return null;
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2011 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 Innar Made
+ ******************************************************************************/
+package org.eclipse.bpmn2.modeler.ui.property.data;
+
+import org.eclipse.bpmn2.Message;
+import org.eclipse.bpmn2.Property;
+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.PropertiesCompositeFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
+
+public class MessagePropertySection extends AbstractBpmn2PropertySection implements ITabbedPropertyConstants {
+ static {
+ PropertiesCompositeFactory.register(Message.class, MessageDetailComposite.class);
+ PropertiesCompositeFactory.register(Message.class, MessageListComposite.class);
+ PropertiesCompositeFactory.register(Property.class, ItemAwareElementDetailComposite.class);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.bpmn2.modeler.ui.property.AbstractBpmn2PropertySection#createSectionRoot()
+ */
+ @Override
+ protected AbstractDetailComposite createSectionRoot() {
+ return new MessageDetailComposite(this);
+ }
+
+ @Override
+ public AbstractDetailComposite createSectionRoot(Composite parent, int style) {
+ return new MessageDetailComposite(parent,style);
+ }
+
+ @Override
+ protected EObject getBusinessObjectForPictogramElement(PictogramElement pe) {
+ EObject be = super.getBusinessObjectForPictogramElement(pe);
+ if (be instanceof Message)
+ return be;
+ return null;
+ }
+}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/diagrams/DefinitionsPropertyComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/diagrams/DefinitionsPropertyComposite.java
index 7f381e6..1c6ede5 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/diagrams/DefinitionsPropertyComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/diagrams/DefinitionsPropertyComposite.java
@@ -254,7 +254,7 @@
int columnIndex;
public NamespacesTableColumn(EObject object, int columnIndex) {
- super(object,null);
+ super(object,(EStructuralFeature)null);
this.columnIndex = columnIndex;
}
@@ -296,7 +296,7 @@
columnProvider = new ListCompositeColumnProvider(this);
// add a namespace prefix column that does NOT come from the Import object
- TableColumn tableColumn = new TableColumn(object,null) {
+ TableColumn tableColumn = new TableColumn(object,(EStructuralFeature)null) {
@Override
public String getHeaderText() {
return "Namespace Prefix";
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/gateways/GatewayDetailComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/gateways/GatewayDetailComposite.java
index a2d7a7f..61c5411 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/gateways/GatewayDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/gateways/GatewayDetailComposite.java
@@ -1,256 +1,256 @@
-/*******************************************************************************
- * Copyright (c) 2011 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.property.gateways;
-
-import java.util.List;
-
-import org.eclipse.bpmn2.Bpmn2Package;
-import org.eclipse.bpmn2.Gateway;
-import org.eclipse.bpmn2.SequenceFlow;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
-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.DefaultListComposite;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.ListCompositeColumnProvider;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.ListCompositeContentProvider;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.TableColumn;
-import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
-import org.eclipse.emf.common.util.BasicEList;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.graphiti.mm.pictograms.Diagram;
-import org.eclipse.graphiti.mm.pictograms.PictogramElement;
-import org.eclipse.graphiti.services.Graphiti;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.widgets.Composite;
-
-public class GatewayDetailComposite extends DefaultDetailComposite {
-
- private SequenceFlowsListComposite sequenceFlowsList;
-
- /**
- * @param section
- */
- public GatewayDetailComposite(AbstractBpmn2PropertySection section) {
- super(section);
- }
-
- public GatewayDetailComposite(Composite parent, int style) {
- super(parent, style);
- }
-
- @Override
- public AbstractPropertiesProvider getPropertiesProvider(EObject object) {
- if (propertiesProvider == null) {
- propertiesProvider = new AbstractPropertiesProvider(object) {
- // lump all the gateway properties into one composite
- // if a gateway doesn't have one of the attributes listed here,
- // it simply won't be displayed.
- String[] properties = new String[] {
- "gatewayDirection",
- "instantiate",
- "activationCondition",
- "eventGatewayType"
- // note: "default" sequence flow is already being displayed in the SequenceFlow tab
- // so, no need to show it here
- };
-
- @Override
- public String[] getProperties() {
- return properties;
- }
- };
- }
- return propertiesProvider;
- }
-
- @Override
- public void cleanBindings() {
- super.cleanBindings();
- sequenceFlowsList = null;
- }
-
- @Override
- public void createBindings(EObject be) {
- super.createBindings(be);
- Gateway gateway = (Gateway)be;
- sequenceFlowsList = new SequenceFlowsListComposite(this);
- sequenceFlowsList.bindList(gateway, Bpmn2Package.eINSTANCE.getFlowNode_Incoming());
- }
-
- /**
- * A ListComposite that displays all incoming and outgoing sequence flows for a Gateway
- */
- public class SequenceFlowsListComposite extends DefaultListComposite {
- public SequenceFlowsListComposite(AbstractBpmn2PropertySection section) {
- super(section, SHOW_DETAILS);
- }
-
-
- public SequenceFlowsListComposite(Composite parent) {
- super(parent, SHOW_DETAILS);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractListComposite#getContentProvider(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, org.eclipse.emf.common.util.EList)
- *
- * Create a custom list content provider
- */
- public ListCompositeContentProvider getContentProvider(EObject object, EStructuralFeature feature, EList<EObject>list) {
- if (contentProvider==null) {
- contentProvider = new SequenceFlowsListContentProvider(this,object);
- }
- return contentProvider;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractListComposite#getColumnProvider(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature)
- *
- * Create a custom column provider
- */
- public ListCompositeColumnProvider getColumnProvider(EObject object, EStructuralFeature feature) {
- if (columnProvider==null) {
- columnProvider = new SequenceFlowListColumnProvider(this, object);
- }
- return columnProvider;
- }
-
- public void bindList(final EObject theobject, final EStructuralFeature thefeature) {
- super.bindList(theobject, thefeature);
- tableViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent event) {
- StructuredSelection sel = (StructuredSelection)event.getSelection();
- EObject object = (EObject)sel.getFirstElement();
- Diagram diagram = getDiagramEditor().getDiagramTypeProvider().getDiagram();
- List<PictogramElement> pes = Graphiti.getLinkService().getPictogramElements(diagram, object);
- getDiagramEditor().setPictogramElementForSelection(pes.get(0));
- getDiagramEditor().refresh();
- }
- });
- }
- }
-
- /**
- * Custom content provider for a gateway's incoming and outgoing sequence flows
- */
- public class SequenceFlowsListContentProvider extends ListCompositeContentProvider {
-
- public SequenceFlowsListContentProvider(AbstractListComposite listComposite, EObject object) {
- super(listComposite, object, null, null);
-
- Gateway gateway = (Gateway)object;
- list = new BasicEList<EObject>();
- list.addAll(gateway.getIncoming());
- list.addAll(gateway.getOutgoing());
- }
-
- @Override
- public Object[] getElements(Object inputElement) {
- return list.toArray();
- }
- }
-
- /**
- * A custom column provider for sequence flows
- */
- public class SequenceFlowListColumnProvider extends ListCompositeColumnProvider {
-
- public SequenceFlowListColumnProvider(AbstractListComposite list, EObject object) {
- super(list, false);
- // add 2 or 3 columns, depending on gateway type
- add(new SequenceFlowListColumn(object,1)); // identifier (from -> to)
- add(new SequenceFlowListColumn(object,2)); // Condition (expression)
- if (object.eClass().getEStructuralFeature("default")!=null) {
- add(new SequenceFlowListColumn(object,3)); // Is Default (boolean)
- }
- }
- }
-
- /**
- * A custom TableColumn for sequence flows
- */
- public class SequenceFlowListColumn extends TableColumn {
-
- int columnIndex;
-
-
- /**
- * Construct a column by giving it the gateway EObject and column index
- * @param gateway - the Gateway BPMN2 element
- * @param columnIndex - a column index between 1 and 3:
- * 1 = describes the sequence flow by source and target endpoints
- * 2 = conditional expression for this sequence flow
- * 3 = true/false if this sequence flow is the default for the gateway
- */
- public SequenceFlowListColumn(EObject gateway, int columnIndex) {
- super(gateway, null);
- this.columnIndex = columnIndex;
- }
-
- @Override
- public String getHeaderText() {
- switch (columnIndex) {
- case 1:
- return "Sequence Flow";
- case 2:
- return "Condition";
- case 3:
- return "Is Default";
- }
- return "header " + columnIndex;
- }
-
- @Override
- public String getText(Object element) {
- SequenceFlow flow = (SequenceFlow)element;
- Gateway gateway = (Gateway)object;
- String text = "";
- switch (columnIndex) {
- case 1:
- text += ModelUtil.getDisplayName(flow.getSourceRef());
- text += " -> ";
- text += ModelUtil.getDisplayName(flow.getTargetRef());
- break;
- case 2:
- text = ModelUtil.getDisplayName(flow.getConditionExpression());
- if (text==null)
- text = "";
- break;
- case 3:
- {
- EStructuralFeature f = gateway.eClass().getEStructuralFeature("default");
- Object defaultFlow = gateway.eGet(f);
- text += (flow == defaultFlow);
- }
- break;
- }
- return text;
- }
-
- @Override
- public Object getValue(Object element, String property) {
- return null;
- }
-
- @Override
- public String getProperty() {
- return "column " + columnIndex;
- }
- }
+/*******************************************************************************
+ * Copyright (c) 2011 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.property.gateways;
+
+import java.util.List;
+
+import org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.Gateway;
+import org.eclipse.bpmn2.SequenceFlow;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
+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.DefaultListComposite;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.ListCompositeColumnProvider;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.ListCompositeContentProvider;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.TableColumn;
+import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.graphiti.mm.pictograms.Diagram;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.graphiti.services.Graphiti;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.widgets.Composite;
+
+public class GatewayDetailComposite extends DefaultDetailComposite {
+
+ private SequenceFlowsListComposite sequenceFlowsList;
+
+ /**
+ * @param section
+ */
+ public GatewayDetailComposite(AbstractBpmn2PropertySection section) {
+ super(section);
+ }
+
+ public GatewayDetailComposite(Composite parent, int style) {
+ super(parent, style);
+ }
+
+ @Override
+ public AbstractPropertiesProvider getPropertiesProvider(EObject object) {
+ if (propertiesProvider == null) {
+ propertiesProvider = new AbstractPropertiesProvider(object) {
+ // lump all the gateway properties into one composite
+ // if a gateway doesn't have one of the attributes listed here,
+ // it simply won't be displayed.
+ String[] properties = new String[] {
+ "gatewayDirection",
+ "instantiate",
+ "activationCondition",
+ "eventGatewayType"
+ // note: "default" sequence flow is already being displayed in the SequenceFlow tab
+ // so, no need to show it here
+ };
+
+ @Override
+ public String[] getProperties() {
+ return properties;
+ }
+ };
+ }
+ return propertiesProvider;
+ }
+
+ @Override
+ public void cleanBindings() {
+ super.cleanBindings();
+ sequenceFlowsList = null;
+ }
+
+ @Override
+ public void createBindings(EObject be) {
+ super.createBindings(be);
+ Gateway gateway = (Gateway)be;
+ sequenceFlowsList = new SequenceFlowsListComposite(this);
+ sequenceFlowsList.bindList(gateway, Bpmn2Package.eINSTANCE.getFlowNode_Incoming());
+ }
+
+ /**
+ * A ListComposite that displays all incoming and outgoing sequence flows for a Gateway
+ */
+ public class SequenceFlowsListComposite extends DefaultListComposite {
+ public SequenceFlowsListComposite(AbstractBpmn2PropertySection section) {
+ super(section, SHOW_DETAILS);
+ }
+
+
+ public SequenceFlowsListComposite(Composite parent) {
+ super(parent, SHOW_DETAILS);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractListComposite#getContentProvider(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, org.eclipse.emf.common.util.EList)
+ *
+ * Create a custom list content provider
+ */
+ public ListCompositeContentProvider getContentProvider(EObject object, EStructuralFeature feature, EList<EObject>list) {
+ if (contentProvider==null) {
+ contentProvider = new SequenceFlowsListContentProvider(this,object);
+ }
+ return contentProvider;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractListComposite#getColumnProvider(org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature)
+ *
+ * Create a custom column provider
+ */
+ public ListCompositeColumnProvider getColumnProvider(EObject object, EStructuralFeature feature) {
+ if (columnProvider==null) {
+ columnProvider = new SequenceFlowListColumnProvider(this, object);
+ }
+ return columnProvider;
+ }
+
+ public void bindList(final EObject theobject, final EStructuralFeature thefeature) {
+ super.bindList(theobject, thefeature);
+ tableViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ StructuredSelection sel = (StructuredSelection)event.getSelection();
+ EObject object = (EObject)sel.getFirstElement();
+ Diagram diagram = getDiagramEditor().getDiagramTypeProvider().getDiagram();
+ List<PictogramElement> pes = Graphiti.getLinkService().getPictogramElements(diagram, object);
+ getDiagramEditor().setPictogramElementForSelection(pes.get(0));
+ getDiagramEditor().refresh();
+ }
+ });
+ }
+ }
+
+ /**
+ * Custom content provider for a gateway's incoming and outgoing sequence flows
+ */
+ public class SequenceFlowsListContentProvider extends ListCompositeContentProvider {
+
+ public SequenceFlowsListContentProvider(AbstractListComposite listComposite, EObject object) {
+ super(listComposite, object, null, null);
+
+ Gateway gateway = (Gateway)object;
+ list = new BasicEList<EObject>();
+ list.addAll(gateway.getIncoming());
+ list.addAll(gateway.getOutgoing());
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ return list.toArray();
+ }
+ }
+
+ /**
+ * A custom column provider for sequence flows
+ */
+ public class SequenceFlowListColumnProvider extends ListCompositeColumnProvider {
+
+ public SequenceFlowListColumnProvider(AbstractListComposite list, EObject object) {
+ super(list, false);
+ // add 2 or 3 columns, depending on gateway type
+ add(new SequenceFlowListColumn(object,1)); // identifier (from -> to)
+ add(new SequenceFlowListColumn(object,2)); // Condition (expression)
+ if (object.eClass().getEStructuralFeature("default")!=null) {
+ add(new SequenceFlowListColumn(object,3)); // Is Default (boolean)
+ }
+ }
+ }
+
+ /**
+ * A custom TableColumn for sequence flows
+ */
+ public class SequenceFlowListColumn extends TableColumn {
+
+ int columnIndex;
+
+
+ /**
+ * Construct a column by giving it the gateway EObject and column index
+ * @param gateway - the Gateway BPMN2 element
+ * @param columnIndex - a column index between 1 and 3:
+ * 1 = describes the sequence flow by source and target endpoints
+ * 2 = conditional expression for this sequence flow
+ * 3 = true/false if this sequence flow is the default for the gateway
+ */
+ public SequenceFlowListColumn(EObject gateway, int columnIndex) {
+ super(gateway, (EStructuralFeature)null);
+ this.columnIndex = columnIndex;
+ }
+
+ @Override
+ public String getHeaderText() {
+ switch (columnIndex) {
+ case 1:
+ return "Sequence Flow";
+ case 2:
+ return "Condition";
+ case 3:
+ return "Is Default";
+ }
+ return "header " + columnIndex;
+ }
+
+ @Override
+ public String getText(Object element) {
+ SequenceFlow flow = (SequenceFlow)element;
+ Gateway gateway = (Gateway)object;
+ String text = "";
+ switch (columnIndex) {
+ case 1:
+ text += ModelUtil.getDisplayName(flow.getSourceRef());
+ text += " -> ";
+ text += ModelUtil.getDisplayName(flow.getTargetRef());
+ break;
+ case 2:
+ text = ModelUtil.getDisplayName(flow.getConditionExpression());
+ if (text==null)
+ text = "";
+ break;
+ case 3:
+ {
+ EStructuralFeature f = gateway.eClass().getEStructuralFeature("default");
+ Object defaultFlow = gateway.eGet(f);
+ text += (flow == defaultFlow);
+ }
+ break;
+ }
+ return text;
+ }
+
+ @Override
+ public Object getValue(Object element, String property) {
+ return null;
+ }
+
+ @Override
+ public String getProperty() {
+ return "column " + columnIndex;
+ }
+ }
}
\ No newline at end of file
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/DataAssociationDetailComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/DataAssociationDetailComposite.java
index e088559..f5b3af4 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/DataAssociationDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/DataAssociationDetailComposite.java
@@ -81,7 +81,7 @@
* o Copy the Data Association sourceRef value into the targetRef. Only one
* sourceRef parameter is allowed in this case.
*/
-public class DataAssociationDetailComposite extends DefaultDetailComposite implements IResourceChangeListener {
+public class DataAssociationDetailComposite extends DefaultDetailComposite {
public enum MapType {
None,
@@ -282,13 +282,20 @@
}
return MapType.None;
}
-
- /* (non-Javadoc)
- * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
- */
- @Override
- public void resourceChanged(IResourceChangeEvent event) {
-// updateWidgets();
+
+ private void redrawParent() {
+ // this DetailComposite should be sitting in a SashForm created
+ // by a ListComposite. layout this thing first
+ layout();
+ // and then search for the DetailComposite that contains the list
+ Composite parent = getParent();
+ while (parent!=null) {
+ parent = parent.getParent();
+ if (parent instanceof AbstractDetailComposite) {
+ parent.layout();
+ break;
+ }
+ }
}
private void updateWidgets() {
@@ -407,7 +414,7 @@
showAdvancedMappingWidgets(false);
showPropertyWidgets(true);
- redrawPage();
+ redrawParent();
}
}
});
@@ -426,7 +433,7 @@
showAdvancedMappingWidgets(false);
showTransformationWidgets(true);
- redrawPage();
+ redrawParent();
}
}
});
@@ -445,7 +452,7 @@
showAdvancedMappingWidgets(false);
showExpressionWidgets(true);
- redrawPage();
+ redrawParent();
}
}
});
@@ -464,7 +471,7 @@
showExpressionWidgets(false);
showAdvancedMappingWidgets(true);
- redrawPage();
+ redrawParent();
}
}
});
@@ -531,8 +538,6 @@
};
propertyDetailsComposite.setBusinessObject(association);
propertyDetailsComposite.setTitle("Properties");
- // Oy vey! Fix this!
- getParent().getParent().getParent().getParent().getParent().layout();
}
}
else {
@@ -593,7 +598,7 @@
}
transformationDetailsComposite.setBusinessObject(transformation);
transformationDetailsComposite.setTitle("Transformation");
- transformationDetailsComposite.redrawPage();
+// transformationDetailsComposite.redrawPage();
}
else {
@@ -665,7 +670,7 @@
}
expressionDetailsComposite.setBusinessObject(expression);//association.getexpression());
expressionDetailsComposite.setTitle("Expression");
- expressionDetailsComposite.redrawPage();
+// expressionDetailsComposite.redrawPage();
}
else {
if (expressionComposite!=null) {
@@ -717,7 +722,7 @@
}
transformationDetailsComposite.setBusinessObject(transformation);//association.getTransformation());
transformationDetailsComposite.setTitle("Transformation");
- transformationDetailsComposite.redrawPage();
+// transformationDetailsComposite.redrawPage();
if (assignmentsTable!=null)
assignmentsTable.dispose();
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/IoParametersDetailComposite.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/IoParametersDetailComposite.java
index 112eb23..0ed741c 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/IoParametersDetailComposite.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/tasks/IoParametersDetailComposite.java
@@ -68,7 +68,7 @@
// the control parameter must be an Activity or CallableElement (i.e. a Process or GlobalTask)
InputOutputSpecification ioSpecification = (InputOutputSpecification)be.eGet(ioSpecificationFeature);
if (ioSpecification==null) {
- ioSpecification = (InputOutputSpecification) ModelUtil.createFeature(be,ioSpecificationFeature);
+ ioSpecification = (InputOutputSpecification) FACTORY.createInputOutputSpecification();
InsertionAdapter.add(be, ioSpecificationFeature, ioSpecification);
}