X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fcore%2Fxoslib%2Fstatic%2Fjs%2Fxoslib%2Fxos-backbone.js;h=bbf13a498aa91a1650a80e826cd4eaab1bdaf233;hb=912f63a970b2db8affe4ae87b6ff0b19fe5caa24;hp=4b048fb16f6dc50dd4cfd71367663e134dc2918e;hpb=f4612de67d2f00fe21b3a4b161034259fdf8ab4d;p=plstackapi.git diff --git a/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js b/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js index 4b048fb..bbf13a4 100644 --- a/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js +++ b/planetstack/core/xoslib/static/js/xoslib/xos-backbone.js @@ -3,8 +3,6 @@ if (! window.XOSLIB_LOADED ) { SLIVER_API = "/plstackapi/slivers/"; SLICE_API = "/plstackapi/slices/"; - SLICEDEPLOYMENT_API = "/plstackapi/slice_deployments/"; - SLICEPRIVILEGE_API = "/plstackapi/slice_privileges/"; SLICEROLE_API = "/plstackapi/slice_roles/"; NODE_API = "/plstackapi/nodes/"; SITE_API = "/plstackapi/sites/"; @@ -13,10 +11,19 @@ if (! window.XOSLIB_LOADED ) { DEPLOYMENT_API = "/plstackapi/deployments/"; IMAGE_API = "/plstackapi/images/"; NETWORKTEMPLATE_API = "/plstackapi/networktemplates/"; - NETWORKDEPLOYMENT_API = "/plstackapi/networkdeployments/"; NETWORK_API = "/plstackapi/networks/"; NETWORKSLIVER_API = "/plstackapi/networkslivers/"; SERVICE_API = "/plstackapi/services/"; + SLICEPRIVILEGE_API = "/plstackapi/slice_privileges/"; + NETWORKDEPLOYMENT_API = "/plstackapi/networkdeployments/"; + + /* changed as a side effect of the big rename + SLICEDEPLOYMENT_API = "/plstackapi/slice_deployments/"; + USERDEPLOYMENT_API = "/plstackapi/user_deployments/"; + */ + + SLICEDEPLOYMENT_API = "/plstackapi/slicedeployments/"; + USERDEPLOYMENT_API = "/plstackapi/userdeployments/"; SLICEPLUS_API = "/xoslib/slicesplus/"; @@ -71,6 +78,8 @@ if (! window.XOSLIB_LOADED ) { initialize: function(){ this.isLoaded = false; + this.failedLoad = false; + this.startedLoad = false; this.sortVar = 'name'; this.sortOrder = 'asc'; this.on( "sort", this.sorted ); @@ -80,7 +89,7 @@ if (! window.XOSLIB_LOADED ) { foreignCollections: [], sorted: function() { - this.isLoaded = true; + //console.log("sorted " + this.modelName); }, simpleComparator: function( model ){ @@ -106,6 +115,52 @@ if (! window.XOSLIB_LOADED ) { } }, + fetchSuccess: function(collection, response, options) { + //console.log("fetch succeeded " + collection.modelName); + this.failedLoad = false; + this.fetching = false; + if (!this.isLoaded) { + this.isLoaded = true; + Backbone.trigger("xoslib:collectionLoadChange", this); + } + this.trigger("fetchStateChange"); + if (options["orig_success"]) { + options["orig_success"](collection, response, options); + } + }, + + fetchFailure: function(collection, response, options) { + //console.log("fetch failed " + collection.modelName); + this.fetching = false; + if ((!this.isLoaded) && (!this.failedLoad)) { + this.failedLoad=true; + Backbone.trigger("xoslib:collectionLoadChange", this); + } + this.trigger("fetchStateChange"); + if (options["orig_failure"]) { + options["orig_failure"](collection, response, options); + } + }, + + fetch: function(options) { + var self=this; + this.fetching=true; + //console.log("fetch " + this.modelName); + if (!this.startedLoad) { + this.startedLoad=true; + Backbone.trigger("xoslib:collectionLoadChange", this); + } + this.trigger("fetchStateChange"); + if (options == undefined) { + options = {}; + } + options["orig_success"] = options["success"]; + options["orig_failure"] = options["failure"]; + options["success"] = function(collection, response, options) { self.fetchSuccess.call(self, collection, response, options); }; + options["failure"] = this.fetchFailure; + Backbone.Collection.prototype.fetch.call(this, options); + }, + startPolling: function() { if (!this._polling) { var collection=this; @@ -115,6 +170,20 @@ if (! window.XOSLIB_LOADED ) { } }, + refresh: function(refreshRelated) { + if (!this.fetching) { + this.fetch(); + } + if (refreshRelated) { + for (related in this.relatedCollections) { + related = xos[related]; + if (!related.fetching) { + related.fetch(); + } + } + } + }, + maybeFetch: function(options){ // Helper function to fetch only if this collection has not been fetched before. if(this._fetched){ @@ -195,7 +264,11 @@ if (! window.XOSLIB_LOADED ) { modelName = attrs.modelName; modelClassName = modelName; collectionClassName = modelName + "Collection"; - collectionName = modelName + "s"; + + if (!attrs.collectionName) { + attrs.collectionName = modelName + "s"; + } + collectionName = attrs.collectionName; modelAttrs = {} collectionAttrs = {} @@ -222,10 +295,12 @@ if (! window.XOSLIB_LOADED ) { lib[collectionName] = new lib[collectionClassName](); lib.allCollectionNames.push(collectionName); + lib.allCollections.push(lib[collectionName]); }; function xoslib() { this.allCollectionNames = []; + this.allCollections = []; define_model(this, {urlRoot: SLIVER_API, relatedCollections: {"networkSlivers": "sliver"}, @@ -293,9 +368,28 @@ if (! window.XOSLIB_LOADED ) { // enhanced REST define_model(this, {urlRoot: SLICEPLUS_API, relatedCollections: {'slivers': "slice"}, - modelName: "slicePlus"}); + modelName: "slicePlus", + collectionName: "slicesPlus"}); 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();