(function(window)
{
var Gitana = window.Gitana;
Gitana.AppHelper = Gitana.AbstractObject.extend(
/** @lends Gitana.AppHelper.prototype */
{
/**
* @constructs
* @augments Gitana.AbstractObject
*
* @class AppHelper
*
* @param {Gitana.Platform} platform
* @param {object} config the configuration object (.application)
*/
constructor: function(platform, config)
{
this.objectType = function() { return "Gitana.AppHelper"; };
this.base(platform.getDriver());
this.getPlatform = function() {
return platform;
};
this.getPlatformId = function() {
return platform.getId();
};
this.getApplicationId = function() {
return config["application"];
};
this.cache = Gitana.MemoryCache();
this.chainedCacheItem = function(key)
{
var chained = null;
if (this.cache(key))
{
chained = Chain(this.cache(key));
}
return chained;
};
},
init: function(callback)
{
var self = this;
var p = function(application)
{
// THIS = application
var projectId = application["projectId"];
if (projectId)
{
// read the project
Chain(self.getPlatform()).trap(function(err) {
// could not find the project for the application
// this is fine... we are done
callback();
}).readProject(projectId).then(function() {
self.cache("project", this);
callback();
});
}
else
{
callback();
}
};
Chain(self.getPlatform()).trap(function(err) {
// ERROR: application not found
callback(err);
}).readApplication(self.getApplicationId()).then(function() {
self.cache("application", this);
var application = this;
this.subchain(self.getPlatform()).trap(function(err) {
// could not locate the stack for the application
// this is perfectly fine (just means an application isn't allocated to a stack)
p(application);
}).findStackForDataStore(Gitana.TypedIDConstants.TYPE_APPLICATION, self.getApplicationId()).then(function() {
// this = stack
self.cache("stack", this);
this.listDataStores().each(function(key) {
this["_doc"] = this["datastoreId"];
delete this["datastoreTypeId"];
self.cache("stack.datastore." + key, this);
});
this.then(function() {
p(application);
});
});
});
},
platform: function()
{
return Chain(this.getPlatform());
},
application: function()
{
return this.chainedCacheItem("application");
},
stack: function()
{
return this.chainedCacheItem("stack");
},
datastore: function(key)
{
return this.chainedCacheItem("stack.datastore." + key);
},
project: function()
{
return this.chainedCacheItem("project");
}
});
})(window);