Updated Branches: refs/heads/ui-vm-affinity 5d235f690 -> df15ceac2
CLOUDSTACK-2074: cloudstack UI - Affinity - (1) populate listView by API call. (2) implement Add Affinity Group action. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/df15ceac Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/df15ceac Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/df15ceac Branch: refs/heads/ui-vm-affinity Commit: df15ceac265e2b088515c7b7c7bdb02f637f8fb9 Parents: 5d235f6 Author: Jessica Wang <jessica.w...@citrix.com> Authored: Wed Apr 17 16:27:20 2013 -0700 Committer: Jessica Wang <jessica.w...@citrix.com> Committed: Wed Apr 17 16:27:20 2013 -0700 ---------------------------------------------------------------------- ui/scripts/affinity.js | 139 +++++++++++++++++++++++++++++++----------- 1 files changed, 102 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/df15ceac/ui/scripts/affinity.js ---------------------------------------------------------------------- diff --git a/ui/scripts/affinity.js b/ui/scripts/affinity.js index 8bfd844..7a15533 100644 --- a/ui/scripts/affinity.js +++ b/ui/scripts/affinity.js @@ -21,25 +21,22 @@ id: 'affinityGroups', fields: { name: { label: 'label.name' }, - type: { label: 'label.type' } + description: { label: 'label.description' } }, dataProvider: function(args) { - args.response.success({ - data: [ - { id: 1, name: 'Affinity Group 1', type: 'Affinity' }, - { id: 2, name: 'Affinity Group 2', type: 'Anti-affinity' }, - { id: 3, name: 'Anti-affinity Group', type: 'Anti-affinity' } - ] - }); + $.ajax({ + url: createURL('listAffinityGroups'), + success: function(json) { + var items = json.listaffinitygroupsresponse.affinitygroup; + args.response.success({data: items}); + } + }); }, actions: { add: { label: 'label.add.affinity.group', - messages: { - confirm: function(args) { - return 'message.add.volume'; - }, + messages: { notification: function(args) { return 'label.add.affinity.group'; } @@ -52,40 +49,108 @@ label: 'label.name', validation: { required: true } }, + description: { + label: 'label.description' + }, type: { - label: 'label.availability.zone', + label: 'label.type', select: function(args) { - args.response.success({ - data: [ - { id: 'Affinity', description: 'Affinity' }, - { id: 'AntiAffinity', description: 'Anti-Affinity' } - ] - }); + $.ajax({ + url: createURL('listAffinityGroupTypes'), + success: function(json) { + var types = []; + var items = json.listaffinitygrouptypesresponse.affinityGroupType; + if(items != null) { + for(var i = 0; i < items.length; i++) { + types.push({id: items[i].type, description: items[i].type}); + } + } + args.response.success({data: types}) + } + }); } - }, - availabilityZone: { - label: 'label.availability.zone', - select: function(args) { - $.ajax({ - url: createURL("listZones&available=true"), - dataType: "json", - async: true, - success: function(json) { - var items = json.listzonesresponse.zone; - args.response.success({descriptionField: 'name', data: items}); - } - }); - } - }, + }, + domainid: { + label: 'Domain', + select: function(args) { + if(isAdmin() || isDomainAdmin()) { + $.ajax({ + url: createURL('listDomains'), + data: { + listAll: true, + details: 'min' + }, + success: function(json) { + var array1 = [{id: '', description: ''}]; + var domains = json.listdomainsresponse.domain; + if(domains != null && domains.length > 0) { + for(var i = 0; i < domains.length; i++) { + array1.push({id: domains[i].id, description: domains[i].path}); + } + } + args.response.success({ + data: array1 + }); + } + }); + } + else { + args.response.success({ + data: null + }); + } + }, + isHidden: function(args) { + if(isAdmin() || isDomainAdmin()) + return false; + else + return true; + } + }, + account: { + label: 'Account', + isHidden: function(args) { + if(isAdmin() || isDomainAdmin()) + return false; + else + return true; + } + } } }, - action: function(args) { - args.response.success(); + action: function(args) { + var data = { + name: args.data.name, + type: args.data.type + }; + if(args.data.description != null && args.data.description.length > 0) + $.extend(data, {description: args.data.description}); + if(args.data.domainid != null && args.data.domainid.length > 0) + $.extend(data, { domainid: args.data.domainid }); + if(args.data.account != null && args.data.account.length > 0) + $.extend(data, { account: args.data.account }); + + $.ajax({ + url: createURL('createAffinityGroup'), + data: data, + success: function(json) { + var jid = json.createaffinitygroupresponse.jobid; + args.response.success( + {_custom: + {jobId: jid, + getUpdatedItem: function(json) { + return json.queryasyncjobresultresponse.jobresult.affinitygroup; + } + } + } + ); + } + }); }, notification: { - poll: function(args) { args.complete(); } + poll: pollAsyncJobResult } } },