+ define_model(this, {urlRoot: NETWORKSLIVER_API,
+ modelName: "networkSliver",
+ foreignFields: {"network": "networks", "sliver": "slivers"},
+ listFields: ["backend_status", "id", "network", "sliver", "ip", "port_id"],
+ detailFields: ["backend_status", "network", "sliver", "ip", "port_id"],
+ });
+
+ define_model(this, {urlRoot: SERVICE_API,
+ modelName: "service",
+ listFields: ["backend_status", "id", "name", "enabled", "versionNumber", "published"],
+ detailFields: ["backend_status", "name", "description", "versionNumber"],
+ });
+
+ define_model(this, {urlRoot: FLAVOR_API,
+ modelName: "flavor",
+ m2mFields: {"deployments": "deployments"},
+ listFields: ["backend_status", "id", "name", "flavor", "order", "default"],
+ detailFields: ["backend_status", "name", "description", "flavor", "order", "default", "deployments"],
+ inputType: {"default": "checkbox", "deployments": "picker"},
+ });
+
+ define_model(this, {urlRoot: CONTROLLER_API,
+ modelName: "controller",
+ listFields: ["backend_status", "id", "name", "version", "backend_type"],
+ detailFields: ["backend_status", "name", "version", "backend_type", "auth_url", "admin_user", "admin_password", "admin_tenant"],
+ });
+
+ /* removed
+ define_model(this, {urlRoot: CONTROLLERSITEDEPLOYMENT_API,
+ modelName: "controllerSiteDeployment",
+ foreignCollections: ["site_deployments", "controllers"],
+ foreignFields: {"site_deployment": "siteDeployments", "controller": "controllers"},
+ listFields: ["backend_status", "id", "site_deployment", "controller", "tenant_id"],
+ detailFields: ["backend_status", "site_deployment", "controller", "tenant_id"],
+ });
+ */
+
+ /* DELETED in site-controller branch
+
+ define_model(this, {urlRoot: NETWORKDEPLOYMENT_API,
+ modelName: "networkDeployment",
+ foreignFields: {"network": "networks", "deployment": "deployments"},
+ listFields: ["backend_status", "id", "network", "deployment", "net_id"],
+ detailFields: ["backend_status", "network", "deployment", "net_id"],
+ });
+
+ define_model(this, {urlRoot: SLICEDEPLOYMENT_API,
+ foreignCollections: ["slices", "deployments"],
+ modelName: "sliceDeployment",
+ foreignFields: {"slice": "slices", "deployment": "deployments"},
+ listFields: ["backend_status", "id", "slice", "deployment", "tenant_id"],
+ detailFields: ["backend_status", "slice", "deployment", "tenant_id"],
+ });
+
+ define_model(this, {urlRoot: USERDEPLOYMENT_API,
+ foreignCollections: ["users","deployments"],
+ modelName: "userDeployment",
+ foreignFields: {"deployment": "deployments", "user": "users"},
+ listFields: ["backend_status", "id", "user", "deployment", "kuser_id"],
+ detailFields: ["backend_status", "user", "deployment", "kuser_id"],
+ });
+
+ END stuff deleted in site-controller branch */
+
+ /* not deleted, but obsolete since it has degenerated to a ManyToMany with no other fields
+
+ define_model(this, {urlRoot: IMAGEDEPLOYMENTS_API,
+ modelName: "imageDeployment",
+ foreignCollections: ["images", "deployments"],
+ listFields: ["backend_status", "id", "image", "deployment", "glance_image_id"],
+ detailFields: ["backend_status", "image", "deployment", "glance_image_id"],
+ });
+
+ */
+
+ // enhanced REST
+ // XXX this really needs to somehow be combined with Slice, to avoid duplication
+ define_model(this, {urlRoot: SLICEPLUS_API,
+ relatedCollections: {"slivers": "slice", "slicePrivileges": "slice", "networks": "owner"},
+ foreignCollections: ["services", "sites"],
+ foreignFields: {"service": "services", "site": "sites"},
+ listFields: ["backend_status", "id", "name", "enabled", "description", "slice_url", "site", "max_slivers", "service"],
+ detailFields: ["backend_status", "name", "site", "enabled", "description", "slice_url", "max_slivers"],
+ inputType: {"enabled": "checkbox"},
+ modelName: "slicePlus",
+ collectionName: "slicesPlus",
+ defaults: extend_defaults("slice", {"network_ports": "", "site_allocation": []}),
+ validators: {"network_ports": ["portspec"]},
+ xosValidate: function(attrs, options) {
+ errors = XOSModel.prototype.xosValidate.call(this, attrs, options);
+ // validate that slice.name starts with site.login_base
+ site = attrs.site || this.site;
+ if ((site!=undefined) && (attrs.name!=undefined)) {
+ site = xos.sites.get(site);
+ if (attrs.name.indexOf(site.attributes.login_base+"_") != 0) {
+ errors = errors || {};
+ errors["name"] = "must start with " + site.attributes.login_base + "_";
+ }
+ }
+ return errors;
+ },
+ });
+
+ define_model(this, {urlRoot: TENANTVIEW_API,
+ modelName: "tenantview",
+ collectionName: "tenantview",
+ listFields: [],
+ detailFields: [],
+ });
+
+ /* by default, have slicePlus only fetch the slices the user can see */
+ this.slicesPlus.currentUserCanSee = true;
+
+ this.tenant = function() { return this.tenantview.models[0].attributes; };
+
+ this.listObjects = function() { return this.allCollectionNames; };
+
+ this.getCollectionStatus = function() {
+ stats = {isLoaded: 0, failedLoad: 0, startedLoad: 0};
+ for (index in this.allCollections) {
+ collection = this.allCollections[index];
+ if (collection.isLoaded) {
+ stats["isLoaded"] = stats["isLoaded"] + 1;
+ }
+ if (collection.failedLoad) {
+ stats["failedLoad"] = stats["failedLoad"] + 1;
+ }
+ if (collection.startedLoad) {
+ stats["startedLoad"] = stats["startedLoad"] + 1;
+ }
+ }
+ stats["completedLoad"] = stats["failedLoad"] + stats["isLoaded"];
+ return stats;
+ };
+ };
+
+ xos = new xoslib();
+
+ function getCookie(name) {
+ var cookieValue = null;\r
+ if (document.cookie && document.cookie != '') {\r
+ var cookies = document.cookie.split(';');\r
+ for (var i = 0; i < cookies.length; i++) {\r
+ var cookie = jQuery.trim(cookies[i]);\r
+ // Does this cookie string begin with the name we want?\r
+ if (cookie.substring(0, name.length + 1) == (name + '=')) {\r
+ cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ return cookieValue;\r
+ }