You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.0 KiB
105 lines
3.0 KiB
var _ = require('underscore');
|
|
|
|
/**
|
|
* [WorkflowRuleTarget description]
|
|
* @param {[type]} options [description]
|
|
*/
|
|
function WorkflowRuleTarget(options) {
|
|
options = options || {};
|
|
|
|
if (!options.queue) { throw 'queue for WorkflowRuleTarget is required'; }
|
|
|
|
this.queue = options.queue;
|
|
this.expression = options.expression;
|
|
this.priority = options.priority;
|
|
this.timeout = options.timeout;
|
|
}
|
|
|
|
/**
|
|
* [WorkflowRule description]
|
|
* @param {[type]} options [description]
|
|
*/
|
|
function WorkflowRule(options) {
|
|
options = options || {};
|
|
|
|
if (!options.expression) { throw 'expression for WorkflowRule is required'; }
|
|
if (!options.targets) { throw 'targets for WorkflowRule is required'; }
|
|
|
|
this.friendly_name = options.friendly_name || options.friendlyName || options.filter_friendly_name;
|
|
this.expression = options.expression;
|
|
this.targets = _.map(options.targets, function(target) {
|
|
return new WorkflowRuleTarget(target);
|
|
});
|
|
Object.defineProperty(this, 'friendlyName', {
|
|
get: function() { return this.friendly_name; },
|
|
set: function(value) { this.friendly_name = value; }
|
|
});
|
|
}
|
|
|
|
|
|
/**
|
|
* [TaskRoutingConfiguration description]
|
|
* @param {[type]} options [description]
|
|
*/
|
|
function TaskRoutingConfiguration(options) {
|
|
options = options || {};
|
|
|
|
if (!options.filters) { throw 'filters for TaskRoutingConfiguration is required'; }
|
|
|
|
this.filters = _.map(options.filters, function(filter) {
|
|
return new WorkflowRule(filter);
|
|
});
|
|
this.default_filter = options.default_filter || options.defaultFilter;
|
|
Object.defineProperty(this, 'defaultFilter', {
|
|
get: function() { return this.default_filter; },
|
|
set: function(o) { this.default_filter = o; }
|
|
});
|
|
}
|
|
|
|
|
|
/**
|
|
* [WorkflowConfiguration description]
|
|
* @param {[type]} options [description]
|
|
*/
|
|
function WorkflowConfiguration(options) {
|
|
options = options || {};
|
|
var taskRouting = options.task_routing || options.taskRouting;
|
|
|
|
if (!taskRouting) { throw 'taskRouting for WorkflowConfiguration is required'; }
|
|
|
|
this.task_routing = new TaskRoutingConfiguration(taskRouting);
|
|
Object.defineProperty(this, 'taskRouting', {
|
|
get: function() { return this.task_routing; },
|
|
set: function(o) { this.task_routing = o; },
|
|
});
|
|
}
|
|
|
|
WorkflowConfiguration.fromJSON = function(json) {
|
|
return new WorkflowConfiguration(JSON.parse(json));
|
|
};
|
|
|
|
_.extend(WorkflowConfiguration.prototype, {
|
|
toJSON: function() {
|
|
var ignoredProperties = [
|
|
'friendlyName', 'taskRouting', 'defaultFilter'
|
|
];
|
|
var skipIgnoredProps = function(key, value) {
|
|
return _.contains(ignoredProperties, key) ? undefined : value;
|
|
};
|
|
|
|
return JSON.stringify({
|
|
task_routing : this.taskRouting
|
|
}, skipIgnoredProps);
|
|
}
|
|
});
|
|
|
|
|
|
module.exports = {
|
|
|
|
WorkflowRuleTarget: WorkflowRuleTarget,
|
|
WorkflowRule: WorkflowRule,
|
|
TaskRoutingConfiguration: TaskRoutingConfiguration,
|
|
WorkflowConfiguration: WorkflowConfiguration
|
|
|
|
};
|