var SlaDialog = Plugin.extend({
+ accepted_slas: {},
+
/** XXX to check
* @brief Plugin constructor
* @param options : an associative array of setting values
/* 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
// how to raise manifold events
set_state: function(data, username)
{
- var action;
- var msg;
- var button = '';
- var username = username;
-
- var uncheck = false;
-
- switch(data.request) {
- case FIELD_REQUEST_ADD_RESET:
- case FIELD_REQUEST_REMOVE_RESET:
- $('#sla_dialog').hide();
- // find line and delete it
- // row = this.find_row(data.value);
- // if (row)
- // this.table.fnDeleteRow(row.nTr);
- // $("#badge-pending").data('number', $("#badge-pending").data('number') - 1 );
- // $("#badge-pending").text($("#badge-pending").data('number'));
- return;
- case FIELD_REQUEST_CHANGE:
- action = 'UPDATE';
- break;
- case FIELD_REQUEST_ADD:
- action = 'ADD';
-
- if (data.value.toLowerCase().indexOf("iminds") >= 0){
-
- $('#sla_dialog').show();
- $('#slamodal').modal('show');
-
- $(document).ready(function() {
- $("#accept_sla").click(function(){
- console.log("SLA ACCEPTED");
- console.log("With username: " + username);
- $.post("/sla/agreements/simplecreate", {"template_id":"iMindsServiceTemplate","user":username});
- $('#slamodal').modal('hide');
- });
- });
-
- $(document).ready(function() {
- $("#dismiss_sla").click(function(){
- console.log("SLA NOT ACCEPTED");
- // FIX ME: This is not a good solution to prevent the checkbox click
- var chkbox = document.getElementById((data.value).replace(/"/g,''));
- if(chkbox.checked){
- chkbox.click();
- }
- $('#slamodal').modal('hide');
-
- });
- });
-
- }
-
- break;
- case FIELD_REQUEST_REMOVE:
- action = 'REMOVE';
- break;
- }
+
},
post_agreement: function()
},
- 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 */