diff --git a/src/sunstone/public/app/tabs/hosts-tab/panels/wilds.js b/src/sunstone/public/app/tabs/hosts-tab/panels/wilds.js index c50bcb254f..ecf4fbd91a 100644 --- a/src/sunstone/public/app/tabs/hosts-tab/panels/wilds.js +++ b/src/sunstone/public/app/tabs/hosts-tab/panels/wilds.js @@ -6,6 +6,10 @@ define(function(require) { require('foundation-datatables'); var Locale = require('utils/locale'); var CanImportWilds = require('../utils/can-import-wilds'); + var OpenNebulaVM = require('opennebula/vm'); + var OpenNebulaAction = require('opennebula/action'); + var Sunstone = require('sunstone'); + var Notifier = require('utils/notifier'); /* TEMPLATES @@ -30,13 +34,8 @@ define(function(require) { this.element = info[RESOURCE.toUpperCase()]; - // Do not create an instance of this panel if the Wilds cannot be imported - if (!CanImportWilds(this.element)) { - throw "Panel not available for this element"; - } - return this; - }; + } Panel.PANEL_ID = PANEL_ID; Panel.prototype.html = _html; @@ -54,59 +53,84 @@ define(function(require) { function _setup(context) { var that = this; + + // Hide the import button if the Wilds cannot be imported + if (!CanImportWilds(this.element)) { + $("#import_wilds").hide(); + } + that.dataTableWildHosts = $("#datatable_host_wilds", context).dataTable({ "bSortClasses" : false, - "bDeferRender": true + "bDeferRender": true, + "aoColumnDefs": [ + {"bSortable": false, "aTargets": [0]}, + {"sWidth": "35px", "aTargets": [0]} + ] }); - var wilds_list_array = []; - if (that.element.TEMPLATE.VM) { wilds = that.element.TEMPLATE.VM; - $.each(wilds, function() { - name = this.VM_NAME; - safe_name = name.replace(/ /g, "_").replace(/\./g, "_"); - deploy_id = this.DEPLOY_ID; + if (!$.isArray(wilds)) { // If only 1 VM convert to array + wilds = [wilds]; + } - wilds_list_array.push([ - '', + $.each(wilds, function() { + var name = this.VM_NAME; + var safe_name = name.replace(/ /g, "_").replace(/\./g, "_"); + var deploy_id = this.DEPLOY_ID; + + var wilds_list_array = [ + [ + '', name, deploy_id - ]); + ] + ]; that.dataTableWildHosts.fnAddData(wilds_list_array); $(".import_" + safe_name, that.dataTableWildHosts).data("wild_template", atob(this.IMPORT_TEMPLATE)); - $(".import_" + safe_name, that.dataTableWildHosts).data("host_id", that.element.ID); - - wilds_list_array = []; }); } delete that.element.TEMPLATE.WILDS; delete that.element.TEMPLATE.VM; + // Enable the import button when at least a VM is selected + $("#import_wilds", context).attr("disabled", "disabled").on("click.disable", function(e) { return false; }); + + $(".import_wild_checker", context).off("change"); + $(".import_wild_checker", context).on("change", function(){ + if ($(".import_wild_checker:checked", context).length == 0){ + $("#import_wilds", context).attr("disabled", "disabled").on("click.disable", function(e) { return false; }); + } else { + $("#import_wilds", context).removeAttr("disabled").off("click.disable"); + } + }); + // Add event listener for importing WILDS - /* TODO Use only 1 action ----- context.off("click", '#import_wilds'); context.on("click", '#import_wilds', function () { - $("#import_wild_checker:checked", "#datatable_host_wilds").each(function() { + $("#import_wilds", context).attr("disabled", "disabled").on("click.disable", function(e) { return false; }); + $("#import_wilds", context).html(''); + + $(".import_wild_checker:checked", "#datatable_host_wilds").each(function() { var vm_json = { "vm": { "vm_raw": $(this).data("wild_template") } }; - var import_host_id = $(this).data("host_id"); + var import_host_id = that.element.ID; var wild_row = $(this).closest('tr'); // Create the VM in OpenNebula - OpenNebula.VM.create({ + OpenNebulaVM.create({ timeout: true, data: vm_json, success: function(request, response) { - //TODO OpenNebula.Helper.clear_cache("VM"); + OpenNebulaAction.clear_cache("VM"); var extra_info = {}; @@ -115,23 +139,36 @@ define(function(require) { extra_info['enforce'] = false; // Deploy the VM - Sunstone.runAction("VM.silent_deploy_action", - response.VM.ID, + Sunstone.runAction("VM.silent_deploy_action", + response.VM.ID, extra_info); // Notify - notifyCustom(tr("VM imported"), " ID: " + response.VM.ID, false); + Notifier.notifyCustom(Locale.tr("VM imported"), " ID: " + response.VM.ID, false); // Delete row (shouldn't be there in next monitorization) - dataTable_wilds_hosts = $("#datatable_host_wilds").dataTable(); - dataTable_wilds_hosts.fnDeleteRow(wild_row); + that.dataTableWildHosts.fnDeleteRow(wild_row); + + $("#import_wilds", context).removeAttr("disabled").off("click.disable"); + $("#import_wilds", context).html(Locale.tr("Import Wilds")); }, error: function (request, error_json) { - notifyError(error_json.error.message || tr("Cannot contact server: is it running and reachable?")); + var msg; + if (error_json.error.message){ + msg = error_json.error.message; + } else { + msg = Locale.tr("Cannot contact server: is it running and reachable?"); + } + + Notifier.notifyError(msg); + + $("#import_wilds", context).removeAttr("disabled").off("click.disable"); + $("#import_wilds", context).html(Locale.tr("Import Wilds")); } }); - }) - });*/ + }); + }); + return false; } -}) +}); \ No newline at end of file diff --git a/src/sunstone/public/app/tabs/vms-tab/actions.js b/src/sunstone/public/app/tabs/vms-tab/actions.js index 244a0b7984..b5556b8e58 100644 --- a/src/sunstone/public/app/tabs/vms-tab/actions.js +++ b/src/sunstone/public/app/tabs/vms-tab/actions.js @@ -66,12 +66,28 @@ define(function(require) { Sunstone.showFormPanel(TAB_ID, CREATE_DIALOG_ID, "create"); } }, + "VM.create" : { + type: "custom", + call: function(id, name) { + Sunstone.runAction("Template.instantiate", [id], name); + Sunstone.runAction("VM.refresh"); + }, + callback: function(request, response) { + Sunstone.getDataTable(TAB_ID).addElement(request, response); + }, + error: Notifier.onError + }, "VM.deploy" : { type: "custom", call: function() { Sunstone.getDialog(DEPLOY_DIALOG_ID).show(); } }, + "VM.silent_deploy_action" : { + type: "single", + call: OpenNebulaVM.deploy, + error: Notifier.onError + }, "VM.migrate" : { type: "custom", call: function() { @@ -160,29 +176,8 @@ define(function(require) { // }, // notify: true //}, - /*"VM.create" : { - type: "custom", - call: function(id, name) { - Sunstone.runAction("Template.instantiate", [id], name); - Sunstone.runAction("VM.list"); - }, - callback: function(request, response) { - //Sunstone.resetFormPanel(TAB_ID, CREATE_DIALOG_ID); - //Sunstone.hideFormPanel(TAB_ID); - Sunstone.getDataTable(TAB_ID).addElement(request, response); - }, - error: onError - }, - - - "VM.silent_deploy_action" : { - type: "single", - call: OpenNebula.VM.deploy, - error: onError - }, - - - + /* + "VM.saveas" : { type: "single", call: OpenNebula.VM.saveas,