fix(bpmn-updater): keep conditions on element replace

Closes camunda/camunda-modeler#318
This commit is contained in:
Philipp Fromme 2016-06-20 16:27:36 +02:00 committed by Ricardo Matias
parent b43cff1ec2
commit e157f1c82f
2 changed files with 47 additions and 2 deletions

View File

@ -199,21 +199,25 @@ function BpmnUpdater(eventBus, bpmnFactory, connectionDocking, translate) {
if ((businessObject.sourceRef && businessObject.sourceRef.default) && if ((businessObject.sourceRef && businessObject.sourceRef.default) &&
!(is(newTarget, 'bpmn:Activity') || !(is(newTarget, 'bpmn:Activity') ||
is(newTarget, 'bpmn:EndEvent') || is(newTarget, 'bpmn:EndEvent') ||
is(newTarget, 'bpmn:Gateway') ||
is(newTarget, 'bpmn:IntermediateThrowEvent')) ) { is(newTarget, 'bpmn:IntermediateThrowEvent')) ) {
context.default = businessObject.sourceRef.default; context.default = businessObject.sourceRef.default;
businessObject.sourceRef.default = undefined; businessObject.sourceRef.default = undefined;
} }
// on reconnectStart -> conditional flow // on reconnectStart -> conditional flow
if ((businessObject.conditionExpression) && !is(newSource, 'bpmn:Activity')) { if (oldSource && (businessObject.conditionExpression) &&
!(is(newSource, 'bpmn:Activity') ||
is(newSource, 'bpmn:Gateway')) ) {
context.conditionExpression = businessObject.conditionExpression; context.conditionExpression = businessObject.conditionExpression;
businessObject.conditionExpression = undefined; businessObject.conditionExpression = undefined;
} }
// on reconnectEnd -> conditional flow // on reconnectEnd -> conditional flow
if ((businessObject.conditionExpression) && if (oldTarget && (businessObject.conditionExpression) &&
!(is(newTarget, 'bpmn:Activity') || !(is(newTarget, 'bpmn:Activity') ||
is(newTarget, 'bpmn:EndEvent') || is(newTarget, 'bpmn:EndEvent') ||
is(newTarget, 'bpmn:Gateway') ||
is(newTarget, 'bpmn:IntermediateThrowEvent')) ) { is(newTarget, 'bpmn:IntermediateThrowEvent')) ) {
context.conditionExpression = businessObject.conditionExpression; context.conditionExpression = businessObject.conditionExpression;
businessObject.conditionExpression = undefined; businessObject.conditionExpression = undefined;

View File

@ -88,6 +88,47 @@ describe('features/modeling - update properties', function() {
})); }));
it('updating conditional flow on source replace', inject(function(bpmnReplace, elementRegistry) {
//given
var conditionalFlow = elementRegistry.get('SequenceFlow_3'),
serviceTask = elementRegistry.get('ServiceTask_1');
var conditionExpression = conditionalFlow.businessObject.conditionExpression;
var userTaskData = {
type: 'bpmn:UserTask'
};
// when
bpmnReplace.replaceElement(serviceTask, userTaskData);
// then
expect(conditionalFlow.businessObject.conditionExpression).to.eql(conditionExpression);
}));
it('updating conditional flow on target replace', inject(function(bpmnReplace, elementRegistry) {
//given
var conditionalFlow = elementRegistry.get('SequenceFlow_3'),
endEvent = elementRegistry.get('EndEvent_1');
var conditionExpression = conditionalFlow.businessObject.conditionExpression;
var messageEndEventData = {
type: 'bpmn:EndEvent',
eventDefinitionType: 'bpmn:MessageEventDefinition'
};
// when
bpmnReplace.replaceElement(endEvent, messageEndEventData);
// then
expect(conditionalFlow.businessObject.conditionExpression).to.eql(conditionExpression);
}));
it('setting name', inject(function(elementRegistry, modeling) { it('setting name', inject(function(elementRegistry, modeling) {
// given // given