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
This commit is contained in:
Brian Federle 2011-12-08 15:42:45 -08:00
parent 04a2263e5e
commit 302541b5fb
1 changed files with 339 additions and 31 deletions

View File

@ -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);