From c46fcc02830f6ecf68db572f718069a98a0d8e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Mon, 15 Jun 2015 13:00:04 +0200 Subject: [PATCH] Feature #3748: Oneflow service scale dialog --- src/sunstone/public/app/opennebula/role.js | 3 +- .../public/app/tabs/oneflow-services-tab.js | 1 + .../app/tabs/oneflow-services-tab/actions.js | 22 ++++- .../oneflow-services-tab/dialogs/scale.js | 98 +++++++++++++++++++ .../dialogs/scale/dialogId.js | 3 + .../dialogs/scale/html.hbs | 29 ++++++ .../panels/roles/roles-buttons.js | 3 +- 7 files changed, 151 insertions(+), 8 deletions(-) create mode 100644 src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale.js create mode 100644 src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale/dialogId.js create mode 100644 src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale/html.hbs diff --git a/src/sunstone/public/app/opennebula/role.js b/src/sunstone/public/app/opennebula/role.js index 1d73173d6f..7cf3c066df 100644 --- a/src/sunstone/public/app/opennebula/role.js +++ b/src/sunstone/public/app/opennebula/role.js @@ -1,6 +1,7 @@ define(function(require) { var OpenNebulaAction = require('./action'); var OpenNebulaError = require('./error'); + var OpenNebulaHelper = require('./helper'); var Locale = require('utils/locale'); var RESOURCE = "DOCUMENT"; @@ -165,7 +166,7 @@ define(function(require) { PATH); }, "update" : function(params) { - var request = OpenNebula.Helper.request(RESOURCE, "update", params.data.id); + var request = OpenNebulaHelper.request(RESOURCE, "update", params.data.id); $.ajax({ url: PATH + "/" + params.data.id, diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab.js b/src/sunstone/public/app/tabs/oneflow-services-tab.js index a358562689..e7cefdaa74 100644 --- a/src/sunstone/public/app/tabs/oneflow-services-tab.js +++ b/src/sunstone/public/app/tabs/oneflow-services-tab.js @@ -9,6 +9,7 @@ define(function(require) { var RESOURCE = "Service"; var _dialogs = [ + require('./oneflow-services-tab/dialogs/scale'), ]; var _panels = [ diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/actions.js b/src/sunstone/public/app/tabs/oneflow-services-tab/actions.js index ae740e2fea..778c8e3efc 100644 --- a/src/sunstone/public/app/tabs/oneflow-services-tab/actions.js +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/actions.js @@ -12,6 +12,7 @@ define(function(require) { var RESOURCE = "Service"; var ROLES_PANEL_ID = require('./panels/roles/panelId'); + var SCALE_DIALOG_ID = require('./dialogs/scale/dialogId'); var _commonActions = new CommonActions(OpenNebulaResource, RESOURCE, TAB_ID); @@ -85,21 +86,32 @@ define(function(require) { //-------------------------------------------------------------------------- - /* TODO - "Role.update_dialog" : { + "Role.scale_dialog" : { type: "custom", - call: popUpScaleDialog + call: function(){ + selected = roleElements(); + + if(selected.lenght == 0){ + return; + } + + Sunstone.getDialog(SCALE_DIALOG_ID).setParams({roleIds: selected}); + Sunstone.getDialog(SCALE_DIALOG_ID).reset(); + Sunstone.getDialog(SCALE_DIALOG_ID).show(); + } }, "Role.update" : { type: "multiple", call: OpenNebulaRole.update, - callback: roleCallback, + callback: function() { + Sunstone.getDialog(SCALE_DIALOG_ID).hide(); + roleCallback(); + }, elements: roleElements, error: Notifier.onError, notify: true }, - */ "Role.hold" : { type: "multiple", diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale.js b/src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale.js new file mode 100644 index 0000000000..fc4a385f3d --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale.js @@ -0,0 +1,98 @@ +define(function(require) { + /* + DEPENDENCIES + */ + + var BaseDialog = require('utils/dialogs/dialog'); + var TemplateHTML = require('hbs!./scale/html'); + var Sunstone = require('sunstone'); + var Notifier = require('utils/notifier'); + var Locale = require('utils/locale'); + var Tips = require('utils/tips'); + + /* + CONSTANTS + */ + + var DIALOG_ID = require('./scale/dialogId'); + var TAB_ID = require('../tabId'); + + /* + CONSTRUCTOR + */ + + function Dialog() { + this.dialogId = DIALOG_ID; + + BaseDialog.call(this); + } + + Dialog.DIALOG_ID = DIALOG_ID; + Dialog.prototype = Object.create(BaseDialog.prototype); + Dialog.prototype.constructor = Dialog; + Dialog.prototype.html = _html; + Dialog.prototype.onShow = _onShow; + Dialog.prototype.setup = _setup; + Dialog.prototype.setParams = _setParams; + + return Dialog; + + /* + FUNCTION DEFINITIONS + */ + + function _html() { + return TemplateHTML({ + 'dialogId': this.dialogId + }); + } + + function _onShow(context) { + } + + function _setup(context) { + var that = this; + + context.off('invalid.fndtn.abide', '#' + DIALOG_ID + 'Form'); + context.off('valid.fndtn.abide', '#' + DIALOG_ID + 'Form'); + + context.on('invalid.fndtn.abide', '#' + DIALOG_ID + 'Form', function(e) { + // Fix for valid event firing twice + if (e.namespace != 'abide.fndtn') { return; } + + Notifier.notifyError(Locale.tr("One or more required fields are missing or malformed.")); + }).on('valid.fndtn.abide', '#' + DIALOG_ID + 'Form', function(e) { + // Fix for valid event firing twice + if (e.namespace != 'abide.fndtn') { return; } + + + var force = false; + if ($("#force", context).is(":checked")) { + force = true; + } + + var obj = { + "force": force, + "cardinality": $("#cardinality", context).val(), + }; + + Sunstone.runAction('Role.update', that.roleIds, obj); + + return false; + }); + + context.foundation('reflow', 'abide'); + + Tips.setup(context); + + return false; + } + + /** + * @param {object} params + * - params.roleIds : Array of selected role IDs + */ + function _setParams(params) { + this.roleIds = params.roleIds; + } +}); diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale/dialogId.js b/src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale/dialogId.js new file mode 100644 index 0000000000..66401a0f4c --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale/dialogId.js @@ -0,0 +1,3 @@ +define(function(require){ + return 'scaleServiceRoleDialog'; +}); \ No newline at end of file diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale/html.hbs b/src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale/html.hbs new file mode 100644 index 0000000000..28279f0b17 --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/dialogs/scale/html.hbs @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/panels/roles/roles-buttons.js b/src/sunstone/public/app/tabs/oneflow-services-tab/panels/roles/roles-buttons.js index 8086fc80c8..c8d8fe057c 100644 --- a/src/sunstone/public/app/tabs/oneflow-services-tab/panels/roles/roles-buttons.js +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/panels/roles/roles-buttons.js @@ -2,10 +2,9 @@ define(function(require) { var Locale = require('utils/locale'); var Buttons = { - "Role.update_dialog" : { + "Role.scale_dialog" : { type: "action", text: Locale.tr("Scale"), - tip: Locale.tr("This will hold selected pending VMs from being deployed"), layout: "create" }, "Role.hold" : {