in security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js [30:293]
getFormElements : function(configs, enums, attrs, form, isPolicyForm) {
//Helpers
//Get configs for perticular policy type
var getResourceConfigs = function(configs){
if(XAUtils.isMaskingPolicy(form.model.get('policyType'))){
if(XAUtils.isRenderMasking(form.rangerServiceDefModel.get('dataMaskDef'))){
var resources = form.rangerServiceDefModel.get('dataMaskDef').resources;
if(!_.isEmpty(resources)){
configs = form.rangerServiceDefModel.get('dataMaskDef').resources;
}
configs = _.map(configs, function(obj){ obj.type = 'string'; return obj; });
return configs;
}
}else if(XAUtils.isRowFilterPolicy(form.model.get('policyType'))){
if(XAUtils.isRenderRowFilter(form.rangerServiceDefModel.get('rowFilterDef'))){
configs = form.rangerServiceDefModel.get('rowFilterDef').resources;
configs = _.map(configs, function(obj){ obj.type = 'string'; return obj; });
return configs;
}
}
return configs;
};
var getValidators = function(formObj, v){
formObj.validators = [];
if (_.has(v, 'mandatory') && v.mandatory && v.type != 'bool') {
formObj.validators.push('required');
if (_.isEmpty(formObj.title)) {
formObj.title = formObj.title + " *"
} else {
formObj.title = formObj.title + " *"
}
}
if(_.has(v, 'validationRegEx') && !_.isEmpty(v.validationRegEx) && !v.lookupSupported){
formObj.validators.push({'type': 'regexp', 'regexp':new RegExp(v.validationRegEx), 'message' : v.validationMessage});
}
return formObj;
};
var setDefaultValueToModel = function(form, v) {
if(_.has(v, 'defaultValue') && !_.isEmpty(v.defaultValue) && v.type != 'bool'){
form.model.set(v.name, v.defaultValue)
}
return form;
};
//Get configs for perticular policy type
configs = getResourceConfigs(configs);
configs = _.sortBy(configs, function(m){ return m.itemId });
configs = _.filter(configs, function(m){
if(m.uiHint && !_.isEmpty(m.uiHint) && XAUtils.hideIfNull(m, form)){
return;
}
return m;
})
var samelevelFieldCreated = [];
_.each(configs, function(v, k,config) {
if (v != null) {
var formObj = {}, fieldName, supportedResource = [];
switch (v.type) {
case 'string':
if(!isPolicyForm) {
formObj.type = 'Text';
if(!_.isUndefined(v.uiHint) && !_.isEmpty(v.uiHint)){
var UIHint = JSON.parse(v.uiHint);
if(!_.isUndefined(UIHint.TextFieldWithIcon) && UIHint.TextFieldWithIcon){
formObj.type = 'TextFieldWithIcon';
formObj.errorMsg = UIHint.info;
}
}
break;
}
if($.inArray(v.parent, samelevelFieldCreated) >= 0){
return;
}
if( isPolicyForm ){
var resourceOpts = {};
formObj.type = 'Resource';
formObj.editorClass = "rosource-boder"
formObj['excludeSupport']= v.excludesSupported;
formObj['recursiveSupport'] = v.recursiveSupported;
formObj.name = v.name;
// formObj.level = v.level;
//checkParentHideShow field
formObj.fieldAttrs = { 'data-name' : 'field-'+v.name, 'parent' : v.parent };
formObj.fieldAttrs.fieldClass = "resorces-with-label-css"
formObj['resourceOpts'] = {'data-placeholder': v.label };
if(!_.isUndefined(v.lookupSupported)){
var opts = {};
if(_.has(v, 'validationRegEx') && !_.isEmpty(v.validationRegEx)){
opts['regExpValidation'] = {'type': 'regexp', 'regexp':new RegExp(v.validationRegEx), 'message' : v.validationMessage};
}
//To support single value input
if( XAUtils.isSinglevValueInput(v) ){
opts['singleValueInput'] = true;
}
opts['type'] = v.name;
if(v.lookupSupported){
if (form.serviceName) {
opts['lookupURL'] = "service/plugins/services/lookupResource/"+form.serviceName;
} else {
opts['lookupURL'] = "service/plugins/services/lookupResource/"+form.rangerService.get('name');
}
resourceOpts['select2Opts'] = form.getPlugginAttr(true, opts);
}else{
resourceOpts['select2Opts'] = XAUtils.select2OptionForUserCreateChoice();
if(!_.isUndefined(opts.singleValueInput) && opts.singleValueInput){
resourceOpts['select2Opts']['maximumSelectionSize'] = 1;
}
}
formObj['resourceOpts'] = resourceOpts;
}
//same level resources check
var optionsAttrs = [] ,parentResource;
if(!_.isUndefined(v.level)){
optionsAttrs = _.filter(config,function(field){
if(field.level == v.level && field.parent == v.parent){
return field;
}
});
}
var resourceDef = _.findWhere(optionsAttrs,{'name':v.name});
//for parent leftnode status
if(v.parent){
parentResource = _.findWhere(config ,{'name':v.parent});
}
//show only required resources in acccess policy in order to show their access types
if(!_.isUndefined(v.parent) && !_.isEmpty(v.parent)
&& parentResource.isValidLeaf){
if(form.model && form.model.isNew()) {
optionsAttrs.push({'level':v.level, name:'none',label:'none'});
} else {
optionsAttrs.unshift({'level':v.level, name:'none',label:'none'});
}
}
if(optionsAttrs.length > 1){
var optionsTitle = _.map(optionsAttrs,function(field){ return field.name;});
formObj['sameLevelOpts'] = optionsTitle;
samelevelFieldCreated.push(v.parent);
if(!_.isUndefined(v.parent)){
fieldName = 'sameLevel'+v.level+''+v.parent;
}else{
fieldName = 'sameLevel'+v.level;
}
formObj['title'] = '';
formObj.fieldAttrs.fieldClass = "resorces-css";
formObj['resourcesAtSameLevel'] = true;
// formView is used to listen form events
formObj['formView'] = form;
}
}
break;
case 'bool':
if(!_.isUndefined(v.subType) && !_.isEmpty(v.subType)){
formObj.type = 'Select';
var subType = v.subType.split(':')
formObj.options = [subType[0].substr(0, subType[0].length - 4), subType[1].substr(0, subType[1].length - 5)];
//to set default value
if(form.model.isNew()){
if(!_.isUndefined(v.defaultValue) && v.defaultValue === "false"){
form.model.set(v.name, subType[1].substr(0, subType[1].length - 5))
}
}
}else{
formObj.type = 'Checkbox';
formObj.options = { y : 'Yes',n : 'No'};
}
break;
case 'int':formObj.type = 'Number';break;
case 'enum':
var enumObj = _.find(enums, function(e) {return e && e.name == v.subType;});
formObj.type = 'Select';
// formObj.options = _.pluck(_.compact(enumObj.elements),'label');
formObj.options = _.map((enumObj.elements), function(obj) {
return { 'label' : obj.label, 'val': obj.name};
});
break;
case 'path' :
formObj.type = 'Resource';
formObj.editorClass = "rosource-boder-path"
formObj['excludeSupport']= v.excludesSupported;
formObj['recursiveSupport'] = v.recursiveSupported;
formObj['name'] = v.name;
formObj['editorAttrs'] = {'data-placeholder': v.label };
formObj.fieldAttrs = { 'data-name' : 'field-'+v.name, 'parent' : v.parent };
formObj.fieldAttrs.fieldClass = "resorces-with-label-css"
if(!_.isUndefined(v.lookupSupported)){
var options = {
'containerCssClass' : v.name,
};
if(v.lookupSupported){
if (form.serviceName) {
options['lookupURL'] = "service/plugins/services/lookupResource/"+form.serviceName;
} else {
options['lookupURL'] = "service/plugins/services/lookupResource/"+form.rangerService.get('name');
}
}
//to support regexp level validation
if(_.has(v, 'validationRegEx') && !_.isEmpty(v.validationRegEx)){
options['regExpValidation'] = {'type': 'regexp', 'regexp':new RegExp(v.validationRegEx), 'message' : v.validationMessage};
}
form.pathFieldName = v.name;
form.pathPluginOpts = options;
form.initilializePathPlugin = true;
}
formObj['initilializePathPlugin'] = true;
var optionsAttrs = [] ,parentResource;
if(!_.isUndefined(v.level)){
optionsAttrs = _.filter(config,function(field){
if(field.level == v.level && field.parent == v.parent){
return field;
}
});
}
var resourceDef = _.findWhere(optionsAttrs,{'name':v.name});
//for parent leftnode status
if(v.parent){
parentResource = _.findWhere(config ,{'name':v.parent});
}
//show only required resources in acccess policy in order to show their access types
if(!_.isUndefined(v.parent) && !_.isEmpty(v.parent)
&& parentResource.isValidLeaf){
if(form.model && form.model.isNew()) {
optionsAttrs.push({'level':v.level, name:'none',label:'none'});
} else {
optionsAttrs.unshift({'level':v.level, name:'none',label:'none'});
}
}
if(optionsAttrs.length > 1){
var optionsTitle = _.map(optionsAttrs,function(field){ return field.name;});
formObj['sameLevelOpts'] = optionsTitle;
samelevelFieldCreated.push(v.parent);
if(!_.isUndefined(v.parent)){
fieldName = 'sameLevel'+v.level+''+v.parent;
}else{
fieldName = 'sameLevel'+v.level;
}
formObj['title'] = '';
formObj['resourcesAtSameLevel'] = true;
// formView is used to listen form events
formObj['formView'] = form;
}
break;
case 'password':formObj.type = 'Password';break;
default:formObj.type = 'Text';
break;
}
if(_.isUndefined(formObj.title)){
formObj.title = v.label || v.name;
}
formObj = getValidators(formObj, v);
if(form.model.isNew()){
form = setDefaultValueToModel(form, v)
}
formObj['class'] = 'serviceConfig';
if(_.isUndefined(fieldName)){
fieldName = v.name;
}
attrs[fieldName] = formObj;
}
});
return attrs;
},