ruoyi-vue-nocode/ruoyi-ui/ruoyi-bpmnjs/resources/properties-panel/provider/activiti/ActivitiPropertiesProvider.js
2022-08-11 16:10:41 +08:00

543 lines
16 KiB
JavaScript

'use strict';
var inherits = require('inherits');
var PropertiesActivator = require('../../PropertiesActivator');
var asyncCapableHelper = require('../../helper/AsyncCapableHelper'),
ImplementationTypeHelper = require('../../helper/ImplementationTypeHelper');
var is = require('bpmn-js/lib/util/ModelUtil').is;
// bpmn properties
var processProps = require('../../provider/bpmn/parts/ProcessProps'),
eventProps = require('../../provider/bpmn/parts/EventProps'),
linkProps = require('../../provider/bpmn/parts/LinkProps'),
documentationProps = require('../../provider/bpmn/parts/DocumentationProps'),
idProps = require('../../provider/bpmn/parts/IdProps'),
nameProps = require('../../provider/bpmn/parts/NameProps'),
executableProps = require('../../provider/bpmn/parts/ExecutableProps');
// activiti properties
var serviceTaskDelegateProps = require('./parts/ServiceTaskDelegateProps'),
userTaskProps = require('./parts/UserTaskProps'),
asynchronousContinuationProps = require('./parts/AsynchronousContinuationProps'),
callActivityProps = require('./parts/CallActivityProps'),
multiInstanceProps = require('./parts/MultiInstanceLoopProps'),
conditionalProps = require('./parts/ConditionalProps'),
scriptProps = require('./parts/ScriptTaskProps'),
errorProps = require('./parts/ErrorEventProps'),
formProps = require('./parts/FormProps'),
startEventInitiator = require('./parts/StartEventInitiator'),
variableMapping = require('./parts/VariableMappingProps'),
versionTag = require('./parts/VersionTagProps');
var listenerProps = require('./parts/ListenerProps'),
listenerDetails = require('./parts/ListenerDetailProps'),
listenerFields = require('./parts/ListenerFieldInjectionProps');
var elementTemplateChooserProps = require('./element-templates/parts/ChooserProps'),
elementTemplateCustomProps = require('./element-templates/parts/CustomProps');
// Input/Output
var inputOutput = require('./parts/InputOutputProps'),
inputOutputParameter = require('./parts/InputOutputParameterProps');
// Connector
var connectorDetails = require('./parts/ConnectorDetailProps'),
connectorInputOutput = require('./parts/ConnectorInputOutputProps'),
connectorInputOutputParameter = require('./parts/ConnectorInputOutputParameterProps');
// properties
var properties = require('./parts/PropertiesProps');
// job configuration
var jobConfiguration = require('./parts/JobConfigurationProps');
// history time to live
var historyTimeToLive = require('./parts/HistoryTimeToLiveProps');
// candidate starter groups/users
var candidateStarter = require('./parts/CandidateStarterProps');
// tasklist
var tasklist = require('./parts/TasklistProps');
// external task configuration
var externalTaskConfiguration = require('./parts/ExternalTaskConfigurationProps');
// field injection
var fieldInjections = require('./parts/FieldInjectionProps');
var getBusinessObject = require('bpmn-js/lib/util/ModelUtil').getBusinessObject,
eventDefinitionHelper = require('../../helper/EventDefinitionHelper'),
implementationTypeHelper = require('../../helper/ImplementationTypeHelper');
// helpers ////////////////////////////////////////
var isExternalTaskPriorityEnabled = function(element) {
var businessObject = getBusinessObject(element);
// show only if element is a process, a participant ...
if (is(element, 'bpmn:Process') || is(element, 'bpmn:Participant') && businessObject.get('processRef')) {
return true;
}
var externalBo = ImplementationTypeHelper.getServiceTaskLikeBusinessObject(element),
isExternalTask = ImplementationTypeHelper.getImplementationType(externalBo) === 'external';
// ... or an external task with selected external implementation type
return !!ImplementationTypeHelper.isExternalCapable(externalBo) && isExternalTask;
};
var isJobConfigEnabled = function(element) {
var businessObject = getBusinessObject(element);
if (is(element, 'bpmn:Process') || is(element, 'bpmn:Participant') && businessObject.get('processRef')) {
return true;
}
// async behavior
var bo = getBusinessObject(element);
if (asyncCapableHelper.isAsyncBefore(bo) || asyncCapableHelper.isAsyncAfter(bo)) {
return true;
}
// timer definition
if (is(element, 'bpmn:Event')) {
return !!eventDefinitionHelper.getTimerEventDefinition(element);
}
return false;
};
var getInputOutputParameterLabel = function(param, translate) {
if (is(param, 'activiti:InputParameter')) {
return translate('Input Parameter');
}
if (is(param, 'activiti:OutputParameter')) {
return translate('Output Parameter');
}
return '';
};
var getListenerLabel = function(param, translate) {
if (is(param, 'activiti:ExecutionListener')) {
return translate('Execution Listener');
}
if (is(param, 'activiti:TaskListener')) {
return translate('Task Listener');
}
return '';
};
var PROCESS_KEY_HINT = 'This maps to the process definition key.';
var TASK_KEY_HINT = 'This maps to the task definition key.';
function createGeneralTabGroups(
element, canvas, bpmnFactory,
elementRegistry, elementTemplates, translate) {
// refer to target element for external labels
element = element.labelTarget || element;
var generalGroup = {
id: 'general',
label: translate('General'),
entries: []
};
var idOptions;
var processOptions;
if (is(element, 'bpmn:Process')) {
idOptions = { description: PROCESS_KEY_HINT };
}
if (is(element, 'bpmn:UserTask')) {
idOptions = { description: TASK_KEY_HINT };
}
if (is(element, 'bpmn:Participant')) {
processOptions = { processIdDescription: PROCESS_KEY_HINT };
}
idProps(generalGroup, element, translate, idOptions);
nameProps(generalGroup, element, bpmnFactory, canvas, translate);
processProps(generalGroup, element, translate, processOptions);
versionTag(generalGroup, element, translate);
executableProps(generalGroup, element, translate);
elementTemplateChooserProps(generalGroup, element, elementTemplates, translate);
var customFieldsGroups = elementTemplateCustomProps(element, elementTemplates, bpmnFactory, translate);
var detailsGroup = {
id: 'details',
label: translate('Details'),
entries: []
};
serviceTaskDelegateProps(detailsGroup, element, bpmnFactory, translate);
userTaskProps(detailsGroup, element, translate);
scriptProps(detailsGroup, element, bpmnFactory, translate);
linkProps(detailsGroup, element, translate);
callActivityProps(detailsGroup, element, bpmnFactory, translate);
eventProps(detailsGroup, element, bpmnFactory, elementRegistry, translate);
errorProps(detailsGroup, element, bpmnFactory, translate);
conditionalProps(detailsGroup, element, bpmnFactory, translate);
startEventInitiator(detailsGroup, element, translate); // this must be the last element of the details group!
var multiInstanceGroup = {
id: 'multiInstance',
label: translate('Multi Instance'),
entries: []
};
multiInstanceProps(multiInstanceGroup, element, bpmnFactory, translate);
var asyncGroup = {
id : 'async',
label: translate('Asynchronous Continuations'),
entries : []
};
asynchronousContinuationProps(asyncGroup, element, bpmnFactory, translate);
var jobConfigurationGroup = {
id : 'jobConfiguration',
label : translate('Job Configuration'),
entries : [],
enabled: isJobConfigEnabled
};
jobConfiguration(jobConfigurationGroup, element, bpmnFactory, translate);
var externalTaskGroup = {
id : 'externalTaskConfiguration',
label : translate('External Task Configuration'),
entries : [],
enabled: isExternalTaskPriorityEnabled
};
externalTaskConfiguration(externalTaskGroup, element, bpmnFactory, translate);
var candidateStarterGroup = {
id: 'candidateStarterConfiguration',
label: translate('Candidate Starter Configuration'),
entries: []
};
candidateStarter(candidateStarterGroup, element, bpmnFactory, translate);
var historyTimeToLiveGroup = {
id: 'historyConfiguration',
label: translate('History Configuration'),
entries: []
};
historyTimeToLive(historyTimeToLiveGroup, element, bpmnFactory, translate);
var tasklistGroup = {
id: 'tasklist',
label: translate('Tasklist Configuration'),
entries: []
};
tasklist(tasklistGroup, element, bpmnFactory, translate);
var documentationGroup = {
id: 'documentation',
label: translate('Documentation'),
entries: []
};
documentationProps(documentationGroup, element, bpmnFactory, translate);
var groups = [];
groups.push(generalGroup);
customFieldsGroups.forEach(function(group) {
groups.push(group);
});
groups.push(detailsGroup);
groups.push(externalTaskGroup);
groups.push(multiInstanceGroup);
groups.push(asyncGroup);
groups.push(jobConfigurationGroup);
groups.push(candidateStarterGroup);
groups.push(historyTimeToLiveGroup);
groups.push(tasklistGroup);
groups.push(documentationGroup);
return groups;
}
function createVariablesTabGroups(element, bpmnFactory, elementRegistry, translate) {
var variablesGroup = {
id : 'variables',
label : translate('Variables'),
entries: []
};
variableMapping(variablesGroup, element, bpmnFactory, translate);
return [
variablesGroup
];
}
function createFormsTabGroups(element, bpmnFactory, elementRegistry, translate) {
var formGroup = {
id : 'forms',
label : translate('Forms'),
entries: []
};
formProps(formGroup, element, bpmnFactory, translate);
return [
formGroup
];
}
function createListenersTabGroups(element, bpmnFactory, elementRegistry, translate) {
var listenersGroup = {
id : 'listeners',
label: translate('Listeners'),
entries: []
};
var options = listenerProps(listenersGroup, element, bpmnFactory, translate);
var listenerDetailsGroup = {
id: 'listener-details',
entries: [],
enabled: function(element, node) {
return options.getSelectedListener(element, node);
},
label: function(element, node) {
var param = options.getSelectedListener(element, node);
return getListenerLabel(param, translate);
}
};
listenerDetails(listenerDetailsGroup, element, bpmnFactory, options, translate);
var listenerFieldsGroup = {
id: 'listener-fields',
label: translate('Field Injection'),
entries: [],
enabled: function(element, node) {
return options.getSelectedListener(element, node);
}
};
listenerFields(listenerFieldsGroup, element, bpmnFactory, options, translate);
return [
listenersGroup,
listenerDetailsGroup,
listenerFieldsGroup
];
}
function createInputOutputTabGroups(element, bpmnFactory, elementRegistry, translate) {
var inputOutputGroup = {
id: 'input-output',
label: translate('Parameters'),
entries: []
};
var options = inputOutput(inputOutputGroup, element, bpmnFactory, translate);
var inputOutputParameterGroup = {
id: 'input-output-parameter',
entries: [],
enabled: function(element, node) {
return options.getSelectedParameter(element, node);
},
label: function(element, node) {
var param = options.getSelectedParameter(element, node);
return getInputOutputParameterLabel(param, translate);
}
};
inputOutputParameter(inputOutputParameterGroup, element, bpmnFactory, options, translate);
return [
inputOutputGroup,
inputOutputParameterGroup
];
}
function createConnectorTabGroups(element, bpmnFactory, elementRegistry, translate) {
var connectorDetailsGroup = {
id: 'connector-details',
label: translate('Details'),
entries: []
};
connectorDetails(connectorDetailsGroup, element, bpmnFactory, translate);
var connectorInputOutputGroup = {
id: 'connector-input-output',
label: translate('Input/Output'),
entries: []
};
var options = connectorInputOutput(connectorInputOutputGroup, element, bpmnFactory, translate);
var connectorInputOutputParameterGroup = {
id: 'connector-input-output-parameter',
entries: [],
enabled: function(element, node) {
return options.getSelectedParameter(element, node);
},
label: function(element, node) {
var param = options.getSelectedParameter(element, node);
return getInputOutputParameterLabel(param, translate);
}
};
connectorInputOutputParameter(connectorInputOutputParameterGroup, element, bpmnFactory, options, translate);
return [
connectorDetailsGroup,
connectorInputOutputGroup,
connectorInputOutputParameterGroup
];
}
function createFieldInjectionsTabGroups(element, bpmnFactory, elementRegistry, translate) {
var fieldGroup = {
id: 'field-injections-properties',
label: translate('Field Injections'),
entries: []
};
fieldInjections(fieldGroup, element, bpmnFactory, translate);
return [
fieldGroup
];
}
function createExtensionElementsGroups(element, bpmnFactory, elementRegistry, translate) {
var propertiesGroup = {
id : 'extensionElements-properties',
label: translate('Properties'),
entries: []
};
properties(propertiesGroup, element, bpmnFactory, translate);
return [
propertiesGroup
];
}
// activiti Properties Provider /////////////////////////////////////
/**
* A properties provider for activiti related properties.
*
* @param {EventBus} eventBus
* @param {Canvas} canvas
* @param {BpmnFactory} bpmnFactory
* @param {ElementRegistry} elementRegistry
* @param {ElementTemplates} elementTemplates
* @param {Translate} translate
*/
function ActivitiPropertiesProvider(
eventBus, canvas, bpmnFactory,
elementRegistry, elementTemplates, translate) {
PropertiesActivator.call(this, eventBus);
this.getTabs = function(element) {
var generalTab = {
id: 'general',
label: translate('General'),
groups: createGeneralTabGroups(
element, canvas, bpmnFactory,
elementRegistry, elementTemplates, translate)
};
var variablesTab = {
id: 'variables',
label: translate('Variables'),
groups: createVariablesTabGroups(element, bpmnFactory, elementRegistry, translate)
};
var formsTab = {
id: 'forms',
label: translate('Forms'),
groups: createFormsTabGroups(element, bpmnFactory, elementRegistry, translate)
};
var listenersTab = {
id: 'listeners',
label: translate('Listeners'),
groups: createListenersTabGroups(element, bpmnFactory, elementRegistry, translate),
enabled: function(element) {
return !eventDefinitionHelper.getLinkEventDefinition(element)
|| (!is(element, 'bpmn:IntermediateThrowEvent')
&& eventDefinitionHelper.getLinkEventDefinition(element));
}
};
var inputOutputTab = {
id: 'input-output',
label: translate('Input/Output'),
groups: createInputOutputTabGroups(element, bpmnFactory, elementRegistry, translate)
};
var connectorTab = {
id: 'connector',
label: translate('Connector'),
groups: createConnectorTabGroups(element, bpmnFactory, elementRegistry, translate),
enabled: function(element) {
var bo = implementationTypeHelper.getServiceTaskLikeBusinessObject(element);
return bo && implementationTypeHelper.getImplementationType(bo) === 'connector';
}
};
var fieldInjectionsTab = {
id: 'field-injections',
label: translate('Field Injections'),
groups: createFieldInjectionsTabGroups(element, bpmnFactory, elementRegistry, translate)
};
var extensionsTab = {
id: 'extensionElements',
label: translate('Extensions'),
groups: createExtensionElementsGroups(element, bpmnFactory, elementRegistry, translate)
};
return [
generalTab,
variablesTab,
connectorTab,
formsTab,
listenersTab,
inputOutputTab,
fieldInjectionsTab,
extensionsTab
];
};
}
ActivitiPropertiesProvider.$inject = [
'eventBus',
'canvas',
'bpmnFactory',
'elementRegistry',
'elementTemplates',
'translate'
];
inherits(ActivitiPropertiesProvider, PropertiesActivator);
module.exports = ActivitiPropertiesProvider;