+XOSTenantSite = XOSModel.extend( {
+ listFields: ["name", "allocated"],
+ modelName: "tenantSite",
+ collectionName: "tenantSites"
+});
+
+XOSTenantSiteCollection = XOSCollection.extend( {
+ listFields: ["name", "allocated"],
+ modelName: "tenantSite",
+ collectionName: "tenantSites",
+
+ updateFromSlice: function(slice) {
+ var tenantSites = [];
+ var id = 0;
+ for (siteName in slice.attributes.site_allocation) {
+ allocated = slice.attributes.site_allocation[siteName];
+ tenantSites.push(new XOSTenantSite( { name: siteName, allocated: allocated, id: id} ));
+ id = id + 1;
+ }
+ for (index in xos.tenantview.models[0].attributes.blessed_site_names) {
+ siteName = xos.tenantview.models[0].attributes.blessed_site_names[index];
+ if (! (siteName in slice.attributes.site_allocation)) {
+ tenantSites.push(new XOSTenantSite( { name: siteName, allocated: 0, id: id} ));
+ id = id + 1;
+ }
+ }
+ this.set(tenantSites);
+ },
+});
+
+XOSTenantButtonView = Marionette.ItemView.extend({
+ template: "#xos-tenant-buttons-template",
+
+ events: {"click button.btn-tenant-create": "createClicked",
+ "click button.btn-tenant-delete": "deleteClicked",
+ "click button.btn-tenant-add-user": "addUserClicked",
+ "click button.btn-tenant-save": "saveClicked",
+ },
+
+ createClicked: function(e) {
+ },
+
+ deleteClicked: function(e) {
+ this.options.linkedView.deleteClicked.call(this.options.linkedView, e);
+ },
+
+ addUserClicked: function(e) {
+ },
+
+ saveClicked: function(e) {
+ this.options.linkedView.submitContinueClicked.call(this.options.linkedView, e);
+ },
+ });
+
+XOSTenantApp = new XOSApplication({
+ logTableId: "#logTable",
+ statusMsgId: "#statusMsg",
+ hideTabsByDefault: true
+});
+
+XOSTenantApp.addRegions({
+ tenantSliceSelector: "#tenantSliceSelector",
+ tenantSummary: "#tenantSummary",
+ tenantSiteList: "#tenantSiteList",
+ tenantButtons: "#tenantButtons",
+});
+
+XOSTenantApp.buildViews = function() {\r
+ XOSTenantApp.tenantSites = new XOSTenantSiteCollection();\r
+\r
+ tenantSummaryClass = XOSDetailView.extend({template: "#xos-detail-template",\r
+ app: XOSTenantApp,\r
+ detailFields: ["serviceClass", "image_preference", "network_ports", "mount_data_sets"]});\r
+\r
+ XOSTenantApp.tenantSummaryView = tenantSummaryClass;\r
+\r
+ tenantSiteItemClass = XOSItemView.extend({template: "#xos-listitem-template",\r
+ app: XOSTenantApp});\r
+\r
+ XOSTenantApp.tenantSiteItemView = tenantSiteItemClass;\r
+\r
+ tenantSiteListClass = XOSDataTableView.extend({template: "#xos-list-template",\r
+ app: XOSTenantApp,\r
+ childView: tenantSiteItemClass,\r
+ collection: XOSTenantApp.tenantSites,\r
+ title: "sites",\r
+ inputType: {allocated: "spinner"},\r
+ noDeleteColumn: true,\r
+ });\r
+\r
+ XOSTenantApp.tenantSiteListView = tenantSiteListClass;\r
+\r
+ XOSTenantApp.tenantSliceSelectorView = SliceSelectorView.extend( {\r
+ sliceChanged: function(id) {\r
+ //console.log("navigate to " + id);\r
+ XOSTenantApp.Router.navigate("slice/" + id, {trigger: true});\r
+ },\r
+ });\r
+\r
+ xos.sites.fetch();\r
+ xos.slicesPlus.fetch();\r
+ xos.tenantview.fetch();\r
+};\r
+\r
+make_choices = function(list_of_names, list_of_values) {\r
+ result = [];\r
+ if (!list_of_values) {\r
+ for (index in list_of_names) {\r
+ displayName = list_of_names[index];\r
+ result.push( [displayName, displayName] );\r
+ }\r
+ }\r
+ return result;\r
+};\r
+\r
+XOSTenantApp.viewSlice = function(model) {\r
+ if (!model && xos.slicesPlus.models.length > 0) {\r
+ model = xos.slicesPlus.models[0];\r
+ }\r
+\r
+ sliceSelector = new XOSTenantApp.tenantSliceSelectorView({collection: xos.slicesPlus,\r
+ selectedID: model.id,\r
+ } );\r
+ XOSTenantApp.sliceSelector = sliceSelector;\r
+ XOSTenantApp.tenantSliceSelector.show(sliceSelector);\r
+\r
+ tenantSummary = new XOSTenantApp.tenantSummaryView({model: model,\r
+ choices: {mount_data_sets: make_choices(xos.tenantview.models[0].attributes.public_volume_names, null),\r
+ image_preference: make_choices(xos.tenantview.models[0].attributes.blessed_image_names, null)},\r
+ });\r
+ XOSTenantApp.tenantSummary.show(tenantSummary);\r
+\r
+ tenantSites = new XOSTenantSiteCollection();\r
+ tenantSites.updateFromSlice(model);\r
+ XOSTenantApp.tenantSites = tenantSites;\r
+\r
+ tenantSiteList = new XOSTenantApp.tenantSiteListView({collection: tenantSites });\r
+ XOSTenantApp.tenantSiteList.show(tenantSiteList);\r
+ // on xos.slicePlus.sort, need to update xostenantapp.tenantSites\r
+\r
+ XOSTenantApp.tenantButtons.show( new XOSTenantButtonView( { app: XOSTenantApp,\r
+ linkedView: tenantSummary } ) );\r
+};\r
+\r
+XOSTenantApp.initRouter = function() {\r
+ router = XOSRouter;\r
+ var api = {};\r
+ var routes = {};\r
+\r
+ nav_url = "slice/:id";\r
+ api_command = "viewSlice";\r
+ api[api_command] = function(id) { XOSTenantApp.viewSlice(xos.slicesPlus.get(id)); };\r
+ routes[nav_url] = api_command;\r
+\r
+ nav_url = "increase/:collectionName/:id/:fieldName";\r
+ api_command = "increase";\r
+ api[api_command] = function(collectionName, id, fieldName) {\r
+ XOSTenantApp.Router.showPreviousURL();\r
+ model = XOSTenantApp[collectionName].get(id);\r
+ model.set(fieldName, model.get(fieldName) + 1);\r
+ };\r
+ routes[nav_url] = api_command;\r
+\r
+ nav_url = "decrease/:collectionName/:id/:fieldName";\r
+ api_command = "decrease";\r
+ api[api_command] = function(collectionName, id, fieldName) {\r
+ XOSTenantApp.Router.showPreviousURL();\r
+ model = XOSTenantApp[collectionName].get(id);\r
+ model.set(fieldName, Math.max(0, model.get(fieldName) - 1));\r
+ };\r
+ routes[nav_url] = api_command;\r
+\r
+ nav_url = "*path";\r
+ api_command = "defaultRoute";\r
+ api[api_command] = function() { XOSTenantApp.viewSlice(undefined); };\r
+ routes[nav_url] = api_command;\r
+\r
+ XOSTenantApp.Router = new router({ appRoutes: routes, controller: api });\r
+};\r
+\r
+XOSTenantApp.startNavigation = function() {\r
+ Backbone.history.start();\r
+ XOSTenantApp.navigationStarted = true;\r
+}\r
+\r
+XOSTenantApp.collectionLoadChange = function() {\r
+ stats = xos.getCollectionStatus();\r
+\r
+ if (!XOSTenantApp.navigationStarted) {\r
+ if (stats["isLoaded"] + stats["failedLoad"] >= stats["startedLoad"]) {\r
+ XOSTenantApp.startNavigation();\r
+\r
+ //if (xos.slicesPlus.models.length > 0) {\r
+ // XOSTenantApp.Router.navigate("slice/" + xos.slicesPlus.models[0].id, {trigger:true});\r
+ //}\r
+ } else {\r
+ $("#tenantSummary").html("<h3>Loading...</h3><div id='xos-startup-progress'></div>");\r
+ $("#xos-startup-progress").progressbar({value: stats["completedLoad"], max: stats["startedLoad"]});\r
+ }\r
+ }\r
+};\r
+\r
+XOSTenantApp.on("start", function() {\r
+ XOSTenantApp.buildViews();
+
+ XOSTenantApp.initRouter();
+
+ // fire it once to initially show the progress bar
+ XOSTenantApp.collectionLoadChange();
+
+ // fire it each time the collection load status is updated
+ Backbone.on("xoslib:collectionLoadChange", XOSTenantApp.collectionLoadChange);
+});
+
+$(document).ready(function(){
+ XOSTenantApp.start();
+});
+