diff options
author | Bob Brodt | 2015-07-08 13:48:57 +0000 |
---|---|---|
committer | Bob Brodt | 2015-07-08 13:48:57 +0000 |
commit | d8f95fd61138cc409249c7401fffb09cb7597458 (patch) | |
tree | 791e0870c7f844c1679b65ef085b7e4bbae427f9 | |
parent | 4b8cb90b3ff257e0c19d65f972b1bcbec6d42de1 (diff) | |
download | org.eclipse.bpmn2-modeler-d8f95fd61138cc409249c7401fffb09cb7597458.tar.gz org.eclipse.bpmn2-modeler-d8f95fd61138cc409249c7401fffb09cb7597458.tar.xz org.eclipse.bpmn2-modeler-d8f95fd61138cc409249c7401fffb09cb7597458.zip |
https://issues.jboss.org/browse/BPMSPL-124 - Task metadata being
improperly stored in I18NText database table.
Add support for selectively serializing FormalExpression.body and
Documentation.text as CDATA instead of attribute values.
Bug 472174 - Event SubProcess may not have incoming or outgoing sequence
flows
9 files changed, 108 insertions, 8 deletions
diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/FeatureDescriptor.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/FeatureDescriptor.java index 59a46412..22d65cd5 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/FeatureDescriptor.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/FeatureDescriptor.java @@ -138,6 +138,8 @@ public class FeatureDescriptor<T extends EObject> extends ObjectDescriptor<T> { } else if (o instanceof FormalExpression) { t = ModelUtil.getExpressionBody((FormalExpression)o); + if (t==null) + t = ""; } } if (t==null && o!=null) { diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java index 73029dad..f57a4a96 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/merrimac/dialogs/TextObjectEditor.java @@ -182,7 +182,7 @@ public class TextObjectEditor extends ObjectEditor { * @return string representation of the EObject feature's value. */ protected String getText() { - Object value = getBusinessObjectDelegate().getValue(object, feature); + Object value = getBusinessObjectDelegate().getTextValue(object, feature); if (multiLine && value instanceof String) { value = toPlatformString((String) value); } diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/runtime/ModelExtensionDescriptor.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/runtime/ModelExtensionDescriptor.java index dae573a3..b72f45eb 100644 --- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/runtime/ModelExtensionDescriptor.java +++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/runtime/ModelExtensionDescriptor.java @@ -803,6 +803,11 @@ public class ModelExtensionDescriptor extends BaseRuntimeExtensionDescriptor { if (!(feature.getEType() instanceof EEnum)) // skip enum initialization initializers.add(adapter,feature,value); + + // Note that only FormalExpression.body and Documentation.text support CDATA serialization. + // @see FormalExpressionPropertiesAdapter and DocumentationPropertiesAdapter. + if ("CDATA".equals(property.type)) + adapter.setProperty(feature, "CDATA", Boolean.TRUE); } } diff --git a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/plugin.xml b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/plugin.xml index 2b31ae7b..8b1b02f0 100644 --- a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/plugin.xml +++ b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/plugin.xml @@ -638,7 +638,12 @@ </property> <property name="dataInputs"> <value> - <property name="name" value="Comment" type="EString"/> + <property name="name" value="Comment" type="CDATA"/> + </value> + </property> + <property name="dataInputs"> + <value> + <property name="name" value="Description" type="CDATA"/> </value> </property> <property name="dataInputs"> @@ -677,6 +682,7 @@ <property name="dataInputRefs" ref="ioSpecification/dataInputs#5"/> <property name="dataInputRefs" ref="ioSpecification/dataInputs#6"/> <property name="dataInputRefs" ref="ioSpecification/dataInputs#7"/> + <property name="dataInputRefs" ref="ioSpecification/dataInputs#8"/> </value> </property> </value> @@ -763,7 +769,7 @@ <value> <property name="from" type="FormalExpression"> <value> - <property name="body" value="true"/> + <property name="body" value=""/> </value> </property> <property name="to" type="FormalExpression"> @@ -782,7 +788,7 @@ <value> <property name="from" type="FormalExpression"> <value> - <property name="body" value=""/> + <property name="body" value="true"/> </value> </property> <property name="to" type="FormalExpression"> @@ -801,7 +807,7 @@ <value> <property name="from" type="FormalExpression"> <value> - <property name="body" value="en-UK"/> + <property name="body" value=""/> </value> </property> <property name="to" type="FormalExpression"> @@ -820,7 +826,7 @@ <value> <property name="from" type="FormalExpression"> <value> - <property name="body" value=""/> + <property name="body" value="en-UK"/> </value> </property> <property name="to" type="FormalExpression"> @@ -833,6 +839,25 @@ <property name="targetRef" ref="ioSpecification/dataInputs#7"/> </value> </property> + <property name="dataInputAssociations"> + <value> + <property name="assignment"> + <value> + <property name="from" type="FormalExpression"> + <value> + <property name="body" value=""/> + </value> + </property> + <property name="to" type="FormalExpression"> + <value> + <property name="body" ref="ioSpecification/dataInputs#8"/> + </value> + </property> + </value> + </property> + <property name="targetRef" ref="ioSpecification/dataInputs#8"/> + </value> + </property> </modelExtension> <!-- Model Enablements and Profiles --> diff --git a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmTaskDetailComposite.java b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmTaskDetailComposite.java index d6f84c84..83f96e7e 100644 --- a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmTaskDetailComposite.java +++ b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmTaskDetailComposite.java @@ -32,6 +32,7 @@ import org.eclipse.bpmn2.ResourceAssignmentExpression; import org.eclipse.bpmn2.ResourceRole; import org.eclipse.bpmn2.Task; import org.eclipse.bpmn2.UserTask; +import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesAdapter; import org.eclipse.bpmn2.modeler.core.adapters.InsertionAdapter; import org.eclipse.bpmn2.modeler.core.features.CustomElementFeatureContainer; import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection; @@ -264,7 +265,8 @@ public class JbpmTaskDetailComposite extends JbpmActivityDetailComposite { } else { editor = new TextObjectEditor(this,fromExpression,attribute); - ((TextObjectEditor)editor).setMultiLine(false); + boolean isCDATA = "CDATA".equals(dataType); + ((TextObjectEditor)editor).setMultiLine(isCDATA); } editor.createControl(getAttributesParent(),ModelUtil.toCanonicalString(name)); } diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/DocumentationPropertiesAdapter.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/DocumentationPropertiesAdapter.java index b6366437..c90611b6 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/DocumentationPropertiesAdapter.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/DocumentationPropertiesAdapter.java @@ -15,10 +15,13 @@ package org.eclipse.bpmn2.modeler.ui.adapters.properties; import org.eclipse.bpmn2.Bpmn2Package; import org.eclipse.bpmn2.Documentation; +import org.eclipse.bpmn2.FormalExpression; import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesAdapter; import org.eclipse.bpmn2.modeler.core.adapters.FeatureDescriptor; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.util.FeatureMap; +import org.eclipse.emf.ecore.util.FeatureMapUtil; /** * @author Bob Brodt @@ -40,7 +43,11 @@ public class DocumentationPropertiesAdapter extends ExtendedPropertiesAdapter<Do @Override protected void internalSet(Documentation documentation, EStructuralFeature feature, Object value, int index) { String text = value==null ? "" : value.toString(); //$NON-NLS-1$ - documentation.setText(text); + Object b = DocumentationPropertiesAdapter.this.getProperty(feature, "CDATA"); + if (b !=null) + setTextCDATA(documentation, text); + else + documentation.setText(text); } @Override @@ -48,8 +55,18 @@ public class DocumentationPropertiesAdapter extends ExtendedPropertiesAdapter<Do // formal expression body is always a multiline text field return true; } + + private void setTextCDATA(Documentation documentation, String text) { + documentation.getMixed().clear(); + FeatureMap.Entry cdata = FeatureMapUtil.createCDATAEntry(text); + documentation.getMixed().add(cdata); + + } } ); + + // By default, Documentation.text is serialized as CDATA instead of an XML attribute value. + setProperty(feature, "CDATA", Boolean.TRUE); } } diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/FormalExpressionPropertiesAdapter.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/FormalExpressionPropertiesAdapter.java index f2ce2e7d..27ca70a8 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/FormalExpressionPropertiesAdapter.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/FormalExpressionPropertiesAdapter.java @@ -31,6 +31,8 @@ import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.util.FeatureMap; +import org.eclipse.emf.ecore.util.FeatureMapUtil; /** * @author Bob Brodt @@ -53,6 +55,10 @@ public class FormalExpressionPropertiesAdapter extends ExtendedPropertiesAdapter protected void internalSet(FormalExpression formalExpression, EStructuralFeature feature, Object value, int index) { String body = value==null ? null : value.toString(); InsertionAdapter.executeIfNeeded(formalExpression); + Object b = FormalExpressionPropertiesAdapter.this.getProperty(feature, "CDATA"); + if (b !=null) + setBodyCDATA(formalExpression, body); + else formalExpression.setBody(body); } @@ -78,6 +84,13 @@ public class FormalExpressionPropertiesAdapter extends ExtendedPropertiesAdapter // formal expression body is always a multiline text field return true; } + + private void setBodyCDATA(FormalExpression formalExpression, String body) { + formalExpression.getMixed().clear(); + FeatureMap.Entry cdata = FeatureMapUtil.createCDATAEntry(body); + formalExpression.getMixed().add(cdata); + + } } ); diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/UpdateExpandableActivityFeature.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/UpdateExpandableActivityFeature.java index 4a9f723b..881e10a8 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/UpdateExpandableActivityFeature.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/activity/subprocess/UpdateExpandableActivityFeature.java @@ -12,7 +12,11 @@ ******************************************************************************/ package org.eclipse.bpmn2.modeler.ui.features.activity.subprocess; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.bpmn2.BaseElement; +import org.eclipse.bpmn2.SequenceFlow; import org.eclipse.bpmn2.SubProcess; import org.eclipse.bpmn2.di.BPMNDiagram; import org.eclipse.bpmn2.di.BPMNShape; @@ -22,13 +26,18 @@ import org.eclipse.bpmn2.modeler.core.features.GraphitiConstants; import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil; import org.eclipse.bpmn2.modeler.core.utils.FeatureSupport; import org.eclipse.bpmn2.modeler.core.utils.ShapeDecoratorUtil; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.graphiti.features.IDeleteFeature; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.IReason; +import org.eclipse.graphiti.features.context.IDeleteContext; import org.eclipse.graphiti.features.context.IUpdateContext; +import org.eclipse.graphiti.features.context.impl.DeleteContext; import org.eclipse.graphiti.features.impl.Reason; import org.eclipse.graphiti.mm.Property; import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm; import org.eclipse.graphiti.mm.algorithms.styles.LineStyle; +import org.eclipse.graphiti.mm.pictograms.Connection; import org.eclipse.graphiti.mm.pictograms.ContainerShape; import org.eclipse.graphiti.mm.pictograms.PictogramElement; import org.eclipse.graphiti.services.Graphiti; @@ -107,6 +116,23 @@ public class UpdateExpandableActivityFeature extends AbstractUpdateBaseElementFe ShapeDecoratorUtil.hideActivityMarker(container, GraphitiConstants.ACTIVITY_MARKER_EXPAND); } + if (subprocess.isTriggeredByEvent()) { + // Event SubProcesses may not have incoming or outgoing SequenceFlows + List<SequenceFlow> flows = new ArrayList<SequenceFlow>(); + flows.addAll(subprocess.getIncoming()); + flows.addAll(subprocess.getOutgoing()); + for (SequenceFlow sf : flows) { + org.eclipse.graphiti.mm.pictograms.Diagram diagram = getFeatureProvider().getDiagramTypeProvider().getDiagram(); + for (Object o : Graphiti.getPeService().getLinkedPictogramElements(new EObject[] {sf}, diagram)) { + if (o instanceof Connection) { + IDeleteContext dc = new DeleteContext((Connection)o); + IDeleteFeature df = getFeatureProvider().getDeleteFeature(dc); + df.delete(dc); + } + } + } + } + return true; } }
\ No newline at end of file diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/flow/SequenceFlowFeatureContainer.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/flow/SequenceFlowFeatureContainer.java index e5e80209..7b90219c 100644 --- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/flow/SequenceFlowFeatureContainer.java +++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/features/flow/SequenceFlowFeatureContainer.java @@ -192,6 +192,16 @@ public class SequenceFlowFeatureContainer extends BaseElementConnectionFeatureCo if (source==target) return true; + if (source instanceof SubProcess) { + if (((SubProcess)source).isTriggeredByEvent()) + return false; + } + + if (target instanceof SubProcess) { + if (((SubProcess)target).isTriggeredByEvent()) + return false; + } + if (target instanceof StartEvent) return false; |