feat(modeling): allow passing shapes to modeling#updateProperties
Closes #430
This commit is contained in:
parent
65c94ea9ac
commit
a046b14d6f
|
@ -2,7 +2,10 @@
|
|||
|
||||
var reduce = require('lodash/object/transform'),
|
||||
keys = require('lodash/object/keys'),
|
||||
forEach = require('lodash/collection/forEach');
|
||||
forEach = require('lodash/collection/forEach'),
|
||||
assign = require('lodash/object/assign');
|
||||
|
||||
var getBusinessObject = require('../../../util/ModelUtil').getBusinessObject;
|
||||
|
||||
var DEFAULT_FLOW = 'default',
|
||||
NAME = 'name',
|
||||
|
@ -28,21 +31,6 @@ UpdatePropertiesHandler.$inject = [ 'elementRegistry', 'moddle' ];
|
|||
module.exports = UpdatePropertiesHandler;
|
||||
|
||||
|
||||
function getProperties(businessObject, propertyNames) {
|
||||
return reduce(propertyNames, function(result, key) {
|
||||
result[key] = businessObject.get(key);
|
||||
return result;
|
||||
}, {});
|
||||
}
|
||||
|
||||
|
||||
function setProperties(businessObject, properties) {
|
||||
forEach(properties, function(value, key) {
|
||||
businessObject.set(key, value);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
////// api /////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
|
@ -68,7 +56,7 @@ UpdatePropertiesHandler.prototype.execute = function(context) {
|
|||
ids = this._moddle.ids;
|
||||
|
||||
var businessObject = element.businessObject,
|
||||
properties = context.properties,
|
||||
properties = unwrapBusinessObjects(context.properties),
|
||||
oldProperties = context.oldProperties || getProperties(businessObject, keys(properties));
|
||||
|
||||
if (isIdChange(properties, businessObject)) {
|
||||
|
@ -138,4 +126,44 @@ UpdatePropertiesHandler.prototype.revert = function(context) {
|
|||
|
||||
function isIdChange(properties, businessObject) {
|
||||
return ID in properties && properties[ID] !== businessObject[ID];
|
||||
}
|
||||
|
||||
|
||||
function getProperties(businessObject, propertyNames) {
|
||||
return reduce(propertyNames, function(result, key) {
|
||||
result[key] = businessObject.get(key);
|
||||
return result;
|
||||
}, {});
|
||||
}
|
||||
|
||||
|
||||
function setProperties(businessObject, properties) {
|
||||
forEach(properties, function(value, key) {
|
||||
businessObject.set(key, value);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
var referencePropertyNames = [ 'default' ];
|
||||
|
||||
/**
|
||||
* Make sure we unwrap the actual business object
|
||||
* behind diagram element that may have been
|
||||
* passed as arguments.
|
||||
*
|
||||
* @param {Object} properties
|
||||
*
|
||||
* @return {Object} unwrappedProps
|
||||
*/
|
||||
function unwrapBusinessObjects(properties) {
|
||||
|
||||
var unwrappedProps = assign({}, properties);
|
||||
|
||||
referencePropertyNames.forEach(function(name) {
|
||||
if (name in properties) {
|
||||
unwrappedProps[name] = getBusinessObject(unwrappedProps[name]);
|
||||
}
|
||||
});
|
||||
|
||||
return unwrappedProps;
|
||||
}
|
|
@ -54,7 +54,7 @@ describe('features/modeling - update properties', function() {
|
|||
}));
|
||||
|
||||
|
||||
it('updating default flow', inject(function(elementRegistry, modeling) {
|
||||
it('unsetting default flow', inject(function(elementRegistry, modeling) {
|
||||
|
||||
// given
|
||||
var gatewayShape = elementRegistry.get('ExclusiveGateway_1');
|
||||
|
@ -70,6 +70,24 @@ describe('features/modeling - update properties', function() {
|
|||
}));
|
||||
|
||||
|
||||
it('updating default flow', inject(function(elementRegistry, modeling) {
|
||||
|
||||
// given
|
||||
var gatewayShape = elementRegistry.get('ExclusiveGateway_1'),
|
||||
newDefaultFlowConnection = elementRegistry.get('SequenceFlow_2'),
|
||||
newDefaultFlow = newDefaultFlowConnection.businessObject;
|
||||
|
||||
// when
|
||||
modeling.updateProperties(gatewayShape, { 'default': newDefaultFlow });
|
||||
|
||||
// then
|
||||
expect(gatewayShape.businessObject['default']).to.eql(newDefaultFlow);
|
||||
|
||||
// flow got updated, too
|
||||
expect(updatedElements).to.include(newDefaultFlowConnection);
|
||||
}));
|
||||
|
||||
|
||||
it('setting name', inject(function(elementRegistry, modeling) {
|
||||
|
||||
// given
|
||||
|
@ -173,20 +191,43 @@ describe('features/modeling - update properties', function() {
|
|||
}));
|
||||
|
||||
|
||||
it('updating default flow', inject(function(elementRegistry, commandStack, modeling) {
|
||||
it('unsetting default flow', inject(function(elementRegistry, commandStack, modeling) {
|
||||
|
||||
// given
|
||||
var gatewayShape = elementRegistry.get('ExclusiveGateway_1');
|
||||
var gatewayShape = elementRegistry.get('ExclusiveGateway_1'),
|
||||
oldDefaultFlow = gatewayShape.businessObject['default'];
|
||||
|
||||
// when
|
||||
modeling.updateProperties(gatewayShape, { 'default': undefined });
|
||||
commandStack.undo();
|
||||
|
||||
// then
|
||||
expect(gatewayShape.businessObject['default']).to.exist;
|
||||
expect(gatewayShape.businessObject['default']).to.eql(oldDefaultFlow);
|
||||
|
||||
// flow got updated, too
|
||||
expect(updatedElements).to.include(elementRegistry.get('SequenceFlow_1'));
|
||||
expect(updatedElements).to.include(elementRegistry.get(oldDefaultFlow.id));
|
||||
}));
|
||||
|
||||
|
||||
it('updating default flow', inject(function(elementRegistry, commandStack, modeling) {
|
||||
|
||||
// given
|
||||
var gatewayShape = elementRegistry.get('ExclusiveGateway_1'),
|
||||
newDefaultFlowConnection = elementRegistry.get('SequenceFlow_2'),
|
||||
newDefaultFlow = newDefaultFlowConnection.businessObject,
|
||||
oldDefaultFlowConnection = elementRegistry.get('SequenceFlow_1'),
|
||||
oldDefaultFlow = oldDefaultFlowConnection.businessObject;
|
||||
|
||||
// when
|
||||
modeling.updateProperties(gatewayShape, { 'default': newDefaultFlow });
|
||||
commandStack.undo();
|
||||
|
||||
// then
|
||||
expect(gatewayShape.businessObject['default']).to.eql(oldDefaultFlow);
|
||||
|
||||
// flow got updated, too
|
||||
expect(updatedElements).to.include(newDefaultFlowConnection);
|
||||
expect(updatedElements).to.include(oldDefaultFlowConnection);
|
||||
}));
|
||||
|
||||
|
||||
|
@ -335,6 +376,27 @@ describe('features/modeling - update properties', function() {
|
|||
});
|
||||
|
||||
|
||||
describe('unwrap diagram elements', function() {
|
||||
|
||||
it('updating default flow with connection', inject(function(elementRegistry, modeling) {
|
||||
|
||||
// given
|
||||
var gatewayShape = elementRegistry.get('ExclusiveGateway_1'),
|
||||
newDefaultFlowConnection = elementRegistry.get('SequenceFlow_2');
|
||||
|
||||
// when
|
||||
modeling.updateProperties(gatewayShape, { 'default': newDefaultFlowConnection });
|
||||
|
||||
// then
|
||||
expect(gatewayShape.businessObject['default']).to.eql(newDefaultFlowConnection.businessObject);
|
||||
|
||||
// flow got updated, too
|
||||
expect(updatedElements).to.include(newDefaultFlowConnection);
|
||||
}));
|
||||
|
||||
});
|
||||
|
||||
|
||||
describe('error handling', function() {
|
||||
|
||||
it('should ignore unchanged id', inject(function(elementRegistry, modeling) {
|
||||
|
|
Loading…
Reference in New Issue