SLA plugin code updated & SLA app folder cleaned
[myslice.git] / plugins / sladialog / static / js / sladialog.js
index 1098e2e..c118743 100644 (file)
@@ -15,6 +15,8 @@
 
     var SlaDialog = Plugin.extend({
 
+        accepted_slas: {},
+
         /** XXX to check
          * @brief Plugin constructor
          * @param options : an associative array of setting values
@@ -41,6 +43,7 @@
             
             /* GUI setup and event binding */
             // call function
+            this.button_binding();
 
         },
 
             return cols[0];
         },
 
+        check_template_status: function() {
+            for (var testbed in this.accepted_slas) {
+                if (!this.accepted_slas[testbed]) { return false; }
+            }
+
+            return true;
+        },
+
         /* PLUGIN EVENTS */
         // on_show like in querytable
 
 
         /* GUI EVENTS */
 
+        button_binding: function() {
+            var self = this;
+            $(".sla-accept-button").click(function() {
+                // set SLA as accepted and remove warnings
+                var id = $(this).closest(".row").attr("id");
+                self.accepted_slas[id] = true;
+                var is_ok = self.check_template_status();
+
+                if (is_ok) {
+                    // remove warnings
+                    // var warnings = manifold.query_store.get_record_state(resource_query.query_uuid, resource_key, STATE_WARNINGS);
+                }
+            });
+        },
+
+        create_sla: function(record) {
+            var self = this;
+
+            var urns = [];
+
+            record.resource.forEach(function(r) {
+                if ($.inArray(r.component_id, record.resource) == -1) { // if not already selected
+                    urns.push(r.component_id);
+                }
+            });
+
+            if (record.resource.length != 0 && typeof record.resource[0] !== "undefined") {
+                var data = {
+                    "SLIVER_INFO_AGGREGATE_URN": record.resource[0].component_manager_id,
+                    "SLIVER_INFO_EXPIRATION": record.lease[0].end_time,     // FIXME: only working with leases
+                    "SLIVER_INFO_SLICE_URN": record.slice_urn,
+                    "SLIVER_INFO_CREATOR_URN": record.users[0],
+                    "SLIVER_INFO_URN": urns,
+                    "SLIVER_INFO_SLA_ID": self._getUUID()
+                };
+
+                console.log(data);
+
+                $.post("/sla/agreements/create/", data)
+                    .done(function (response) {
+                        console.log("SLA created");
+                    });
+            }
+        },
+
         uncheck: function(urn)
         {
-            $('#slamodal').on('hidden.bs.modal', function(e){
-                $('#' + (urn).replace(/"/g,'')).click();
-                console.log('#' + (data.value).replace(/"/g,''));
-            });
+//            $('#slamodal').on('hidden.bs.modal', function(e){
+//                $('#' + (urn).replace(/"/g,'')).click();
+//                console.log('#' + (data.value).replace(/"/g,''));
+//            });
         },
 
         // a function to bind events here: click change
 
         },
 
-        on_field_state_changed: function(result)
+        on_field_state_changed: function(data)
         {
-            console.log("triggered state_changed: "+result);
+            var self = this;
             // this.set_state(result, this.options.username);
+
+             switch(data.state) {
+                case STATE_SET:
+                    switch(data.op) {
+                        case STATE_SET_IN_PENDING:
+                            if (typeof(data.value) == 'string') {
+                                // data.value = urn
+                                this._supports_sla(data.value)
+                                    .done( function(testbeds) {
+                                        var urn_regexp = /\+(.*?)\+/;
+                                        var urn = urn_regexp.exec(data.value)[1];
+                                        var pos = $.inArray(urn, testbeds);
+                                        if ( pos != -1) {
+                                            var id_ref = testbeds[pos].replace(/\.|:/g, "-");
+                                            $("#" + id_ref).data("urns").push(data.value);
+                                            $("#" + id_ref).show();
+                                            self.accepted_slas[id_ref] = false;
+                                            //$( "#sla_offers_list" ).append(
+                                            //    $("<li>").text("Testbed " + testbeds[pos] + " offers SLA for its resources")
+                                            //);
+                                        }
+                                    });
+                            }
+                            break;
+                        case STATE_SET_OUT:
+                            // data.value = urn
+                            if (typeof(data.value) == 'string') {
+                                // data.value = urn
+                                this._supports_sla(data.value)
+                                    .done( function(testbeds) {
+                                        var urn_regexp = /\+(.*?)\+/;
+                                        var urn = urn_regexp.exec(data.value)[1];
+                                        var pos = $.inArray(urn, testbeds);
+                                        if ( pos != -1) {
+                                            var id_ref = testbeds[pos].replace(/\.|:/g, "-");
+                                            var array = $("#" + id_ref).data("urns");
+                                            array.splice(array.indexOf(data.value), 1);
+
+                                            if ($("#" + id_ref).data("urns").length == 0) {
+                                                $("#" + id_ref).hide();
+                                                delete self.accepted_slas[id_ref];
+                                            }
+                                            //$( "#sla_offers_list" ).append(
+                                            //    $("<li>").text("Testbed " + testbeds[pos] + " offers SLA for its resources")
+                                            //);
+                                        }
+                                    });
+                            }
+                            break;
+                    }
+                    break;
+
+                case STATE_WARNINGS:
+                    // Add resource to SLA
+                    // data.key = urn
+                    // data.value = {1: "SLA acceptance required..."}
+                    // this.change_status(data.key, data.value);
+                    break;
+             }
         }, 
 
         // ... be sure to list all events here
 
         on_new_record: function(record)
         {
-
+            this.create_sla(record);
         },
 
         /* INTERNAL FUNCTIONS */
             // only convention, not strictly enforced at the moment
         },
 
+        _supports_sla: function(resource_urn) {
+            return $.ajax("/sla/testbeds/");
+        },
+
+
+
+        _getUUID: function() {
+            return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+                var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
+                return v.toString(16);
+            });
+        },
+
     });
 
     /* Plugin registration */