Repository: incubator-ranger
Updated Branches:
  refs/heads/stack 7771e7efb -> 0f177a62c


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js 
b/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
new file mode 100644
index 0000000..e86d6ab
--- /dev/null
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
@@ -0,0 +1,285 @@
+/*
+ * 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.
+ */
+
+ 
+/* 
+ * Repository/Service create view
+ */
+
+define(function(require){
+    'use strict';
+
+       var Backbone            = require('backbone');
+       var App                         = require('App');
+
+       var XAUtil                      = require('utils/XAUtils');
+       var XAEnums                     = require('utils/XAEnums');
+       var XALinks             = require('modules/XALinks');
+       var localization        = require('utils/XALangSupport');
+       var ServiceForm         = require('views/service/ServiceForm');
+       var RangerServiceDef    = require('models/RangerServiceDef');
+       var ServiceCreateTmpl = require('hbs!tmpl/service/ServiceCreate_tmpl');
+
+       var ServiceCreate = Backbone.Marionette.Layout.extend(
+       /** @lends ServiceCreate */
+       {
+               _viewName : 'ServiceCreate',
+
+               template: ServiceCreateTmpl,
+               
+               templateHelpers : function(){
+                       return { editService : this.editService};
+               },
+        
+               breadCrumbs :function(){
+                       if(this.model.isNew())
+                               return [XALinks.get('RepositoryManager'), 
XALinks.get('ServiceCreate', {model:this.model})];
+                       else
+                               return [XALinks.get('RepositoryManager'), 
XALinks.get('ServiceEdit',{model:this.model})];
+               },        
+
+               /** Layout sub regions */
+               regions: {
+                       'rForm' :'div[data-id="r_form"]'
+               },
+
+               /** ui selector cache */
+               ui: {
+                       'btnSave'       : '[data-id="save"]',
+                       'btnCancel' : '[data-id="cancel"]',
+                       'btnDelete' : '[data-id="delete"]',
+                       'btnTestConn' : '[data-id="testConn"]'
+               },
+
+               /** ui events hash */
+               events: function() {
+                       var events = {};
+                       events['click ' + this.ui.btnSave]              = 
'onSave';
+                       events['click ' + this.ui.btnCancel]    = 'onCancel';
+                       events['click ' + this.ui.btnDelete]    = 'onDelete';
+                       events['click ' + this.ui.btnTestConn]  = 
'onTestConnection';
+                       return events;
+               },
+
+               /**
+                * intialize a new ServiceCreate Layout 
+                * @constructs
+                */
+               initialize: function(options) {
+                       console.log("initialized a ServiceCreate Layout");
+                       _.extend(this, _.pick(options, 'serviceTypeId'));
+                       this.initializeServiceDef();
+                       /*if(! this.model.isNew()){
+                               this.setupModel();
+                       }*/
+                       if(!this.model.isNew()){
+                               
_.each(JSON.parse(this.model.attributes.configs),function(name, value){
+                                       this.model.set(value,name)
+                               },this);
+                       }
+                       this.form = new ServiceForm({
+                               model : this.model,
+                               rangerServiceDefModel : 
this.rangerServiceDefModel,
+                               template : 
require('hbs!tmpl/service/ServiceForm_tmpl')
+                       });
+                       this.editService = this.model.has('id') ? true : false;
+
+                       this.bindEvents();
+               },
+               initializeServiceDef : function(){
+                   this.rangerServiceDefModel  = new RangerServiceDef({ id : 
this.serviceTypeId});
+                       this.rangerServiceDefModel.fetch({
+                          cache : false,
+                          async : false
+                       });
+
+               },
+               setupModel : function(){
+               },
+
+               /** all events binding here */
+               bindEvents : function(){
+                       /*this.listenTo(this.model, "change:foo", 
this.modelChanged, this);*/
+                       /*this.listenTo(communicator.vent,'someView:someEvent', 
this.someEventHandler, this)'*/
+               },
+
+               /** on render callback */
+               onRender: function() {
+                       if(!this.editService){
+                               this.ui.btnDelete.hide();
+                               this.ui.btnSave.html('Add');
+                       } else {
+                               
+                       //      
XAUtil.preventNavigation(localization.tt('dialogMsg.preventNavRepositoryForm'));
+                       }
+                       this.rForm.show(this.form);
+                       this.rForm.$el.dirtyFields();
+                       
XAUtil.preventNavigation(localization.tt('dialogMsg.preventNavRepositoryForm'),this.rForm.$el);
+                       this.initializePlugins();
+               },
+
+               /** all post render plugin initialization */
+               initializePlugins: function(){
+               },
+
+               onSave: function(){
+                       var errors = this.form.commit({validate : false});
+                       if(! _.isEmpty(errors)){
+                               return;
+                       }
+                       this.form.formValidation();
+                       this.saveService();
+
+               },
+               saveService : function(){
+                       var that = this;
+                       this.form.beforeSave();
+                       XAUtil.blockUI();
+                       this.model.save({},{
+                               wait: true,
+                               success: function () {
+                                       XAUtil.blockUI('unblock');
+                                       XAUtil.allowNavigation();
+                                       var msg = that.editService ? 
'Repository updated successfully' :'Repository created successfully';
+                                       XAUtil.notifySuccess('Success', msg);
+                                       
+                                       if(that.editService){
+                                               
App.appRouter.navigate("#!/policymanager",{trigger: true});
+                                               return;
+                                       }
+                                       
+                                       
App.appRouter.navigate("#!/policymanager",{trigger: true});
+                                       
+                               },
+                               error: function (model, response, options) {
+                                       XAUtil.blockUI('unblock');
+                                       if ( response && response.responseJSON 
&& response.responseJSON.msgDesc){
+                                               
if(response.responseJSON.msgDesc == "serverMsg.fsDefaultNameValidationError"){
+                                                       
that.form.fields.fsDefaultName.setError(localization.tt(response.responseJSON.msgDesc));
+                                                       
XAUtil.scrollToField(that.form.fields.fsDefaultName.$el);
+                                               }else 
if(response.responseJSON.msgDesc == "Repository Name already exists"){
+                                                       
response.responseJSON.msgDesc = "serverMsg.repositoryNameAlreadyExistsError";
+                                                       
that.form.fields.name.setError(localization.tt(response.responseJSON.msgDesc));
+                                                       
XAUtil.scrollToField(that.form.fields.name.$el);
+                                               }else 
if(response.responseJSON.msgDesc == "XUser already exists"){
+                                                       
response.responseJSON.msgDesc = "serverMsg.userAlreadyExistsError";
+                                                       
that.form.fields.userName.setError(localization.tt(response.responseJSON.msgDesc));
+                                                       
XAUtil.scrollToField(that.form.fields.userName.$el);
+                                               }else
+                                                       
XAUtil.notifyError('Error', response.responseJSON.msgDesc);
+                                       }else
+                                               XAUtil.notifyError('Error', 
'Error creating Service!');
+                                       console.log("error");
+                               }
+                       });
+               },
+               onDelete :function(){
+                       var that = this;
+                       XAUtil.confirmPopup({
+                               //msg :localize.tt('msg.confirmDelete'),
+                               msg :'Are you sure want to delete ?',
+                               callback : function(){
+                                       XAUtil.blockUI();
+                                       
+                                       that.model.destroy({
+                                               success: function(model, 
response) {
+                                                       
XAUtil.blockUI('unblock');
+                                                       
XAUtil.allowNavigation();
+                                                       
XAUtil.notifySuccess('Success', 'Repository delete successfully');
+                                                       
App.appRouter.navigate("#!/policymanager",{trigger: true});
+                                               },
+                                               error: function (model, 
response, options) {
+                                                       
XAUtil.blockUI('unblock');
+                                                       if ( response && 
response.responseJSON && response.responseJSON.msgDesc){
+                                                                       
XAUtil.notifyError('Error', response.responseJSON.msgDesc);
+                                                       }else
+                                                               
XAUtil.notifyError('Error', 'Error occured while deleting service!');
+                                               }
+                                       });
+                                       
+                               }
+                       });
+               },
+               onTestConnection : function(){
+                       var errors = this.form.commit({validate : false});
+                       if(! _.isEmpty(errors)){
+                               return;
+                       }
+                       this.form.beforeSave();
+                       this.model.testConfig(this.model,{
+                                       //wait: true,
+                                       success: function (msResponse, options) 
{
+                                               if(msResponse.statusCode){
+                                                       
if(!_.isUndefined(msResponse) && !_.isUndefined(msResponse.msgDesc)){ 
+                                                               var 
popupBtnOpts;
+                               if(!_.isEmpty(msResponse.msgDesc)){
+                                  if(_.isArray(msResponse.messageList) && 
!_.isUndefined(msResponse.messageList[0].message)
+                                                  && 
!_.isEmpty(msResponse.messageList[0].message)){
+                                                  popupBtnOpts = [{
+                                                          label: "Show More..",
+                                                          callback:function(e){
+                                                                  
console.log(e)
+                                                                  
if($(e.currentTarget).text() == 'Show More..'){
+                                                                               
   var div = '<div class="showMore 
connection-error-font"><br>'+msResponse.messageList[0].message.split('\n').join('<br>')+'</div>'
+                                                                               
   $(e.delegateTarget).find('.modal-body').append(div)
+                                                                               
   $(e.currentTarget).html('Show Less..')
+                                                                  }else{
+                                                                          
$(e.delegateTarget).find('.showMore').remove();
+                                                                          
$(e.currentTarget).html('Show More..')
+                                                                  }
+                                                                  return false;
+                                                          }
+                                                  }, {
+                                                          label: "OK",
+                                                          callback:function(){}
+                                                  }];
+                                  }else{
+                                                       popupBtnOpts = [{label: 
"OK",
+                                                               
callback:function(){}
+                                                       }];
+                                  }
+                                   var msgHtml = '<b>Connection 
Failed.</b></br>'+msResponse.msgDesc;
+                                   bootbox.dialog(msgHtml, popupBtnOpts);
+                                                               }else{
+                                                                               
bootbox.alert("Connection Failed.");
+                                                               }
+                                                       }else{
+                                                               
bootbox.alert("Connection Failed.");
+                                                       }
+                                               }
+                                               else
+                                                       
bootbox.alert("Connected Successfully.");
+                                       },
+                                       error: function (msResponse, options) {
+                                               bootbox.alert("Connection 
Failed.");
+                                       }       
+                               });
+               },
+               onCancel : function(){
+                       XAUtil.allowNavigation();
+                       App.appRouter.navigate("#!/policymanager",{trigger: 
true});
+               },
+               /** on close */
+               onClose: function(){
+                       XAUtil.allowNavigation();
+               }
+       });
+
+       return ServiceCreate; 
+});

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js 
b/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
new file mode 100644
index 0000000..de07088
--- /dev/null
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
@@ -0,0 +1,189 @@
+       /*
+ * 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.
+ */
+
+ 
+define(function(require){
+    'use strict';
+
+       var Backbone            = require('backbone');
+    
+       var XAEnums                     = require('utils/XAEnums');
+       var localization        = require('utils/XALangSupport');
+
+       require('backbone-forms');
+       require('backbone-forms.list');
+       require('backbone-forms.templates');
+       require('backbone-forms.XAOverrides');
+
+       var ServiceForm = Backbone.Form.extend(
+       /** @lends ServiceForm */
+       {
+               _viewName : 'ServiceForm',
+
+       /**
+               * intialize a new ServiceForm Form View 
+               * @constructs
+               */
+               templateData: function(){
+                       var serviceDetail="", serviceConfig="";
+                       _.each(this.schema, function(obj, name){
+                         if(!_.isUndefined(obj['class']) && obj['class'] == 
'serviceConfig') 
+                           serviceConfig += name+",";
+                         else
+                          serviceDetail += name+",";
+                       });
+                       return {
+                               serviceDetail : serviceDetail.slice(0,-1),
+                               serviceConfig : serviceConfig.slice(0,-1)
+                       };
+               },
+               initialize: function(options) {
+                       console.log("initialized a ServiceForm Form View");
+                       _.extend(this, _.pick(options, 
'rangerServiceDefModel'));
+               Backbone.Form.prototype.initialize.call(this, options);
+
+                       this.bindEvents();
+               },
+
+               /** all events binding here */
+               bindEvents : function(){
+               },
+
+               /** schema for the form
+               * If you see that a field should behave similarly in all the 
forms, its 
+               * better to make the change in this.model.schema itself
+               *
+               * Override here ONLY if special case!!
+               */
+
+               fields: ['name', 'description', 'isEnabled', 'type','configs', 
'_vPassword'],
+
+               schema : function(){
+
+                       var attrs = 
_.pick(_.result(this.rangerServiceDefModel,'schemaBase'), 'name', 
'description', 'isEnabled', 'type');
+                       var that = this;
+                       
_.each(this.rangerServiceDefModel.get('configs'),function(v,k){ 
+                               if (v != null) {
+
+                                       var formObj = {};
+                                       var enumObj = 
_.find(that.rangerServiceDefModel.get('enums'), function(e){ return e && e.name 
== v.type;});
+                                       if (enumObj !== undefined ){
+                                               formObj.type = 'Select';
+                                               formObj.options = 
_.pluck(_.compact(enumObj.elements),'label'); 
+                                       } else {
+                                               switch(v.type){
+                                                       case 'string' : 
formObj.type = 'Text'; break;
+                                                       case 'bool' : 
formObj.type = 'Checkbox'; formObj.options = { y: 'Yes', n: 'No' }; break;
+                                                       case 'int' : 
formObj.type = 'Number'; break;
+                                                       default : formObj.type 
= 'Text'; break;
+                                               }       
+
+
+                                       }
+                                       formObj.title = v.label || v.name;
+                                       formObj.validators = [];
+                                       if (_.has(v,'mandatory') && 
v.mandatory){
+                                               
formObj.validators.push('required');
+                                               formObj.title = formObj.title 
+" *"
+                                       }
+                                       formObj['class'] = 'serviceConfig';
+                                       var name = v.name;
+                                       attrs[name] = formObj;
+                               }
+                       });
+                       return attrs;
+               },
+
+               /** on render callback */
+               render: function(options) {
+                       Backbone.Form.prototype.render.call(this, options);
+
+                       this.initializePlugins();
+                       this.renderCustomFields();
+                       /*if(!this.model.isNew())
+                               
this.fields.serviceType.editor.$el.prop('disabled',true);
+                       else
+                               
this.fields.activeStatus.editor.setValue(XAEnums.ActiveStatus.STATUS_ENABLED.value);
+                       */
+                       if(this.model.isNew())
+                               
this.fields.isEnabled.editor.setValue(XAEnums.ActiveStatus.STATUS_ENABLED.value);
+                       else{
+                               //Set isEnabled Status
+                               if(!_.isUndefined(this.model.get('isEnabled')))
+                                       
if(XAEnums.ActiveStatus.STATUS_ENABLED.value == this.model.get('isEnabled'))
+                                               
this.fields.isEnabled.editor.setValue(XAEnums.ActiveStatus.STATUS_ENABLED.value);
+                                       else
+                                               
this.fields.isEnabled.editor.setValue(XAEnums.ActiveStatus.STATUS_DISABLED.value);
+                       }
+               },
+
+               /** all custom field rendering */
+               renderCustomFields: function(){
+               },
+
+               /** all post render plugin initialization */
+               initializePlugins: function(){
+               },
+
+               formValidation : function(){
+                       //return false;
+                       return true;
+               },
+
+               beforeSave : function(){
+                       var that = this;
+                       //Set configs for service 
+                       var config = {};
+                       
_.each(this.rangerServiceDefModel.get('configs'),function(obj){
+                               if(!_.isNull(obj)){
+                                       config[obj.name] = 
that.model.get(obj.name).toString();
+                                       that.model.unset(obj.name);
+                               }
+                       });
+                       this.model.set('configs',JSON.stringify(config));
+                       
+                       //Set service type
+                       _.each(XAEnums.AssetType, function(asset){
+                               if(asset.label.toUpperCase() == 
this.rangerServiceDefModel.get('name').toUpperCase())
+                                       this.model.set('type',asset.label)
+                       },this);
+//                     
+                       //Set isEnabled
+                       if(parseInt(this.model.get('isEnabled')) == 
XAEnums.ActiveStatus.STATUS_ENABLED.value)
+                               this.model.set('isEnabled',true);
+                       else
+                               this.model.set('isEnabled',false);
+                       
+                       //Remove unwanted attributes from model
+                       if(!this.model.isNew()){
+                               
_.each(JSON.parse(this.model.attributes.configs),function(value, name){
+                                       this.model.unset(name)
+                               },this);
+                       }
+               },
+
+               removeElementFromArr : function(arr ,elem){
+                       var index = $.inArray(elem,arr);
+                       if(index >= 0) arr.splice(index,1);
+                       return arr;
+               }
+       });
+
+       return ServiceForm;
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/scripts/views/service/ServiceTableLayout.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/service/ServiceTableLayout.js 
b/security-admin/src/main/webapp/scripts/views/service/ServiceTableLayout.js
new file mode 100644
index 0000000..284135b
--- /dev/null
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceTableLayout.js
@@ -0,0 +1,164 @@
+/*
+ * 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.
+ */
+
+ 
+define(function(require){
+    'use strict';
+
+       var Backbone            = require('backbone');
+       var Communicator        = require('communicator');
+       var App                         = require('App');
+       var XALinks             = require('modules/XALinks');
+       var XAEnums             = require('utils/XAEnums');
+       var XAGlobals           = require('utils/XAGlobals');
+       var localization        = require('utils/XALangSupport');
+       
+       var XABackgrid          = require('views/common/XABackgrid');
+       var XATableLayout       = require('views/common/XATableLayout');
+
+       var AssettablelayoutTmpl = 
require('hbs!tmpl/asset/AssetTableLayout_tmpl'); 
+
+       require('backgrid-filter');
+       require('backgrid-paginator');
+       require('bootbox');
+
+       var AssetTableLayout = Backbone.Marionette.Layout.extend(
+       /** @lends AssetTableLayout */
+       {
+               _viewName : 'AssetTableLayout',
+               
+       template: AssettablelayoutTmpl,
+        
+               /*
+       breadCrumbs :function(){
+               if(this.model.isNew())
+                       return [XALinks.get(''), XALinks.get('')];
+               else
+                       return [XALinks.get(''), XALinks.get('')];
+       },        
+               */
+
+               /** Layout sub regions */
+       regions: {
+                       'rTableList'    : 'div[data-id="r_assettable"]'
+               },
+
+       /** ui selector cache */
+       ui: {},
+
+               /** ui events hash */
+               events: function() {
+                       var events = {};
+                       //events['change ' + this.ui.input]  = 'onInputChange';
+                       return events;
+               },
+
+       /**
+               * intialize a new AssetTableLayout Layout 
+               * @constructs
+               */
+               initialize: function(options) {
+                       console.log("initialized a AssetTableLayout Layout");
+
+                       _.extend(this, _.pick(options, ''));
+                       
+                       this.collection.extraSearchParams = {
+                               //resourceType : 
XAEnums.AssetType.ASSET_HDFS.value     
+                       };
+
+                       this.bindEvents();
+               },
+
+               /** all events binding here */
+               bindEvents : function(){
+                       /*this.listenTo(this.model, "change:foo", 
this.modelChanged, this);*/
+                       /*this.listenTo(communicator.vent,'someView:someEvent', 
this.someEventHandler, this)'*/
+               },
+
+               /** on render callback */
+               onRender: function() {
+                       this.initializePlugins();
+                       this.renderTable();
+               },
+
+               /** all post render plugin initialization */
+               initializePlugins: function(){
+               },
+
+               renderTable : function(){
+                       var that = this;
+                       var TableRow = Backgrid.Row.extend({
+                               events: {
+                                       'click' : 'onClick'
+                               },
+                               onClick: function (e) {
+                                       if($(e.toElement).is('.icon-edit'))
+                                               return;
+                                       
this.$el.parent('tbody').find('tr').removeClass('tr-active');
+                                       this.$el.toggleClass('tr-active');
+                                       that.rFolderInfo.show(new vFolderInfo({
+                                               model : this.model
+                                       }));
+                                                                       
+                               }
+                       });
+
+                       this.rTableList.show(new XATableLayout({
+                               columns: this.getColumns(),
+                               collection: this.collection,
+                               includeFilter : false,
+                               gridOpts : {
+                                       row: TableRow,
+                                       header : XABackgrid,
+                                       emptyText : 
localization.tt('plcHldr.noAssets')
+                               },
+                               filterOpts : {
+                                 name: ['name'],
+                                 placeholder: 
localization.tt('plcHldr.searchByResourcePath'),
+                                 wait: 150
+                               }
+                       }));
+               },
+
+               getColumns : function(){
+                       var that = this;
+                       var cols = {
+                               name : {
+                                       label   : 
localization.tt("lbl.resourcePath"),
+                                       placeholder : 'Resource Path',
+                                       editable:false
+                                       //cell :"uri,"
+                                       /*href: function(model){
+                                               return '#!/policy/' + model.id;
+                                       }*/
+                               }
+                               
+                       };
+                       return this.collection.constructor.getTableCols(cols, 
this.collection);
+               },
+
+
+               /** on close */
+               onClose: function(){
+               }
+
+       });
+
+       return AssetTableLayout; 
+});

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/styles/xa.css
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/styles/xa.css 
b/security-admin/src/main/webapp/styles/xa.css
index 88d2928..d339b6b 100644
--- a/security-admin/src/main/webapp/styles/xa.css
+++ b/security-admin/src/main/webapp/styles/xa.css
@@ -1678,3 +1678,18 @@ td.html-cell.renderable:last-child {
        font-size: 11px;
        font-family: monospace;
 }
+/**************/
+.policy-form .field-name{
+       float: left;
+       margin-bottom: 0 !important;
+}
+.policy-form .field-isEnabled{
+float: left;
+margin-bottom: 0 !important;
+}
+.policy-form .field-isEnabled .controls{
+       margin-left:30px;
+}
+.policy-form .field-database,.policy-form .field-table, .policy-form 
.field-path, .policy-form .field-topology{
+       clear: both;
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/common/ServiceManagerLayout_tmpl.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/common/ServiceManagerLayout_tmpl.html
 
b/security-admin/src/main/webapp/templates/common/ServiceManagerLayout_tmpl.html
new file mode 100644
index 0000000..7981486
--- /dev/null
+++ 
b/security-admin/src/main/webapp/templates/common/ServiceManagerLayout_tmpl.html
@@ -0,0 +1,67 @@
+{{!-- 
+  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.
+--}}
+<h3 class="wrap-header bold">{{tt 'h.repositoryManager'}}</h3>
+
+<div class="wrap non-collapsible policy-manager">
+       <div class="row-fluid">
+       {{#each serviceDefs}}
+               <div class="span4">
+                       <div class="position-relative">
+                               <table class="table table-bordered 
table-striped">
+                                       <!-- table-policy -->
+                                       <thead>
+                                               <tr>
+                                                       <th>
+                                                               <span 
class="policy-title">
+                                                                       <img 
alt="HDFS" src="images/folder-grey.png">
+                                                                       
{{./this.attributes.name}} 
+                                                                       {{#if 
../isSysAdmin}} 
+                                                                               
<a href="#!/service/{{./this.id}}/create"class="pull-right" title="Add"> <i 
class="icon-plus"></i></a> 
+                                                                       {{/if}}
+                                                               </span> 
+                                                       </th>
+                                               </tr>
+                                       </thead>
+                                       <tbody>
+                                               {{{getServices ../services 
this}}}
+
+                                               <!-- <tr>
+                                                       <td>
+                                                               <div>
+                                                                       <a 
data-id="{{./this.id}}" 
href="#!/hdfs/{{./this.id}}/policies">{{./this.attributes.name}}</a>
+                                                                       {{#if 
../isSysAdmin}}
+                                                                       <div 
class="pull-right">
+                                                                               
<a data-id="{{./this.id}}" class="btn btn-mini"
+                                                                               
        href="#!/asset/{{./this.id}}" title="Edit"><i
+                                                                               
        class="icon-edit"></i></a> <a data-id="{{./this.id}}"
+                                                                               
        class="deleteRep btn btn-mini btn-danger"
+                                                                               
        href="javascript:void(0);" title="Delete"><i
+                                                                               
        class="icon-trash"></i></a>
+                                                                       </div>
+                                                                       {{/if}}
+                                                               </div>
+                                                       </td>
+                                               </tr> -->
+                                       </tbody>
+                               </table>
+                               <div data-id="r_tableSpinner" class="loading">
+                               </div>
+                       </div>
+               </div>
+               {{/each}}
+               </div>
+       </div>  

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/common/UserPermissionItem.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/common/UserPermissionItem.html 
b/security-admin/src/main/webapp/templates/common/UserPermissionItem.html
index 481ee61..28baacf 100644
--- a/security-admin/src/main/webapp/templates/common/UserPermissionItem.html
+++ b/security-admin/src/main/webapp/templates/common/UserPermissionItem.html
@@ -39,7 +39,7 @@
 {{/if}}
 {{#each permissions}}
                <td style="cursor:pointer;">
-                       <input data-id="{{./this.value}}" type="checkbox">
+                       <input data-id="{{./this.value}}" 
data-name="{{./this.label}}" type="checkbox">
                </td>
 {{/each}}
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/helpers/XAHelpers.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/templates/helpers/XAHelpers.js 
b/security-admin/src/main/webapp/templates/helpers/XAHelpers.js
index 572212f..d9618bb 100644
--- a/security-admin/src/main/webapp/templates/helpers/XAHelpers.js
+++ b/security-admin/src/main/webapp/templates/helpers/XAHelpers.js
@@ -481,6 +481,36 @@
                }
            return new Handlebars.SafeString(html);
        });
+       Handlebars.registerHelper('getServices', function(services, serviceDef) 
{
+               var XAEnums                     = require('utils/XAEnums');
+               var tr = '';
+               var serviceType = serviceDef.get('name').toUpperCase();
+               _.each(XAEnums.AssetType, function(asset){
+                       if(asset.label.toUpperCase() == 
serviceType.toUpperCase()){
+                               serviceType = asset.label;
+                               return;
+                       }
+               });
+               
+               if(!_.isUndefined(services[serviceType])){
+                       _.each(services[serviceType],function(serv){
+                               serviceName = serv.get('name');
+                               tr += '<tr>\
+                                       <td>\
+                                       <div>\
+                                       <a data-id="'+serv.id+'" 
href="#!/service/'+serv.id+'/policies">'+serv.attributes.name+'</a>\
+                                       <div class="pull-right">\
+                                       <a data-id="'+serv.id+'" class="btn 
btn-mini" href="#!/service/'+serviceDef.id+'/edit/'+serv.id+'" title="Edit"><i 
class="icon-edit"></i></a>\
+                                       <a data-id="'+serv.id+'" 
class="deleteRep btn btn-mini btn-danger" href="javascript:void(0);" 
title="Delete">\
+                                       <i class="icon-trash"></i></a>\
+                                       </div>\
+                                       </div>\
+                                       </td>\
+                                       </tr>';
+                       });
+               }
+               return tr;
+       });
        
 
        return HHelpers;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/policies/GroupPermItem.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/policies/GroupPermItem.html 
b/security-admin/src/main/webapp/templates/policies/GroupPermItem.html
new file mode 100644
index 0000000..08155e1
--- /dev/null
+++ b/security-admin/src/main/webapp/templates/policies/GroupPermItem.html
@@ -0,0 +1,54 @@
+{{!-- 
+  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.
+--}}
+<td>
+       <input  type="text" data-js="selectGroups" />   
+</td>
+
+{{#if policyKnox}}
+<td>
+       <input  type="text" data-js="ipAddress" placeholder="Enter IP 
address"/>        
+</td>
+{{/if}}
+
+{{#if policyStorm}}
+<td>   
+        <span class="tags" id="tags-editable-1" data-toggle="manual" 
data-type="checklist" 
+            data-value="{{stormPerms}}" data-original-title="Select Actions">
+        </span>
+               <a href="#" id="tags-edit-1" data-editable="tags-editable-1" 
class="" style="margin-left:10px;">
+               {{#if isModelNew}}
+                               <i class="icon-plus" title="Add"></i>
+                       {{else}}
+                               <i class="icon-pencil" title="Edit"></i>
+                       {{/if}}
+               </a>
+</td>  
+{{/if}}
+{{#each permissions}}
+       <td style="cursor:pointer;">
+               <input data-id="{{./this.value}}" data-name="{{./this.label}}" 
type="checkbox">
+       </td>
+{{/each}}
+       
+
+
+<td>
+       <button type="button" class="btn btn-small btn-danger " 
data-action="delete">
+               <i class="icon-remove"></i>
+       </button>
+</td>
+

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/policies/GroupPermList.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/policies/GroupPermList.html 
b/security-admin/src/main/webapp/templates/policies/GroupPermList.html
new file mode 100644
index 0000000..ff40e5b
--- /dev/null
+++ b/security-admin/src/main/webapp/templates/policies/GroupPermList.html
@@ -0,0 +1,42 @@
+{{!-- 
+  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 class="control-group">
+       <label class="control-label">{{tt 'lbl.groupPermissions'}}</label>
+       <div class="controls">
+               <table class="table-permission table-condensed">
+                       <thead>
+                               <tr>
+                                       {{#each permHeaders}}
+                                       <th>{{./this}}</th>
+                                       {{/each}}
+
+                               </tr>
+                       </thead>
+                       <tbody class="js-formInput">
+
+                       </tbody>
+               </table>
+       </div>
+</div>
+<div class="control-group">
+       <div class="controls" style="margin-top:-14px">
+               <button type="button" class="btn btn-small" 
data-action="addGroup" title="Add">
+                       <!-- {{tt 'btn.add'}} -->
+                       <i class="icon-plus"></i>
+               </button>
+       </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html 
b/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html
new file mode 100644
index 0000000..6f6d737
--- /dev/null
+++ 
b/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html
@@ -0,0 +1,59 @@
+{{!-- 
+  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.
+--}}
+<form class="form-horizontal">
+       <fieldset>
+               <p class="formHeader">
+                       Policy Details : 
+               </p>
+       <!--ul id="name1"></ul-->
+       <!--div class="control-group field-name">      
+               <label class="control-label" for="name2">Resource Path(new 
impl) *</label>      
+               <div class="controls">        
+                       <input type="text" class="select2-input" id="name2" 
style="width: 250px;">  
+               </div>
+       </div-->
+       <!-- <div class="" data-fields="policyName" style="float:left"></div>
+       <div class="" data-editors="resourceStatus" style="float:left"></div> 
-->
+       <div class="clearfix"></div>
+       <b data-fieldsets class="policy-form"></b>
+       <!-- <div class="" data-fields="name"></div>
+       -->
+       </fieldset>
+        <fieldset>
+               <p class="formHeader">
+                       User and Group Permissions :
+               </p>
+               <div class="" data-customfields="groupPerms">
+                       <div class="control-group">
+                               <label class="control-label">{{tt 
'lbl.groupPermissions'}}</label>
+                               <div class="controls">
+                                       <img src="images/loading.gif" style=" 
margin-left: 4%; margin-top: 1%;" />
+                               </div>
+                       </div>          
+               </div>
+               <div class="" data-customfields="userPerms">
+                       <div class="control-group">
+                               <label class="control-label">{{tt 
'lbl.userPermissions'}}</label>
+                               <div class="controls">
+                                       <img src="images/loading.gif" style=" 
margin-left: 4%; margin-top: 1%;" />
+                               </div>
+                       </div>
+               </div>
+               <!-- <div class="" data-fields="description"></div> -->
+       </fieldset>
+</form>
+

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html
 
b/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html
new file mode 100644
index 0000000..5a8937e
--- /dev/null
+++ 
b/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html
@@ -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.
+--}}
+<h3 class="wrap-header bold"> {{tt 'lbl.listOfPolicies'}} : 
{{rangerService.attributes.name}} </h3>
+<div class="wrap non-collapsible m-height ">
+       <div>
+               <div class="span9">
+                       <div class="visual_search"></div>
+               </div>
+               <div class="clearfix">
+                       <a 
href="#!/service/{{rangerService.id}}/policies/create" class="btn btn-primary 
btn-right" type="button"> {{tt 'lbl.addNewPolicy'}} </a>
+               </div>
+               
+               <div data-id="r_table" class="hdfs-table clickable"></div>
+       </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/policies/UserPermItem.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/policies/UserPermItem.html 
b/security-admin/src/main/webapp/templates/policies/UserPermItem.html
new file mode 100644
index 0000000..481ee61
--- /dev/null
+++ b/security-admin/src/main/webapp/templates/policies/UserPermItem.html
@@ -0,0 +1,51 @@
+{{!-- 
+  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.
+--}}
+<td>
+       <input  type="text" data-js="selectUsers" />    
+</td>
+{{#if policyKnox}}
+<td>
+       <input  type="text" data-js="ipAddress" placeholder="Enter IP 
address"/>        
+</td>
+{{/if}}
+
+{{#if policyStorm}}
+<td>   
+        <span class="tags" id="tags-editable-1" data-toggle="manual" 
data-type="checklist" 
+            data-value="{{stormPerms}}" data-original-title="Select Actions">
+        </span>
+               <a href="#" id="tags-edit-1" data-editable="tags-editable-1" 
class="" style="margin-left:10px;">
+               {{#if isModelNew}}
+                               <i class="icon-plus" title="Add"></i>
+                       {{else}}
+                               <i class="icon-pencil" title="Edit"></i>
+                       {{/if}}
+               </a>
+</td>  
+{{/if}}
+{{#each permissions}}
+               <td style="cursor:pointer;">
+                       <input data-id="{{./this.value}}" type="checkbox">
+               </td>
+{{/each}}
+
+<td>
+       <button type="button" class="btn btn-small btn-danger " 
data-action="delete">
+               <i class="icon-remove"></i>
+       </button>
+</td>
+

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/policies/UserPermList.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/policies/UserPermList.html 
b/security-admin/src/main/webapp/templates/policies/UserPermList.html
new file mode 100644
index 0000000..797ae21
--- /dev/null
+++ b/security-admin/src/main/webapp/templates/policies/UserPermList.html
@@ -0,0 +1,42 @@
+{{!-- 
+  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 class="control-group">
+       <label class="control-label">{{tt 'lbl.userPermissions'}}</label>
+       <div class="controls">
+               <table class="table-permission table-condensed">
+                       <thead>
+                               <tr>
+                                       {{#each permHeaders}}
+                                       <th>{{./this}}</th>
+                                       {{/each}}
+
+                               </tr>
+                       </thead>
+                       <tbody class="js-formInput">
+
+                       </tbody>
+               </table>
+       </div>
+</div>
+<div class="control-group">
+       <div class="controls" style="margin-top:-14px">
+               <button type="button" class="btn btn-small" 
data-action="addUser" title="Add">
+                       <!-- {{tt 'btn.add'}} -->
+                       <i class="icon-plus"></i>
+               </button>
+       </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/service/ServiceCreate_tmpl.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/service/ServiceCreate_tmpl.html 
b/security-admin/src/main/webapp/templates/service/ServiceCreate_tmpl.html
new file mode 100644
index 0000000..43b7f24
--- /dev/null
+++ b/security-admin/src/main/webapp/templates/service/ServiceCreate_tmpl.html
@@ -0,0 +1,36 @@
+{{!-- 
+  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 editAsset}}
+       <h4 class="wrap-header bold"> Edit Repository  </h4>
+{{else}}
+       <h4 class="wrap-header bold"> Create Repository  </h4>
+{{/if}}
+<div class="wrap non-collapsible ">
+       <div data-id="r_form"></div>
+       <div class="form-actions form-asset" class="row-fluid">
+               <button type="submit" data-id="save" class="btn btn-primary">
+                       Save
+               </button>
+               <button type="button" data-id="cancel" class="btn btn-inverse">
+                       Cancel
+               </button>
+               <button type="button" data-id="delete" class="btn btn-danger" 
><!-- style="margin-left: 27%;" -->
+                       Delete
+               </button>
+       </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/service/ServiceForm_tmpl.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/service/ServiceForm_tmpl.html 
b/security-admin/src/main/webapp/templates/service/ServiceForm_tmpl.html
new file mode 100644
index 0000000..0a52755
--- /dev/null
+++ b/security-admin/src/main/webapp/templates/service/ServiceForm_tmpl.html
@@ -0,0 +1,46 @@
+{{!-- 
+  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.
+--}}
+<form class="form-horizontal" >
+       <fieldset class="configProp">
+               <p class="formHeader">
+                       {{tt 'lbl.repositoryDetails'}} :
+               </p>
+               <div class="serviceDetail" data-fields={{serviceDetail}}></div>
+       </fieldset>
+       <fieldset class="configProp">
+       <!-- <b data-fieldsets></b> -->
+               <p class="formHeader">
+                       Config Properties : 
+               </p>
+               <!-- div class="" data-fields="_vPassword"></div-->
+               <!-- div class="" data-fields="pair"></div-->
+               <div class="serviceConfig" data-fields={{serviceConfig}}></div>
+       </fieldset>
+       <div>
+               <div class="control-group field-username hdfs hive knox storm" 
style="display: block;">
+                       <label class="control-label" for="c12_username"></label>
+                       <div class="controls">
+                               <span data-editor="">
+                                       <input data-id="testConn" type="button" 
value="Test Connection" class="btn" />
+                               </span>
+
+                       </div>
+               </div>
+       </div>
+
+</form>
+

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0f177a62/security-admin/src/main/webapp/templates/service/ServiceTableLayout_tmpl.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/service/ServiceTableLayout_tmpl.html 
b/security-admin/src/main/webapp/templates/service/ServiceTableLayout_tmpl.html
new file mode 100644
index 0000000..4769039
--- /dev/null
+++ 
b/security-admin/src/main/webapp/templates/service/ServiceTableLayout_tmpl.html
@@ -0,0 +1,29 @@
+{{!-- 
+  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.
+--}}
+<h3 class="wrap-header bold"> {{tt 'lbl.listOfPolicies'}} : {{tt 'h.hdfs'}} 
</h3>
+<div class="wrap non-collapsible m-height">
+       <div class="span12">
+               <div class="clearfix">
+                       <a href="#!/policy/create" class="btn btn-primary 
btn-right" type="button"> {{tt 'lbl.addNewAsset'}} </a>
+                       <div data-id="r_filter" class="pull-left 
wrap-filter"></div>
+               </div>
+               
+               <div data-id="r_assettable" class="hdfs-table"></div>
+       </div>
+
+</div>
+

Reply via email to