diff --git a/src/sunstone/public/app/app.js b/src/sunstone/public/app/app.js index 3f87a78db8..8890fb1959 100644 --- a/src/sunstone/public/app/app.js +++ b/src/sunstone/public/app/app.js @@ -21,7 +21,9 @@ define(function(require) { require('tabs/vnets-tab'), require('tabs/secgroups-tab'), require('tabs/zones-tab'), - require('tabs/marketplace-tab') + require('tabs/marketplace-tab'), + require('tabs/oneflow-dashboard'), + require('tabs/oneflow-templates-tab') ]; var _commonDialogs = [ diff --git a/src/sunstone/public/app/opennebula/servicetemplate.js b/src/sunstone/public/app/opennebula/servicetemplate.js index b732608111..c70d8bc43f 100644 --- a/src/sunstone/public/app/opennebula/servicetemplate.js +++ b/src/sunstone/public/app/opennebula/servicetemplate.js @@ -3,7 +3,7 @@ define(function(require) { var RESOURCE = "DOCUMENT"; var PATH = 'service_template'; - var CACHE_NAME = CACHE_NAME; + var CACHE_NAME = "SERVICE_TEMPLATE"; var ServiceTemplate = { "resource": RESOURCE, diff --git a/src/sunstone/public/app/tabs/oneflow-dashboard.js b/src/sunstone/public/app/tabs/oneflow-dashboard.js new file mode 100644 index 0000000000..5694acf767 --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-dashboard.js @@ -0,0 +1,11 @@ +define(function(require) { + var TAB_ID = 'oneflow-dashboard'; + + var Tab = { + tabId: TAB_ID, + title: ' OneFlow', + no_content: true + }; + + return Tab; +}); diff --git a/src/sunstone/public/app/tabs/oneflow-templates-tab.js b/src/sunstone/public/app/tabs/oneflow-templates-tab.js new file mode 100644 index 0000000000..67466e337a --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-templates-tab.js @@ -0,0 +1,47 @@ +define(function(require) { + var Locale = require('utils/locale'); + var Buttons = require('./oneflow-templates-tab/buttons'); + var Actions = require('./oneflow-templates-tab/actions'); + var Table = require('./oneflow-templates-tab/datatable'); + + var TAB_ID = require('./oneflow-templates-tab/tabId'); + var DATATABLE_ID = "dataTableServiceTemplates"; + var RESOURCE = "ServiceTemplate"; + + var _dialogs = [ + //require('./oneflow-templates-tab/dialogs/instantiate') + ]; + + var _panels = [ + //require('./oneflow-templates-tab/panels/info'), + //require('./oneflow-templates-tab/panels/roles') + ]; + + var _formPanels = [ + //require('./oneflow-templates-tab/form-panels/create') + ]; + + var Tab = { + tabId: TAB_ID, + title: Locale.tr("Templates"), + tabClass: "subTab", + parentTab: "oneflow-dashboard", + listHeader: ' '+Locale.tr("OneFlow - Templates"), + infoHeader: ' '+Locale.tr("OneFlow - Template"), + 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-templates-tab/actions.js b/src/sunstone/public/app/tabs/oneflow-templates-tab/actions.js new file mode 100644 index 0000000000..e4e9fff2de --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-templates-tab/actions.js @@ -0,0 +1,119 @@ +define(function(require) { + var Sunstone = require('sunstone'); + var Notifier = require('utils/notifier'); + var Locale = require('utils/locale'); + var OpenNebulaResource = require('opennebula/servicetemplate'); + var CommonActions = require('utils/common-actions'); + + var TAB_ID = require('./tabId'); + //var CREATE_DIALOG_ID = require('./form-panels/create/formPanelId'); + //var INSTANTIATE_DIALOG_ID = require('./dialogs/instantiate/dialogId'); + var XML_ROOT = "DOCUMENT"; + var RESOURCE = "ServiceTemplate"; + + var _commonActions = new CommonActions(OpenNebulaResource, RESOURCE, TAB_ID); + + var _actions = { + "ServiceTemplate.show" : _commonActions.show(), + "ServiceTemplate.refresh" : _commonActions.refresh(), + "ServiceTemplate.delete" : _commonActions.delete(), + "ServiceTemplate.chown": _commonActions.multipleAction('chown'), + "ServiceTemplate.chgrp": _commonActions.multipleAction('chgrp'), + "ServiceTemplate.chmod": _commonActions.singleAction('chmod'), + + "ServiceTemplate.list" : { + type: "list", + call: OpenNebulaResource.list, + callback: function(request, response) { + $(".oneflow_templates_error_message").hide(); + Sunstone.getDataTable(TAB_ID).updateView(request, response); + }, + error: function(request, error_json) { + Notifier.onError(request, error_json, $(".oneflow_templates_error_message")); + } + }, + + "ServiceTemplate.create" : { + type: "create", + call: OpenNebulaResource.create, + callback: function(request, response){ + Sunstone.resetFormPanel(TAB_ID, CREATE_DIALOG_ID); + Sunstone.hideFormPanel(TAB_ID); + Sunstone.getDataTable(TAB_ID).addElement(request, response); + }, + error: function(request, response){ + Sunstone.hideFormPanelLoading(TAB_ID); + Notifier.onError(request, response); + } + }, + + "ServiceTemplate.create_dialog" : { + type: "custom", + call: function() { + Sunstone.showFormPanel(TAB_ID, CREATE_DIALOG_ID, "create"); + } + }, + + "ServiceTemplate.update_dialog" : { + type: "custom", + call: function() { + var selected_nodes = Sunstone.getDataTable(TAB_ID).elements(); + if (selected_nodes.length != 1) { + Notifier.notifyMessage("Please select one (and just one) template to update."); + return false; + } + + var resource_id = "" + selected_nodes[0]; + Sunstone.runAction(RESOURCE+".show_to_update", resource_id); + } + }, + + "ServiceTemplate.show_to_update" : { + type: "single", + call: OpenNebulaResource.show, + callback: function(request, response) { + Sunstone.showFormPanel(TAB_ID, CREATE_DIALOG_ID, "update", + function(formPanelInstance, context) { + formPanelInstance.fill(context, response[XML_ROOT]); + }); + }, + error: Notifier.onError + }, + + "ServiceTemplate.update" : { + type: "single", + call: OpenNebulaResource.update, + callback: function(request, response){ + Sunstone.hideFormPanel(TAB_ID); + Notifier.notifyMessage(Locale.tr("ServiceTemplate updated correctly")); + }, + error: function(request, response) { + Sunstone.hideFormPanelLoading(TAB_ID); + Notifier.onError(request, response); + } + }, + + /* TODO + + "ServiceTemplate.instantiate" : { + type: "multiple", + call: OpenNebula.ServiceTemplate.instantiate, + callback: function(req){ + OpenNebula.Helper.clear_cache("SERVICE"); + }, + elements: serviceTemplateElements, + error: onError, + notify: true + }, + + "ServiceTemplate.instantiate_dialog" : { + type: "custom", + call: function(){ + popUpInstantiateServiceTemplateDialog(); + } + }, + */ + }; + + return _actions; +}); \ No newline at end of file diff --git a/src/sunstone/public/app/tabs/oneflow-templates-tab/buttons.js b/src/sunstone/public/app/tabs/oneflow-templates-tab/buttons.js new file mode 100644 index 0000000000..1aa36f1166 --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-templates-tab/buttons.js @@ -0,0 +1,47 @@ +define(function(require) { + var Locale = require('utils/locale'); + + var Buttons = { + "ServiceTemplate.refresh" : { + type: "action", + layout: "refresh", + alwaysActive: true + }, + "ServiceTemplate.create_dialog" : { + type: "create_dialog", + layout: "create" + }, + "ServiceTemplate.instantiate_dialog" : { + type: "action", + layout: "main", + text: Locale.tr("Instantiate") + }, + "ServiceTemplate.update_dialog" : { + type: "action", + layout: "main", + text: Locale.tr("Update") + }, + "ServiceTemplate.chown" : { + type: "confirm_with_select", + text: Locale.tr("Change owner"), + select: "User", + layout: "user_select", + tip: Locale.tr("Select the new owner")+":" + }, + "ServiceTemplate.chgrp" : { + type: "confirm_with_select", + text: Locale.tr("Change group"), + select: "Group", + layout: "user_select", + tip: Locale.tr("Select the new group")+":" + }, + "ServiceTemplate.delete" : { + type: "confirm", + text: Locale.tr("Delete"), + layout: "del", + tip: Locale.tr("This will delete the selected templates") + } + }; + + return Buttons; +}); \ No newline at end of file diff --git a/src/sunstone/public/app/tabs/oneflow-templates-tab/datatable.js b/src/sunstone/public/app/tabs/oneflow-templates-tab/datatable.js new file mode 100644 index 0000000000..eef8be4391 --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-templates-tab/datatable.js @@ -0,0 +1,83 @@ +define(function(require) { + /* + DEPENDENCIES + */ + + var TabDataTable = require('utils/tab-datatable'); + var SunstoneConfig = require('sunstone-config'); + var Locale = require('utils/locale'); + + /* + CONSTANTS + */ + + var RESOURCE = "ServiceTemplate"; + 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") + ]; + + this.selectOptions = { + "id_index": 1, + "name_index": 4, + "select_resource": Locale.tr("Please select a Template from the list"), + "you_selected": Locale.tr("You selected the following Template:"), + "select_resource_multiple": Locale.tr("Please select one or more Templates from the list"), + "you_selected_multiple": Locale.tr("You selected the following Templates:") + }; + + 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 + ]; + } +}); diff --git a/src/sunstone/public/app/tabs/oneflow-templates-tab/tabId.js b/src/sunstone/public/app/tabs/oneflow-templates-tab/tabId.js new file mode 100644 index 0000000000..5e8d542d36 --- /dev/null +++ b/src/sunstone/public/app/tabs/oneflow-templates-tab/tabId.js @@ -0,0 +1,3 @@ +define(function(require){ + return 'oneflow-templates'; +}); \ No newline at end of file