(function(window)
{
var Gitana = window.Gitana;
Gitana.Tenant = Gitana.AbstractRegistrarObject.extend(
/** @lends Gitana.Tenant.prototype */
{
/**
* @constructs
* @augments Gitana.AbstractRegistrarObject
*
* @class Tenant
*
* @param {Gitana.Registrar} registrar
* @param [Object] object json object (if no callback required for populating)
*/
constructor: function(registrar, object)
{
this.base(registrar, object);
this.objectType = function() { return "Gitana.Tenant"; };
},
/**
* @OVERRIDE
*/
getType: function()
{
return Gitana.TypedIDConstants.TYPE_TENANT;
},
/**
* @OVERRIDE
*/
getUri: function()
{
return "/registrars/" + this.getRegistrarId() + "/tenants/" + this.getId();
},
/**
* @override
*/
clone: function()
{
return this.getFactory().tenant(this.getRegistrar(), this);
},
/**
* Gets the DNS slug for the tenant
*/
getDnsSlug: function()
{
return this.get("dnsSlug");
},
/**
* Gets the plan key for the tenant
*/
getPlanKey: function()
{
return this.get("planKey");
},
/**
* Gets the id of the principal that is the owner of this tenant.
*/
getPrincipalId: function()
{
return this.get("principalId");
},
/**
* Gets the domain id of the principal that is the owner of this tenant.
*/
getPrincipalDomainId: function()
{
return this.get("domainId");
},
/**
* Gets the id of the platform that belongs to this tenant.
*/
getPlatformId: function()
{
return this.get("platformId");
},
/**
* Hands back the plan that this tenant is subscribed to.
*
* @chained plan
*/
readTenantPlan: function()
{
var self = this;
var uriFunction = function()
{
return self.getPlatform().getUri() + "/registrars/" + self.getRegistrarId() + "/plans/" + self.getPlanKey();
};
var chainable = this.getFactory().plan(this.getRegistrar());
return this.chainGet(chainable, uriFunction);
},
/**
* Hands back the principal that owns this tenant.
*
* @chained principal
*/
readTenantPrincipal: function()
{
var self = this;
var uriFunction = function()
{
return self.getPlatform().getUri() + "/domains/" + self.getPrincipalDomainId() + "/principals/" + self.getPrincipalId();
};
// TODO - this is a pretty big hack at the moment
var domain = this.getFactory().domain(this.getPlatform(), {
"_doc": this.getPrincipalDomainId()
});
var chainable = this.getFactory().domainPrincipal(domain);
return this.chainGet(chainable, uriFunction);
},
//////////////////////////////////////////////////////////////////////////////////////////
//
// ATTACHMENTS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Hands back an attachments map.
*
* @chained attachment map
*
* @param local
*
* @public
*/
listAttachments: Gitana.Methods.listAttachments(),
/**
* Picks off a single attachment
*
* @chained attachment
*
* @param attachmentId
*/
attachment: function(attachmentId)
{
return this.listAttachments().select(attachmentId);
},
/**
* Creates an attachment.
*
* When using this method from within the JS driver, it really only works for text-based content such
* as JSON or text.
*
* @chained attachment
*
* @param attachmentId (use null or false for default attachment)
* @param contentType
* @param data
*/
attach: Gitana.Methods.attach(),
/**
* Deletes an attachment.
*
* @param attachmentId
*/
unattach: Gitana.Methods.unattach(),
//////////////////////////////////////////////////////////////////////////////////////////
//
// METHODS
//
//////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists the allocations to the tenant.
*
* @param callback the callback function
* @param objectType
* @param pagination
*
* @chained this
*/
listAllocatedObjects: function(callback, objectType, pagination)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/objects";
};
// parameters
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
if (objectType)
{
params["type"] = objectType;
}
return this.chainGetResponse(this, uriFunction, params).then(function(response) {
callback.call(this, response["rows"]);
});
},
listAllocatedRepositoryObjects: function(callback, pagination)
{
return this.listAllocatedObjects(callback, "repository", pagination);
},
listAllocatedDomainObjects: function(callback, pagination)
{
return this.listAllocatedObjects(callback, "domain", pagination);
},
listAllocatedVaultObjects: function(callback, pagination)
{
return this.listAllocatedObjects(callback, "vault", pagination);
},
listAllocatedClientObjects: function(callback, pagination)
{
return this.listAllocatedObjects(callback, "client", pagination);
},
listAllocatedRegistrarObjects: function(callback, pagination)
{
return this.listAllocatedObjects(callback, "registrar", pagination);
},
listAllocatedStackObjects: function(callback, pagination)
{
return this.listAllocatedObjects(callback, "stack", pagination);
},
listAllocatedDirectoryObjects: function(callback, pagination)
{
return this.listAllocatedObjects(callback, "directory", pagination);
},
listAllocatedApplicationObjects: function(callback, pagination)
{
return this.listAllocatedObjects(callback, "application", pagination);
},
/**
* Retrieves the default client configuration for this tenant.
*
* @param callback the method to receive the client configuration
*
* @chained this
*/
readDefaultAllocatedClientObject: function(callback)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/defaultclient";
};
return this.chainGetResponse(this, uriFunction, {}).then(function(response) {
var client = {};
Gitana.copyInto(client, response);
Gitana.stampInto(client, Gitana.ClientMethods);
client.get = function(key) { return this[key]; };
callback.call(this, client);
});
},
/**
* Lists the auto-client mappings maintained for this tenant.
*
* @param callback the callback function
* @param pagination
*
* @chained this
*/
listAutoClientMappingObjects: function(callback, pagination)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/autoclientmappings";
};
// parameters
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
return this.chainGetResponse(this, uriFunction, params).then(function(response) {
callback.call(this, response["rows"]);
});
}
});
})(window);