You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/06/20 09:20:18 UTC

[45/50] [abbrv] git commit: updated refs/heads/master to 97f8c52

Secondary storage listView: Add image stores dummy section


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/0dd14b1c
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/0dd14b1c
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/0dd14b1c

Branch: refs/heads/master
Commit: 0dd14b1c6152700ff7f1f433eed6f3ce76cdfc61
Parents: 1eb3966
Author: Brian Federle <bf...@gmail.com>
Authored: Wed Jun 19 12:24:36 2013 -0700
Committer: Brian Federle <bf...@gmail.com>
Committed: Wed Jun 19 12:24:36 2013 -0700

----------------------------------------------------------------------
 ui/scripts/system.js | 1631 ++++++++++++++++++++++++++++++---------------
 1 file changed, 1097 insertions(+), 534 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0dd14b1c/ui/scripts/system.js
----------------------------------------------------------------------
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index a3db63a..0d5e212 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -6517,51 +6517,55 @@
               return listView;
             },
             secondaryStorage: function() {
-              var listView = $.extend(true, {}, cloudStack.sections.system.subsections['secondary-storage'].listView, {
-                dataProvider: function (args) {
-                  var searchByArgs = args.filterBy.search.value.length ?
-                    '&name=' + args.filterBy.search.value : '';
+              var listView = $.extend(
+                true, {},
+                cloudStack.sections.system.subsections['secondary-storage'].sections.secondaryStorage, {
+                  listView: {
+                    dataProvider: function (args) {
+                      var searchByArgs = args.filterBy.search.value.length ?
+                        '&name=' + args.filterBy.search.value : '';
 
-                  var data = { 
-                    type: 'SecondaryStorage', 
-                    page: args.page, 
-                    pageSize: pageSize, 
-                    listAll: true 
-                  };                  
+                      var data = {
+                        type: 'SecondaryStorage',
+                        page: args.page,
+                        pageSize: pageSize,
+                        listAll: true
+                      };
 
-                  $.ajax({
-                    url: createURL('listImageStores' + searchByArgs),
-                    data: data,
-                    success: function (json) {
-                      args.response.success({ data: json.listimagestoreresponse.imagestore });
+                      $.ajax({
+                        url: createURL('listImageStores' + searchByArgs),
+                        data: data,
+                        success: function (json) {
+                          args.response.success({ data: json.listimagestoreresponse.imagestore });
+                        },
+                        error: function (json) {
+                          args.response.error(parseXMLHttpResponse(json));
+                        }
+                      });
                     },
-                    error: function (json) {
-                      args.response.error(parseXMLHttpResponse(json));
-                    }
-                  });
-                },
-
-                detailView: {
-                  updateContext: function (args) {
-                    var zone;
+                    detailView: {
+                      updateContext: function (args) {
+                        var zone;
 
-                    $.ajax({
-                      url: createURL('listZones'),
-                      data: { id: args.context.secondarystorages[0].zoneid },
-                      async: false,
-                      success: function (json) {
-                        zone = json.listzonesresponse.zone[0];
-                      }
-                    });
+                        $.ajax({
+                          url: createURL('listZones'),
+                          data: { id: args.context.secondarystorages[0].zoneid },
+                          async: false,
+                          success: function (json) {
+                            zone = json.listzonesresponse.zone[0];
+                          }
+                        });
 
-                    selectedZoneObj = zone;
+                        selectedZoneObj = zone;
 
-                    return {
-                      zones: [zone]
-                    };
+                        return {
+                          zones: [zone]
+                        };
+                      }
+                    }
                   }
                 }
-              });
+              );
 
               return listView;
             },
@@ -12356,549 +12360,1108 @@
       'secondary-storage': {
         title: 'label.secondary.storage',
         id: 'secondarystorages',
-        listView: {
-          id: 'secondarystorages',
-          section: 'seconary-storage',
-          fields: {
-            name: { label: 'label.name' },
-            url: { label: 'label.url' },
-            providername: { label: 'Provider' }      
-          },
+        sectionSelect: {
+          label: 'label.select.view'
+        },
+        sections: {
+          secondaryStorage: {
+            type: 'select',
+            title: 'label.secondary.storage',
+            listView: {
+              id: 'secondarystorages',
+              section: 'seconary-storage',
+              fields: {
+                name: { label: 'label.name' },
+                url: { label: 'label.url' },
+                providername: { label: 'Provider' }
+              },
 
-          dataProvider: function(args) {
-            var array1 = [];
-						if(args.filterBy != null) {
-							if(args.filterBy.search != null && args.filterBy.search.by != null && args.filterBy.search.value != null) {
-								switch(args.filterBy.search.by) {
-								case "name":
-									if(args.filterBy.search.value.length > 0)
-										array1.push("&keyword=" + args.filterBy.search.value);
-									break;
-								}
-							}
-						}
-            array1.push("&zoneid=" + args.context.zones[0].id);
+              dataProvider: function(args) {
+                var array1 = [];
+                if(args.filterBy != null) {
+                  if(args.filterBy.search != null && args.filterBy.search.by != null && args.filterBy.search.value != null) {
+                    switch(args.filterBy.search.by) {
+                      case "name":
+                        if(args.filterBy.search.value.length > 0)
+                          array1.push("&keyword=" + args.filterBy.search.value);
+                        break;
+                    }
+                  }
+                }
+                array1.push("&zoneid=" + args.context.zones[0].id);
 
-            $.ajax({
-              url: createURL("listImageStores&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
-              dataType: "json",
-              async: true,
-              success: function(json) {
-                var items = json.listimagestoreresponse.imagestore;
-                args.response.success({
-                  actionFilter: secondarystorageActionfilter,
-                  data:items
+                $.ajax({
+                  url: createURL("listImageStores&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
+                  dataType: "json",
+                  async: true,
+                  success: function(json) {
+                    var items = json.listimagestoreresponse.imagestore;
+                    args.response.success({
+                      actionFilter: secondarystorageActionfilter,
+                      data:items
+                    });
+                  }
                 });
-              }
-            });
-          },
+              },
 
-          actions: {
-            add: {
-              label: 'label.add.secondary.storage',
+              actions: {
+                add: {
+                  label: 'label.add.secondary.storage',
 
-              createForm: {
-                title: 'label.add.secondary.storage',
-                               
-                fields: {   
-                  name: { label: 'label.name' },
-                  provider: {
-                    label: 'Provider',
-                    select: function(args){                  
-                      $.ajax({
-                        url: createURL('listStorageProviders'),
-                        data: {
-                          type: 'image'
-                        },
-                        success: function(json){                  
-                          var objs = json.liststorageprovidersresponse.dataStoreProvider;                  
-                          var items = [];
-                          if(objs != null) {
-                            for(var i = 0; i < objs.length; i++){
-                              if(objs[i].name == 'NFS')
-                                items.unshift({id: objs[i].name, description: objs[i].name}); 
-                              else
-                                items.push({id: objs[i].name, description: objs[i].name}); 
-                            }                    
-                          }                  
-                          args.response.success({
-                            data: items            
-                          });
-                                            
-                          args.$select.change(function() {                           
-                            var $form = $(this).closest('form');
-                            if($(this).val() == "NFS") {
-                              //NFS
-                              $form.find('.form-item[rel=zoneid]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=nfsServer]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=path]').css('display', 'inline-block');
-
-                              //S3
-                              $form.find('.form-item[rel=accesskey]').hide();
-                              $form.find('.form-item[rel=secretkey]').hide();
-                              $form.find('.form-item[rel=bucket]').hide();
-                              $form.find('.form-item[rel=endpoint]').hide();
-                              $form.find('.form-item[rel=usehttps]').hide();
-                              $form.find('.form-item[rel=connectiontimeout]').hide();
-                              $form.find('.form-item[rel=maxerrorretry]').hide();
-                              $form.find('.form-item[rel=sockettimeout]').hide();
-                              
-                              $form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked');
-                              $form.find('.form-item[rel=createNfsCache]').hide();
-                              $form.find('.form-item[rel=nfsCacheZoneid]').hide();
-                              $form.find('.form-item[rel=nfsCacheNfsServer]').hide();
-                              $form.find('.form-item[rel=nfsCachePath]').hide();
-                              
-                              //Swift
-                              $form.find('.form-item[rel=url]').hide();
-                              $form.find('.form-item[rel=account]').hide();
-                              $form.find('.form-item[rel=username]').hide();
-                              $form.find('.form-item[rel=key]').hide();
+                  createForm: {
+                    title: 'label.add.secondary.storage',
+
+                    fields: {
+                      name: { label: 'label.name' },
+                      provider: {
+                        label: 'Provider',
+                        select: function(args){
+                          $.ajax({
+                            url: createURL('listStorageProviders'),
+                            data: {
+                              type: 'image'
+                            },
+                            success: function(json){
+                              var objs = json.liststorageprovidersresponse.dataStoreProvider;
+                              var items = [];
+                              if(objs != null) {
+                                for(var i = 0; i < objs.length; i++){
+                                  if(objs[i].name == 'NFS')
+                                    items.unshift({id: objs[i].name, description: objs[i].name});
+                                  else
+                                    items.push({id: objs[i].name, description: objs[i].name});
+                                }
+                              }
+                              args.response.success({
+                                data: items
+                              });
+
+                              args.$select.change(function() {
+                                var $form = $(this).closest('form');
+                                if($(this).val() == "NFS") {
+                                  //NFS
+                                  $form.find('.form-item[rel=zoneid]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=nfsServer]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=path]').css('display', 'inline-block');
+
+                                  //S3
+                                  $form.find('.form-item[rel=accesskey]').hide();
+                                  $form.find('.form-item[rel=secretkey]').hide();
+                                  $form.find('.form-item[rel=bucket]').hide();
+                                  $form.find('.form-item[rel=endpoint]').hide();
+                                  $form.find('.form-item[rel=usehttps]').hide();
+                                  $form.find('.form-item[rel=connectiontimeout]').hide();
+                                  $form.find('.form-item[rel=maxerrorretry]').hide();
+                                  $form.find('.form-item[rel=sockettimeout]').hide();
+
+                                  $form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked');
+                                  $form.find('.form-item[rel=createNfsCache]').hide();
+                                  $form.find('.form-item[rel=nfsCacheZoneid]').hide();
+                                  $form.find('.form-item[rel=nfsCacheNfsServer]').hide();
+                                  $form.find('.form-item[rel=nfsCachePath]').hide();
+
+                                  //Swift
+                                  $form.find('.form-item[rel=url]').hide();
+                                  $form.find('.form-item[rel=account]').hide();
+                                  $form.find('.form-item[rel=username]').hide();
+                                  $form.find('.form-item[rel=key]').hide();
+                                }
+                                else if ($(this).val() == "S3") {
+                                  //NFS
+                                  $form.find('.form-item[rel=zoneid]').hide();
+                                  $form.find('.form-item[rel=nfsServer]').hide();
+                                  $form.find('.form-item[rel=path]').hide();
+
+                                  //S3
+                                  $form.find('.form-item[rel=accesskey]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=secretkey]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=bucket]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=endpoint]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=usehttps]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=connectiontimeout]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=maxerrorretry]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=sockettimeout]').css('display', 'inline-block');
+
+                                  $form.find('.form-item[rel=createNfsCache]').find('input').attr('checked','checked');
+                                  $form.find('.form-item[rel=createNfsCache]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=nfsCacheZoneid]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=nfsCacheNfsServer]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=nfsCachePath]').css('display', 'inline-block');
+
+
+                                  //Swift
+                                  $form.find('.form-item[rel=url]').hide();
+                                  $form.find('.form-item[rel=account]').hide();
+                                  $form.find('.form-item[rel=username]').hide();
+                                  $form.find('.form-item[rel=key]').hide();
+                                }
+                                else if($(this).val() == "Swift") {
+                                  //NFS
+                                  $form.find('.form-item[rel=zoneid]').hide();
+                                  $form.find('.form-item[rel=nfsServer]').hide();
+                                  $form.find('.form-item[rel=path]').hide();
+
+                                  //S3
+                                  $form.find('.form-item[rel=accesskey]').hide();
+                                  $form.find('.form-item[rel=secretkey]').hide();
+                                  $form.find('.form-item[rel=bucket]').hide();
+                                  $form.find('.form-item[rel=endpoint]').hide();
+                                  $form.find('.form-item[rel=usehttps]').hide();
+                                  $form.find('.form-item[rel=connectiontimeout]').hide();
+                                  $form.find('.form-item[rel=maxerrorretry]').hide();
+                                  $form.find('.form-item[rel=sockettimeout]').hide();
+
+                                  $form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked');
+                                  $form.find('.form-item[rel=createNfsCache]').hide();
+                                  $form.find('.form-item[rel=nfsCacheZoneid]').hide();
+                                  $form.find('.form-item[rel=nfsCacheNfsServer]').hide();
+                                  $form.find('.form-item[rel=nfsCachePath]').hide();
+
+                                  //Swift
+                                  $form.find('.form-item[rel=url]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=account]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=username]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=key]').css('display', 'inline-block');
+                                }
+                              });
+
+                              args.$select.change();
                             }
-                            else if ($(this).val() == "S3") {
-                              //NFS
-                              $form.find('.form-item[rel=zoneid]').hide();
-                              $form.find('.form-item[rel=nfsServer]').hide();
-                              $form.find('.form-item[rel=path]').hide();
-
-                              //S3
-                              $form.find('.form-item[rel=accesskey]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=secretkey]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=bucket]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=endpoint]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=usehttps]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=connectiontimeout]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=maxerrorretry]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=sockettimeout]').css('display', 'inline-block');                              
-                             
-                              $form.find('.form-item[rel=createNfsCache]').find('input').attr('checked','checked');
-                              $form.find('.form-item[rel=createNfsCache]').css('display', 'inline-block');                         
-                              $form.find('.form-item[rel=nfsCacheZoneid]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=nfsCacheNfsServer]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=nfsCachePath]').css('display', 'inline-block');
-                          
+                          });
+                        }
+                      },
+
 
-                              //Swift
-                              $form.find('.form-item[rel=url]').hide();
-                              $form.find('.form-item[rel=account]').hide();
-                              $form.find('.form-item[rel=username]').hide();
-                              $form.find('.form-item[rel=key]').hide();
+                      //NFS (begin)
+                      zoneid: {
+                        label: 'Zone',
+                        docID: 'helpSecondaryStorageZone',
+                        validation: { required: true },
+                        select: function(args) {
+                          $.ajax({
+                            url: createURL('listZones'),
+                            data: {
+                              listAll: true
+                            },
+                            success: function(json) {
+                              var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone : [];
+
+                              if(zones != null){ //$.map(items, fn) - items can not be null
+                                args.response.success({
+                                  data: $.map(zones, function(zone) {
+                                    return {
+                                      id: zone.id,
+                                      description: zone.name
+                                    };
+                                  })
+                                });
+                              }
+                              else {
+                                args.response.success({data: null});
+                              }
                             }
-                            else if($(this).val() == "Swift") {
-                              //NFS
-                              $form.find('.form-item[rel=zoneid]').hide();
-                              $form.find('.form-item[rel=nfsServer]').hide();
-                              $form.find('.form-item[rel=path]').hide();
-
-                              //S3
-                              $form.find('.form-item[rel=accesskey]').hide();
-                              $form.find('.form-item[rel=secretkey]').hide();
-                              $form.find('.form-item[rel=bucket]').hide();
-                              $form.find('.form-item[rel=endpoint]').hide();
-                              $form.find('.form-item[rel=usehttps]').hide();
-                              $form.find('.form-item[rel=connectiontimeout]').hide();
-                              $form.find('.form-item[rel=maxerrorretry]').hide();
-                              $form.find('.form-item[rel=sockettimeout]').hide();
-                              
-                              $form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked');
-                              $form.find('.form-item[rel=createNfsCache]').hide();
-                              $form.find('.form-item[rel=nfsCacheZoneid]').hide();
-                              $form.find('.form-item[rel=nfsCacheNfsServer]').hide();
-                              $form.find('.form-item[rel=nfsCachePath]').hide();
-                              
-                              //Swift
-                              $form.find('.form-item[rel=url]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=account]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=username]').css('display', 'inline-block');
-                              $form.find('.form-item[rel=key]').css('display', 'inline-block');
-                            }                    
-                          });     
-                          
-                          args.$select.change();
+                          });
+                        }
+                      },
+                      nfsServer: {
+                        label: 'label.nfs.server',
+                        docID: 'helpSecondaryStorageNFSServer',
+                        validation: { required: true }
+                      },
+                      path: {
+                        label: 'label.path',
+                        docID: 'helpSecondaryStoragePath',
+                        validation: { required: true }
+                      },
+                      //NFS (end)
+
+
+                      //S3 (begin)
+                      accesskey: { label: 'label.s3.access_key', validation: { required: true } },
+                      secretkey: { label: 'label.s3.secret_key', validation: { required: true} },
+                      bucket: { label: 'label.s3.bucket', validation: { required: true} },
+                      endpoint: { label: 'label.s3.endpoint' },
+                      usehttps: {
+                        label: 'label.s3.use_https',
+                        isEditable: true,
+                        isBoolean: true,
+                        isChecked: true,
+                        converter:cloudStack.converters.toBooleanText
+                      },
+                      connectiontimeout: { label: 'label.s3.connection_timeout' },
+                      maxerrorretry: { label: 'label.s3.max_error_retry' },
+                      sockettimeout: { label: 'label.s3.socket_timeout' },
+
+                      createNfsCache: {
+                        label: 'Create NFS Cache Storage',
+                        isBoolean: true,
+                        isChecked: true
+                      },
+                      nfsCacheZoneid: {
+                        dependsOn: 'createNfsCache',
+                        label: 'Zone',
+                        validation: { required: true },
+                        select: function(args) {
+                          $.ajax({
+                            url: createURL('listZones'),
+                            data: {
+                              listAll: true
+                            },
+                            success: function(json) {
+                              var zones = json.listzonesresponse.zone;
+
+                              if(zones != null){ //$.map(items, fn) - items can not be null
+                                args.response.success({
+                                  data: $.map(zones, function(zone) {
+                                    return {
+                                      id: zone.id,
+                                      description: zone.name
+                                    };
+                                  })
+                                });
+                              }
+                              else {
+                                args.response.success({data: null});
+                              }
+                            }
+                          });
                         }
-                      });             
-                    }            
+                      },
+                      nfsCacheNfsServer: {
+                        dependsOn: 'createNfsCache',
+                        label: 'label.nfs.server',
+                        validation: { required: true }
+                      },
+                      nfsCachePath: {
+                        dependsOn: 'createNfsCache',
+                        label: 'label.path',
+                        validation: { required: true }
+                      },
+                      //S3 (end)
+
+
+                      //Swift (begin)
+                      url: { label: 'label.url', validation: { required: true } },
+                      account: { label: 'label.account' },
+                      username: { label: 'label.username' },
+                      key: { label: 'label.key' }
+                      //Swift (end)
+                    }
                   },
-                  
-                  
-                  //NFS (begin)
-                  zoneid: {
-                    label: 'Zone',
-                    docID: 'helpSecondaryStorageZone',
-                    validation: { required: true },
-                    select: function(args) {                      
+
+                  action: function(args) {
+                    var data = {};
+                    if(args.data.name != null && args.data.name.length > 0) {
+                      $.extend(data, {
+                        name: args.data.name
+                      });
+                    }
+
+                    if(args.data.provider == 'NFS') {
+                      var zoneid = args.data.zoneid;
+                      var nfs_server = args.data.nfsServer;
+                      var path = args.data.path;
+                      var url = nfsURL(nfs_server, path);
+
+                      $.extend(data, {
+                        provider: args.data.provider,
+                        zoneid: zoneid,
+                        url: url
+                      });
+
                       $.ajax({
-                        url: createURL('listZones'),
-                        data: { 
-                          listAll: true 
-                        },
+                        url: createURL('addImageStore'),
+                        data: data,
                         success: function(json) {
-                          var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone : [];
-
-                          if(zones != null){ //$.map(items, fn) - items can not be null
-                            args.response.success({
-                              data: $.map(zones, function(zone) {
-                                return {
-                                  id: zone.id,
-                                  description: zone.name
-                                };
-                              })
-                            });
-                          }
-                          else {
-                            args.response.success({data: null});
-                          }                          
+                          var item = json.addimagestoreresponse.secondarystorage;
+                          args.response.success({
+                            data:item
+                          });
+                        },
+                        error: function(XMLHttpResponse) {
+                          var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
+                          args.response.error(errorMsg);
                         }
                       });
                     }
-                  },
-                  nfsServer: {
-                    label: 'label.nfs.server',
-                    docID: 'helpSecondaryStorageNFSServer',
-                    validation: { required: true }
-                  },
-                  path: {
-                    label: 'label.path',
-                    docID: 'helpSecondaryStoragePath',
-                    validation: { required: true }
-                  },
-                  //NFS (end)
-                  
-                  
-                  //S3 (begin)
-                  accesskey: { label: 'label.s3.access_key', validation: { required: true } },
-                  secretkey: { label: 'label.s3.secret_key', validation: { required: true} },
-                  bucket: { label: 'label.s3.bucket', validation: { required: true} },
-                  endpoint: { label: 'label.s3.endpoint' },
-                  usehttps: { 
-                    label: 'label.s3.use_https', 
-                    isEditable: true,
-                    isBoolean: true,
-                    isChecked: true,
-                    converter:cloudStack.converters.toBooleanText 
-                  },
-                  connectiontimeout: { label: 'label.s3.connection_timeout' },
-                  maxerrorretry: { label: 'label.s3.max_error_retry' },
-                  sockettimeout: { label: 'label.s3.socket_timeout' },
-                  
-                  createNfsCache: {
-                    label: 'Create NFS Cache Storage',
-                    isBoolean: true,                    
-                    isChecked: true                    
-                  },                  
-                  nfsCacheZoneid: {
-                    dependsOn: 'createNfsCache',
-                    label: 'Zone',                    
-                    validation: { required: true },
-                    select: function(args) {                      
+                    else if(args.data.provider == 'S3') {
+                      $.extend(data, {
+                        provider: args.data.provider,
+                        'details[0].key': 'accesskey',
+                        'details[0].value': args.data.accesskey,
+                        'details[1].key': 'secretkey',
+                        'details[1].value': args.data.secretkey,
+                        'details[2].key': 'bucket',
+                        'details[2].value': args.data.bucket,
+                        'details[3].key': 'usehttps',
+                        'details[3].value': (args.data.usehttps != null && args.data.usehttps == 'on' ? 'true' : 'false')
+                      });
+
+                      var index = 4;
+                      if(args.data.endpoint != null && args.data.endpoint.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'endpoint';
+                        data['details[' + index.toString() + '].value'] = args.data.endpoint;
+                        index++;
+                      }
+                      if(args.data.connectiontimeout != null && args.data.connectiontimeout.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'connectiontimeout';
+                        data['details[' + index.toString() + '].value'] = args.data.connectiontimeout;
+                        index++;
+                      }
+                      if(args.data.maxerrorretry != null && args.data.maxerrorretry.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'maxerrorretry';
+                        data['details[' + index.toString() + '].value'] = args.data.maxerrorretry;
+                        index++;
+                      }
+                      if(args.data.sockettimeout != null && args.data.sockettimeout.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'sockettimeout';
+                        data['details[' + index.toString() + '].value'] = args.data.sockettimeout;
+                        index++;
+                      }
+
                       $.ajax({
-                        url: createURL('listZones'),
-                        data: { 
-                          listAll: true 
-                        },
+                        url: createURL('addImageStore'),
+                        data: data,
                         success: function(json) {
-                          var zones = json.listzonesresponse.zone;
-
-                          if(zones != null){ //$.map(items, fn) - items can not be null
-                            args.response.success({
-                              data: $.map(zones, function(zone) {
-                                return {
-                                  id: zone.id,
-                                  description: zone.name
-                                };
-                              })
-                            });
-                          }
-                          else {
-                            args.response.success({data: null});
-                          }                          
+                          havingS3 = true;
+                          var item = json.addimagestoreresponse.secondarystorage;
+                          args.response.success({
+                            data:item
+                          });
+                        },
+                        error: function(json) {
+                          args.response.error(parseXMLHttpResponse(json));
                         }
                       });
-                    }
-                  },
-                  nfsCacheNfsServer: {
-                    dependsOn: 'createNfsCache',
-                    label: 'label.nfs.server',                    
-                    validation: { required: true }
-                  },
-                  nfsCachePath: {
-                    dependsOn: 'createNfsCache',
-                    label: 'label.path',                    
-                    validation: { required: true }
-                  },                  
-                  //S3 (end)
-                  
-                  
-                  //Swift (begin)
-                  url: { label: 'label.url', validation: { required: true } },
-                  account: { label: 'label.account' },
-                  username: { label: 'label.username' },
-                  key: { label: 'label.key' }
-                  //Swift (end)          
-                }
-              },
 
-              action: function(args) {
-                var data = {};
-                if(args.data.name != null && args.data.name.length > 0) {
-                  $.extend(data, {
-                    name: args.data.name
-                  });
-                }
-                
-                if(args.data.provider == 'NFS') {
-                  var zoneid = args.data.zoneid;
-                  var nfs_server = args.data.nfsServer;
-                  var path = args.data.path;
-                  var url = nfsURL(nfs_server, path);
-                  
-                  $.extend(data, {
-                    provider: args.data.provider,
-                    zoneid: zoneid,
-                    url: url                    
-                  });                                    
-                    
-                  $.ajax({
-                    url: createURL('addImageStore'),
-                    data: data,
-                    success: function(json) {
-                      var item = json.addimagestoreresponse.secondarystorage;
-                      args.response.success({
-                        data:item
+                      if(args.data.createNfsCache == 'on') {
+                        var zoneid = args.data.nfsCacheZoneid;
+                        var nfs_server = args.data.nfsCacheNfsServer;
+                        var path = args.data.nfsCachePath;
+                        var url = nfsURL(nfs_server, path);
+
+                        var nfsCacheData = {
+                          provider: 'NFS',
+                          zoneid: zoneid,
+                          url: url
+                        };
+
+                        $.ajax({
+                          url: createURL('createCacheStore'),
+                          data: nfsCacheData,
+                          success: function(json) {
+                            //do nothing
+                          },
+                          error: function(json) {
+                            args.response.error(parseXMLHttpResponse(json));
+                          }
+                        });
+                      }
+                    }
+                    else if(args.data.provider == 'Swift') {
+                      $.extend(data, {
+                        provider: args.data.provider,
+                        url: args.data.url
+                      });
+
+                      var index = 0;
+                      if(args.data.account != null && args.data.account.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'account';
+                        data['details[' + index.toString() + '].value'] = args.data.account;
+                        index++;
+                      }
+                      if(args.data.username != null && args.data.username.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'username';
+                        data['details[' + index.toString() + '].value'] = args.data.username;
+                        index++;
+                      }
+                      if(args.data.key != null && args.data.key.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'key';
+                        data['details[' + index.toString() + '].value'] = args.data.key;
+                        index++;
+                      }
+                      $.ajax({
+                        url: createURL('addImageStore'),
+                        data: data,
+                        success: function(json) {
+                          havingSwift = true;
+                          var item = json.addimagestoreresponse.secondarystorage;
+                          args.response.success({
+                            data:item
+                          });
+                        },
+                        error: function(json) {
+                          args.response.error(parseXMLHttpResponse(json));
+                        }
                       });
-                    },
-                    error: function(XMLHttpResponse) {
-                      var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
-                      args.response.error(errorMsg);
                     }
-                  });
-                }
-                else if(args.data.provider == 'S3') {                  
-                  $.extend(data, {
-                    provider: args.data.provider,                                           
-                    'details[0].key': 'accesskey',
-                    'details[0].value': args.data.accesskey,                                            
-                    'details[1].key': 'secretkey',
-                    'details[1].value': args.data.secretkey,                                            
-                    'details[2].key': 'bucket',
-                    'details[2].value': args.data.bucket,
-                    'details[3].key': 'usehttps',
-                    'details[3].value': (args.data.usehttps != null && args.data.usehttps == 'on' ? 'true' : 'false')
-                  });
-                                              
-                  var index = 4;
-                  if(args.data.endpoint != null && args.data.endpoint.length > 0){
-                    data['details[' + index.toString() + '].key'] = 'endpoint';
-                    data['details[' + index.toString() + '].value'] = args.data.endpoint;                    
-                    index++;
-                  }
-                  if(args.data.connectiontimeout != null && args.data.connectiontimeout.length > 0){
-                    data['details[' + index.toString() + '].key'] = 'connectiontimeout';
-                    data['details[' + index.toString() + '].value'] = args.data.connectiontimeout;                        
-                    index++;
-                  }
-                  if(args.data.maxerrorretry != null && args.data.maxerrorretry.length > 0){
-                    data['details[' + index.toString() + '].key'] = 'maxerrorretry';
-                    data['details[' + index.toString() + '].value'] = args.data.maxerrorretry;   
-                    index++;
-                  }
-                  if(args.data.sockettimeout != null && args.data.sockettimeout.length > 0){
-                    data['details[' + index.toString() + '].key'] = 'sockettimeout';
-                    data['details[' + index.toString() + '].value'] = args.data.sockettimeout;   
-                    index++;
-                  }
-                  
-                  $.ajax({
-                    url: createURL('addImageStore'),
-                    data: data,
-                    success: function(json) {
-                      havingS3 = true;
-                      var item = json.addimagestoreresponse.secondarystorage;
-                      args.response.success({
-                        data:item
+                  },
+
+                  notification: {
+                    poll: function(args) {
+                      args.complete({
+                        actionFilter: secondarystorageActionfilter
                       });
-                    },
-                    error: function(json) {
-                      args.response.error(parseXMLHttpResponse(json));
                     }
-                  });
-                              
-                  if(args.data.createNfsCache == 'on') {
-                    var zoneid = args.data.nfsCacheZoneid;
-                    var nfs_server = args.data.nfsCacheNfsServer;
-                    var path = args.data.nfsCachePath;
-                    var url = nfsURL(nfs_server, path);
-                    
-                    var nfsCacheData = {
-                      provider: 'NFS',
-                      zoneid: zoneid,
-                      url: url                    
-                    };        
-                    
-                    $.ajax({
-                      url: createURL('createCacheStore'),
-                      data: nfsCacheData,
-                      success: function(json) {
-                        //do nothing                        
+                  },
+
+                  messages: {
+                    notification: function(args) {
+                      return 'label.add.secondary.storage';
+                    }
+                  }
+                }
+              },
+
+              detailView: {
+                name: 'Secondary storage details',
+                isMaximized: true,
+                actions: {
+                  remove: {
+                    label: 'label.action.delete.secondary.storage' ,
+                    messages: {
+                      confirm: function(args) {
+                        return 'message.action.delete.secondary.storage';
                       },
-                      error: function(json) {
-                        args.response.error(parseXMLHttpResponse(json));
+                      notification: function(args) {
+                        return 'label.action.delete.secondary.storage';
                       }
-                    }); 
-                  }   
-                }
-                else if(args.data.provider == 'Swift') {
-                  $.extend(data, {
-                    provider: args.data.provider,
-                    url: args.data.url
-                  });
-                                               
-                  var index = 0;
-                  if(args.data.account != null && args.data.account.length > 0){
-                    data['details[' + index.toString() + '].key'] = 'account';
-                    data['details[' + index.toString() + '].value'] = args.data.account;                    
-                    index++;
-                  }
-                  if(args.data.username != null && args.data.username.length > 0){
-                    data['details[' + index.toString() + '].key'] = 'username';
-                    data['details[' + index.toString() + '].value'] = args.data.username;                    
-                    index++;
-                  }
-                  if(args.data.key != null && args.data.key.length > 0){
-                    data['details[' + index.toString() + '].key'] = 'key';
-                    data['details[' + index.toString() + '].value'] = args.data.key;                    
-                    index++;
-                  }                 
-                  $.ajax({
-                    url: createURL('addImageStore'),
-                    data: data,
-                    success: function(json) {
-                      havingSwift = true;
-                      var item = json.addimagestoreresponse.secondarystorage;
-                      args.response.success({
-                        data:item
+                    },
+                    action: function(args) {
+                      $.ajax({
+                        url: createURL("deleteImageStore&id=" + args.context.secondarystorages[0].id),
+                        dataType: "json",
+                        async: true,
+                        success: function(json) {
+                          args.response.success();
+                        }
                       });
                     },
-                    error: function(json) {
-                      args.response.error(parseXMLHttpResponse(json));
+                    notification: {
+                      poll: function(args) { args.complete({ data: { resourcestate: 'Destroyed' } }); }
                     }
-                  });
-                }                 
-              },
+                  }
 
-              notification: {
-                poll: function(args) {
-                  args.complete({
-                    actionFilter: secondarystorageActionfilter
-                  });
-                }
-              },
+                },
+                tabs: {
+                  details: {
+                    title: 'label.details',
+                    fields: [
+                      {
+                        name: { label: 'label.name' }
+                      },
+                      {
+                        url: { label: 'label.url' },
+                        providername: { label: 'Provider' },
+                        scope: { label: 'label.scope' },
+                        zonename: { label: 'label.zone' },
+                        details: {
+                          label: 'label.details',
+                          converter: function(array1) {
+                            var string1 = '';
+                            if(array1 != null) {
+                              for(var i = 0; i < array1.length; i++) {
+                                if(i > 0)
+                                  string1 += ', ';
+
+                                string1 += array1[i].name + ': ' + array1[i].value;
+                              }
+                            }
+                            return string1;
+                          }
+                        },
+                        id: { label: 'label.id' }
+                      }
+                    ],
 
-              messages: {
-                notification: function(args) {
-                  return 'label.add.secondary.storage';
+                    dataProvider: function(args) {
+                      $.ajax({
+                        url: createURL("listImageStores&id=" + args.context.secondarystorages[0].id),
+                        dataType: "json",
+                        async: true,
+                        success: function(json) {
+                          var item = json.listimagestoreresponse.imagestore[0];
+                          args.response.success({
+                            actionFilter: secondarystorageActionfilter,
+                            data:item
+                          });
+                        }
+                      });
+                    }
+                  }
+
+                  // Granular settings for storage pool for secondary storage is not required
+                  /*  settings: {
+                   title: 'label.menu.global.settings',
+                   custom: cloudStack.uiCustom.granularSettings({
+                   dataProvider: function(args) {
+                   args.response.success({
+                   data: [
+                   { name: 'config.param.1', value: 1 },
+                   { name: 'config.param.2', value: 2 }
+                   ]
+                   });
+                   },
+                   actions: {
+                   edit: function(args) {
+                   // call updateStorageLevelParameters
+                   args.response.success();
+                   }
+                   }
+                   })
+                   } */
                 }
               }
             }
           },
+          imageStores: {
+            type: 'select',
+            title: 'Image stores',
+            listView: {
+              id: 'secondarystorages',
+              section: 'seconary-storage',
+              fields: {
+                name: { label: 'label.name' },
+                url: { label: 'label.url' },
+                providername: { label: 'Provider' }
+              },
 
-          detailView: {
-            name: 'Secondary storage details',
-            isMaximized: true,
-            actions: {
-              remove: {
-                label: 'label.action.delete.secondary.storage' ,
-                messages: {
-                  confirm: function(args) {
-                    return 'message.action.delete.secondary.storage';
-                  },
-                  notification: function(args) {
-                    return 'label.action.delete.secondary.storage';
-                  }
-                },
-                action: function(args) {
-                  $.ajax({
-                    url: createURL("deleteImageStore&id=" + args.context.secondarystorages[0].id),
-                    dataType: "json",
-                    async: true,
-                    success: function(json) {
-                      args.response.success();
+              dataProvider: function(args) {
+                var array1 = [];
+                if(args.filterBy != null) {
+                  if(args.filterBy.search != null && args.filterBy.search.by != null && args.filterBy.search.value != null) {
+                    switch(args.filterBy.search.by) {
+                      case "name":
+                        if(args.filterBy.search.value.length > 0)
+                          array1.push("&keyword=" + args.filterBy.search.value);
+                        break;
                     }
-                  });
-                },
-                notification: {
-                  poll: function(args) { args.complete({ data: { resourcestate: 'Destroyed' } }); }
+                  }
                 }
-              }
+                array1.push("&zoneid=" + args.context.zones[0].id);
 
-            },
-            tabs: {
-              details: {
-                title: 'label.details',
-                fields: [
-                  {
-                    name: { label: 'label.name' }
+                $.ajax({
+                  url: createURL("listImageStores&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
+                  dataType: "json",
+                  async: true,
+                  success: function(json) {
+                    var items = json.listimagestoreresponse.imagestore;
+                    args.response.success({
+                      actionFilter: secondarystorageActionfilter,
+                      data:items
+                    });
+                  }
+                });
+              },
+
+              actions: {
+                add: {
+                  label: 'label.add.secondary.storage',
+
+                  createForm: {
+                    title: 'label.add.secondary.storage',
+
+                    fields: {
+                      name: { label: 'label.name' },
+                      provider: {
+                        label: 'Provider',
+                        select: function(args){
+                          $.ajax({
+                            url: createURL('listStorageProviders'),
+                            data: {
+                              type: 'image'
+                            },
+                            success: function(json){
+                              var objs = json.liststorageprovidersresponse.dataStoreProvider;
+                              var items = [];
+                              if(objs != null) {
+                                for(var i = 0; i < objs.length; i++){
+                                  if(objs[i].name == 'NFS')
+                                    items.unshift({id: objs[i].name, description: objs[i].name});
+                                  else
+                                    items.push({id: objs[i].name, description: objs[i].name});
+                                }
+                              }
+                              args.response.success({
+                                data: items
+                              });
+
+                              args.$select.change(function() {
+                                var $form = $(this).closest('form');
+                                if($(this).val() == "NFS") {
+                                  //NFS
+                                  $form.find('.form-item[rel=zoneid]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=nfsServer]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=path]').css('display', 'inline-block');
+
+                                  //S3
+                                  $form.find('.form-item[rel=accesskey]').hide();
+                                  $form.find('.form-item[rel=secretkey]').hide();
+                                  $form.find('.form-item[rel=bucket]').hide();
+                                  $form.find('.form-item[rel=endpoint]').hide();
+                                  $form.find('.form-item[rel=usehttps]').hide();
+                                  $form.find('.form-item[rel=connectiontimeout]').hide();
+                                  $form.find('.form-item[rel=maxerrorretry]').hide();
+                                  $form.find('.form-item[rel=sockettimeout]').hide();
+
+                                  $form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked');
+                                  $form.find('.form-item[rel=createNfsCache]').hide();
+                                  $form.find('.form-item[rel=nfsCacheZoneid]').hide();
+                                  $form.find('.form-item[rel=nfsCacheNfsServer]').hide();
+                                  $form.find('.form-item[rel=nfsCachePath]').hide();
+
+                                  //Swift
+                                  $form.find('.form-item[rel=url]').hide();
+                                  $form.find('.form-item[rel=account]').hide();
+                                  $form.find('.form-item[rel=username]').hide();
+                                  $form.find('.form-item[rel=key]').hide();
+                                }
+                                else if ($(this).val() == "S3") {
+                                  //NFS
+                                  $form.find('.form-item[rel=zoneid]').hide();
+                                  $form.find('.form-item[rel=nfsServer]').hide();
+                                  $form.find('.form-item[rel=path]').hide();
+
+                                  //S3
+                                  $form.find('.form-item[rel=accesskey]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=secretkey]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=bucket]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=endpoint]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=usehttps]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=connectiontimeout]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=maxerrorretry]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=sockettimeout]').css('display', 'inline-block');
+
+                                  $form.find('.form-item[rel=createNfsCache]').find('input').attr('checked','checked');
+                                  $form.find('.form-item[rel=createNfsCache]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=nfsCacheZoneid]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=nfsCacheNfsServer]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=nfsCachePath]').css('display', 'inline-block');
+
+
+                                  //Swift
+                                  $form.find('.form-item[rel=url]').hide();
+                                  $form.find('.form-item[rel=account]').hide();
+                                  $form.find('.form-item[rel=username]').hide();
+                                  $form.find('.form-item[rel=key]').hide();
+                                }
+                                else if($(this).val() == "Swift") {
+                                  //NFS
+                                  $form.find('.form-item[rel=zoneid]').hide();
+                                  $form.find('.form-item[rel=nfsServer]').hide();
+                                  $form.find('.form-item[rel=path]').hide();
+
+                                  //S3
+                                  $form.find('.form-item[rel=accesskey]').hide();
+                                  $form.find('.form-item[rel=secretkey]').hide();
+                                  $form.find('.form-item[rel=bucket]').hide();
+                                  $form.find('.form-item[rel=endpoint]').hide();
+                                  $form.find('.form-item[rel=usehttps]').hide();
+                                  $form.find('.form-item[rel=connectiontimeout]').hide();
+                                  $form.find('.form-item[rel=maxerrorretry]').hide();
+                                  $form.find('.form-item[rel=sockettimeout]').hide();
+
+                                  $form.find('.form-item[rel=createNfsCache]').find('input').removeAttr('checked');
+                                  $form.find('.form-item[rel=createNfsCache]').hide();
+                                  $form.find('.form-item[rel=nfsCacheZoneid]').hide();
+                                  $form.find('.form-item[rel=nfsCacheNfsServer]').hide();
+                                  $form.find('.form-item[rel=nfsCachePath]').hide();
+
+                                  //Swift
+                                  $form.find('.form-item[rel=url]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=account]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=username]').css('display', 'inline-block');
+                                  $form.find('.form-item[rel=key]').css('display', 'inline-block');
+                                }
+                              });
+
+                              args.$select.change();
+                            }
+                          });
+                        }
+                      },
+
+
+                      //NFS (begin)
+                      zoneid: {
+                        label: 'Zone',
+                        docID: 'helpSecondaryStorageZone',
+                        validation: { required: true },
+                        select: function(args) {
+                          $.ajax({
+                            url: createURL('listZones'),
+                            data: {
+                              listAll: true
+                            },
+                            success: function(json) {
+                              var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone : [];
+
+                              if(zones != null){ //$.map(items, fn) - items can not be null
+                                args.response.success({
+                                  data: $.map(zones, function(zone) {
+                                    return {
+                                      id: zone.id,
+                                      description: zone.name
+                                    };
+                                  })
+                                });
+                              }
+                              else {
+                                args.response.success({data: null});
+                              }
+                            }
+                          });
+                        }
+                      },
+                      nfsServer: {
+                        label: 'label.nfs.server',
+                        docID: 'helpSecondaryStorageNFSServer',
+                        validation: { required: true }
+                      },
+                      path: {
+                        label: 'label.path',
+                        docID: 'helpSecondaryStoragePath',
+                        validation: { required: true }
+                      },
+                      //NFS (end)
+
+
+                      //S3 (begin)
+                      accesskey: { label: 'label.s3.access_key', validation: { required: true } },
+                      secretkey: { label: 'label.s3.secret_key', validation: { required: true} },
+                      bucket: { label: 'label.s3.bucket', validation: { required: true} },
+                      endpoint: { label: 'label.s3.endpoint' },
+                      usehttps: {
+                        label: 'label.s3.use_https',
+                        isEditable: true,
+                        isBoolean: true,
+                        isChecked: true,
+                        converter:cloudStack.converters.toBooleanText
+                      },
+                      connectiontimeout: { label: 'label.s3.connection_timeout' },
+                      maxerrorretry: { label: 'label.s3.max_error_retry' },
+                      sockettimeout: { label: 'label.s3.socket_timeout' },
+
+                      createNfsCache: {
+                        label: 'Create NFS Cache Storage',
+                        isBoolean: true,
+                        isChecked: true
+                      },
+                      nfsCacheZoneid: {
+                        dependsOn: 'createNfsCache',
+                        label: 'Zone',
+                        validation: { required: true },
+                        select: function(args) {
+                          $.ajax({
+                            url: createURL('listZones'),
+                            data: {
+                              listAll: true
+                            },
+                            success: function(json) {
+                              var zones = json.listzonesresponse.zone;
+
+                              if(zones != null){ //$.map(items, fn) - items can not be null
+                                args.response.success({
+                                  data: $.map(zones, function(zone) {
+                                    return {
+                                      id: zone.id,
+                                      description: zone.name
+                                    };
+                                  })
+                                });
+                              }
+                              else {
+                                args.response.success({data: null});
+                              }
+                            }
+                          });
+                        }
+                      },
+                      nfsCacheNfsServer: {
+                        dependsOn: 'createNfsCache',
+                        label: 'label.nfs.server',
+                        validation: { required: true }
+                      },
+                      nfsCachePath: {
+                        dependsOn: 'createNfsCache',
+                        label: 'label.path',
+                        validation: { required: true }
+                      },
+                      //S3 (end)
+
+
+                      //Swift (begin)
+                      url: { label: 'label.url', validation: { required: true } },
+                      account: { label: 'label.account' },
+                      username: { label: 'label.username' },
+                      key: { label: 'label.key' }
+                      //Swift (end)
+                    }
                   },
-                  {                    
-                    url: { label: 'label.url' },
-                    providername: { label: 'Provider' },   
-                    scope: { label: 'label.scope' },
-                    zonename: { label: 'label.zone' },
-                    details: { 
-                      label: 'label.details',
-                      converter: function(array1) {                        
-                        var string1 = '';                        
-                        if(array1 != null) {
-                          for(var i = 0; i < array1.length; i++) {
-                            if(i > 0)
-                              string1 += ', ';
-                            
-                            string1 += array1[i].name + ': ' + array1[i].value;                           
+
+                  action: function(args) {
+                    var data = {};
+                    if(args.data.name != null && args.data.name.length > 0) {
+                      $.extend(data, {
+                        name: args.data.name
+                      });
+                    }
+
+                    if(args.data.provider == 'NFS') {
+                      var zoneid = args.data.zoneid;
+                      var nfs_server = args.data.nfsServer;
+                      var path = args.data.path;
+                      var url = nfsURL(nfs_server, path);
+
+                      $.extend(data, {
+                        provider: args.data.provider,
+                        zoneid: zoneid,
+                        url: url
+                      });
+
+                      $.ajax({
+                        url: createURL('addImageStore'),
+                        data: data,
+                        success: function(json) {
+                          var item = json.addimagestoreresponse.secondarystorage;
+                          args.response.success({
+                            data:item
+                          });
+                        },
+                        error: function(XMLHttpResponse) {
+                          var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
+                          args.response.error(errorMsg);
+                        }
+                      });
+                    }
+                    else if(args.data.provider == 'S3') {
+                      $.extend(data, {
+                        provider: args.data.provider,
+                        'details[0].key': 'accesskey',
+                        'details[0].value': args.data.accesskey,
+                        'details[1].key': 'secretkey',
+                        'details[1].value': args.data.secretkey,
+                        'details[2].key': 'bucket',
+                        'details[2].value': args.data.bucket,
+                        'details[3].key': 'usehttps',
+                        'details[3].value': (args.data.usehttps != null && args.data.usehttps == 'on' ? 'true' : 'false')
+                      });
+
+                      var index = 4;
+                      if(args.data.endpoint != null && args.data.endpoint.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'endpoint';
+                        data['details[' + index.toString() + '].value'] = args.data.endpoint;
+                        index++;
+                      }
+                      if(args.data.connectiontimeout != null && args.data.connectiontimeout.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'connectiontimeout';
+                        data['details[' + index.toString() + '].value'] = args.data.connectiontimeout;
+                        index++;
+                      }
+                      if(args.data.maxerrorretry != null && args.data.maxerrorretry.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'maxerrorretry';
+                        data['details[' + index.toString() + '].value'] = args.data.maxerrorretry;
+                        index++;
+                      }
+                      if(args.data.sockettimeout != null && args.data.sockettimeout.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'sockettimeout';
+                        data['details[' + index.toString() + '].value'] = args.data.sockettimeout;
+                        index++;
+                      }
+
+                      $.ajax({
+                        url: createURL('addImageStore'),
+                        data: data,
+                        success: function(json) {
+                          havingS3 = true;
+                          var item = json.addimagestoreresponse.secondarystorage;
+                          args.response.success({
+                            data:item
+                          });
+                        },
+                        error: function(json) {
+                          args.response.error(parseXMLHttpResponse(json));
+                        }
+                      });
+
+                      if(args.data.createNfsCache == 'on') {
+                        var zoneid = args.data.nfsCacheZoneid;
+                        var nfs_server = args.data.nfsCacheNfsServer;
+                        var path = args.data.nfsCachePath;
+                        var url = nfsURL(nfs_server, path);
+
+                        var nfsCacheData = {
+                          provider: 'NFS',
+                          zoneid: zoneid,
+                          url: url
+                        };
+
+                        $.ajax({
+                          url: createURL('createCacheStore'),
+                          data: nfsCacheData,
+                          success: function(json) {
+                            //do nothing
+                          },
+                          error: function(json) {
+                            args.response.error(parseXMLHttpResponse(json));
                           }
-                        }                        
-                        return string1;                        
+                        });
                       }
-                    },                    
-                    id: { label: 'label.id' }
-                  }
-                ],
+                    }
+                    else if(args.data.provider == 'Swift') {
+                      $.extend(data, {
+                        provider: args.data.provider,
+                        url: args.data.url
+                      });
 
-                dataProvider: function(args) {								  
-									$.ajax({
-										url: createURL("listImageStores&id=" + args.context.secondarystorages[0].id),
-										dataType: "json",
-										async: true,
-										success: function(json) {										  
-										  var item = json.listimagestoreresponse.imagestore[0];
-											args.response.success({
-												actionFilter: secondarystorageActionfilter,
-												data:item
-											});
-										}
-									});										
-                }
-              }
-                                             
-              // Granular settings for storage pool for secondary storage is not required
-            /*  settings: {
-                title: 'label.menu.global.settings',
-                custom: cloudStack.uiCustom.granularSettings({
-                  dataProvider: function(args) {
-                    args.response.success({
-                      data: [
-                        { name: 'config.param.1', value: 1 },
-                        { name: 'config.param.2', value: 2 }
-                      ]
-                    });
+                      var index = 0;
+                      if(args.data.account != null && args.data.account.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'account';
+                        data['details[' + index.toString() + '].value'] = args.data.account;
+                        index++;
+                      }
+                      if(args.data.username != null && args.data.username.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'username';
+                        data['details[' + index.toString() + '].value'] = args.data.username;
+                        index++;
+                      }
+                      if(args.data.key != null && args.data.key.length > 0){
+                        data['details[' + index.toString() + '].key'] = 'key';
+                        data['details[' + index.toString() + '].value'] = args.data.key;
+                        index++;
+                      }
+                      $.ajax({
+                        url: createURL('addImageStore'),
+                        data: data,
+                        success: function(json) {
+                          havingSwift = true;
+                          var item = json.addimagestoreresponse.secondarystorage;
+                          args.response.success({
+                            data:item
+                          });
+                        },
+                        error: function(json) {
+                          args.response.error(parseXMLHttpResponse(json));
+                        }
+                      });
+                    }
                   },
-                  actions: {
-                    edit: function(args) {
-                      // call updateStorageLevelParameters
-                      args.response.success();
+
+                  notification: {
+                    poll: function(args) {
+                      args.complete({
+                        actionFilter: secondarystorageActionfilter
+                      });
+                    }
+                  },
+
+                  messages: {
+                    notification: function(args) {
+                      return 'label.add.secondary.storage';
                     }
                   }
-                })
-              } */
+                }
+              },
+
+              detailView: {
+                name: 'Secondary storage details',
+                isMaximized: true,
+                actions: {
+                  remove: {
+                    label: 'label.action.delete.secondary.storage' ,
+                    messages: {
+                      confirm: function(args) {
+                        return 'message.action.delete.secondary.storage';
+                      },
+                      notification: function(args) {
+                        return 'label.action.delete.secondary.storage';
+                      }
+                    },
+                    action: function(args) {
+                      $.ajax({
+                        url: createURL("deleteImageStore&id=" + args.context.secondarystorages[0].id),
+                        dataType: "json",
+                        async: true,
+                        success: function(json) {
+                          args.response.success();
+                        }
+                      });
+                    },
+                    notification: {
+                      poll: function(args) { args.complete({ data: { resourcestate: 'Destroyed' } }); }
+                    }
+                  }
+
+                },
+                tabs: {
+                  details: {
+                    title: 'label.details',
+                    fields: [
+                      {
+                        name: { label: 'label.name' }
+                      },
+                      {
+                        url: { label: 'label.url' },
+                        providername: { label: 'Provider' },
+                        scope: { label: 'label.scope' },
+                        zonename: { label: 'label.zone' },
+                        details: {
+                          label: 'label.details',
+                          converter: function(array1) {
+                            var string1 = '';
+                            if(array1 != null) {
+                              for(var i = 0; i < array1.length; i++) {
+                                if(i > 0)
+                                  string1 += ', ';
+
+                                string1 += array1[i].name + ': ' + array1[i].value;
+                              }
+                            }
+                            return string1;
+                          }
+                        },
+                        id: { label: 'label.id' }
+                      }
+                    ],
+
+                    dataProvider: function(args) {
+                      $.ajax({
+                        url: createURL("listImageStores&id=" + args.context.secondarystorages[0].id),
+                        dataType: "json",
+                        async: true,
+                        success: function(json) {
+                          var item = json.listimagestoreresponse.imagestore[0];
+                          args.response.success({
+                            actionFilter: secondarystorageActionfilter,
+                            data:item
+                          });
+                        }
+                      });
+                    }
+                  }
+
+                  // Granular settings for storage pool for secondary storage is not required
+                  /*  settings: {
+                   title: 'label.menu.global.settings',
+                   custom: cloudStack.uiCustom.granularSettings({
+                   dataProvider: function(args) {
+                   args.response.success({
+                   data: [
+                   { name: 'config.param.1', value: 1 },
+                   { name: 'config.param.2', value: 2 }
+                   ]
+                   });
+                   },
+                   actions: {
+                   edit: function(args) {
+                   // call updateStorageLevelParameters
+                   args.response.success();
+                   }
+                   }
+                   })
+                   } */
+                }
+              }
             }
           }
         }