Support fine-grained attributes of AAF for FW apps 79/41779/1
authorsa282w <sa282w@att.com>
Mon, 9 Apr 2018 16:25:12 +0000 (12:25 -0400)
committersa282w <sa282w@att.com>
Mon, 9 Apr 2018 17:56:58 +0000 (13:56 -0400)
Issue-ID: PORTAL-188

Included the changes for the user story Support fine-grained attributes
of AAF for FW apps.

Change-Id: Ib16e7eeab9d2f9dc0803eb8a37aad6d281c7f454
Signed-off-by: sa282w <sa282w@att.com>
ecomp-sdk/epsdk-app-common/db-scripts/EcompSdkDDLMySql_2_2_Common.sql
ecomp-sdk/epsdk-app-common/db-scripts/EcompSdkDMLMySql_2_2_Common.sql
ecomp-sdk/epsdk-app-common/db-scripts/EcompSdkMySql_Rollback_2_2_to_2_1_Common.sql
ecomp-sdk/epsdk-app-common/db-scripts/EcompSdkMySql_Upgrade_2_1_to_2_2_Common.sql
ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-controllers/admin-controller.js
ecomp-sdk/epsdk-app-overlay/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-admin/modals/role-function-add.html

index 48c5117..31d8be4 100644 (file)
@@ -470,8 +470,9 @@ create table fn_datasource (
 create table fn_function (
     FUNCTION_CD CHARACTER VARYING(30) NOT NULL PRIMARY KEY,
     FUNCTION_NAME CHARACTER VARYING(50) NOT NULL,
-    TYPE VARCHAR(20) NULL DEFAULT NULL,
-    ACTION VARCHAR(20) NULL DEFAULT NULL
+    TYPE VARCHAR(20) NOT NULL,
+    ACTION VARCHAR(20) NOT NULL,
+    UNIQUE KEY function (FUNCTION_CD,TYPE,ACTION)
 );
 
 --
index 067ec92..5022161 100644 (file)
@@ -8,46 +8,45 @@ SET FOREIGN_KEY_CHECKS=1;
 USE ecomp_sdk;
 
 -- fn_function
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_process','Process List');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_job','Job Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_job_create','Job Create');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_job_designer','Process in Designer view');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_task','Task Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_task_search','Task Search');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_map','Map Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_sample','Sample Pages Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('login','Login');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_home','Home Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_customer','Customer Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_reports','Reports Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_profile','Profile Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_admin','Admin Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_feedback','Feedback Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_help','Help Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_logout','Logout Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_notes','Notes Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_ajax','Ajax Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_customer_create','Customer Create');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_profile_create','Profile Create');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_profile_import','Profile Import');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_tab','Sample Tab Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('view_reports','View Raptor reports');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_process','Process List','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_job','Job Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_job_create','Job Create','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_job_designer','Process in Designer view','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_task','Task Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_task_search','Task Search','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_map','Map Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_sample','Sample Pages Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('login','Login','url','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_home','Home Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_customer','Customer Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_reports','Reports Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_profile','Profile Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_admin','Admin Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_feedback','Feedback Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_help','Help Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_logout','Logout Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_notes','Notes Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_ajax','Ajax Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_customer_create','Customer Create','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_profile_create','Profile Create','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_profile_import','Profile Import','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_tab','Sample Tab Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('view_reports','View Raptor reports','menu','*');
 
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_itracker_admin','Itracker Admin/Support menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('quantum_bd','Big Data Function');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('1','test role function');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_hiveconfig','Hive Configuration');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_mapreduce_create','Map Reduce Configuration Create');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_mapreduce_search','Map Reduce Configuration Search');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_hiveconfig_search','Hive Configuration Search');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_hiveconfig_create','Hive Configuration Create');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_test','Test Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_doclib','Document Library Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('doclib','Document Library');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('doclib_admin','Document Library Admin');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_concept','CoNCEPT');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_itracker','iTracker Menu');
-Insert into fn_function (FUNCTION_CD,FUNCTION_NAME) values ('menu_mapreduce','Map Reduce Configuration');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_itracker_admin','Itracker Admin/Support menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('quantum_bd','Big Data Function','url','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_hiveconfig','Hive Configuration','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_mapreduce_create','Map Reduce Configuration Create','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_mapreduce_search','Map Reduce Configuration Search','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_hiveconfig_search','Hive Configuration Search','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_hiveconfig_create','Hive Configuration Create','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_test','Test Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_doclib','Document Library Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('doclib','Document Library','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('doclib_admin','Document Library Admin','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_concept','CoNCEPT','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_itracker','iTracker Menu','menu','*');
+Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_mapreduce','Map Reduce Configuration','menu','*');
 
 -- fn_lu_activity
 Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('add_role','add_role');
index f8a7fbc..627d30f 100644 (file)
@@ -1,10 +1,10 @@
 use ecomp_sdk;
 
+ALTER TABLE fn_function DROP INDEX function;
 
 ALTER TABLE fn_function
 DROP COLUMN type;
 
-
 ALTER TABLE fn_function
 DROP COLUMN action;
 
index 32540c6..474a6b8 100644 (file)
@@ -3,10 +3,53 @@ use ecomp_sdk;
 SET FOREIGN_KEY_CHECKS=0;
 
 alter table fn_function
-add type VARCHAR(20) NULL DEFAULT NULL;
-
+add type VARCHAR(20) NOT NULL;
 
 alter table fn_function
-add action VARCHAR(20) NULL DEFAULT NULL;
+add action VARCHAR(20) NOT NULL;
+
+ALTER TABLE fn_function
+ADD CONSTRAINT function UNIQUE (FUNCTION_CD,TYPE,ACTION);
+
+delete from fn_function where function_cd='1';
 
+update fn_function set type = 'menu' , action = '*'  where function_cd = 'menu_process';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_job';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_job_create';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_job_designer';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_task';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_task_search';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_map';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_sample';
+update fn_function set type = 'url' , action = '*' where function_cd = 'login';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_home';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_customer';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_reports';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_profile';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_admin';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_feedback';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_help';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_logout';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_notes';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_ajax';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_customer_create';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_profile_create';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_profile_import';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_tab';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'view_reports';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_itracker_admin';
+update fn_function set type = 'url' , action = '*' where function_cd = 'quantum_bd';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_hiveconfig';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_mapreduce_create';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_mapreduce_search';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_hiveconfig_search';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_hiveconfig_create';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_test';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_doclib';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'doclib';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'doclib_admin';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_concept';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_itracker';
+update fn_function set type = 'menu' , action = '*' where function_cd = 'menu_mapreduce';
+    
 commit;
\ No newline at end of file
index 0d95e72..a8b8975 100644 (file)
@@ -1,4 +1,4 @@
-appDS2.controller('adminController', function($scope, $http,AdminService, $modal, $routeParams, $rootScope){
+appDS2.controller('adminController', function($scope, $http,AdminService,  $modal, $routeParams, $rootScope){
 
        $scope.totalPages = 5;
        $scope.viewPerPage = 8;
@@ -71,8 +71,63 @@ appDS2.controller('adminController', function($scope, $http,AdminService, $modal
                        
                });
        }
-    
     $scope.addRoleFunction = function(roleData){
+               if(/[^a-zA-Z0-9\-\.\_]/.test(roleData.type)){
+                       errorMsg =  'Type can only contain alphanumeric characters, dots(.) and underscores(_)';
+                       var modalInstance = $modal.open({
+                               templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
+                               controller: ModalInstanceCtrl,
+                               sizeClass: 'modal-small', 
+                               resolve: {
+                                       items: function () {
+                                               return errorMsg;
+                                       }
+                       }
+                       });
+                       return;
+               }       
+               if(roleData.action !== '*' && /[^a-zA-Z0-9\-\.\_]/.test(roleData.action)){
+                       errorMsg =  'Action can only contain alphanumeric characters, hyphens(-), dots(.) and underscores(_) and single asterisk character(*)';
+                       var modalInstance = $modal.open({
+                               templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
+                               controller: ModalInstanceCtrl,
+                               sizeClass: 'modal-small', 
+                               resolve: {
+                                       items: function () {
+                                               return errorMsg;
+                                       }
+                       }
+                       });
+                       return;
+               }
+               if(/[^a-zA-Z0-9\-\:\_\./*]/.test(roleData.code)){
+                       errorMsg =  'Code can only contain alphanumeric characters, hyphens(-), dots(.), colons(:), forwardSlash(/) , asterisk(*) and underscores(_)';
+                       var modalInstance = $modal.open({
+                               templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
+                               controller: ModalInstanceCtrl,
+                               sizeClass: 'modal-small', 
+                               resolve: {
+                                       items: function () {
+                                               return errorMsg;
+                                       }
+                       }
+                       });
+                       return;
+               }
+               if(/[^a-zA-Z0-9\-\_ \.]/.test(roleData.name)){
+                       errorMsg =  'Name can only contain alphanumeric characters, spaces, hyphens(-), dots(.) and underscores(_)';
+                       var modalInstance = $modal.open({
+                               templateUrl: 'app/fusion/scripts/DS2-modal/error_modal.html',
+                               controller: ModalInstanceCtrl,
+                               sizeClass: 'modal-small', 
+                               resolve: {
+                                       items: function () {
+                                               return errorMsg;
+                                       }
+                       }
+                       });
+                       return;
+               }
                AdminService.addRoleFunctionList(roleData).then(function(msg){  
                        var message = msg;
                        if(message.data!=null && message.data!=''){
@@ -100,6 +155,22 @@ appDS2.controller('adminController', function($scope, $http,AdminService, $modal
                $scope.roleFun=items;
                $scope.msg=items;
                
+                $scope.ngRepeatDemo = [
+                       {id: 'menuradiobutton1', value: 'menu', labelvalue: 'menu'},
+                       {id: 'urlradiobutton2', value: 'url', labelvalue: 'url'},
+                       {id: 'otherradiobutton3', value: 'other', labelvalue: 'other'}
+                   ]
+                $scope.selectedvalueradioButtonGroup = {
+                               type: 'menu'
+                           }
+                $scope.roleFun = {
+                               action: '*'
+                           }
+                
+                $scope.selectedvalueradioButtonOther = {
+                               type: ''
+                           }
+               
                // remove role function associated to a role on Role Edit page
                $scope.roleFunRemoveRole = function (roleFunction) {
                        AdminService.removeRoleFunction(roleFunction, $routeParams.roleId).then(function(msg){  
@@ -324,7 +395,12 @@ appDS2.controller('adminController', function($scope, $http,AdminService, $modal
                        });
                }
                
-           $scope.save = function (data) {
+           $scope.save = function (data,type) {
+                       if(type !== 'other'){
+                                       data.type = type ; 
+                       } else{
+                               data.type = $scope.selectedvalueradioButtonOther.type ; 
+                       }
                $modalInstance.close(data);
            };
 
@@ -419,8 +495,8 @@ appDS2.controller('adminController', function($scope, $http,AdminService, $modal
                }
                });
                
-               modalInstance.result.then(function (data) {
-              $scope.addRoleFunction(data);
+               modalInstance.result.then(function (data,type) {
+              $scope.addRoleFunction(data,type);
         });
        }
        
index 5752a27..ad3d538 100644 (file)
@@ -1,4 +1,4 @@
-<div>
+<div class = "ng-scope" style= "height: 710px"" >
        <div class="b2b-modal-header ng-scope in">
                <h2 id="myModalLabel" modal-title="">Role Function Create</h2>
                <div class="corner-button in">
@@ -6,13 +6,14 @@
                                ng-click="$dismiss('cancel')"></button>
                </div>
        </div>
-       
+
        <div class="b2b-modal-body ng-scope ng-isolate-scope in" tabindex="0"
                role="region" aria-label="Modal header text content"
                style="height: 280px;">
 
                <div class="field-group">
-                       <span ID="required" style="color: Red;" visible="false"> *</span>Name <input id="textinputID-2a" ddh-reset ng-model="roleFun['name']"
+                       <span ID="required" style="color: Red;" visible="false"> *</span>Name
+                       <input id="textinputID-2a" ddh-reset ng-model="roleFun['name']"
                                placeholder="Name" class="span12" type="text">
                </div>
                <div class="error-container"
                </div>
                <br>
                <div class="field-group">
-                       <span ID="required" style="color: Red;" visible="false"> *</span>Code <input id="textinputID-2a" ddh-reset ng-model="roleFun['code']"
+                       <span ID="required" style="color: Red;" visible="false"> *</span>Code
+                       <input id="textinputID-2a" ddh-reset ng-model="roleFun['code']"
                                placeholder="Code" class="span12" type="text">
 
                </div>
                <div class="error-container"
                        ng-show="!roleFun['code']||roleFun['code']==0">
-                       <small id="code-required" class="err-message">Code is Required</small>
+                       <small id="code-required" class="err-message">Code is
+                               Required</small>
                </div>
-                       <br>
+               <br>
                <div class="field-group">
-                       Type <input id="textinputID-2b" ddh-reset ng-model="roleFun['type']"
-                               placeholder="Type" class="span12" type="text">
+                       <span ID="required" style="color: Red;" visible="false"> *</span>
+                       Type
+                       <div ng-repeat="radioObj in ngRepeatDemo" class="form-row"
+                               role="radio">
+
+                               <label for="{{radioObj.id}}" class="radio"> <input
+                                       type="radio" ng-model="selectedvalueradioButtonGroup.type"
+                                       ng-disabled="disableCd" name="nameradioButton"
+                                       value="{{radioObj.value}}" id="{{radioObj.id}}"
+                                       name="nameradioButton" ddh-reset> <i class="skin"></i> <span>{{radioObj.labelvalue}}</span>
+                               </label> <br>
+                       </div>
+                       <br> <input
+                               ng-show="selectedvalueradioButtonGroup.type === 'other'"
+                               id="type-property-input" class="adminForm-name-property-input"
+                               ng-model= "selectedvalueradioButtonOther.type" ng-disabled="disableCd" type="text"
+                               maxlength="30" />
+               </div>
+               <div class="error-container"
+                       ng-show="selectedvalueradioButtonGroup.type === 'other'">
+                       <small id="microservices-details-input-url-required"
+                               class="err-message">Type is Required</small>
                </div>
                <br>
                <div class="field-group">
-                       Action <input id="textinputID-2c" ddh-reset ng-model="roleFun['action']"
+                       <span ID="required" style="color: Red;" visible="false"> *</span>Action
+                       <input id="textinputID-2c" ddh-reset ng-model="roleFun['action']"
                                placeholder="Action" class="span12" type="text">
                </div>
-               
+               <div class="error-container"
+                       ng-show="!roleFun['action']||roleFun['action']==0">
+                       <small id="action-required" class="err-message">Action is Required</small>
+               </div>
        </div>
        <br>
-       <div class="b2b-modal-footer ng-scope ng-isolate-scope in">
+
+       <div class="b2b-modal-footer ng-scope ng-isolate-scope in" style = "top: 200px">
                <div class="cta-button-group in">
-                       <button class="btn btn-alt btn-medium" type="button" ng-disabled= "(!roleFun['name']||roleFun['name']==0)|| (!roleFun['code']||roleFun['code']==0)"
-                               ng-click="save(roleFun);">Create</button>
+                       <button class="btn btn-alt btn-medium" type="button" ng-disabled= "(!roleFun['name']||roleFun['name']==0)|| (!roleFun['code']||roleFun['code']==0) || (!selectedvalueradioButtonGroup.type||selectedvalueradioButtonGroup.type.length==0)||(selectedvalueradioButtonGroup.type ==='other'&&(!selectedvalueradioButtonOther.type||selectedvalueradioButtonOther.type.length==0)) || (!roleFun['action']||roleFun['action']==0)"
+                               ng-click="save(roleFun,selectedvalueradioButtonGroup.type)">Create</button>
                        <button class="btn btn-medium" type="button"
                                ng-click="$dismiss('cancel')">Cancel</button>
                </div>