(function(window)
{
var Gitana = window.Gitana;
Gitana.ContainedDataStore = Gitana.DataStore.extend(
/** @lends Gitana.ContainedDataStore.prototype */
{
/**
* @constructs
* @augments Gitana.DataStore
*
* @class ContainedDataStore
*
* @param {Gitana.DataStore} container
* @param [Object] object json object (if no callback required for populating)
*/
constructor: function(container, object)
{
this.base(container.getDriver(), object);
//////////////////////////////////////////////////////////////////////////////////////////////
//
// PRIVILEGED METHODS
//
//////////////////////////////////////////////////////////////////////////////////////////////
this.getContainer = function()
{
return container;
};
this.getContainerId = function()
{
return container.getId();
};
},
/**
* Delete
*
* @chained container datastore
*
* @public
*/
del: function()
{
var uriFunction = function()
{
return this.getUri();
};
// NOTE: pass control back to the container datastore instance
return this.chainDelete(this.getContainer(), uriFunction);
},
/**
* Reload
*
* @chained this
*
* @public
*/
reload: function()
{
var uriFunction = function()
{
return this.getUri();
};
return this.chainReload(null, uriFunction);
},
/**
* Update
*
* @chained this
*
* @public
*/
update: function()
{
var uriFunction = function()
{
return this.getUri();
};
return this.chainUpdate(null, uriFunction);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// TRANSFER
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Exports an archive.
*
* @chained job
*
* @param {Object} settings
*/
exportArchive: function(settings)
{
var self = this;
var vaultId = settings.vault;
if (!Gitana.isString(vaultId))
{
vaultId = vaultId.getId();
}
var groupId = settings.group;
var artifactId = settings.artifact;
var versionId = settings.version;
var configuration = (settings.configuration ? settings.configuration : {});
var synchronous = (settings.async ? false : true);
// we continue the chain with a job
var chainable = this.getFactory().job(this.getCluster(), "export");
// fire off import and job queue checking
return this.subchain(chainable).then(function() {
var chain = this;
// create
this.getDriver().gitanaPost(self.getUri() + "/export?vault=" + vaultId + "&group=" + groupId + "&artifact=" + artifactId + "&version=" + versionId + "&schedule=ASYNCHRONOUS", {}, configuration, function(response) {
Gitana.handleJobCompletion(chain, self.getCluster(), response.getId(), synchronous);
}, function(http) {
self.httpError(http);
});
// NOTE: we return false to tell the chain that we'll manually call next()
return false;
});
},
/**
* Imports an archive.
*
* @chained job
*
* @param {Object} settings
* @param [Function] report function
*/
importArchive: function(settings, reportFn)
{
var self = this;
var vaultId = settings.vault;
if (!Gitana.isString(vaultId))
{
vaultId = vaultId.getId();
}
var groupId = settings.group;
var artifactId = settings.artifact;
var versionId = settings.version;
var configuration = (settings.configuration ? settings.configuration : {});
var synchronous = (settings.async ? false : true);
// we continue the chain with a job
var chainable = this.getFactory().job(this.getCluster(), "import");
// fire off import and job queue checking
return this.subchain(chainable).then(function() {
var chain = this;
// create
this.getDriver().gitanaPost(self.getUri() + "/import?vault=" + vaultId + "&group=" + groupId + "&artifact=" + artifactId + "&version=" + versionId + "&schedule=ASYNCHRONOUS", {}, configuration, function(response) {
Gitana.handleJobCompletion(chain, self.getCluster(), response.getId(), synchronous, reportFn);
}, function(http) {
self.httpError(http);
});
// NOTE: we return false to tell the chain that we'll manually call next()
return false;
});
}
});
})(window);