From 302541b5fb2c564d103a1b31fd1cb2c0a3298d71 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Thu, 8 Dec 2011 15:42:45 -0800 Subject: [PATCH] Network offering fixes/cleanup -bug 12387: Add delete network offering action -bug 12450: Properly refresh all network offering actions -Make all list view actions visible in detail view status 12387: resolved fixed status 12450: resolved fixed --- ui/scripts/configuration.js | 370 +++++++++++++++++++++++++++++++++--- 1 file changed, 339 insertions(+), 31 deletions(-) diff --git a/ui/scripts/configuration.js b/ui/scripts/configuration.js index 9a11c0643e0..975e7d5c557 100644 --- a/ui/scripts/configuration.js +++ b/ui/scripts/configuration.js @@ -836,7 +836,8 @@ fields: { name: { label: 'Name' }, displaytext: { label: 'Description' }, - traffictype: { label: 'Traffic Type'} + traffictype: { label: 'Traffic Type'}, + state: { label: 'State', indicator: { 'Enabled': 'on', 'Disabled': 'off', 'Destroyed': 'off' }} }, dataProvider: function(args) { $.ajax({ @@ -907,7 +908,10 @@ dataType: 'json', async: true, success: function(data) { - args.response.success({ data: data.createnetworkofferingresponse.networkoffering }); + args.response.success({ + data: data.createnetworkofferingresponse.networkoffering, + actionFilter: networkOfferingActionfilter + }); } }); }, @@ -1039,49 +1043,322 @@ tags: { label: 'Tags' } } }, + + notification: { + poll: function(args) { + args.complete({ + actionFilter: networkOfferingActionfilter + }); + } + }, messages: { notification: function(args) { return 'Added network offering'; } } + }, + + enable: { + label: 'Enable network offering', + messages: { + confirm: function(args) { + return 'Are you sure you want to enable this network offering?'; + }, + notification: function(args) { + return 'Enabling network offering'; + } + }, + action: function(args) { + $.ajax({ + url: createURL("updateNetworkOffering&id=" + args.context.networkOfferings[0].id + "&state=Enabled"), + dataType: "json", + async: true, + success: function(json) { + var item = json.updatenetworkofferingresponse.networkoffering; + args.response.success(); + } + }); + }, + notification: { + poll: function(args) { + args.complete({ + data: { state: 'Enabled' } + }); + } + } + }, + + disable: { + label: 'Disable network offering', + messages: { + confirm: function(args) { + return 'Are you sure you want to disable this network offering?'; + }, + notification: function(args) { + return 'Disabling network offering'; + } + }, + action: function(args) { + $.ajax({ + url: createURL("updateNetworkOffering&id=" + args.context.networkOfferings[0].id + "&state=Disabled"), + dataType: "json", + async: true, + success: function(json) { + var item = json.updatenetworkofferingresponse.networkoffering; + args.response.success(); + } + }); + }, + notification: { + poll: function(args) { + args.complete({ data: { state: 'Disabled' }}); + } + } + }, + + destroy: { + label: 'Remove network offering', + action: function(args) { + $.ajax({ + url: createURL('deleteNetworkOffering'), + data: { + id: args.context.networkOfferings[0].id + }, + success: function(json) { + args.response.success(); + } + }); + }, + messages: { + confirm: function() { return 'Are you sure you want to remove this network offering?'; }, + notification: function() { return 'Remove network offering'; } + }, + notification: { + poll: function(args) { + args.complete({ + data: { + state: 'Destroyed' + }, + actionFilter: networkOfferingActionfilter + }); + } + } } }, detailView: { name: 'Network offering details', actions: { - edit: { - label: 'Edit', + add: { + label: 'Add network offering', + action: function(args) { - var array1 = []; - array1.push("&displayText=" + todb(args.data.displaytext)); - array1.push("&availability=" + todb(args.data.availability)); - $.ajax({ - url: createURL("updateNetworkOffering&id=" + args.context.networkOfferings[0].id + array1.join("")), - dataType: "json", - success: function(json) { - var item = json.updatenetworkofferingresponse.networkoffering; - args.response.success({ data:item }); + var formData = args.data; + var inputData = {}; + var services = {}; + + $.each(formData, function(key, value) { + var serviceData = key.split('.'); + + if (serviceData.length > 1) { + if (serviceData[0] == 'service' && + serviceData[2] == 'isEnabled' && + value == 'on') { // Services field + services[serviceData[1]] = formData[ + 'service.' + serviceData[1] + '.provider' + ]; + } + } else if (value != '') { // Normal data + inputData[key] = value; } }); + + // Make supported services list + inputData['supportedServices'] = $.map(services, function(value, key) { + return key; + }).join(','); + + if (inputData['specifyVlan'] == 'on') { + inputData['specifyVlan'] = true; + } else { + inputData['specifyVlan'] = false; + } + + // Make service provider map + var serviceProviderIndex = 0; + $.each(services, function(key, value) { + inputData['serviceProviderList[' + serviceProviderIndex + '].service'] = key; + inputData['serviceProviderList[' + serviceProviderIndex + '].provider'] = value; + serviceProviderIndex++; + }); + + $.ajax({ + url: createURL('createNetworkOffering'), + data: inputData, + dataType: 'json', + async: true, + success: function(data) { + args.response.success({ + data: data.createnetworkofferingresponse.networkoffering, + actionFilter: networkOfferingActionfilter + }); + }, + + notification: { + poll: function(args) { + args.complete({ + data: { state: 'Disabled' }, + actionFilter: networkOfferingActionfilter + }); + } + } + }); + }, + + createForm: { + title: 'Add network offering', + desc: 'Please specify the network offering', + fields: { + name: { label: 'Name', validation: { required: true } }, + + displayText: { label: 'Display Text', validation: { required: true } }, + + networkRate: { label: 'Network Rate' }, + + trafficType: { + label: 'Traffic Type', validation: { required: true }, + select: function(args) { + args.response.success({ + data: [ + { id: 'GUEST', description: 'Guest' } + ] + }); + } + }, + + guestIpType: { + label: 'Guest Type', + select: function(args) { + args.response.success({ + data: [ + { id: 'Isolated', description: 'Isolated' }, + { id: 'Shared', description: 'Shared' } + ] + }); + } + }, + + availability: { + label: 'Availability', + select: function(args) { + args.response.success({ + data: [ + { id: 'Optional', description: 'Optional' }, + { id: 'Required', description: 'Required' }, + { id: 'Unavailable', description: 'Unavailable' } + ] + }); + } + }, + + serviceOfferingId: { + label: 'Service Offering', + select: function(args) { + $.ajax({ + url: createURL('listServiceOfferings&issystem=true'), + dataType: 'json', + async: true, + success: function(data) { + var serviceOfferings = data.listserviceofferingsresponse.serviceoffering; + + args.response.success({ + data: $.merge( + [{ + id: null, + description: 'None' + }], + $.map(serviceOfferings, function(elem) { + return { + id: elem.id, + description: elem.name + }; + }) + ) + }); + } + }); + } + }, + + specifyVlan: { label: 'Specify VLAN', isBoolean: true }, + + supportedServices: { + label: 'Supported Services', + + dynamic: function(args) { + $.ajax({ + url: createURL('listSupportedNetworkServices'), + dataType: 'json', + async: true, + success: function(data) { + var networkServices = data.listsupportednetworkservicesresponse.networkservice; + var fields = {}; + $(networkServices).each(function() { + var name = this.name; + var providers = this.provider; + + var id = { + isEnabled: 'service' + '.' + name + '.' + 'isEnabled', + capabilities: 'service' + '.' + name + '.' + 'capabilities', + provider: 'service' + '.' + name + '.' + 'provider' + }; + + fields[id.isEnabled] = { label: name, isBoolean: true }; + fields[id.provider] = { + label: name + ' Provider', + isHidden: true, + dependsOn: id.isEnabled, + select: function(args) { + args.response.success({ + data: $.map(providers, function(provider) { + return { + id: provider.name, + description: provider.name + }; + }) + }); + } + }; + }); + + args.response.success({ + fields: fields + }); + } + }); + } + }, + + tags: { label: 'Tags' } + } + }, + + messages: { + notification: function(args) { + return 'Added network offering'; + } } }, - //??? + enable: { label: 'Enable network offering', messages: { confirm: function(args) { return 'Are you sure you want to enable this network offering?'; }, - success: function(args) { - return 'This network offering is being enabled.'; - }, notification: function(args) { return 'Enabling network offering'; - }, - complete: function(args) { - return 'Network offering has been enabled.'; } }, action: function(args) { @@ -1091,16 +1368,15 @@ async: true, success: function(json) { var item = json.updatenetworkofferingresponse.networkoffering; - args.response.success({ - actionFilter: networkOfferingActionfilter, - data:item - }); + args.response.success(); } }); }, notification: { poll: function(args) { - args.complete(); + args.complete({ + data: { state: 'Enabled' } + }); } } }, @@ -1128,16 +1404,42 @@ async: true, success: function(json) { var item = json.updatenetworkofferingresponse.networkoffering; - args.response.success({ - actionFilter: networkOfferingActionfilter, - data:item - }); + args.response.success(); } }); }, notification: { poll: function(args) { - args.complete(); + args.complete({ data: { state: 'Disabled' }}); + } + } + }, + + destroy: { + label: 'Remove network offering', + action: function(args) { + $.ajax({ + url: createURL('deleteNetworkOffering'), + data: { + id: args.context.networkOfferings[0].id + }, + success: function(json) { + args.response.success(); + } + }); + }, + messages: { + confirm: function() { return 'Are you sure you want to remove this network offering?'; }, + notification: function() { return 'Remove network offering'; } + }, + notification: { + poll: function(args) { + args.complete({ + data: { + state: 'Destroyed' + }, + actionFilter: networkOfferingActionfilter + }); } } } @@ -1239,7 +1541,12 @@ var networkOfferingActionfilter = function(args) { var jsonObj = args.context.item; - var allowedActions = []; + + if (jsonObj.state == 'Destroyed' || jsonObj.isdefault) { + return []; + } + + var allowedActions = ['destroy']; allowedActions.push("edit"); if(jsonObj.state == "Enabled") allowedActions.push("disable"); @@ -1249,3 +1556,4 @@ }; })(cloudStack, testData, jQuery); +