(function(window)
{
var Gitana = window.Gitana;
Gitana.Registrar = Gitana.AbstractPlatformDataStore.extend(
/** @lends Gitana.Registrar.prototype */
{
/**
* @constructs
* @augments Gitana.AbstractPlatformDataStore
*
* @class Registrar
*
* @param {Gitana.Platform} platform
* @param [Object] object json object (if no callback required for populating)
*/
constructor: function(platform, object)
{
this.objectType = function() { return "Gitana.Registrar"; };
this.base(platform, object);
},
/**
* @OVERRIDE
*/
getUri: function()
{
return "/registrars/" + this.getId();
},
/**
* @OVERRIDE
*/
getType: function()
{
return Gitana.TypedIDConstants.TYPE_REGISTRAR;
},
/**
* @override
*/
clone: function()
{
return this.getFactory().registrar(this.getPlatform(), this);
},
/////////////////////////////////////////////////////////////////////////////////////////////////
//
// TENANTS
//
/////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists all of the tenants.
*
* @chained tenant map
*
* @param [Object] pagination pagination (optional)
*/
listTenants: function(pagination)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/tenants";
};
// prepare params (with pagination)
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().tenantMap(this);
return this.chainGet(chainable, uriFunction, params);
},
/**
* Queries for a tenant.
*
* @chained tenant map
*
* @param {Object} query Query for finding a tenant.
* @param [Object] pagination pagination (optional)
*/
queryTenants: function(query, pagination)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/tenants/query";
};
var chainable = this.getFactory().tenantMap(this);
// prepare params (with pagination)
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
return this.chainPost(chainable, uriFunction, params, query);
},
/**
* Reads a tenant.
*
* @chained tenant
*
* @param {String} tenantId the tenant id
*/
readTenant: function(tenantId)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/tenants/" + tenantId;
};
var chainable = this.getFactory().tenant(this);
return this.chainGet(chainable, uriFunction);
},
/**
* Lookup a tenant for a principal.
*
* @chained tenant
*
* @param {Gitana.Principal} principal
*/
lookupTenantForPrincipal: function(principal)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/tenants/lookup?id=" + principal.getDomainQualifiedId();
};
var chainable = this.getFactory().tenant(this);
return this.chainGet(chainable, uriFunction);
},
/**
* Creates a tenant
*
* @chained tenant
*
* @param {Gitana.DomainPrincipal} principal
* @param {String} planKey
* @param [Object] payment method (required if plan requires a payment method)
*/
createTenant: function(principal, planKey, paymentMethod)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/tenants";
};
// set up object
var object = {};
object["principalId"] = principal.getId();
object["domainId"] = principal.getDomainId();
object["planKey"] = planKey;
if (paymentMethod)
{
object["paymentMethod"] = paymentMethod;
}
// create
var chainable = this.getFactory().tenant(this);
return this.chainCreate(chainable, object, uriFunction);
},
/**
* Performs a bulk check of permissions against permissioned objects of type tenant.
*
* Example of checks array:
*
* [{
* "permissionedId": "<permissionedId>",
* "domainId": "<domainId>", (optional)
* "principalId": "<principalId>",
* "permissionId": "<permissionId>"
* }]
*
* The callback receives an array of results, example:
*
* [{
* "permissionedId": "<permissionedId>",
* "domainId": "<domainId>", (optional)
* "principalId": "<principalId>",
* "permissionId": "<permissionId>",
* "result": true
* }]
*
* The order of elements in the array will be the same for checks and results.
*
* @param checks
* @param callback
*/
checkTenantPermissions: function(checks, callback)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/tenants/permissions/check";
};
var object = {
"checks": checks
};
return this.chainPostResponse(this, uriFunction, {}, object).then(function(response) {
callback.call(this, response["results"]);
});
},
/////////////////////////////////////////////////////////////////////////////////////////////////
//
// PLANS
//
/////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists all of the plans.
*
* @chained plan map
*
* @param [Object] pagination pagination (optional)
*/
listPlans: function(pagination)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/plans";
};
// prepare params (with pagination)
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().planMap(this);
return this.chainGet(chainable, uriFunction, params);
},
/**
* Queries for plans.
*
* @chained plan map
*
* @param {Object} query Query for finding a tenant.
* @param [Object] pagination pagination (optional)
*/
queryPlans: function(query, pagination)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/plans/query";
};
var chainable = this.getFactory().planMap(this);
// prepare params (with pagination)
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
return this.chainPost(chainable, uriFunction, params, query);
},
/**
* Reads a plan.
*
* @chained plan
*
* @param {String} planId the plan id
*/
readPlan: function(planId)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/plans/" + planId;
};
var chainable = this.getFactory().plan(this);
return this.chainGet(chainable, uriFunction);
},
/**
* Creates a plan
*
* @chained plan
*
* @param [Object] object JSON object
*/
createPlan: function(object)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/plans";
};
var chainable = this.getFactory().plan(this);
return this.chainCreate(chainable, object, uriFunction);
},
/**
* Performs a bulk check of permissions against permissioned objects of type plan.
*
* Example of checks array:
*
* [{
* "permissionedId": "<permissionedId>",
* "domainId": "<domainId>", (optional)
* "principalId": "<principalId>",
* "permissionId": "<permissionId>"
* }]
*
* The callback receives an array of results, example:
*
* [{
* "permissionedId": "<permissionedId>",
* "domainId": "<domainId>", (optional)
* "principalId": "<principalId>",
* "permissionId": "<permissionId>",
* "result": true
* }]
*
* The order of elements in the array will be the same for checks and results.
*
* @param checks
* @param callback
*/
checkPlanPermissions: function(checks, callback)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/plans/permissions/check";
};
var object = {
"checks": checks
};
return this.chainPostResponse(this, uriFunction, {}, object).then(function(response) {
callback.call(this, response["results"]);
});
},
/////////////////////////////////////////////////////////////////////////////////////////////////
//
// METERS
//
/////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Lists all of the meters.
*
* @chained meter map
*
* @param [Object] pagination pagination (optional)
*/
listMeters: function(pagination)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/meters";
};
// prepare params (with pagination)
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
var chainable = this.getFactory().meterMap(this);
return this.chainGet(chainable, uriFunction, params);
},
/**
* Queries for meters.
*
* @chained meter map
*
* @param {Object} query Query for finding a tenant.
* @param [Object] pagination pagination (optional)
*/
queryMeters: function(query, pagination)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/meters/query";
};
var chainable = this.getFactory().meterMap(this);
// prepare params (with pagination)
var params = {};
if (pagination)
{
Gitana.copyInto(params, pagination);
}
return this.chainPost(chainable, uriFunction, params, query);
},
/**
* Reads a meter.
*
* @chained meter
*
* @param {String} meterId the meter id
*/
readMeter: function(meterId)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/meters/" + meterId;
};
var chainable = this.getFactory().meter(this);
return this.chainGet(chainable, uriFunction);
},
/**
* Creates a meter
*
* @chained meter
*
* @param [Object] object JSON object
*/
createMeter: function(object)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/meters";
};
var chainable = this.getFactory().meter(this);
return this.chainCreate(chainable, object, uriFunction);
},
/**
* Performs a bulk check of permissions against permissioned objects of type meter.
*
* Example of checks array:
*
* [{
* "permissionedId": "<permissionedId>",
* "domainId": "<domainId>", (optional)
* "principalId": "<principalId>",
* "permissionId": "<permissionId>"
* }]
*
* The callback receives an array of results, example:
*
* [{
* "permissionedId": "<permissionedId>",
* "domainId": "<domainId>", (optional)
* "principalId": "<principalId>",
* "permissionId": "<permissionId>",
* "result": true
* }]
*
* The order of elements in the array will be the same for checks and results.
*
* @param checks
* @param callback
*/
checkMeterPermissions: function(checks, callback)
{
var self = this;
var uriFunction = function()
{
return self.getUri() + "/meters/permissions/check";
};
var object = {
"checks": checks
};
return this.chainPostResponse(this, uriFunction, {}, object).then(function(response) {
callback.call(this, response["results"]);
});
}
});
})(window);