diff --git a/src/provider/cloud-element-templates/CreateHelper.js b/src/provider/cloud-element-templates/CreateHelper.js index 4aaf24a95..92f339a81 100644 --- a/src/provider/cloud-element-templates/CreateHelper.js +++ b/src/provider/cloud-element-templates/CreateHelper.js @@ -80,6 +80,20 @@ export function createTaskDefinitionWithType(value, bpmnFactory) { }); } +/** + * Create a task definition representing the given value. + * + * @param {String} value + * @param {BpmnFactory} bpmnFactory + * + * @return {ModdleElement} + */ +export function createTaskDefinitionWithRetries(value, bpmnFactory) { + return bpmnFactory.create('zeebe:TaskDefinition', { + retries: value + }); +} + /** * Create zeebe:Property from the given binding. * @@ -136,4 +150,4 @@ export function ensureExtension(element, type, bpmnFactory) { } return extension; -} \ No newline at end of file +} diff --git a/src/provider/cloud-element-templates/cmd/ChangeElementTemplateHandler.js b/src/provider/cloud-element-templates/cmd/ChangeElementTemplateHandler.js index cea67de0e..75bae8208 100644 --- a/src/provider/cloud-element-templates/cmd/ChangeElementTemplateHandler.js +++ b/src/provider/cloud-element-templates/cmd/ChangeElementTemplateHandler.js @@ -10,6 +10,7 @@ import { import { createInputParameter, createOutputParameter, + createTaskDefinitionWithRetries, createTaskDefinitionWithType, createTaskHeader, createZeebeProperty, @@ -206,7 +207,7 @@ export default class ChangeElementTemplateHandler { if (!shouldKeepValue(oldTaskDefinition, oldProperty, newProperty)) { - // TODO(pinussilvestrus): for now we only support + // TODO(pinussilvestrus): for now we only support and // this needs to be adjusted once we support more let properties = {}; @@ -214,6 +215,10 @@ export default class ChangeElementTemplateHandler { properties = { type: newPropertyValue }; + } else if (oldBindingType === 'zeebe:taskDefinition:retries' || !oldBindingType) { + properties = { + retries: newPropertyValue + }; } commandStack.execute('element.updateModdleProperties', { @@ -228,10 +233,12 @@ export default class ChangeElementTemplateHandler { else { let newTaskDefinition; - // TODO(pinussilvestrus): for now we only support + // TODO(pinussilvestrus): for now we only support and // this needs to be adjusted once we support more if (newBindingType === 'zeebe:taskDefinition:type') { newTaskDefinition = createTaskDefinitionWithType(newPropertyValue, bpmnFactory); + } else if (newBindingType === 'zeebe:taskDefinition:retries') { + newTaskDefinition = createTaskDefinitionWithRetries(newPropertyValue, bpmnFactory); } commandStack.execute('element.updateModdleProperties', { @@ -891,4 +898,4 @@ function remove(array, item) { array.splice(index, 1); return array; -} \ No newline at end of file +} diff --git a/src/provider/cloud-element-templates/create/TaskDefinitionRetriesBindingProvider.js b/src/provider/cloud-element-templates/create/TaskDefinitionRetriesBindingProvider.js new file mode 100644 index 000000000..c11fa69eb --- /dev/null +++ b/src/provider/cloud-element-templates/create/TaskDefinitionRetriesBindingProvider.js @@ -0,0 +1,23 @@ +import { getBusinessObject } from 'bpmn-js/lib/util/ModelUtil'; + +import { createTaskDefinitionWithRetries } from '../CreateHelper'; + + +export default class TaskDefinitionRetriesBindingProvider { + static create(element, options) { + const { + property, + bpmnFactory + } = options; + + const { + value + } = property; + + const extensionElements = getBusinessObject(element).get('extensionElements'); + + const taskDefinition = createTaskDefinitionWithRetries(value, bpmnFactory); + taskDefinition.$parent = extensionElements; + extensionElements.get('values').push(taskDefinition); + } +} diff --git a/src/provider/cloud-element-templates/create/TemplateElementFactory.js b/src/provider/cloud-element-templates/create/TemplateElementFactory.js index 0609e3225..f4cba45c8 100644 --- a/src/provider/cloud-element-templates/create/TemplateElementFactory.js +++ b/src/provider/cloud-element-templates/create/TemplateElementFactory.js @@ -7,6 +7,7 @@ import { find } from 'min-dash'; import validate from '../util/validate'; import PropertyBindingProvider from './PropertyBindingProvider'; +import TaskDefinitionRetriesBindingProvider from './TaskDefinitionRetriesBindingProvider'; import TaskDefinitionTypeBindingProvider from './TaskDefinitionTypeBindingProvider'; import InputBindingProvider from './InputBindingProvider'; import OutputBindingProvider from './OutputBindingProvider'; @@ -16,6 +17,7 @@ import ZeebePropertiesProvider from './ZeebePropertiesProvider'; import { EXTENSION_BINDING_TYPES, PROPERTY_TYPE, + ZEEBE_TASK_DEFINITION_RETRIES_TYPE, ZEEBE_TASK_DEFINITION_TYPE_TYPE, ZEBBE_INPUT_TYPE, ZEEBE_OUTPUT_TYPE, @@ -34,6 +36,7 @@ export default class TemplateElementFactory { this._providers = { [PROPERTY_TYPE]: PropertyBindingProvider, + [ZEEBE_TASK_DEFINITION_RETRIES_TYPE]: TaskDefinitionRetriesBindingProvider, [ZEEBE_TASK_DEFINITION_TYPE_TYPE]: TaskDefinitionTypeBindingProvider, [ZEBBE_PROPERTY_TYPE]: ZeebePropertiesProvider, [ZEBBE_INPUT_TYPE]: InputBindingProvider, @@ -185,4 +188,4 @@ function hasIcon(template) { } = template; return !!(icon && icon.contents); -} \ No newline at end of file +} diff --git a/src/provider/cloud-element-templates/util/bindingTypes.js b/src/provider/cloud-element-templates/util/bindingTypes.js index 4d4386caf..7aac2790a 100644 --- a/src/provider/cloud-element-templates/util/bindingTypes.js +++ b/src/provider/cloud-element-templates/util/bindingTypes.js @@ -4,6 +4,7 @@ export const ZEBBE_PROPERTY_TYPE = 'zeebe:property'; export const ZEBBE_INPUT_TYPE = 'zeebe:input'; export const ZEEBE_OUTPUT_TYPE = 'zeebe:output'; export const ZEEBE_PROPERTY_TYPE = 'zeebe:property'; +export const ZEEBE_TASK_DEFINITION_RETRIES_TYPE = 'zeebe:taskDefinition:retries'; export const ZEEBE_TASK_DEFINITION_TYPE_TYPE = 'zeebe:taskDefinition:type'; export const ZEEBE_TASK_HEADER_TYPE = 'zeebe:taskHeader'; @@ -11,15 +12,17 @@ export const EXTENSION_BINDING_TYPES = [ ZEBBE_INPUT_TYPE, ZEEBE_OUTPUT_TYPE, ZEEBE_PROPERTY_TYPE, + ZEEBE_TASK_DEFINITION_RETRIES_TYPE, ZEEBE_TASK_DEFINITION_TYPE_TYPE, ZEEBE_TASK_HEADER_TYPE ]; export const TASK_DEFINITION_TYPES = [ + ZEEBE_TASK_DEFINITION_RETRIES_TYPE, ZEEBE_TASK_DEFINITION_TYPE_TYPE ]; export const IO_BINDING_TYPES = [ ZEBBE_INPUT_TYPE, ZEEBE_OUTPUT_TYPE -]; \ No newline at end of file +]; diff --git a/src/provider/cloud-element-templates/util/propertyUtil.js b/src/provider/cloud-element-templates/util/propertyUtil.js index ac1240c74..a1c2301fb 100644 --- a/src/provider/cloud-element-templates/util/propertyUtil.js +++ b/src/provider/cloud-element-templates/util/propertyUtil.js @@ -13,7 +13,7 @@ import { ZEBBE_INPUT_TYPE, ZEEBE_OUTPUT_TYPE, ZEEBE_PROPERTY_TYPE, - ZEEBE_TASK_HEADER_TYPE + ZEEBE_TASK_HEADER_TYPE, ZEEBE_TASK_DEFINITION_RETRIES_TYPE } from '../util/bindingTypes'; import { @@ -26,7 +26,7 @@ import { import { createInputParameter, - createOutputParameter, + createOutputParameter, createTaskDefinitionWithRetries, createTaskDefinitionWithType, createTaskHeader, createZeebeProperty, @@ -251,6 +251,8 @@ export function setPropertyValue(bpmnFactory, commandStack, element, property, v if (type === ZEEBE_TASK_DEFINITION_TYPE_TYPE) { newTaskDefinition = createTaskDefinitionWithType(value, bpmnFactory); + } else if (type === ZEEBE_TASK_DEFINITION_RETRIES_TYPE) { + newTaskDefinition = createTaskDefinitionWithRetries(value, bpmnFactory); } else { throw unknownBindingError(element, property); } diff --git a/test/spec/provider/cloud-element-templates/fixtures/complex.json b/test/spec/provider/cloud-element-templates/fixtures/complex.json index 780a5d36e..37e3ffdca 100644 --- a/test/spec/provider/cloud-element-templates/fixtures/complex.json +++ b/test/spec/provider/cloud-element-templates/fixtures/complex.json @@ -149,12 +149,19 @@ "entriesVisible": true, "properties": [ { - "type": "Hidden", + "type": "String", "value": "http", "binding": { "type": "zeebe:taskDefinition:type" } }, + { + "type": "String", + "value": "5", + "binding": { + "type": "zeebe:taskDefinition:retries" + } + }, { "label": "REST Endpoint URL", "description": "Specify the url of the REST API to talk to.", @@ -684,4 +691,4 @@ } ] } -] \ No newline at end of file +]