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

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
};