You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ja...@apache.org on 2013/02/25 23:34:01 UTC

svn commit: r1449945 [2/3] - in /incubator/ambari/trunk: ./ ambari-web/app/ ambari-web/app/assets/data/wizard/deploy/5_hosts/ ambari-web/app/controllers/main/ ambari-web/app/controllers/main/admin/ ambari-web/app/controllers/main/admin/security/ ambari...

Added: incubator/ambari/trunk/ambari-web/app/routes/add_security.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/routes/add_security.js?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/routes/add_security.js (added)
+++ incubator/ambari/trunk/ambari-web/app/routes/add_security.js Mon Feb 25 22:34:00 2013
@@ -0,0 +1,129 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+module.exports = Em.Route.extend({
+  route: '/addSecurity',
+  App: require('app'),
+  enter: function (router) {
+    console.log('in /hosts/add:enter');
+    router.get('mainAdminSecurityController').setAddSecurityWizardStatus('RUNNING');
+
+    Ember.run.next(function () {
+      var mainAdminSecurityController = router.get('mainAdminSecurityController');
+      var addSecurityController = router.get('addSecurityController');
+      var currentStep = router.get('addSecurityController').get('currentStep');
+      App.router.get('updateController').set('isWorking', false);
+      App.ModalPopup.show({
+        classNames: ['full-width-modal'],
+        header: Em.I18n.t('admin.addSecurity.header'),
+        bodyClass: App.MainAdminSecurityAddMenuView.extend({
+          controllerBinding: 'App.router.addSecurityController'
+        }),
+        primary: Em.I18n.t('form.cancel'),
+        secondary: null,
+        showFooter: false,
+
+        onPrimary: function () {
+          this.hide();
+          App.router.get('updateController').set('isWorking', true);
+          router.transitionTo('adminSecurity.index');
+        },
+        onClose: function () {
+          this.hide();
+          App.router.get('updateController').set('isWorking', true);
+          mainAdminSecurityController.setAddSecurityWizardStatus(null);
+          router.get('addSecurityController').setCurrentStep(1);
+          router.get('addSecurityController.content').saveCurrentStage(2);
+          router.transitionTo('adminSecurity.index');
+        },
+        didInsertElement: function () {
+          this.fitHeight();
+        }
+      });
+      App.router.transitionTo('step' + currentStep);
+    });
+
+  },
+
+  step1: Em.Route.extend({
+    route: '/start',
+    connectOutlets: function (router) {
+      console.log('in addSecurity.step1:connectOutlets');
+      var controller = router.get('addSecurityController');
+      controller.dataLoading().done(function () {
+        controller.setCurrentStep('1');
+        controller.loadAllPriorSteps();
+        controller.connectOutlet('mainAdminSecurityAddStep1', controller.get('content'));
+      })
+    },
+
+    next: function (router) {
+      var addSecurityController = router.get('addSecurityController');
+      addSecurityController.get('content').set('serviceConfigProperties', null);
+      router.transitionTo('step2');
+    }
+  }),
+
+  step2: Em.Route.extend({
+    route: '/configure',
+    connectOutlets: function (router) {
+      console.log('in addSecurity.step2:connectOutlets');
+      var controller = router.get('addSecurityController');
+      controller.dataLoading().done(function () {
+        controller.setCurrentStep('2');
+        controller.loadAllPriorSteps();
+        controller.connectOutlet('mainAdminSecurityAddStep2', controller.get('content'));
+      })
+    },
+    back: Em.Router.transitionTo('step1'),
+    next: function (router) {
+      var addSecurityController = router.get('addSecurityController');
+      var addSecurityStep2Controller = router.get('mainAdminSecurityAddStep2Controller');
+      addSecurityController.saveServiceConfigProperties(addSecurityStep2Controller);
+      addSecurityController.get('content').saveCurrentStage('2');
+      router.transitionTo('step3');
+    }
+  }),
+
+  step3: Em.Route.extend({
+    route: '/apply',
+    connectOutlets: function (router) {
+      console.log('in addSecurity.step3:connectOutlets');
+      var controller = router.get('addSecurityController');
+      controller.dataLoading().done(function () {
+        controller.setCurrentStep('3');
+        controller.loadAllPriorSteps();
+        controller.connectOutlet('mainAdminSecurityAddStep3', controller.get('content'));
+      })
+    },
+    back: Em.Router.transitionTo('step2'),
+    done: function (router, context) {
+      //Logic on completion of the wizard
+      //set stage to stage2 of step3
+      router.setAddSecurityWizardStatus(null);
+    }
+  }),
+
+  gotoStep1: Em.Router.transitionTo('step1'),
+
+  gotoStep2: Em.Router.transitionTo('step2'),
+
+  gotoStep3: Em.Router.transitionTo('step3')
+
+});
+

Modified: incubator/ambari/trunk/ambari-web/app/routes/main.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/routes/main.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/routes/main.js (original)
+++ incubator/ambari/trunk/ambari-web/app/routes/main.js Mon Feb 25 22:34:00 2013
@@ -17,8 +17,8 @@
  */
 
 module.exports = Em.Route.extend({
-  route:'/main',
-  enter:function (router) {
+  route: '/main',
+  enter: function (router) {
     console.log('in /main:enter');
     if (router.getAuthenticated()) {
       App.router.get('clusterController').loadClusterName(false);
@@ -30,107 +30,118 @@ module.exports = Em.Route.extend({
       });
     }
   },
-
-  index:Ember.Route.extend({
-    route:'/',
-    redirectsTo:'dashboard'
+  /*routePath: function(router,event) {
+   if (router.getAuthenticated()) {
+   App.router.get('clusterController').loadClusterName(false);
+   router.get('mainController').initialize();
+   // TODO: redirect to last known state
+   } else {
+   Ember.run.next(function () {
+   router.transitionTo('login');
+   });
+   }
+   }, */
+
+  index: Ember.Route.extend({
+    route: '/',
+    redirectsTo: 'dashboard'
   }),
 
-  test:Em.Route.extend({
-    route:'/test',
-    connectOutlets:function (router, context) {
+  test: Em.Route.extend({
+    route: '/test',
+    connectOutlets: function (router, context) {
       router.get('mainController').connectOutlet('mainTest');
     }
   }),
 
-  connectOutlets:function (router, context) {
+  connectOutlets: function (router, context) {
     router.get('applicationController').connectOutlet('main');
   },
 
-  charts:Em.Route.extend({
-    route:'/charts',
-    connectOutlets:function (router, context) {
+  charts: Em.Route.extend({
+    route: '/charts',
+    connectOutlets: function (router, context) {
       router.get('mainController').connectOutlet('mainCharts');
     },
-    enter:function (router) {
+    enter: function (router) {
       Em.run.next(function () {
         router.transitionTo('heatmap');
       });
     },
-    index:Ember.Route.extend({
-      route:'/',
-      redirectsTo:'heatmap'
-    }),
-    heatmap:Em.Route.extend({
-      route:'/heatmap',
-      connectOutlets:function (router, context) {
+    index: Ember.Route.extend({
+      route: '/',
+      redirectsTo: 'heatmap'
+    }),
+    heatmap: Em.Route.extend({
+      route: '/heatmap',
+      connectOutlets: function (router, context) {
         router.get('mainChartsController').connectOutlet('mainChartsHeatmap');
       }
     }),
-    horizon_chart:Em.Route.extend({
-      route:'/horizon_chart',
-      connectOutlets:function (router, context) {
+    horizon_chart: Em.Route.extend({
+      route: '/horizon_chart',
+      connectOutlets: function (router, context) {
         router.get('mainChartsController').connectOutlet('mainChartsHorizon');
       }
     }),
-    showChart:function (router, event) {
+    showChart: function (router, event) {
       var parent = event.view._parentView;
       parent.deactivateChildViews();
       event.view.set('active', "active");
       router.transitionTo(event.context);
     }
   }),
-  apps:Em.Route.extend({
-    route:'/apps',
-    connectOutlets:function (router) {
+  apps: Em.Route.extend({
+    route: '/apps',
+    connectOutlets: function (router) {
       //router.get('clusterController').loadRuns();
       router.get('mainAppsController').loadRuns();
       router.get('mainController').connectOutlet('mainApps');
     }
   }),
 
-  hosts:Em.Route.extend({
-    route:'/hosts',
-    index:Ember.Route.extend({
-      route:'/',
-      connectOutlets:function (router, context) {
+  hosts: Em.Route.extend({
+    route: '/hosts',
+    index: Ember.Route.extend({
+      route: '/',
+      connectOutlets: function (router, context) {
         router.get('mainController').connectOutlet('mainHost');
       }
     }),
 
-    hostDetails:Em.Route.extend({
-      route:'/:host_id',
-      connectOutlets:function (router, host) {
+    hostDetails: Em.Route.extend({
+      route: '/:host_id',
+      connectOutlets: function (router, host) {
         router.get('mainController').connectOutlet('mainHostDetails', host);
       },
 
-      index:Ember.Route.extend({
-        route:'/',
-        redirectsTo:'summary'
+      index: Ember.Route.extend({
+        route: '/',
+        redirectsTo: 'summary'
       }),
 
-      summary:Em.Route.extend({
-        route:'/summary',
-        connectOutlets:function (router, context) {
+      summary: Em.Route.extend({
+        route: '/summary',
+        connectOutlets: function (router, context) {
           router.get('mainHostDetailsController').connectOutlet('mainHostSummary');
         }
       }),
 
-      metrics:Em.Route.extend({
-        route:'/metrics',
-        connectOutlets:function (router, context) {
+      metrics: Em.Route.extend({
+        route: '/metrics',
+        connectOutlets: function (router, context) {
           router.get('mainHostDetailsController').connectOutlet('mainHostMetrics');
         }
       }),
 
-      audit:Em.Route.extend({
-        route:'/audit',
-        connectOutlets:function (router, context) {
+      audit: Em.Route.extend({
+        route: '/audit',
+        connectOutlets: function (router, context) {
           router.get('mainHostDetailsController').connectOutlet('mainHostAudit');
         }
       }),
 
-      hostNavigate:function (router, event) {
+      hostNavigate: function (router, event) {
         var parent = event.view._parentView;
         parent.deactivateChildViews();
         event.view.set('active', "active");
@@ -138,20 +149,20 @@ module.exports = Em.Route.extend({
       }
     }),
 
-    backToHostsList:function (router, event) {
+    backToHostsList: function (router, event) {
       router.transitionTo('hosts.index');
     },
 
-    showDetails:function (router, event) {
+    showDetails: function (router, event) {
       router.get('mainHostDetailsController').setBack(true);
       router.transitionTo('hostDetails.summary', event.context)
     },
 
-    addHost:function (router) {
-      if(App.clusterStatus){
+    addHost: function (router) {
+      if (App.clusterStatus) {
         App.clusterStatus.updateFromServer();
         var currentClusterStatus = App.clusterStatus.get('value');
-        if(currentClusterStatus && currentClusterStatus.clusterState=="ADD_HOSTS_COMPLETED_5"){
+        if (currentClusterStatus && currentClusterStatus.clusterState == "ADD_HOSTS_COMPLETED_5") {
           // The last time add hosts ran, it left the status
           // in this state. We need to clear any previous status
           // so that the hosts page starts from fresh.
@@ -163,133 +174,222 @@ module.exports = Em.Route.extend({
 
   }),
 
-  hostAdd:require('routes/add_host_routes'),
+  hostAdd: require('routes/add_host_routes'),
+
+  admin: Em.Route.extend({
+    route: '/admin',
+    enter: function (router, transition) {
+      var controller = router.get('mainAdminController');
+      if (!App.db.getUser().admin) {
+        Em.run.next(function () {
+          router.transitionTo('main.dashboard');
+        });
+      } else {
+        // Em.run.next(function () {
+        // router.transitionTo('admin' + controller.get('category').capitalize());
+        //});
+      }
+    },
 
-  admin:Em.Route.extend({
-    route:'/admin',
-    enter: function(){
-      if(!App.db.getUser().admin){
+    routePath: function (router, event) {
+      if (!App.db.getUser().admin) {
         Em.run.next(function () {
           App.router.transitionTo('main.dashboard');
         });
+      } else {
+        // var controller = router.get('mainAdminController');
+        //router.transitionTo('admin' + controller.get('category').capitalize());
       }
     },
-    connectOutlets:function (router, context) {
+    connectOutlets: function (router, context) {
       router.get('mainController').connectOutlet('mainAdmin');
     },
 
-    index:Ember.Route.extend({
-      route:'/',
-      redirectsTo:'adminUser'
+    index: Em.Route.extend({
+      /* enter: function(router, transition){
+       var controller = router.get('mainAdminController');
+       router.transitionTo('admin' + controller.get('category').capitalize());
+       }, */
+      route: '/',
+      redirectsTo: 'adminUser'
     }),
 
-    adminUser:Em.Route.extend({
-      route:'/user',
-      enter:function (router) {
+
+    adminUser: Em.Route.extend({
+      route: '/user',
+      index: Em.Route.extend({
+        route: '/',
+        redirectsTo: 'allUsers'
+      }),
+      enter: function (router) {
         router.set('mainAdminController.category', "user");
         Em.run.next(function () {
           router.transitionTo('allUsers');
         });
       },
-
+      routePath: function (router, event) {
+        router.set('mainAdminController.category', "user");
+        router.transitionTo('allUsers');
+        Em.run.next(function () {
+          router.transitionTo('allUsers');
+        });
+      },
       // events
-      gotoUsers:Em.Router.transitionTo("allUsers"),
-      gotoCreateUser:Em.Router.transitionTo("createUser"),
-      gotoEditUser:function (router, event) {
+      gotoUsers: Em.Router.transitionTo("allUsers"),
+      gotoCreateUser: Em.Router.transitionTo("createUser"),
+      gotoEditUser: function (router, event) {
         router.transitionTo("editUser", event.context)
       },
 
       // states
-      allUsers:Em.Route.extend({
-        route:'/',
-        connectOutlets:function (router) {
+      allUsers: Em.Route.extend({
+        route: '/allUsers',
+        // index: Ember.Route.extend({
+        //route: '/',
+        connectOutlets: function (router) {
           router.get('mainAdminController').connectOutlet('mainAdminUser');
         }
+        //})
       }),
 
-      createUser:Em.Route.extend({
-        route:'/create',
-        connectOutlets:function (router) {
+      createUser: Em.Route.extend({
+        route: '/create',
+        connectOutlets: function (router) {
           router.get('mainAdminController').connectOutlet('mainAdminUserCreate', {});
         }
       }),
 
-      editUser:Em.Route.extend({
-        route:'/edit/:user_id',
-        connectOutlets:function (router, user) {
+      editUser: Em.Route.extend({
+        route: '/edit/:user_id',
+        connectOutlets: function (router, user) {
           router.get('mainAdminController').connectOutlet('mainAdminUserEdit', user);
         }
       })
     }),
 
-    adminCluster:Em.Route.extend({
-      route:'/cluster',
-      connectOutlets:function (router) {
-        router.set('mainAdminController.category', "cluster");
-        router.get('mainAdminController').connectOutlet('mainAdminCluster');
-      }
-    }),
 
-    adminAuthentication:Em.Route.extend({
-      route:'/authentication',
-      connectOutlets:function (router) {
+    adminAuthentication: Em.Route.extend({
+      route: '/authentication',
+      connectOutlets: function (router, context) {
         router.set('mainAdminController.category', "authentication");
         router.get('mainAdminController').connectOutlet('mainAdminAuthentication');
       }
     }),
 
-    adminSecurity:Em.Route.extend({
-      route:'/security',
-      connectOutlets:function (router) {
+
+    adminSecurity: Em.Route.extend({
+      route: '/security',
+      enter: function (router) {
+        //alert("1.. I am in enter path");
         router.set('mainAdminController.category', "security");
-        router.get('mainAdminController').connectOutlet('mainAdminSecurity');
-      }
+        var controller = router.get('mainAdminSecurityController');
+        if (!(controller.getAddSecurityWizardStatus() === 'RUNNING')) {
+          Em.run.next(function () {
+            router.transitionTo('adminSecurity.index');
+          });
+        } else {
+          Em.run.next(function () {
+            router.transitionTo('adminAddSecurity');
+          });
+        }
+      },
+
+      index: Ember.Route.extend({
+        route: '/',
+        connectOutlets: function (router, context) {
+          var controller = router.get('mainAdminController');
+          controller.set('category', "security");
+          var securityStatus = controller.securityStatusLoading();
+          securityStatus.done(function () {
+            controller.connectOutlet('mainAdminSecurity');
+          });
+          securityStatus.fail(function () {
+            App.ModalPopup.show({
+              header: Em.I18n.translations['common.error'],
+              secondary: false,
+              onPrimary: function () {
+                this.hide();
+              },
+              bodyClass: Ember.View.extend({
+                template: Ember.Handlebars.compile(['<p>{{t admin.security.status.error}}</p>'])
+              })
+            });
+          });
+        }
+      }),
+
+      addSecurity: function (router, object) {
+        router.transitionTo('adminAddSecurity');
+      },
+
+      disableSecurity: Ember.Route.extend({
+        route: '/',
+        connectOutlets: function (router, context) {
+          router.get('mainAdminSecurityController').connectOutlet('mainAdminSecurityDisable');
+        }
+      }),
+
+      adminAddSecurity: require('routes/add_security')
     }),
 
-    adminAdvanced:Em.Route.extend({
-      route:'/advanced',
-      connectOutlets:function (router) {
+    adminCluster: Em.Route.extend({
+      route: '/cluster',
+      connectOutlets: function (router) {
+        router.set('mainAdminController.category', "cluster");
+        router.get('mainAdminController').connectOutlet('mainAdminCluster');
+      }
+    }),
+    adminAdvanced: Em.Route.extend({
+      route: '/advanced',
+      connectOutlets: function (router) {
         router.set('mainAdminController.category', "advanced");
         router.get('mainAdminController').connectOutlet('mainAdminAdvanced');
       }
     }),
 
-    adminAudit:Em.Route.extend({
-      route:'/audit',
-      connectOutlets:function (router) {
+    adminAudit: Em.Route.extend({
+      route: '/audit',
+      connectOutlets: function (router) {
         router.set('mainAdminController.category', "audit");
         router.get('mainAdminController').connectOutlet('mainAdminAudit');
       }
     }),
-    upgradeStack:function (router, event) {
-      if(!$(event.currentTarget).hasClass('inactive')){
+    upgradeStack: function (router, event) {
+      if (!$(event.currentTarget).hasClass('inactive')) {
         router.transitionTo('stackUpgrade');
       }
     },
 
-    adminNavigate:function (router, object) {
+
+    adminNavigate: function (router, object) {
       router.transitionTo('admin' + object.context.capitalize());
-    }
+    },
+
+    //events
+    goToAdminUser: Em.Router.transitionTo('adminUser'),
+    goToAdminSecurity: Em.Router.transitionTo('adminSecurity.index'),
+    goToAdminCluster: Em.Router.transitionTo('adminCluster')
+
   }),
-  stackUpgrade:require('routes/stack_upgrade'),
+  stackUpgrade: require('routes/stack_upgrade'),
 
-  dashboard:Em.Route.extend({
-    route:'/dashboard',
-    connectOutlets:function (router, context) {
+  dashboard: Em.Route.extend({
+    route: '/dashboard',
+    connectOutlets: function (router, context) {
       router.get('mainController').connectOutlet('mainDashboard');
     },
-    showDetails:function (router, event) {
+    showDetails: function (router, event) {
       router.get('mainHostDetailsController').setBack(true);
       router.transitionTo('hosts.hostDetails.summary', event.context);
     }
   }),
 
-  services:Em.Route.extend({
-    route:'/services',
-    index:Ember.Route.extend({
-      route:'/'
+  services: Em.Route.extend({
+    route: '/services',
+    index: Ember.Route.extend({
+      route: '/'
     }),
-    enter:function (router) {
+    enter: function (router) {
       Ember.run.next(function () {
         var service = router.get('mainServiceItemController.content');
         if (!service) {
@@ -298,72 +398,73 @@ module.exports = Em.Route.extend({
         router.transitionTo('service.summary', service);
       });
     },
-    connectOutlets:function (router, context) {
+    connectOutlets: function (router, context) {
       router.get('mainController').connectOutlet('mainService');
     },
-    service:Em.Route.extend({
-      route:'/:service_id',
-      connectOutlets:function (router, service) {
+    service: Em.Route.extend({
+      route: '/:service_id',
+      connectOutlets: function (router, service) {
         router.get('mainServiceController').connectOutlet('mainServiceItem', service);
         router.transitionTo('summary');
       },
-      index:Ember.Route.extend({
-        route:'/'
+      index: Ember.Route.extend({
+        route: '/'
       }),
-      summary:Em.Route.extend({
-        route:'/summary',
-        connectOutlets:function (router, context) {
+      summary: Em.Route.extend({
+        route: '/summary',
+        connectOutlets: function (router, context) {
           var item = router.get('mainServiceItemController.content');
           var viewName = 'mainServiceInfoSummary';
           router.get('mainServiceItemController').connectOutlet('mainServiceInfoSummary', item);
         }
       }),
-      metrics:Em.Route.extend({
-        route:'/metrics',
-        connectOutlets:function (router, context) {
+      metrics: Em.Route.extend({
+        route: '/metrics',
+        connectOutlets: function (router, context) {
           var item = router.get('mainServiceItemController.content');
           router.get('mainServiceItemController').connectOutlet('mainServiceInfoMetrics', item);
         }
       }),
-      configs:Em.Route.extend({
-        route:'/configs',
-        connectOutlets:function (router, context) {
+      configs: Em.Route.extend({
+        route: '/configs',
+        connectOutlets: function (router, context) {
           var item = router.get('mainServiceItemController.content');
           router.get('mainServiceItemController').connectOutlet('mainServiceInfoConfigs', item);
         }
       }),
-      audit:Em.Route.extend({
-        route:'/audit',
-        connectOutlets:function (router, context) {
+      audit: Em.Route.extend({
+        route: '/audit',
+        connectOutlets: function (router, context) {
           var item = router.get('mainServiceItemController.content');
           router.get('mainServiceItemController').connectOutlet('mainServiceInfoAudit', item);
         }
       }),
-      showInfo:function (router, event) {
+      showInfo: function (router, event) {
         var parent = event.view._parentView;
         parent.deactivateChildViews();
         event.view.set('active', "active");
         router.transitionTo(event.context);
       },
-      showDetails:function (router, event) {
+      showDetails: function (router, event) {
         router.get('mainHostDetailsController').setBack(true);
         router.transitionTo('hosts.hostDetails.summary', event.context);
       }
     }),
-    showService:Em.Router.transitionTo('service'),
-    addService:Em.Router.transitionTo('serviceAdd')
+    showService: Em.Router.transitionTo('service'),
+    addService: Em.Router.transitionTo('serviceAdd')
   }),
 
+
   serviceAdd:require('routes/add_service_routes'),
   reassignMaster:require('routes/reassign_master_routes'),
 
 
-  selectService:Em.Route.transitionTo('services.service'),
-  selectHost:function (router, event) {
+  selectService: Em.Route.transitionTo('services.service'),
+  selectHost: function (router, event) {
     router.get('mainHostDetailsController').setBack(false);
     router.transitionTo('hosts.hostDetails.index', event.context);
   },
-  filterHosts:function (router, component) {
+  filterHosts: function (router, component) {
     router.get('mainHostController').filterByComponent(component.context);
     router.transitionTo('hosts.index');
   }

Modified: incubator/ambari/trunk/ambari-web/app/styles/application.less
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/styles/application.less?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/styles/application.less (original)
+++ incubator/ambari/trunk/ambari-web/app/styles/application.less Mon Feb 25 22:34:00 2013
@@ -26,6 +26,7 @@
 html {
   overflow-y: scroll;
 }
+
 html, body {
   height: 100%;
 }
@@ -65,7 +66,7 @@ footer {
     .logo {
       float: left;
       padding-top: 2px;
-      img{
+      img {
         height: 32px;
       }
     }
@@ -87,7 +88,6 @@ footer {
       }
     }
 
-
   }
 
   .navbar .nav {
@@ -95,7 +95,7 @@ footer {
     overflow: hidden;
   }
 
-  .navbar-inner{
+  .navbar-inner {
     min-height: 40px;
   }
 
@@ -142,14 +142,14 @@ footer {
     width: 140px;
   }
 
-  li:first-child{
+  li:first-child {
     border-left: none;
-    a{
+    a {
       border-radius: 4px 0 0 4px;
     }
   }
 
-  .navbar-inner{
+  .navbar-inner {
     padding-left: 0;
   }
 
@@ -209,21 +209,23 @@ h1 {
 }
 
 .icon-caret-right {
-  min-width:8px;
+  min-width: 8px;
   padding-top: 2px;
 }
 
 .icon-caret-left {
-  min-width:8px;
+  min-width: 8px;
   padding-top: 2px;
 }
 
 .icon-remove {
   color: #FF4B4B;
 }
+
 .tooltip {
   z-index: 1050;
 }
+
 .tooltip-inner {
   text-align: left;
 }
@@ -245,7 +247,7 @@ h1 {
   margin: 0 -10px 20px 3px;
   border-top: 70px solid transparent;
   border-bottom: 70px solid transparent;
-  border-right:20px solid transparent;
+  border-right: 20px solid transparent;
 }
 
 .visibleArrow {
@@ -307,10 +309,10 @@ h1 {
     .advancedOptions {
       margin-top: 20px;
       margin-bottom: 30px;
-      label{
+      label {
         margin-bottom: 10px;
       }
-      label.disabled{
+      label.disabled {
         color: #ccc;
       }
     }
@@ -414,23 +416,22 @@ h1 {
 #host-log {
   .stderr, .stdout {
     background-color: #f0f0f0;
-    /* max-height: 300px;
-    overflow-y: auto; */
+  /* max-height: 300px;
+  overflow-y: auto; */
     border-radius: 4px;
     padding: 8px;
   }
 }
 
-
 #serviceConfig {
   margin-top: 20px;
   .spinner {
-    width:36px;
-    height:36px;
+    width: 36px;
+    height: 36px;
     background: url("/img/spinner.gif");
     margin: 0 auto;
   }
-  .directories{
+  .directories {
     min-width: 280px;
   }
   .accordion-heading {
@@ -570,7 +571,6 @@ a:focus {
 
 /*****end styles for boxes*****/
 
-
 /*90% width modal window start*/
 .full-width-modal {
   .modal {
@@ -579,12 +579,12 @@ a:focus {
   }
 
   .clear {
-    clear:both;
+    clear: both;
   }
   > div > .dataTable {
     border: 1px solid silver;
     th {
-      border-top:none;
+      border-top: none;
     }
   }
   .content {
@@ -595,11 +595,12 @@ a:focus {
   .table-striped tbody tr:nth-child(odd)
   td .table-striped tbody
   tr:nth-child(odd) td,
-  tr:nth-child(even) th{
+  tr:nth-child(even) th {
     background-color: none;
   }
 
 }
+
 /*90% width modal window end*/
 
 /*60% width modal window start*/
@@ -608,20 +609,20 @@ a:focus {
     width: 60%;
     margin: 0 0 0 -30%;
     max-height: 544px;
-    top:5%;
+    top: 5%;
   }
 
-  .modal-body{
+  .modal-body {
     max-height: 403px;
   }
 
   .clear {
-    clear:both;
+    clear: both;
   }
   > div > .dataTable {
     border: 1px solid silver;
     th {
-      border-top:none;
+      border-top: none;
     }
   }
   .content {
@@ -632,11 +633,12 @@ a:focus {
   .table-striped tbody tr:nth-child(odd)
   td .table-striped tbody
   tr:nth-child(odd) td,
-  tr:nth-child(even) th{
+  tr:nth-child(even) th {
     background-color: none;
   }
 
 }
+
 /*60% width modal window end*/
 
 /*****start styles for install tasks logs*****/
@@ -645,60 +647,61 @@ a:focus {
     font-size: 20px;
     vertical-align: middle;
   }
-  .pending, .queued{
+  .pending, .queued {
     color: #999999;
   }
-  .in_progress{
+  .in_progress {
     color: #367FE6;
   }
-  .completed{
+  .completed {
     color: #0EA31C;
   }
   .failed {
     color: #DF5F5F;
   }
-  .aborted{
+  .aborted {
     color: #FF9C09;
   }
-  .timedout{
+  .timedout {
     color: #FF9C09;
   }
 }
-.task-list-main-warp{
 
-  .task-list-line-cursor{
-    cursor:pointer;
+.task-list-main-warp {
+
+  .task-list-line-cursor {
+    cursor: pointer;
   }
 
-  .task-top-wrap{
+  .task-top-wrap {
 
-    width:100%;
+    width: 100%;
     border-bottom: 1px solid #CCC;
-    text-align:center;
-    font-size:15px;
+    text-align: center;
+    font-size: 15px;
     padding: 0 0 10px 0;
 
-    .select-wrap{
+    .select-wrap {
       float: right;
       margin-top: -8px;
-      select{
-        width:140px;
+      select {
+        width: 140px;
       }
     }
   }
 
   #host-log, {
-    .log-list-wrap{
+    .log-list-wrap {
       padding: 10px 10px 10px 20px;
       border-top: 1px solid #CCC;
       border-bottom: 1px solid #CCC;
 
-      .show-details{
+      .show-details {
         float: right;
         cursor: pointer;
         font-size: 16px;
 
-        i{
+        i {
           color: #333;
         }
       }
@@ -707,56 +710,57 @@ a:focus {
   }
 }
 
-.task-detail-info{
+.task-detail-info {
 
-  .task-detail-log-clipboard{
+  .task-detail-log-clipboard {
     display: none;
     resize: none;
     overflow: hidden;
   }
 
-  .task-top-wrap{
-    width:100%;
+  .task-top-wrap {
+    width: 100%;
     border-bottom: 1px solid #CCC;
-    text-align:center;
-    font-size:15px;
+    text-align: center;
+    font-size: 15px;
     padding: 0 0 10px 0;
 
-    .task-detail-back{
+    .task-detail-back {
       float: left;
     }
 
-    .task-detail-log-rolename{
+    .task-detail-log-rolename {
       position: relative;
       left: 0;
       top: 0;
     }
-    .task-detail-status-ico{
+    .task-detail-status-ico {
       content: "";
       margin-top: -4px;
       box-shadow: none;
       margin-bottom: 0px;
-      font-size:24px;
+      font-size: 24px;
     }
 
-    .task-detail-ico-wrap{
+    .task-detail-ico-wrap {
       font-size: 14px;
-      float:right;
-      margin-top:-20px;
+      float: right;
+      margin-top: -20px;
 
-      div{
+      div {
         cursor: pointer;
       }
-      .task-detail-copy{
+      .task-detail-copy {
         margin-right: 12px;
         float: left;
       }
-      .task-detail-open-dialog{
+      .task-detail-open-dialog {
         float: right;
       }
     }
   }
 }
+
 /*****end styles for install tasks logs*****/
 
 /*****start styles for dashboard page*****/
@@ -771,7 +775,7 @@ a:focus {
     background-position: 6px 5px;
     background-repeat: no-repeat;
     list-style: none;
-    float:left;
+    float: left;
     min-height: 20px;
     min-width: 20px;
     margin-left: 0;
@@ -830,8 +834,7 @@ a:focus {
     table.table {
       margin-top: 14px;
       color: #666;
-      font-size: 13px;
-      //width: 80%;
+      font-size: 13px; //width: 80%;
       tr > td:first-child {
         padding-right: 10px;
         text-align: right !important;
@@ -840,7 +843,7 @@ a:focus {
         padding: 4px;
       }
     }
-    .dashboard-mini-chart > div{
+    .dashboard-mini-chart > div {
       width: 172px;
     }
     .dashboard-mini-chart {
@@ -849,14 +852,13 @@ a:focus {
       top: 7px;
       position: absolute;
       overflow: visible; // for quick links
-      text-align: center;
-      //width: 180px;
+      text-align: center; //width: 180px;
       height: 200px;
       .dropdown-menu {
         text-align: left;
       }
-      .chart-container{
-        .chart-x-axis{
+      .chart-container {
+        .chart-x-axis {
           left: 0%;
           width: 100%;
           text-align: left;
@@ -905,6 +907,29 @@ a:focus {
   }
 }
 
+#security-stages {
+  tr {
+    height: 50px;
+  }
+  td {
+    width: 180px;
+  }
+  .progress-bar {
+    width: 50%;
+    .progress {
+      margin-bottom: 0;
+    }
+  }
+  .progress-percentage {
+    margin-left: 10px;
+  }
+
+}
+
+.faintText {
+  color: #999;
+}
+
 .more-stats {
   display: block;
   width: 100%;
@@ -966,7 +991,7 @@ a:focus {
       padding-left: 7px;
     }
   }
-  .alert{
+  .alert {
     margin: 7px;
   }
 }
@@ -999,6 +1024,7 @@ a:focus {
     float: left;
   }
 }
+
 .modal-footer.align-center {
   text-align: center;
 }
@@ -1006,8 +1032,8 @@ a:focus {
 /*start chart/style graphs*/
 .chart-container {
   cursor: pointer;
-  cursor:-moz-zoom-in;
-  cursor:-webkit-zoom-in;
+  cursor: -moz-zoom-in;
+  cursor: -webkit-zoom-in;
 
   &.chart-container-popup {
     cursor: auto !important;
@@ -1072,7 +1098,7 @@ a:focus {
       }
     }
   }
-  text{
+  text {
     font-weight: 700;
     opacity: 1 !important;
   }
@@ -1092,7 +1118,7 @@ a:focus {
     padding: 0;
   }
   .rickshaw_graph {
-    .x_tick{
+    .x_tick {
       .title {
         bottom: -6px;
         opacity: 0.75;
@@ -1112,7 +1138,7 @@ a:focus {
   }
 }
 
-.modal-body{
+.modal-body {
   .show {
     display: inline-block;
   }
@@ -1121,9 +1147,9 @@ a:focus {
   }
 }
 
-.mini-chart{
+.mini-chart {
   position: absolute;
-  .chart-container{
+  .chart-container {
     width: 130px;
     height: 130px;
   }
@@ -1143,13 +1169,12 @@ a:focus {
       float: left;
       height: 20px;
       width: 20px;
-      margin-left: 0;
-      // padding-left: 30px;
-      // padding-right: 30px;
-      // background-position: 12px 9px;
-      // background-repeat: no-repeat;
+      margin-left: 0; // padding-left: 30px;
+    // padding-right: 30px;
+    // background-position: 12px 9px;
+    // background-repeat: no-repeat;
     }
-    .health-status-LIVE , .health-status-STARTING {
+    .health-status-LIVE, .health-status-STARTING {
       .tab-marker-position;
       background-image: @status-live-marker;
     }
@@ -1176,7 +1201,7 @@ a:focus {
   .add-service-button {
     margin: 20px 20px 10px;
   }
-  .operations-count{
+  .operations-count {
     background: #953B39;
   }
 }
@@ -1266,8 +1291,10 @@ table.graphs {
   table-layout: fixed;
   width: 100%;
 }
+
 /*Hosts*/
 #hosts {
+
   .page-bar {
     border: 1px solid silver;
     text-align:right;
@@ -1343,13 +1370,11 @@ table.graphs {
       float: right;
     }
   }
-  .progress{
+  .progress {
     margin-bottom: 0;
   }
-  .table {
-    //margin-bottom: 0;
-    thead {
-      //background: #EDF5FC;
+  .table { //margin-bottom: 0;
+    thead { //background: #EDF5FC;
     }
     th {
       border-top: none;
@@ -1395,12 +1420,18 @@ table.graphs {
         }
       }
     }
-    .sorting_asc { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAHgAAAMBAQAAAAAAAAAAAAAAAAAFCAYKAQACAQUAAAAAAAAAAAAAAAAABQMCBAYHCBAAAQUAAQMEAwAAAAAAAAAAAwECBAUGABESByExIghBMxQRAAIBAwMDAwUAAAAAAAAAAAECAwAEBRESBiExUUHhB2GBIhMU/9oADAMBAAIRAxEAPwDvA8k+Qc54sxGj32qlNi0ucrjTj/JqGlmROyJXQ2u/bOsZTmBExPd70/HXmQcW41lOX5+145h0L391KEHhR3Z28Ii6sx9AKgubiO1gaeU6Io19h9TUg/S/7eP+wia3NbBIFbuqiyn3VTCjIMArHHTJarEDGGiNU8vOKVsc7/VxBuGR3yV683X86/Cq/GpssrhP2S8emiSKRm1JS5VfyLH0WfQug7KwZR0CilWHy39++ObQTgkgeV9ux+xq9uc6U8pLfZzP6mClZpKWrvq1DilJAt4Mewh/0hRyBOsaUMoVKLvXtVU6t6+nL/HZTJYi4/rxU81tdbSu+N2Rtp7jcpB0OnUa9aoeOOVdsgDL4I1pFS+NPHmcsQ2+fw+UpLWOwwwWNVQ1kCaIcgaiONkmLGEZrDDXtcnXo5PfjC+5VybKWrWWSyF5cWbEEpJNI6kqdQSrMRqD1B9KjS2t423xoqt5AAr
 b8QVPRwoo4UUcKK//2Q==) no-repeat right 50%; }
-    .sorting_desc { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAIEAAAIDAQAAAAAAAAAAAAAAAAAGBwgJCgEBAAIDAQAAAAAAAAAAAAAAAAMFBAYHCBAAAAUDAwMFAAAAAAAAAAAAAQIDBAUABgcSNTYRFQgTZFUWZhEAAAQEAggGAwAAAAAAAAAAAAECAxEhBAYSMjFBYRMzFDQFUZFSYmMHJFRk/9oADAMBAAIRAxEAPwDv4oAKACgCKc1tMmusb3Eph6cSgsgx7fucEZxGRks2llGIGVWgVm8q1dt0+6ogKaapSgdNbQPXTqAdwsN602bopk3vTnUW24rduwccbU2S5E8Sm1JM92czSZwNOKUYDFrCqTp1corDUFMpEcYap+Ipb4P5O8n81y9xXXlG50yY+thR3AEivqFvRDmduvSUrhuLtrFNXqCFvJm1LAQ5RMuchB6gBy13f7+tP6lsOipuz2jSGdy1ZJeNzmXnEtU+pWFTikmbxyTEjgglKKZpMU3ZanudYtTtSr8dMoYSKKvKMte0aUV5YGxgoASbD2iQ4Tyi6uB7Rvz/AHD9R8r7/wBWr64uta6/pKfq+JwUZP5/1/hwCFjIeTMrLo0np93q2xDtVCJh/9k=) no-repeat right 50%; }
-    .sorting { background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAGgAAAIDAQAAAAAAAAAAAAAAAAUHAAYICgEBAQAAAAAAAAAAAAAAAAAAAAEQAAEEAQIFAgcAAAAAAAAAAAECAwQFABEGIRI0NQcTFDFBMmNUZRYRAQEBAQAAAAAAAAAAAAAAAAABEUH/2gAMAwEAAhEDEQA/AO93cd/XbXpLC9tHQ1Dr46nljUBby/gzGZB+p+Q6QhA+ZOApfDnllW/ha1tv6Ee7iyH5kRlvlbTIqHndWkNJ0HO7XFQbWeJUkpUeOpySrZh65UUnyFUW1ztaexRmIbaPyzoLE6vg2UWW9GC1e0XHnsSGEqfQohCwApK9OIGuAjfBP9VuG0m39vGqINVUe4r2xF21TVsuXZOI9N9lMmLBYkttQ21auBKhqtSUngCMkW5xqjKiYASh6SR2Tulr2HpOvf6j9p+V9/mwDeB//9k=) no-repeat right 50%; }
+    .sorting_asc {
+      background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAHgAAAMBAQAAAAAAAAAAAAAAAAAFCAYKAQACAQUAAAAAAAAAAAAAAAAABQMCBAYHCBAAAQUAAQMEAwAAAAAAAAAAAwECBAUGABESByExIghBMxQRAAIBAwMDAwUAAAAAAAAAAAECAwAEBRESBiExUUHhB2GBIhMU/9oADAMBAAIRAxEAPwDvA8k+Qc54sxGj32qlNi0ucrjTj/JqGlmROyJXQ2u/bOsZTmBExPd70/HXmQcW41lOX5+145h0L391KEHhR3Z28Ii6sx9AKgubiO1gaeU6Io19h9TUg/S/7eP+wia3NbBIFbuqiyn3VTCjIMArHHTJarEDGGiNU8vOKVsc7/VxBuGR3yV683X86/Cq/GpssrhP2S8emiSKRm1JS5VfyLH0WfQug7KwZR0CilWHy39++ObQTgkgeV9ux+xq9uc6U8pLfZzP6mClZpKWrvq1DilJAt4Mewh/0hRyBOsaUMoVKLvXtVU6t6+nL/HZTJYi4/rxU81tdbSu+N2Rtp7jcpB0OnUa9aoeOOVdsgDL4I1pFS+NPHmcsQ2+fw+UpLWOwwwWNVQ1kCaIcgaiONkmLGEZrDDXtcnXo5PfjC+5VybKWrWWSyF5cWbEEpJNI6kqdQSrMRqD1B9KjS2t423xoqt5AArb8QVPRwoo4UUc
 KK//2Q==) no-repeat right 50%;
+    }
+    .sorting_desc {
+      background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAIEAAAIDAQAAAAAAAAAAAAAAAAAGBwgJCgEBAAIDAQAAAAAAAAAAAAAAAAMFBAYHCBAAAAUDAwMFAAAAAAAAAAAAAQIDBAUABgcSNTYRFQgTZFUWZhEAAAQEAggGAwAAAAAAAAAAAAECAxEhBAYSMjFBYRMzFDQFUZFSYmMHJFRk/9oADAMBAAIRAxEAPwDv4oAKACgCKc1tMmusb3Eph6cSgsgx7fucEZxGRks2llGIGVWgVm8q1dt0+6ogKaapSgdNbQPXTqAdwsN602bopk3vTnUW24rduwccbU2S5E8Sm1JM92czSZwNOKUYDFrCqTp1corDUFMpEcYap+Ipb4P5O8n81y9xXXlG50yY+thR3AEivqFvRDmduvSUrhuLtrFNXqCFvJm1LAQ5RMuchB6gBy13f7+tP6lsOipuz2jSGdy1ZJeNzmXnEtU+pWFTikmbxyTEjgglKKZpMU3ZanudYtTtSr8dMoYSKKvKMte0aUV5YGxgoASbD2iQ4Tyi6uB7Rvz/AHD9R8r7/wBWr64uta6/pKfq+JwUZP5/1/hwCFjIeTMrLo0np93q2xDtVCJh/9k=) no-repeat right 50%;
+    }
+    .sorting {
+      background: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAEwATAwERAAIRAQMRAf/EAGgAAAIDAQAAAAAAAAAAAAAAAAUHAAYICgEBAQAAAAAAAAAAAAAAAAAAAAEQAAEEAQIFAgcAAAAAAAAAAAECAwQFABEGIRI0NQcTFDFBMmNUZRYRAQEBAQAAAAAAAAAAAAAAAAABEUH/2gAMAwEAAhEDEQA/AO93cd/XbXpLC9tHQ1Dr46nljUBby/gzGZB+p+Q6QhA+ZOApfDnllW/ha1tv6Ee7iyH5kRlvlbTIqHndWkNJ0HO7XFQbWeJUkpUeOpySrZh65UUnyFUW1ztaexRmIbaPyzoLE6vg2UWW9GC1e0XHnsSGEqfQohCwApK9OIGuAjfBP9VuG0m39vGqINVUe4r2xF21TVsuXZOI9N9lMmLBYkttQ21auBKhqtSUngCMkW5xqjKiYASh6SR2Tulr2HpOvf6j9p+V9/mwDeB//9k=) no-repeat right 50%;
+    }
 
     div.view-wrapper {
-      .btn-group{
+      .btn-group {
         margin-bottom: 9px;
       }
     }
@@ -1426,24 +1457,24 @@ table.graphs {
 
   .page-bar {
     border: 1px solid silver;
-    text-align:right;
+    text-align: right;
     div {
       display: inline-block;
-      margin:0 10px;
+      margin: 0 10px;
     }
     .dataTables_length {
       label {
-        display:inline;
+        display: inline;
       }
       select {
         margin-bottom: 4px;
         margin-top: 4px;
-        width:70px;
+        width: 70px;
       }
     }
     .dataTables_paginate {
       a {
-        padding:0 5px;
+        padding: 0 5px;
       }
     }
   }
@@ -1502,14 +1533,14 @@ table.graphs {
 }
 
 #host-warnings {
-  .warnings-list{
+  .warnings-list {
     table {
       margin-bottom: 0;
       margin-top: 5px;
       td {
         width: 50%;
         i {
-          font-size:16px;
+          font-size: 16px;
           margin: 2px;
         }
       }
@@ -1521,6 +1552,7 @@ table.graphs {
     }
   }
 }
+
 .host-checks-update {
   button {
     margin-left: 5px;
@@ -1537,109 +1569,130 @@ table.graphs {
 
   margin-top: 27px;
 
-  /*
-  .component-operation-button {
-    background-color: #E5E5E5;
-    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#E5E5E5), to(#F1F1F1));
-    background-image: -webkit-linear-gradient(top, #E5E5E5, #F1F1F1);
-    background-image: -o-linear-gradient(top, #E5E5E5, #F1F1F1);
-    background-image: linear-gradient(to bottom, #E5E5E5, #F1F1F1);
-    background-image: -moz-linear-gradient(top, #E5E5E5, #F1F1F1);
-    background-repeat: repeat-x;
-    color: #000000;
-  }
-  */
+/*
+.component-operation-button {
+  background-color: #E5E5E5;
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#E5E5E5), to(#F1F1F1));
+  background-image: -webkit-linear-gradient(top, #E5E5E5, #F1F1F1);
+  background-image: -o-linear-gradient(top, #E5E5E5, #F1F1F1);
+  background-image: linear-gradient(to bottom, #E5E5E5, #F1F1F1);
+  background-image: -moz-linear-gradient(top, #E5E5E5, #F1F1F1);
+  background-repeat: repeat-x;
+  color: #000000;
+}
+*/
   .caret {
     border-top-color: #000000;
     border-bottom-color: #000000;
   }
-  //hack to apply style only for firefox
-  @-moz-document url-prefix() {
-    .host-components .caret{
-      margin-top:-12px !important;
-    }
-  }
-  .marker {
-    background-repeat: no-repeat;
-    display: inline-block;
-    height: 13px;
-    width: 13px;
-  }
-  .health-status-started, .health-status-starting {
-    background-image: @status-live-marker;
-    .marker;
-  }
-  .health-status-installed, .health-status-stopping {
-    background-image: @status-dead-marker;
-    .marker;
-  }
+}
 
-  .health-status-LIVE {
-    background-image: @status-live-marker;
-    .marker;
-  }
-  .health-status-DEAD {
-    background-image: @status-dead-marker;
-    .marker;
-  }
-  .health-status-DEAD-ORANGE {
-    background-image: @status-dead-orange-marker;
-    .marker;
-  }
-  .health-status-DEAD-YELLOW {
-    background-image: @status-dead-yellow-marker;
-    .marker;
-  }
-  .back {
-    display: block;
-    width: 105px;
-    margin-bottom: 5px;
-  }
-  .box-header .host-title {
+//hack to apply style only for firefox
+@-moz-document
+url-prefix
+
+(
+)
+{
+.host-components .caret {
+  margin-top: -12px !important;
+}
+
+}
+.marker {
+  background-repeat: no-repeat;
+  display: inline-block;
+  height: 13px;
+  width: 13px;
+}
+
+.health-status-started, .health-status-starting {
+  background-image: @status-live-marker;
+  .marker;
+}
+
+.health-status-installed, .health-status-stopping {
+  background-image: @status-dead-marker;
+  .marker;
+}
+
+.health-status-LIVE {
+  background-image: @status-live-marker;
+  .marker;
+}
+
+.health-status-DEAD {
+  background-image: @status-dead-marker;
+  .marker;
+}
+
+.health-status-DEAD-ORANGE {
+  background-image: @status-dead-orange-marker;
+  .marker;
+}
+
+.health-status-DEAD-YELLOW {
+  background-image: @status-dead-yellow-marker;
+  .marker;
+}
+
+.back {
+  display: block;
+  width: 105px;
+  margin-bottom: 5px;
+}
+
+.box-header .host-title {
+  margin: 0;
+  padding-left: 17px;
+}
+
+.box-header .button-section {
+  margin-bottom: 5px;
+}
+
+hr {
+  margin-bottom: 0;
+  clear: both;
+}
+
+.content {
+  padding: 10px;
+}
+
+.host-configuration .dl-horizontal dt {
+  width: 90px;
+  line-height: 20px;
+}
+
+.host-configuration .dl-horizontal dd {
+  margin-left: 100px;
+  line-height: 20px;
+}
+
+.host-metrics {
+  [class*="span"] {
+    float: left;
     margin: 0;
-    padding-left: 17px;
-  }
-  .box-header .button-section {
-    margin-bottom: 5px;
-  }
-  hr {
-    margin-bottom: 0;
-    clear: both;
-  }
-  .content {
-    padding: 10px;
-  }
-  .host-configuration .dl-horizontal dt {
-    width: 90px;
-    line-height: 20px;
-  }
-  .host-configuration .dl-horizontal dd {
-    margin-left: 100px;
-    line-height: 20px;
   }
-  .host-metrics {
-    [class*="span"] {
-      float: left;
-      margin: 0;
-    }
-    .chart-container {
-      .chart-x-axis {
-        left: 30%;
-        width: 40%;
-      }
+  .chart-container {
+    .chart-x-axis {
+      left: 30%;
+      width: 40%;
     }
   }
+}
 
-  .host-components {
-    padding: 10px;
-    padding-bottom: 0;
-    border: 1px solid #DEDEDE;
-    border-radius: 4px;
-    background: #FFF;
-  }
-  .host-components .btn-group {
-    margin: 0 5px 10px 0;
-  }
+.host-components {
+  padding: 10px;
+  padding-bottom: 0;
+  border: 1px solid #DEDEDE;
+  border-radius: 4px;
+  background: #FFF;
+}
+
+.host-components .btn-group {
+  margin: 0 5px 10px 0;
 }
 
 .background-operations {
@@ -1683,6 +1736,11 @@ table.graphs {
     text-decoration: none;
   }
 }
+
+ .btn-padding {
+   margin-left: 20px
+ }
+
 /*End Admin*/
 
 /*assign masters*/
@@ -1969,7 +2027,7 @@ ul.filter {
 
 /*Start Heatmap*/
 .heatmap {
-  #heatmap-metric-title{
+  #heatmap-metric-title {
     margin-left: 23px;
   }
   .rack.rack-5-2 {
@@ -2010,16 +2068,16 @@ ul.filter {
     position: absolute;
     z-index: 1000;
   }
-  .container-fluid{
+  .container-fluid {
     padding: 0px;
   }
-  .row-fluid [class*="span"]{
+  .row-fluid [class*="span"] {
     margin-left: 0px;
   }
-  .legend{
+  .legend {
     margin-top: 20px;
     margin-bottom: 20px;
-    .tile{
+    .tile {
       width: 50px;
       height: 1em;
       padding: 4px;
@@ -2029,7 +2087,7 @@ ul.filter {
     }
   }
 
-  h4{
+  h4 {
     color: #777777;
     margin-top: 5px;
   }
@@ -2056,7 +2114,7 @@ ul.filter {
 /* CHARTS */
 .chart {
   overflow: hidden;
-  /*padding-bottom: 25px;*/
+/*padding-bottom: 25px;*/
 
   .attributes {
     width: 75px;
@@ -2303,7 +2361,7 @@ ul.inline li {
   }
 }
 
-.screensaver{
+.screensaver {
   width: 90%;
   height: 157px;
   border: 1px solid silver;
@@ -2373,6 +2431,7 @@ ul.inline li {
 #step10-content {
   max-height: 440px;
 }
+
 .content-area {
   position: relative;
   .textTrigger {
@@ -2385,7 +2444,6 @@ ul.inline li {
   }
 }
 
-
 //bootstrap
 //.dropdown-menu .active > a, .dropdown-menu .active > a:hover {
 //  background-color: #49AFCD;
@@ -2397,6 +2455,7 @@ ul.inline li {
 .combobox-container .btn:hover {
   background-position: 0;
 }
+
 // COMBOBOX FIXES END
 @media all and (max-width: 1200px) {
   #main-nav {
@@ -2406,12 +2465,11 @@ ul.inline li {
   }
 }
 
-
 //
 // Gray palette
 //
 .nav-pills > .active > a, .nav-pills > .active > a:hover {
-    background-color: #666666;
+  background-color: #666666;
 }
 
 .nav-list > .active > a, .nav-list > .active > a:hover {
@@ -2466,6 +2524,7 @@ i.icon-asterisks {
     text-decoration: none;
   }
 }
+
 .hidden {
   display: none;
   visibility: hidden;
@@ -2477,111 +2536,143 @@ i.icon-asterisks {
     margin-left: -30px;
     *zoom: 1;
   }
+
   .row:before,
   .row:after {
     display: table;
     line-height: 0;
     content: "";
   }
+
   .row:after {
     clear: both;
   }
+
   [class*="span"] {
     float: left;
     min-height: 1px;
     margin-left: 30px;
   }
+
   .container,
   .navbar-static-top .container,
   .navbar-fixed-top .container,
   .navbar-fixed-bottom .container {
     width: 1170px;
   }
+
   .span12 {
     width: 1170px;
   }
+
   .span11 {
     width: 1070px;
   }
+
   .span10 {
     width: 970px;
   }
+
   .span9 {
     width: 870px;
   }
+
   .span8 {
     width: 770px;
   }
+
   .span7 {
     width: 670px;
   }
+
   .span6 {
     width: 570px;
   }
+
   .span5 {
     width: 470px;
   }
+
   .span4 {
     width: 370px;
   }
+
   .span3 {
     width: 270px;
   }
+
   .span2 {
     width: 170px;
   }
+
   .span1 {
     width: 70px;
   }
+
   .offset12 {
     margin-left: 1230px;
   }
+
   .offset11 {
     margin-left: 1130px;
   }
+
   .offset10 {
     margin-left: 1030px;
   }
+
   .offset9 {
     margin-left: 930px;
   }
+
   .offset8 {
     margin-left: 830px;
   }
+
   .offset7 {
     margin-left: 730px;
   }
+
   .offset6 {
     margin-left: 630px;
   }
+
   .offset5 {
     margin-left: 530px;
   }
+
   .offset4 {
     margin-left: 430px;
   }
+
   .offset3 {
     margin-left: 330px;
   }
+
   .offset2 {
     margin-left: 230px;
   }
+
   .offset1 {
     margin-left: 130px;
   }
+
   .row-fluid {
     width: 100%;
     *zoom: 1;
   }
+
   .row-fluid:before,
   .row-fluid:after {
     display: table;
     line-height: 0;
     content: "";
   }
+
   .row-fluid:after {
     clear: both;
   }
+
   .row-fluid [class*="span"] {
     display: block;
     float: left;
@@ -2593,230 +2684,285 @@ i.icon-asterisks {
     -moz-box-sizing: border-box;
     box-sizing: border-box;
   }
+
   .row-fluid [class*="span"]:first-child {
     margin-left: 0;
   }
+
   .row-fluid .span12 {
     width: 100%;
     *width: 99.94680851063829%;
   }
+
   .row-fluid .span11 {
     width: 91.45299145299145%;
     *width: 91.39979996362975%;
   }
+
   .row-fluid .span10 {
     width: 82.90598290598291%;
     *width: 82.8527914166212%;
   }
+
   .row-fluid .span9 {
     width: 74.35897435897436%;
     *width: 74.30578286961266%;
   }
+
   .row-fluid .span8 {
     width: 65.81196581196582%;
     *width: 65.75877432260411%;
   }
+
   .row-fluid .span7 {
     width: 57.26495726495726%;
     *width: 57.21176577559556%;
   }
+
   .row-fluid .span6 {
     width: 48.717948717948715%;
     *width: 48.664757228587014%;
   }
+
   .row-fluid .span5 {
     width: 40.17094017094017%;
     *width: 40.11774868157847%;
   }
+
   .row-fluid .span4 {
     width: 31.623931623931625%;
     *width: 31.570740134569924%;
   }
+
   .row-fluid .span3 {
     width: 23.076923076923077%;
     *width: 23.023731587561375%;
   }
+
   .row-fluid .span2 {
     width: 14.52991452991453%;
     *width: 14.476723040552828%;
   }
+
   .row-fluid .span1 {
     width: 5.982905982905983%;
     *width: 5.929714493544281%;
   }
+
   .row-fluid .offset12 {
     margin-left: 105.12820512820512%;
     *margin-left: 105.02182214948171%;
   }
+
   .row-fluid .offset12:first-child {
     margin-left: 102.56410256410257%;
     *margin-left: 102.45771958537915%;
   }
+
   .row-fluid .offset11 {
     margin-left: 96.58119658119658%;
     *margin-left: 96.47481360247316%;
   }
+
   .row-fluid .offset11:first-child {
     margin-left: 94.01709401709402%;
     *margin-left: 93.91071103837061%;
   }
+
   .row-fluid .offset10 {
     margin-left: 88.03418803418803%;
     *margin-left: 87.92780505546462%;
   }
+
   .row-fluid .offset10:first-child {
     margin-left: 85.47008547008548%;
     *margin-left: 85.36370249136206%;
   }
+
   .row-fluid .offset9 {
     margin-left: 79.48717948717949%;
     *margin-left: 79.38079650845607%;
   }
+
   .row-fluid .offset9:first-child {
     margin-left: 76.92307692307693%;
     *margin-left: 76.81669394435352%;
   }
+
   .row-fluid .offset8 {
     margin-left: 70.94017094017094%;
     *margin-left: 70.83378796144753%;
   }
+
   .row-fluid .offset8:first-child {
     margin-left: 68.37606837606839%;
     *margin-left: 68.26968539734497%;
   }
+
   .row-fluid .offset7 {
     margin-left: 62.393162393162385%;
     *margin-left: 62.28677941443899%;
   }
+
   .row-fluid .offset7:first-child {
     margin-left: 59.82905982905982%;
     *margin-left: 59.72267685033642%;
   }
+
   .row-fluid .offset6 {
     margin-left: 53.84615384615384%;
     *margin-left: 53.739770867430444%;
   }
+
   .row-fluid .offset6:first-child {
     margin-left: 51.28205128205128%;
     *margin-left: 51.175668303327875%;
   }
+
   .row-fluid .offset5 {
     margin-left: 45.299145299145295%;
     *margin-left: 45.1927623204219%;
   }
+
   .row-fluid .offset5:first-child {
     margin-left: 42.73504273504273%;
     *margin-left: 42.62865975631933%;
   }
+
   .row-fluid .offset4 {
     margin-left: 36.75213675213675%;
     *margin-left: 36.645753773413354%;
   }
+
   .row-fluid .offset4:first-child {
     margin-left: 34.18803418803419%;
     *margin-left: 34.081651209310785%;
   }
+
   .row-fluid .offset3 {
     margin-left: 28.205128205128204%;
     *margin-left: 28.0987452264048%;
   }
+
   .row-fluid .offset3:first-child {
     margin-left: 25.641025641025642%;
     *margin-left: 25.53464266230224%;
   }
+
   .row-fluid .offset2 {
     margin-left: 19.65811965811966%;
     *margin-left: 19.551736679396257%;
   }
+
   .row-fluid .offset2:first-child {
     margin-left: 17.094017094017094%;
     *margin-left: 16.98763411529369%;
   }
+
   .row-fluid .offset1 {
     margin-left: 11.11111111111111%;
     *margin-left: 11.004728132387708%;
   }
+
   .row-fluid .offset1:first-child {
     margin-left: 8.547008547008547%;
     *margin-left: 8.440625568285142%;
   }
+
   input,
   textarea,
   .uneditable-input {
     margin-left: 0;
   }
+
   .controls-row [class*="span"] + [class*="span"] {
     margin-left: 30px;
   }
+
   input.span12,
   textarea.span12,
   .uneditable-input.span12 {
     width: 1156px;
   }
+
   input.span11,
   textarea.span11,
   .uneditable-input.span11 {
     width: 1056px;
   }
+
   input.span10,
   textarea.span10,
   .uneditable-input.span10 {
     width: 956px;
   }
+
   input.span9,
   textarea.span9,
   .uneditable-input.span9 {
     width: 856px;
   }
+
   input.span8,
   textarea.span8,
   .uneditable-input.span8 {
     width: 756px;
   }
+
   input.span7,
   textarea.span7,
   .uneditable-input.span7 {
     width: 656px;
   }
+
   input.span6,
   textarea.span6,
   .uneditable-input.span6 {
     width: 556px;
   }
+
   input.span5,
   textarea.span5,
   .uneditable-input.span5 {
     width: 456px;
   }
+
   input.span4,
   textarea.span4,
   .uneditable-input.span4 {
     width: 356px;
   }
+
   input.span3,
   textarea.span3,
   .uneditable-input.span3 {
     width: 256px;
   }
+
   input.span2,
   textarea.span2,
   .uneditable-input.span2 {
     width: 156px;
   }
+
   input.span1,
   textarea.span1,
   .uneditable-input.span1 {
     width: 56px;
   }
+
   .thumbnails {
     margin-left: -30px;
   }
+
   .thumbnails > li {
     margin-left: 30px;
   }
+
   .row-fluid .thumbnails {
     margin-left: 0;
   }
+
   .summary-metric-graphs {
     [class*="span"] {
       float: left;

Modified: incubator/ambari/trunk/ambari-web/app/templates/application.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/application.hbs?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/application.hbs (original)
+++ incubator/ambari/trunk/ambari-web/app/templates/application.hbs Mon Feb 25 22:34:00 2013
@@ -43,7 +43,7 @@
                 {{App.router.loginName}}&nbsp;<span class="caret"></span>
               </button>
               <ul class="dropdown-menu">
-                <li><a href="" {{action logoff}}>{{t app.sighout}}</a></li>
+                <li><a href="" {{action logoff}}>{{t app.signout}}</a></li>
               </ul>
             </div>
           {{/if}}

Modified: incubator/ambari/trunk/ambari-web/app/templates/main/admin.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin.hbs?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin.hbs (original)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin.hbs Mon Feb 25 22:34:00 2013
@@ -18,7 +18,17 @@
 
 <div class="row-fluid">
   <div id="main-admin-menu" class="well span2">
-  {{view App.MainAdminMenuView}}
+      <ul>
+        {{#view view.NavItemView item="user" }}
+            <a class="text-center" href="javascript:void(null);" {{action goToAdminUser}} > Users</a>
+        {{/view}}
+        {{#view view.NavItemView item="security" }}
+            <a class="text-center" href="javascript:void(null);" {{action goToAdminSecurity}} > Security</a>
+        {{/view}}
+        {{#view view.NavItemView item="cluster" }}
+          <a class="text-center" href="javascript:void(null);" {{action goToAdminCluster}} > Cluster</a>
+        {{/view}}
+      </ul>
   </div>
   <div class="span10">
     <div class="row-fluid">

Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,40 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+{{#if securityEnabled}}
+  <div>
+    <p class="text-success">{{t admin.security.enabled}}
+      <a
+              class="btn btn-padding btn-warning" {{bindAttr disabled="isSubmitDisabled"}} {{action notifySecurityOffPopup target="controller"}}>{{t admin.security.button.disable}}
+      </a> <br/>
+    </p>
+  </div>
+  <div>
+    {{outlet}}
+  </div>
+{{else}}
+  <div>
+    <p class="text-error">{{t admin.security.disabled}}
+      <a
+              class="btn btn-padding btn-success" {{action notifySecurityAddPopup target="controller"}}>{{t admin.security.button.enable}}
+      </a> <br/>
+    </p>
+
+    <p class="alert alert-info">{{t admin.security.recommend.enable}}</p>
+  </div>
+{{/if}}
\ No newline at end of file

Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/menu.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/menu.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/menu.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/menu.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,41 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+
+<div id="addSecurity">
+    <div class="container">
+        <div class="container-fluid">
+            <div class="row-fluid">
+                <div class="span3">
+                    <!--Sidebar content-->
+                    <div class="well">
+                        <ul class="nav nav-pills nav-stacked">
+                            <li class="nav-header">{{t admin.addSecurity.header}}</li>
+                            <li {{bindAttr class="isStep1:active view.isStep1Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep1}}>{{t admin.security.step1.header}}</a></li>
+                            <li {{bindAttr class="isStep2:active view.isStep2Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep2}}>{{t admin.security.step2.header}}</a></li>
+                            <li {{bindAttr class="isStep3:active view.isStep3Disabled:disabled"}}><a href="javascript:void(null);"  {{action gotoStep3}}>{{t admin.security.step3.header}}</a></li>
+                        </ul>
+                    </div>
+                </div>
+                <div id="addSecurity-content" class="well span9">
+                  {{outlet}}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step1.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step1.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step1.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step1.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,34 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+<h2>{{t admin.security.step1.header}}</h2>
+<p class="alert">
+  {{t admin.security.step1.body.header}}
+</p>
+<div class="alert alert-info">
+    <ol>
+        <li>{{t admin.security.step1.body.instruction1}}</li>
+        <li>{{t admin.security.step1.body.instruction2}}</li>
+        <li>{{t admin.security.step1.body.instruction3}}</li>
+    </ol>
+</div>
+
+
+<div class="btn-area">
+    <a class="btn btn-success pull-right" {{action "next"}}>Next &rarr;</a>
+</div>
\ No newline at end of file

Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step2.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step2.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step2.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step2.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,15 @@
+<div id="serviceConfig">
+  <h2>{{t admin.security.step2.header}}</h2>
+
+  <p class="alert alert-info">
+    {{t admin.security.step2.body.header}}
+  </p>
+  {{view App.ServicesConfigView}}
+
+  <div class="btn-area">
+    <a class="btn" {{action back}}>&larr; {{t common.back}}</a>
+
+    <a class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}}
+      {{action submit target="controller"}}>{{t common.next}} &rarr;</a>
+  </div>
+</div>
\ No newline at end of file

Added: incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step3.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step3.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step3.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/admin/security/add/step3.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,30 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+<h2>{{t admin.security.step3.header}}</h2>
+<p class="alert alert-info">
+  {{t admin.security.step3.body.header}}
+</p>
+
+{{view App.MainServiceReconfigureView}}
+
+<div class="btn-area">
+  <a class="btn" {{action back}}>&larr; {{t common.back}}</a>
+  <a class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}}
+    {{action done}}>{{t common.done}} </a>
+</div>
\ No newline at end of file

Added: incubator/ambari/trunk/ambari-web/app/templates/main/service/reconfigure.hbs
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/templates/main/service/reconfigure.hbs?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/templates/main/service/reconfigure.hbs (added)
+++ incubator/ambari/trunk/ambari-web/app/templates/main/service/reconfigure.hbs Mon Feb 25 22:34:00 2013
@@ -0,0 +1,47 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+<table id="security-stages" class="table no-borders">
+  <tbody>
+    {{#each stage in controller.stages}}
+      {{#view App.StageStatusView}}
+      <td>
+        <p {{bindAttr class="stage.hasStarted::faintText"}}>{{stage.label}}</p>
+      </td>
+      <td>
+        {{#if stage.isCompleted}}
+          {{#if stage.isSuccess}}
+            {{view App.StageSuccessView}}
+          {{else}}
+            {{view App.StageFailureView}}
+          {{/if}}
+        {{else}}
+          {{#if stage.isStarted}}
+            {{#if stage.isPolling}}
+              <div class="progress-bar pull-left">
+                {{view App.StageInProgressView stageBinding=stage}}
+              </div>
+              <div class="progress-percentage pull-left">{{stage.progress}}%</div>
+            {{/if}}
+          {{/if}}
+        {{/if}}
+      </td>
+      {{/view}}
+    {{/each}}
+  </tbody>
+</table>

Modified: incubator/ambari/trunk/ambari-web/app/utils/db.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/utils/db.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/utils/db.js (original)
+++ incubator/ambari/trunk/ambari-web/app/utils/db.js Mon Feb 25 22:34:00 2013
@@ -51,11 +51,14 @@ App.db.cleanUp = function () {
       'loginName': '',
       'authenticated': false
     },
+
     'Installer' : {},
     'AddHost' : {},
     'AddService' : {},
     'StackUpgrade' : {},
-    'ReassignMaster' : {}
+    'ReassignMaster' : {},
+    'AddSecurity': {}
+
   };
   console.log("In cleanup./..");
   localStorage.setObject('ambari', App.db.data);
@@ -129,7 +132,7 @@ App.db.setHosts = function (hostInfo) {
   localStorage.setObject('ambari', App.db.data);
 };
 
-App.db.setInstallOptions = function(installOptions){
+App.db.setInstallOptions = function (installOptions) {
   console.log('TRACE: Entering db:setInstallOptions function');
   App.db.data = localStorage.getObject('ambari');
   App.db.data.Installer.installOptions = installOptions;
@@ -195,7 +198,7 @@ App.db.setServiceConfigs = function (ser
   localStorage.setObject('ambari', App.db.data);
 };
 
-App.db.setAdvancedServiceConfig = function(serviceConfigs) {
+App.db.setAdvancedServiceConfig = function (serviceConfigs) {
   App.db.data = localStorage.getObject('ambari');
   App.db.data.Installer.advanceServiceConfigs = serviceConfigs;
   localStorage.setObject('ambari', App.db.data);
@@ -246,6 +249,21 @@ App.db.setWizardCurrentStep = function (
   localStorage.setObject('ambari', App.db.data);
 };
 
+App.db.setSecurityWizardStatus = function (status) {
+  App.db.data = localStorage.getObject('ambari');
+  if (!App.db.data.AddSecurity) {
+    App.db.data.AddSecurity = {};
+  }
+  App.db.data.AddSecurity.status = status;
+  localStorage.setObject('ambari', App.db.data);
+};
+
+App.db.setSecurityStage = function (securityStage) {
+  App.db.data = localStorage.getObject('ambari');
+  App.db.data.AddSecurity.securityStage = securityStage;
+  localStorage.setObject('ambari', App.db.data);
+};
+
 
 /*
  *  getter methods
@@ -356,7 +374,7 @@ App.db.getServiceConfigs = function () {
   return App.db.data.Installer.serviceConfigs;
 };
 
-App.db.getAdvancedServiceConfig = function() {
+App.db.getAdvancedServiceConfig = function () {
   App.db.data = localStorage.getObject('ambari');
   return App.db.data.Installer.advanceServiceConfigs;
 };
@@ -386,6 +404,20 @@ App.db.getUpgradeOptions = function () {
   console.log('TRACE: Entering db:getUpgradeOptions function');
   App.db.data = localStorage.getObject('ambari');
   return App.db.data.StackUpgrade.upgradeOptions;
+}
+
+App.db.getSecurityWizardStatus = function () {
+  App.db.data = localStorage.getObject('ambari');
+  if (!App.db.data.AddSecurity) {
+    App.db.data.AddSecurity = {};
+  }
+  return App.db.data.AddSecurity.status;
+};
+
+App.db.getSecurityStage = function () {
+  App.db.data = localStorage.getObject('ambari');
+  return App.db.data.AddSecurity.securityStage;
+
 };
 
 module.exports = App.db;

Added: incubator/ambari/trunk/ambari-web/app/utils/polling.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/utils/polling.js?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/utils/polling.js (added)
+++ incubator/ambari/trunk/ambari-web/app/utils/polling.js Mon Feb 25 22:34:00 2013
@@ -0,0 +1,214 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+App.Poll = Em.Object.extend({
+  stage: '',
+  label: '',
+  isStarted: false,
+  isPolling: true,
+  clusterName: null,
+  requestId: null,
+  temp: false,
+  progress: 0,
+  url: null,
+  testUrl: null,
+  data: null,
+  isError: false,
+  isSuccess: false,
+  POLL_INTERVAL: 4000,
+  polledData: [],
+  numPolls: 0,
+  mockDataPrefix: '/data/wizard/deploy/5_hosts',
+
+  barWidth: function () {
+    var barWidth = 'width: ' + this.get('progress') + '%;';
+    return barWidth;
+  }.property('progress'),
+
+  isCompleted: function () {
+    return (this.get('isError') || this.get('isSuccess'));
+  }.property('isError', 'isSuccess'),
+
+  start: function () {
+    if (App.testMode) {
+      this.startPolling();
+      return;
+    }
+    var self = this;
+    var url = this.get('url');
+    var method;
+    var data = this.get('data');
+    if (App.testMode) {
+      method = 'GET';
+    } else {
+      method = 'PUT';
+    }
+
+    $.ajax({
+      type: method,
+      url: url,
+      async: false,
+      data: data,
+      dataType: 'text',
+      timeout: App.timeout,
+      success: function (data) {
+        var jsonData = jQuery.parseJSON(data);
+        console.log("TRACE: Polling -> value of the url is: " + url);
+        console.log("TRACE: Polling-> value of the sent data is: " + self.get('data'));
+        console.log("TRACE: Polling-> value of the received data is: " + jsonData);
+        if (jsonData === null) {
+          self.set('isSuccess', true);
+        } else {
+          var requestId = jsonData.Requests.id;
+          self.set('requestId', requestId);
+          console.log('requestId is: ' + requestId);
+        }
+      },
+
+      error: function () {
+        console.log("ERROR");
+        self.set('isError', true);
+      },
+
+      statusCode: require('data/statusCodes')
+    });
+  },
+
+  doPolling: function () {
+    if (this.get('requestId')) {
+      this.startPolling();
+    }
+  }.observes('requestId'),
+
+  startPolling: function () {
+    var self = this;
+    var url = App.apiPrefix + '/clusters/' + App.router.getClusterName() + '/requests/' + this.get('requestId') + '?fields=tasks/*';
+    if (App.testMode) {
+      this.set('POLL_INTERVAL', 1);
+      this.numPolls++;
+      url = this.get('mockDataPrefix') + '/poll_' + this.get('numPolls') + '.json';
+      debugger;
+    }
+
+    $.ajax({
+      type: 'GET',
+      url: url,
+      async: true,
+      dataType: 'text',
+      timeout: App.timeout,
+      success: function (data) {
+        console.log("TRACE: In success function for the GET logs data");
+        console.log("TRACE: The value is: ", jQuery.parseJSON(data));
+        var result = self.parseInfo(jQuery.parseJSON(data));
+        if (result !== true) {
+          window.setTimeout(function () {
+            self.startPolling();
+          }, self.POLL_INTERVAL);
+        }
+      },
+
+      error: function (request, ajaxOptions, error) {
+        console.log("TRACE: In error function for the GET data");
+        console.log("TRACE: value of the url is: " + url);
+        console.log("TRACE: error code status is: " + request.status);
+        self.set('isError', true);
+      },
+
+      statusCode: require('data/statusCodes')
+    }).retry({times: App.maxRetries, timeout: App.timeout}).then(null,
+      function () {
+        App.showReloadPopup();
+        console.log('Install services all retries failed');
+      }
+    );
+  },
+
+  stopPolling: function () {
+    //this.set('isSuccess', true);
+  },
+
+  replacePolledData: function (polledData) {
+    this.polledData.clear();
+    this.set('polledData', polledData);
+  },
+
+
+  getExecutedTasks: function (tasksData) {
+    var succededTasks = tasksData.filterProperty('Tasks.status', 'COMPLETED');
+    var failedTasks = tasksData.filterProperty('Tasks.status', 'FAILED');
+    var abortedTasks = tasksData.filterProperty('Tasks.status', 'ABORTED');
+    var timedoutTasks = tasksData.filterProperty('Tasks.status', 'TIMEDOUT');
+    var inProgressTasks = tasksData.filterProperty('Tasks.status', 'IN_PROGRESS');
+    return (succededTasks.length + failedTasks.length + abortedTasks.length + timedoutTasks.length + inProgressTasks.length);
+  },
+
+  isPollingFinished: function (polledData) {
+    if (polledData.everyProperty('Tasks.status', 'COMPLETED')) {
+      this.set('isSuccess', true);
+      return true;
+    } else if (polledData.someProperty('Tasks.status', 'FAILED') || polledData.someProperty('Tasks.status', 'TIMEDOUT') || polledData.someProperty('Tasks.status', 'ABORTED')) {
+      this.set('isError', true);
+      return true;
+    } else {
+      return false;
+    }
+  },
+
+
+  parseInfo: function (polledData) {
+    console.log('TRACE: Entering task info function');
+    var self = this;
+    var totalProgress = 0;
+    var tasksData = polledData.tasks;
+    console.log("The value of tasksData is: ", tasksData);
+    if (!tasksData) {
+      console.log("ERROR: NO tasks available to process");
+    }
+    var requestId = this.get('requestId');
+    if (!App.testMode && polledData.Requests && polledData.Requests.id && polledData.Requests.id != requestId) {
+      // We dont want to use non-current requestId's tasks data to
+      // determine the current install status.
+      // Also, we dont want to keep polling if it is not the
+      // current requestId.
+      return false;
+    }
+    this.replacePolledData(tasksData);
+    /* this.hosts.forEach(function (_host) {
+     var actionsPerHost = tasksData.filterProperty('Tasks.host_name', _host.name); // retrieved from polled Data
+     if (actionsPerHost.length === 0) {
+     _host.set('message', this.t('installer.step9.host.status.nothingToInstall'));
+     console.log("INFO: No task is hosted on the host");
+     }
+     if (actionsPerHost !== null && actionsPerHost !== undefined && actionsPerHost.length !== 0) {
+     this.setLogTasksStatePerHost(actionsPerHost, _host);
+     this.onSuccessPerHost(actionsPerHost, _host);     // every action should be a success
+     this.onErrorPerHost(actionsPerHost, _host);     // any action should be a failure
+     this.onInProgressPerHost(actionsPerHost, _host);  // current running action for a host
+     totalProgress += self.progressPerHost(actionsPerHost, _host);
+     }
+     }, this); */
+    var executedTasks = this.getExecutedTasks(tasksData);
+    totalProgress = Math.floor((executedTasks / tasksData.length) * 100);
+    this.set('progress', totalProgress.toString());
+    console.log("INFO: right now the progress is: " + this.get('progress'));
+    return this.isPollingFinished(tasksData);
+  }
+
+});
+

Modified: incubator/ambari/trunk/ambari-web/app/views.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views.js (original)
+++ incubator/ambari/trunk/ambari-web/app/views.js Mon Feb 25 22:34:00 2013
@@ -59,6 +59,12 @@ require('views/main/admin/user');
 require('views/main/admin/user/create');
 require('views/main/admin/user/edit');
 require('views/main/admin/user/row');
+require('views/main/admin/security');
+require('views/main/admin/security/disable');
+require('views/main/admin/security/add/menu');
+require('views/main/admin/security/add/step1');
+require('views/main/admin/security/add/step2');
+require('views/main/admin/security/add/step3');
 require('views/main/dashboard');
 require('views/main/dashboard/service');
 require('views/main/dashboard/service/hdfs');
@@ -74,6 +80,7 @@ require('views/main/dashboard/cluster_me
 require('views/main/service');
 require('views/main/service/menu');
 require('views/main/service/item');
+require('views/main/service/reconfigure');
 require('views/main/service/info/menu');
 require('views/main/service/info/summary');
 require('views/main/service/info/configs');

Modified: incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js (original)
+++ incubator/ambari/trunk/ambari-web/app/views/common/modal_popup.js Mon Feb 25 22:34:00 2013
@@ -20,6 +20,8 @@ var App = require('app');
 
 App.ModalPopup = Ember.View.extend({
 
+  viewName: 'modalPopup',
+
   template: Ember.Handlebars.compile([
     '<div class="modal-backdrop"></div><div class="modal" id="modal" tabindex="-1" role="dialog" aria-labelledby="modal-label" aria-hidden="true">',
     '<div class="modal-header">',

Modified: incubator/ambari/trunk/ambari-web/app/views/main/admin.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/main/admin.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/main/admin.js (original)
+++ incubator/ambari/trunk/ambari-web/app/views/main/admin.js Mon Feb 25 22:34:00 2013
@@ -19,5 +19,14 @@
 var App = require('app');
 
 App.MainAdminView = Em.View.extend({
-    templateName: require('templates/main/admin')
-});
\ No newline at end of file
+  templateName: require('templates/main/admin'),
+  selectedBinding: 'controller.selected',
+  NavItemView: Ember.View.extend({
+    tagName: 'li',
+    classNameBindings: 'isActive:active'.w(),
+    isActive: function () {
+      return this.get('item') === this.get('parentView.selected');
+    }.property('item', 'parentView.selected').cacheable()
+  })
+});
+

Modified: incubator/ambari/trunk/ambari-web/app/views/main/admin/menu.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/main/admin/menu.js?rev=1449945&r1=1449944&r2=1449945&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/main/admin/menu.js (original)
+++ incubator/ambari/trunk/ambari-web/app/views/main/admin/menu.js Mon Feb 25 22:34:00 2013
@@ -18,13 +18,19 @@
 
 var App = require('app');
 
+// This logic is substituted by MainAdminView for now.
 App.MainAdminMenuView = Em.CollectionView.extend({
-  content:[
+  //contentBinding: 'controller',
+  /*content: [
     {
       route:'user',
       label:'Users'
     },
     {
+      route:'security',
+      label:'Security'
+    },
+    {
       route:'cluster',
       label:'Cluster'
     }
@@ -33,30 +39,41 @@ App.MainAdminMenuView = Em.CollectionVie
       route:'authentication',
       label:'Authentication'
     },
-    {
-      route:'security',
-      label:'Security'
+
+{
+      route: 'user',
+      label: 'Users'
+
     },
     {
-      route:'audit',
-      label:'Audit'
-    }*/
+      route: 'security',
+      label: 'Security'
+    }/*,
+     {
+     route:'authentication',
+     label:'Authentication'
+     },
+
+     {
+     route:'audit',
+     label:'Audit'
+     }*/
     /*,
-    {
-      route:'advanced',
-      label:'Advanced'
-    }
-    */
+     {
+     route:'advanced',
+     label:'Advanced'
+     }
+
   ],
   tagName: "ul",
   classNames: ["nav", "nav-list"],
 
-  init: function(){
+  init: function () {
     this._super();
     this.activateView(); // default selected menu
   },
 
-  activateView:function () {
+  activateView: function () {
     var route = App.get('router.mainAdminController.category');
     $.each(this._childViews, function () {
       this.set('active', (this.get('content.route') == route ? "active" : ""));
@@ -68,4 +85,5 @@ App.MainAdminMenuView = Em.CollectionVie
     active:"",
     template:Ember.Handlebars.compile('<a class="text-center" {{action adminNavigate view.content.route }} href="#"> {{unbound view.content.label}}</a>')
   })
+*/
 });
\ No newline at end of file

Added: incubator/ambari/trunk/ambari-web/app/views/main/admin/security.js
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-web/app/views/main/admin/security.js?rev=1449945&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-web/app/views/main/admin/security.js (added)
+++ incubator/ambari/trunk/ambari-web/app/views/main/admin/security.js Mon Feb 25 22:34:00 2013
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+
+App.MainAdminSecurityView = Em.View.extend({
+  templateName: require('templates/main/admin/security')
+
+});
\ No newline at end of file