(function(window)
{
var Gitana = window.Gitana;
Gitana.WorkflowInstance = Gitana.AbstractPlatformObject.extend(
/** @lends Gitana.WorkflowInstance.prototype */
{
/**
* @constructs
* @augments Gitana.AbstractPlatformObject
*
* @class WorkflowInstance
*
* @param {Gitana.Platform} platform
* @param [Object] object json object (if no callback required for populating)
*/
constructor: function(platform, object)
{
this.base(platform, object);
this.objectType = function() { return "Gitana.WorkflowInstance"; };
this.toReference = function(resource)
{
return resource.ref();
};
this.toResourceId = function(resource)
{
var id = null;
if (resource && resource.getId)
{
id = resource.getId();
}
return id;
};
},
/**
* @OVERRIDE
*/
getType: function()
{
return Gitana.TypedIDConstants.TYPE_WORKFLOW_INSTANCE;
},
/**
* @OVERRIDE
*/
getUri: function()
{
return "/workflow/instances/" + this.getId();
},
/**
* @override
*/
clone: function()
{
return this.getFactory().workflowInstance(this.getPlatform(), this);
},
//////////////////////////////////////////////////////////////////////////////////////////////////
//
// ACCESSORS
//
//////////////////////////////////////////////////////////////////////////////////////////////////
loadResourceList: function(callback)
{
var uriFunction = function()
{
return this.getUri() + "/resources";
};
return this.chainGetResponse(this, uriFunction).then(function(response) {
callback.call(this, response["rows"]);
});
},
loadResource: function(id, callback)
{
var uriFunction = function()
{
return this.getUri() + "/resources/" + id;
};
return this.chainGetResponse(this, uriFunction).then(function(response) {
callback.call(this, response);
});
},
addResource: function(resource)
{
var uriFunction = function()
{
return this.getUri() + "/resources/add";
};
var reference = this.toReference(resource);
var params = {
"reference": reference
};
return this.chainPostResponse(this, uriFunction, params);
},
removeResource: function(resource)
{
var uriFunction = function()
{
var resourceId = this.toResourceId(resource);
return this.getUri() + "/resources/" + resourceId + "/remove";
};
return this.chainPostResponse(this, uriFunction);
},
/**
* Starts the workflow. The workflow can only be started once. If already started,
* an error will be thrown.
*
* @param [Object] data
*
* @returns {*}
*/
start: function(data)
{
var uriFunction = function()
{
return this.getUri() + "/start";
};
return this.chainPost(this, uriFunction, {}, data);
},
/**
* Terminates the workflow. A workflow can only be terminated once. If already terminated,
* an error will be thrown.
*
* @returns {*}
*/
terminate: function()
{
var uriFunction = function()
{
return this.getUri() + "/terminate";
};
return this.chainPostResponse(this, uriFunction);
},
/**
* Suspends the workflow.
*
* @returns {*}
*/
suspend: function()
{
var uriFunction = function()
{
return this.getUri() + "/suspend";
};
return this.chainPostResponse(this, uriFunction);
},
/**
* Resumes the workflow.
*
* @returns {*}
*/
resume: function()
{
var uriFunction = function()
{
return this.getUri() + "/resume";
};
return this.chainPostResponse(this, uriFunction);
},
/**
* Upgrades the model for this workflow.
*
* @returns {*}
*/
upgradeModel: function(newModel, newModelVersion)
{
var uriFunction = function()
{
return this.getUri() + "/upgrade";
};
var params = {
"id": newModel,
"version": newModelVersion
};
return this.chainPost(this, uriFunction, params);
}
});
})(window);