-
Notifications
You must be signed in to change notification settings - Fork 137
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(drd): add Modeling#updateModdleProperties
- Loading branch information
1 parent
ff60a72
commit 4613132
Showing
4 changed files
with
148 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
62 changes: 62 additions & 0 deletions
62
packages/dmn-js-drd/src/features/modeling/cmd/UpdateModdlePropertiesHandler.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
import { | ||
reduce, | ||
keys, | ||
forEach | ||
} from 'min-dash'; | ||
|
||
export default function UpdateModdlePropertiesHandler(elementRegistry) { | ||
this._elementRegistry = elementRegistry; | ||
} | ||
|
||
UpdateModdlePropertiesHandler.$inject = [ 'elementRegistry' ]; | ||
|
||
UpdateModdlePropertiesHandler.prototype.execute = function(context) { | ||
|
||
var element = context.element, | ||
moddleElement = context.moddleElement, | ||
properties = context.properties; | ||
|
||
if (!moddleElement) { | ||
throw new Error('<moddleElement> required'); | ||
} | ||
|
||
// TODO(nikku): we need to ensure that ID properties | ||
// are properly registered / unregistered via | ||
// this._moddle.ids.assigned(id) | ||
var changed = context.changed || [ element ]; | ||
var oldProperties = context.oldProperties | ||
|| getModdleProperties(moddleElement, keys(properties)); | ||
|
||
setModdleProperties(moddleElement, properties); | ||
|
||
context.oldProperties = oldProperties; | ||
context.changed = changed; | ||
|
||
return changed; | ||
}; | ||
|
||
UpdateModdlePropertiesHandler.prototype.revert = function(context) { | ||
var oldProperties = context.oldProperties, | ||
moddleElement = context.moddleElement, | ||
changed = context.changed; | ||
|
||
setModdleProperties(moddleElement, oldProperties); | ||
|
||
return changed; | ||
}; | ||
|
||
|
||
// helpers ///////////////// | ||
|
||
function getModdleProperties(moddleElement, propertyNames) { | ||
return reduce(propertyNames, function(result, key) { | ||
result[key] = moddleElement.get(key); | ||
return result; | ||
}, {}); | ||
} | ||
|
||
function setModdleProperties(moddleElement, properties) { | ||
forEach(properties, function(value, key) { | ||
moddleElement.set(key, value); | ||
}); | ||
} |
20 changes: 20 additions & 0 deletions
20
packages/dmn-js-drd/test/spec/features/modeling/UpdateModdleProperties.dmn
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_1" name="DRD" namespace="http://camunda.org/schema/1.0/dmn" exporter="Camunda Modeler" exporterVersion="5.23.0" modeler:executionPlatform="Camunda Cloud" modeler:executionPlatformVersion="8.5.0"> | ||
<decision id="Decision_1" name="Decision 1"> | ||
<decisionTable id="DecisionTable_075f9cc"> | ||
<input id="Input_1"> | ||
<inputExpression id="InputExpression_1" typeRef="string"> | ||
<text></text> | ||
</inputExpression> | ||
</input> | ||
<output id="Output_1" typeRef="string" /> | ||
</decisionTable> | ||
</decision> | ||
<dmndi:DMNDI> | ||
<dmndi:DMNDiagram> | ||
<dmndi:DMNShape dmnElementRef="Decision_1"> | ||
<dc:Bounds height="80" width="180" x="160" y="100" /> | ||
</dmndi:DMNShape> | ||
</dmndi:DMNDiagram> | ||
</dmndi:DMNDI> | ||
</definitions> |
56 changes: 56 additions & 0 deletions
56
packages/dmn-js-drd/test/spec/features/modeling/UpdateModdlePropertiesSpec.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
/* global sinon */ | ||
|
||
import { getBusinessObject } from 'dmn-js-shared/lib/util/ModelUtil'; | ||
|
||
import { | ||
bootstrapModeler, | ||
inject | ||
} from 'test/TestHelper'; | ||
|
||
import modelingModule from 'src/features/modeling'; | ||
import coreModule from 'src/core'; | ||
|
||
var testModules = [ coreModule, modelingModule ]; | ||
|
||
|
||
describe('features/modeling - update moddle properties', function() { | ||
|
||
describe('updating dmn:Decision', function() { | ||
|
||
var diagramXML = require('./UpdateModdleProperties.dmn'); | ||
|
||
beforeEach(bootstrapModeler(diagramXML, { modules: testModules })); | ||
|
||
|
||
it('should update', inject(function(elementRegistry, modeling, eventBus) { | ||
|
||
// given | ||
var decision = elementRegistry.get('Decision_1'), | ||
businessObject = getBusinessObject(decision); | ||
|
||
var changedElements; | ||
|
||
var elementsChangedListener = sinon.spy(function(event) { | ||
changedElements = event.elements; | ||
}); | ||
|
||
eventBus.on('elements.changed', elementsChangedListener); | ||
|
||
// assume | ||
expect(businessObject.get('name')).to.eql('Decision 1'); | ||
|
||
// when | ||
modeling.updateModdleProperties(decision, businessObject, { name: 'Decision 2' }); | ||
|
||
// then | ||
expect(businessObject.get('name')).to.eql('Decision 2'); | ||
|
||
// changed affected elements | ||
expect(changedElements).to.eql([ | ||
decision | ||
]); | ||
})); | ||
|
||
}); | ||
|
||
}); |