fix(rules): allow TextAnnotation <-> Data(Store|Object) connection
Closes #687
This commit is contained in:
parent
8e55edd80f
commit
8015b21b15
|
@ -190,22 +190,6 @@ function isTextAnnotation(element) {
|
|||
return is(element, 'bpmn:TextAnnotation');
|
||||
}
|
||||
|
||||
function isArtifact(element) {
|
||||
return isAny(element, [
|
||||
'bpmn:DataObjectReference',
|
||||
'bpmn:DataStoreReference',
|
||||
'bpmn:Group',
|
||||
'bpmn:TextAnnotation'
|
||||
]);
|
||||
}
|
||||
|
||||
function isDataObject(element) {
|
||||
return isAny(element, [
|
||||
'bpmn:DataObjectReference',
|
||||
'bpmn:DataStoreReference'
|
||||
]);
|
||||
}
|
||||
|
||||
function isCompensationBoundary(element) {
|
||||
return is(element, 'bpmn:BoundaryEvent') &&
|
||||
hasEventDefinition(element, 'bpmn:CompensateEventDefinition');
|
||||
|
@ -714,6 +698,22 @@ function canResize(shape, newBounds) {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check, whether one side of the relationship
|
||||
* is a text annotation.
|
||||
*/
|
||||
function isOneTextAnnotation(source, target) {
|
||||
|
||||
var sourceTextAnnotation = isTextAnnotation(source),
|
||||
targetTextAnnotation = isTextAnnotation(target);
|
||||
|
||||
return (
|
||||
(sourceTextAnnotation || targetTextAnnotation) &&
|
||||
(sourceTextAnnotation !== targetTextAnnotation)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function canConnectAssociation(source, target) {
|
||||
|
||||
// do not connect connections
|
||||
|
@ -726,12 +726,13 @@ function canConnectAssociation(source, target) {
|
|||
return true;
|
||||
}
|
||||
|
||||
// only connect artifacts with other BPMN (graphical) elements
|
||||
// connect if different parent
|
||||
return ((isArtifact(source) && !isDataObject(source) && !isArtifact(target)) ||
|
||||
(!isArtifact(source) && isArtifact(target) && !isDataObject(target))) &&
|
||||
!isParent(target, source) &&
|
||||
!isParent(source, target);
|
||||
// don't connect parent <-> child
|
||||
if (isParent(target, source) || isParent(source, target)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// allow connection of associations between <!TextAnnotation> and <TextAnnotation>
|
||||
return isOneTextAnnotation(source, target);
|
||||
}
|
||||
|
||||
function canConnectMessageFlow(source, target) {
|
||||
|
|
|
@ -207,6 +207,50 @@ describe('features/modeling/rules - BpmnRules', function() {
|
|||
}));
|
||||
|
||||
|
||||
it('connect DataObjectReference -> TextAnnotation', inject(function() {
|
||||
|
||||
expectCanConnect('DataObjectReference', 'TextAnnotation', {
|
||||
sequenceFlow: false,
|
||||
messageFlow: false,
|
||||
association: true,
|
||||
dataAssociation: false
|
||||
});
|
||||
}));
|
||||
|
||||
|
||||
it('connect TextAnnotation -> DataObjectReference', inject(function() {
|
||||
|
||||
expectCanConnect('TextAnnotation', 'DataObjectReference', {
|
||||
sequenceFlow: false,
|
||||
messageFlow: false,
|
||||
association: true,
|
||||
dataAssociation: false
|
||||
});
|
||||
}));
|
||||
|
||||
|
||||
it('connect DataStoreReference -> TextAnnotation', inject(function() {
|
||||
|
||||
expectCanConnect('DataStoreReference', 'TextAnnotation', {
|
||||
sequenceFlow: false,
|
||||
messageFlow: false,
|
||||
association: true,
|
||||
dataAssociation: false
|
||||
});
|
||||
}));
|
||||
|
||||
|
||||
it('connect TextAnnotation -> DataStoreReference', inject(function() {
|
||||
|
||||
expectCanConnect('TextAnnotation', 'DataStoreReference', {
|
||||
sequenceFlow: false,
|
||||
messageFlow: false,
|
||||
association: true,
|
||||
dataAssociation: false
|
||||
});
|
||||
}));
|
||||
|
||||
|
||||
it('connect StartEvent_None -> DataStoreReference', inject(function() {
|
||||
|
||||
expectCanConnect('StartEvent_None', 'DataStoreReference', {
|
||||
|
|
Loading…
Reference in New Issue