diff --git a/src/sunstone/public/app/app.js b/src/sunstone/public/app/app.js index 8890fb1959..8c3eccb3ed 100644 --- a/src/sunstone/public/app/app.js +++ b/src/sunstone/public/app/app.js @@ -23,6 +23,7 @@ define(function(require) { require('tabs/zones-tab'), require('tabs/marketplace-tab'), require('tabs/oneflow-dashboard'), + require('tabs/oneflow-services-tab'), require('tabs/oneflow-templates-tab') ]; diff --git a/src/sunstone/public/app/opennebula/service.js b/src/sunstone/public/app/opennebula/service.js index 4dafd16de0..16595a6d93 100644 --- a/src/sunstone/public/app/opennebula/service.js +++ b/src/sunstone/public/app/opennebula/service.js @@ -1,5 +1,6 @@ define(function(require) { var OpenNebulaAction = require('./action'); + var Locale = require('utils/locale'); var RESOURCE = "DOCUMENT"; var PATH = 'service'; @@ -42,17 +43,17 @@ define(function(require) { }, "state" : function(state_int) { var state = [ - tr("PENDING"), - tr("DEPLOYING"), - tr("RUNNING"), - tr("UNDEPLOYING"), - tr("WARNING"), - tr("DONE"), - tr("FAILED_UNDEPLOYING"), - tr("FAILED_DEPLOYING"), - tr("SCALING"), - tr("FAILED_SCALING"), - tr("COOLDOWN") + Locale.tr("PENDING"), + Locale.tr("DEPLOYING"), + Locale.tr("RUNNING"), + Locale.tr("UNDEPLOYING"), + Locale.tr("WARNING"), + Locale.tr("DONE"), + Locale.tr("FAILED_UNDEPLOYING"), + Locale.tr("FAILED_DEPLOYING"), + Locale.tr("SCALING"), + Locale.tr("FAILED_SCALING"), + Locale.tr("COOLDOWN") ][state_int] return state ? state : state_int; } diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab.js b/src/sunstone/public/app/tabs/oneflow-services-tab.js new file mode 100644 index 0000000000..2072516925 --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-services-tab.js @@ -0,0 +1,43 @@ +define(function(require) { + var Locale = require('utils/locale'); + var Buttons = require('./oneflow-services-tab/buttons'); + var Actions = require('./oneflow-services-tab/actions'); + var Table = require('./oneflow-services-tab/datatable'); + + var TAB_ID = require('./oneflow-services-tab/tabId'); + var DATATABLE_ID = "dataTableService"; + var RESOURCE = "Service"; + + var _dialogs = [ + ]; + + var _panels = [ + ]; + + var _formPanels = [ + ]; + + var Tab = { + tabId: TAB_ID, + title: Locale.tr("Services"), + tabClass: "subTab", + parentTab: "oneflow-dashboard", + listHeader: ' '+Locale.tr("OneFlow - Services"), + infoHeader: ' '+Locale.tr("OneFlow - Service"), + subheader: '', + content: '
', + resource: RESOURCE, + buttons: Buttons, + actions: Actions, + dataTable: new Table(DATATABLE_ID, {actions: true, info: true}), + panels: _panels, + formPanels: _formPanels, + dialogs: _dialogs + }; + + return Tab; +}); diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/actions.js b/src/sunstone/public/app/tabs/oneflow-services-tab/actions.js new file mode 100644 index 0000000000..d180309081 --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/actions.js @@ -0,0 +1,56 @@ +define(function(require) { + var Sunstone = require('sunstone'); + var Notifier = require('utils/notifier'); + var Locale = require('utils/locale'); + var OpenNebulaResource = require('opennebula/service'); + var CommonActions = require('utils/common-actions'); + + var TAB_ID = require('./tabId'); + var XML_ROOT = "DOCUMENT"; + var RESOURCE = "Service"; + + var _commonActions = new CommonActions(OpenNebulaResource, RESOURCE, TAB_ID); + + var _actions = { + "Service.show" : _commonActions.show(), + "Service.refresh" : _commonActions.refresh(), + "Service.delete" : _commonActions.delete(), + "Service.chown": _commonActions.multipleAction('chown'), + "Service.chgrp": _commonActions.multipleAction('chgrp'), + "Service.chmod": _commonActions.singleAction('chmod'), + + "Service.list" : { + type: "list", + call: OpenNebulaResource.list, + callback: function(request, response) { + $(".oneflow_services_error_message").hide(); + Sunstone.getDataTable(TAB_ID).updateView(request, response); + }, + error: function(request, error_json) { + Notifier.onError(request, error_json, $(".oneflow_services_error_message")); + } + }, + + /* TODO + + "Service.shutdown" : { + type: "multiple", + call: OpenNebula.Service.shutdown, + elements: serviceElements, + error: onError, + notify: true + }, + + "Service.recover" : { + type: "multiple", + call: OpenNebula.Service.recover, + elements: serviceElements, + error: onError, + notify: true + } + + */ + }; + + return _actions; +}); \ No newline at end of file diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/buttons.js b/src/sunstone/public/app/tabs/oneflow-services-tab/buttons.js new file mode 100644 index 0000000000..4cb791fe20 --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/buttons.js @@ -0,0 +1,43 @@ +define(function(require) { + var Locale = require('utils/locale'); + + var Buttons = { + "Service.refresh" : { + type: "action", + layout: "refresh", + alwaysActive: true + }, + "Service.chown" : { + type: "confirm_with_select", + text: Locale.tr("Change owner"), + select: "User", + tip: Locale.tr("Select the new owner")+":", + layout: "user_select" + }, + "Service.chgrp" : { + type: "confirm_with_select", + text: Locale.tr("Change group"), + select: "Group", + tip: Locale.tr("Select the new group")+":", + layout: "user_select" + }, + "Service.shutdown" : { + type: "action", + layout: "main", + text: Locale.tr("Shutdown") + }, + "Service.recover" : { + type: "action", + layout: "main", + text: Locale.tr("Recover") + }, + "Service.delete" : { + type: "confirm", + text: Locale.tr("Delete"), + layout: "del", + tip: Locale.tr("This will delete the selected services") + } + }; + + return Buttons; +}); \ No newline at end of file diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/datatable.js b/src/sunstone/public/app/tabs/oneflow-services-tab/datatable.js new file mode 100644 index 0000000000..17f071d6fc --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/datatable.js @@ -0,0 +1,86 @@ +define(function(require) { + /* + DEPENDENCIES + */ + + var TabDataTable = require('utils/tab-datatable'); + var SunstoneConfig = require('sunstone-config'); + var Locale = require('utils/locale'); + var OpenNebulaService = require('opennebula/service'); + + /* + CONSTANTS + */ + + var RESOURCE = "Service"; + var XML_ROOT = "DOCUMENT"; + var TAB_NAME = require('./tabId'); + + /* + CONSTRUCTOR + */ + + function Table(dataTableId, conf) { + this.conf = conf || {}; + this.tabId = TAB_NAME; + this.dataTableId = dataTableId; + this.resource = RESOURCE; + this.xmlRoot = XML_ROOT; + + this.dataTableOptions = { + "bAutoWidth": false, + "bSortClasses" : false, + "bDeferRender": true, + "aoColumnDefs": [ + {"bSortable": false, "aTargets": ["check"]}, + {"sWidth": "35px", "aTargets": [0]}, + {"bVisible": true, "aTargets": SunstoneConfig.tabTableColumns(TAB_NAME)}, + {"bVisible": false, "aTargets": ['_all']} + ] + }; + + this.columns = [ + Locale.tr("ID") , + Locale.tr("Owner") , + Locale.tr("Group"), + Locale.tr("Name"), + Locale.tr("State") + ]; + + this.selectOptions = { + "id_index": 1, + "name_index": 4, + "select_resource": Locale.tr("Please select a Service from the list"), + "you_selected": Locale.tr("You selected the following Service:"), + "select_resource_multiple": Locale.tr("Please select one or more Services from the list"), + "you_selected_multiple": Locale.tr("You selected the following Services:") + }; + + TabDataTable.call(this); + } + + Table.prototype = Object.create(TabDataTable.prototype); + Table.prototype.constructor = Table; + Table.prototype.elementArray = _elementArray; + + return Table; + + /* + FUNCTION DEFINITIONS + */ + + function _elementArray(element_json) { + var element = element_json[XML_ROOT]; + + return [ + '', + element.ID, + element.UNAME, + element.GNAME, + element.NAME, + OpenNebulaService.state(element.TEMPLATE.BODY.state) + ]; + } +}); diff --git a/src/sunstone/public/app/tabs/oneflow-services-tab/tabId.js b/src/sunstone/public/app/tabs/oneflow-services-tab/tabId.js new file mode 100644 index 0000000000..2fa2cf6b69 --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-services-tab/tabId.js @@ -0,0 +1,3 @@ +define(function(require){ + return 'oneflow-services'; +}); \ No newline at end of file