/* * 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. */ package org.apache.ranger.service; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Random; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.ranger.common.AppConstants; import org.apache.ranger.common.DateUtil; import org.apache.ranger.common.MessageEnums; import org.apache.ranger.common.PropertiesUtil; import org.apache.ranger.common.RESTErrorUtil; import org.apache.ranger.common.SearchCriteria; import org.apache.ranger.common.StringUtil; import org.apache.ranger.db.RangerDaoManager; import org.apache.ranger.entity.XXAsset; import org.apache.ranger.entity.XXGroup; import org.apache.ranger.entity.XXPermMap; import org.apache.ranger.entity.XXResource; import org.apache.ranger.entity.XXUser; import org.apache.ranger.view.VXAuditMap; import org.apache.ranger.view.VXAuditMapList; import org.apache.ranger.view.VXDataObject; import org.apache.ranger.view.VXPermMap; import org.apache.ranger.view.VXPermMapList; import org.apache.ranger.view.VXPermObj; import org.apache.ranger.view.VXPolicy; import org.apache.ranger.view.VXPolicyList; import org.apache.ranger.view.VXResource; import org.apache.ranger.view.VXResourceList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class XPolicyService extends PublicAPIServiceBase<VXResource, VXPolicy> { Logger logger = Logger.getLogger(XPolicyService.class); @Autowired RESTErrorUtil restErrorUtil; @Autowired StringUtil stringUtil; @Autowired RangerDaoManager xaDaoMgr; @Autowired XPermMapService xPermMapService; @Autowired XAuditMapService xAuditMapService; @Autowired XResourceService xResourceService; String version; private static String uniqueKeySeparator = "_"; public XPolicyService() { version = PropertiesUtil.getProperty("maven.project.version", ""); } public VXPolicy mapXAToPublicObject(VXResource vXResource) { VXPolicy vXPolicy = new VXPolicy(); vXPolicy = super.mapBaseAttributesToPublicObject(vXResource, vXPolicy); vXPolicy.setPolicyName(StringUtils.trim(vXResource.getPolicyName())); vXPolicy.setResourceName(vXResource.getName()); vXPolicy.setDescription(vXResource.getDescription()); vXPolicy.setRepositoryName(vXResource.getAssetName()); vXPolicy.setRepositoryType(AppConstants .getLabelFor_AssetType(vXResource.getAssetType())); List<VXPermObj> permObjList = mapPermMapToPermObj(vXResource .getPermMapList()); if (!stringUtil.isEmpty(permObjList)) { vXPolicy.setPermMapList(permObjList); } vXPolicy.setTables(vXResource.getTables()); vXPolicy.setColumnFamilies(vXResource.getColumnFamilies()); vXPolicy.setColumns(vXResource.getColumns()); vXPolicy.setDatabases(vXResource.getDatabases()); vXPolicy.setUdfs(vXResource.getUdfs()); vXPolicy.setTopologies(vXResource.getTopologies()); vXPolicy.setServices(vXResource.getServices()); boolean enable = true; if (vXResource.getResourceStatus() == AppConstants.STATUS_DISABLED || vXResource.getResourceStatus() == AppConstants.STATUS_DELETED) { enable = false; } vXPolicy.setIsEnabled(enable); boolean auditEnable = true; if (stringUtil.isEmpty(vXResource.getAuditList())) { auditEnable = false; } vXPolicy.setIsAuditEnabled(auditEnable); vXPolicy.setVersion(version); /* * TODO : These parameters are specific for some components. Need to * take care while adding new component */ if (vXResource.getAssetType() == AppConstants.ASSET_HIVE) { vXPolicy.setTableType(AppConstants .getLabelFor_PolicyType(vXResource.getTableType())); vXPolicy.setColumnType(AppConstants .getLabelFor_PolicyType(vXResource.getColumnType())); } if (vXResource.getAssetType() == AppConstants.ASSET_HDFS) { vXPolicy.setIsRecursive(AppConstants .getBooleanFor_BooleanValue(vXResource.getIsRecursive())); } else { vXPolicy.setIsRecursive(null); } return vXPolicy; } public VXResource mapPublicToXAObject(VXPolicy vXPolicy, int operationContext) { VXResource vXResource = new VXResource(); vXResource = super.mapBaseAttributesToXAObject(vXPolicy, vXResource); vXResource.setName(vXPolicy.getResourceName()); vXResource.setPolicyName(StringUtils.trim(vXPolicy.getPolicyName())); vXResource.setDescription(vXPolicy.getDescription()); vXResource.setResourceType(getResourceType(vXPolicy)); XXAsset xAsset = xaDaoMgr.getXXAsset().findByAssetName( vXPolicy.getRepositoryName()); if (xAsset == null) { throw restErrorUtil.createRESTException("The repository for which " + "you're updating policy, doesn't exist.", MessageEnums.INVALID_INPUT_DATA); } vXResource.setAssetId(xAsset.getId()); if (operationContext == AbstractBaseResourceService.OPERATION_UPDATE_CONTEXT) { XXResource xxResource = xaDaoMgr.getXXResource().getById( vXPolicy.getId()); if (xxResource == null) { logger.error("No policy found with given Id : " + vXPolicy.getId()); throw restErrorUtil .createRESTException("No Policy found with given Id : " + vXResource.getId(), MessageEnums.DATA_NOT_FOUND); } /* * While updating public object we wont have createDate/updateDate, * so create time, addedById, updatedById, etc. we ll have to take * from existing object */ xxResource.setUpdateTime(DateUtil.getUTCDate()); xResourceService .mapBaseAttributesToViewBean(xxResource, vXResource); SearchCriteria scAuditMap = new SearchCriteria(); scAuditMap.addParam("resourceId", xxResource.getId()); VXAuditMapList vXAuditMapList = xAuditMapService .searchXAuditMaps(scAuditMap); List<VXAuditMap> auditList = new ArrayList<VXAuditMap>(); if (vXAuditMapList.getListSize() > 0 && vXPolicy.getIsAuditEnabled()) { auditList.addAll(vXAuditMapList.getVXAuditMaps()); } else if (vXAuditMapList.getListSize() == 0 && vXPolicy.getIsAuditEnabled()) { VXAuditMap vXAuditMap = new VXAuditMap(); vXAuditMap.setAuditType(AppConstants.XA_AUDIT_TYPE_ALL); auditList.add(vXAuditMap); } List<VXPermMap> permMapList = mapPermObjToPermList( vXPolicy.getPermMapList(), vXPolicy); vXResource.setAuditList(auditList); vXResource.setPermMapList(permMapList); } else if (operationContext == AbstractBaseResourceService.OPERATION_CREATE_CONTEXT) { if (vXPolicy.getIsAuditEnabled()) { VXAuditMap vXAuditMap = new VXAuditMap(); vXAuditMap.setAuditType(AppConstants.XA_AUDIT_TYPE_ALL); List<VXAuditMap> auditList = new ArrayList<VXAuditMap>(); auditList.add(vXAuditMap); vXResource.setAuditList(auditList); } if (!stringUtil.isEmpty(vXPolicy.getPermMapList())) { List<VXPermMap> permMapList = mapPermObjToPermList(vXPolicy .getPermMapList()); vXResource.setPermMapList(permMapList); } } vXResource.setDatabases(vXPolicy.getDatabases()); vXResource.setTables(vXPolicy.getTables()); vXResource.setColumnFamilies(vXPolicy.getColumnFamilies()); vXResource.setColumns(vXPolicy.getColumns()); vXResource.setUdfs(vXPolicy.getUdfs()); vXResource.setAssetName(vXPolicy.getRepositoryName()); int assetType = AppConstants.getEnumFor_AssetType(vXPolicy .getRepositoryType()); if (assetType == AppConstants.ASSET_UNKNOWN) { assetType = xAsset.getAssetType(); vXPolicy.setRepositoryType(AppConstants.getLabelFor_AssetType(assetType)); } vXResource.setAssetType(assetType); int resourceStatus = AppConstants.STATUS_ENABLED; if (!vXPolicy.getIsEnabled()) { resourceStatus = AppConstants.STATUS_DISABLED; } vXResource.setResourceStatus(resourceStatus); // Allowing to create policy without checking parent permission vXResource.setCheckParentPermission(AppConstants.BOOL_FALSE); vXResource.setTopologies(vXPolicy.getTopologies()); vXResource.setServices(vXPolicy.getServices()); /* * TODO : These parameters are specific for some components. Need to * take care while adding new component */ if (vXPolicy.getRepositoryType().equalsIgnoreCase( AppConstants.getLabelFor_AssetType(AppConstants.ASSET_HIVE))) { vXResource.setTableType(AppConstants.getEnumFor_PolicyType(vXPolicy .getTableType())); vXResource.setColumnType(AppConstants .getEnumFor_PolicyType(vXPolicy.getColumnType())); } if (vXPolicy.getRepositoryType().equalsIgnoreCase( AppConstants.getLabelFor_AssetType(AppConstants.ASSET_HDFS))) { vXResource.setIsRecursive(AppConstants .getEnumFor_BooleanValue(vXPolicy.getIsRecursive())); } return vXResource; } private List<VXPermMap> mapPermObjToPermList(List<VXPermObj> permObjList, VXPolicy vXPolicy) { Long resId = vXPolicy.getId(); List<VXPermMap> permMapList = new ArrayList<VXPermMap>(); List<VXPermMap> updPermMapList = new ArrayList<VXPermMap>(); Map<String, VXPermMap> newPermMap = new LinkedHashMap<String, VXPermMap>(); Random rand = new Random(); Map<String, XXPermMap> prevPermMap = getPrevPermMap(resId); if (permObjList == null) { permObjList = new ArrayList<VXPermObj>(); } for (VXPermObj permObj : permObjList) { String permGrp = new Date() + " : " + rand.nextInt(9999); String ipAddress = permObj.getIpAddress(); if (!stringUtil.isEmpty(permObj.getUserList())) { int permFor = AppConstants.XA_PERM_FOR_USER; for (String user : permObj.getUserList()) { XXUser xxUser = xaDaoMgr.getXXUser().findByUserName(user); if (xxUser == null) { logger.error("No User found with this name : " + user); throw restErrorUtil.createRESTException( "No User found with name : " + user, MessageEnums.DATA_NOT_FOUND); } Long userId = xxUser.getId(); for (String permission : permObj.getPermList()) { int permType = AppConstants .getEnumFor_XAPermType(permission); VXPermMap vXPermMap = new VXPermMap(); vXPermMap.setPermFor(AppConstants.XA_PERM_FOR_USER); vXPermMap.setPermGroup(permGrp); vXPermMap.setPermType(permType); vXPermMap.setUserId(xxUser.getId()); vXPermMap.setResourceId(resId); vXPermMap.setIpAddress(ipAddress); permMapList.add(vXPermMap); StringBuilder uniqueKey = new StringBuilder(); uniqueKey.append(resId + uniqueKeySeparator); uniqueKey.append(permFor + uniqueKeySeparator); uniqueKey.append(userId + uniqueKeySeparator); uniqueKey.append(permType); newPermMap.put(uniqueKey.toString(), vXPermMap); } } } if (!stringUtil.isEmpty(permObj.getGroupList())) { int permFor = AppConstants.XA_PERM_FOR_GROUP; for (String group : permObj.getGroupList()) { XXGroup xxGroup = xaDaoMgr.getXXGroup().findByGroupName( group); if (xxGroup == null) { logger.error("No UserGroup found with this name : " + group); throw restErrorUtil.createRESTException( "No Group found with name : " + group, MessageEnums.DATA_NOT_FOUND); } Long grpId = xxGroup.getId(); for (String permission : permObj.getPermList()) { int permType = AppConstants .getEnumFor_XAPermType(permission); VXPermMap vXPermMap = new VXPermMap(); vXPermMap.setPermFor(AppConstants.XA_PERM_FOR_GROUP); vXPermMap.setPermGroup(permGrp); vXPermMap.setPermType(permType); vXPermMap.setGroupId(xxGroup.getId()); vXPermMap.setResourceId(resId); vXPermMap.setIpAddress(ipAddress); permMapList.add(vXPermMap); StringBuilder uniqueKey = new StringBuilder(); uniqueKey.append(resId + uniqueKeySeparator); uniqueKey.append(permFor + uniqueKeySeparator); uniqueKey.append(grpId + uniqueKeySeparator); uniqueKey.append(permType); newPermMap.put(uniqueKey.toString(), vXPermMap); } } } } // Create Newly added permissions and Remove deleted permissions from DB if (prevPermMap.isEmpty()) { updPermMapList.addAll(permMapList); } else { for (Entry<String, VXPermMap> entry : newPermMap.entrySet()) { if (!prevPermMap.containsKey(entry.getKey())) { updPermMapList.add(entry.getValue()); } else { VXPermMap vPMap = xPermMapService .populateViewBean(prevPermMap.get(entry.getKey())); VXPermMap vPMapNew = entry.getValue(); vPMap.setIpAddress(vPMapNew.getIpAddress()); updPermMapList.add(vPMap); } } } return updPermMapList; } private Map<String, XXPermMap> getPrevPermMap(Long resId) { List<XXPermMap> xxPermMapList = xaDaoMgr.getXXPermMap() .findByResourceId(resId); Map<String, XXPermMap> prevPermMap = new LinkedHashMap<String, XXPermMap>(); for (XXPermMap xxPermMap : xxPermMapList) { int permFor = xxPermMap.getPermFor(); Long userId = xxPermMap.getUserId(); Long grpId = xxPermMap.getGroupId(); int permType = xxPermMap.getPermType(); StringBuilder uniqueKey = new StringBuilder(); uniqueKey.append(resId + uniqueKeySeparator); uniqueKey.append(permFor + uniqueKeySeparator); if (userId != null) { uniqueKey.append(userId + uniqueKeySeparator); } else if (grpId != null) { uniqueKey.append(grpId + uniqueKeySeparator); } uniqueKey.append(permType); prevPermMap.put(uniqueKey.toString(), xxPermMap); } return prevPermMap; } public List<VXPermObj> mapPermMapToPermObj(List<VXPermMap> permMapList) { List<VXPermObj> permObjList = new ArrayList<VXPermObj>(); HashMap<String, List<VXPermMap>> sortedPemMap = new HashMap<String, List<VXPermMap>>(); if (permMapList != null) { for (VXPermMap vXPermMap : permMapList) { String permGrp = vXPermMap.getPermGroup(); List<VXPermMap> sortedList = sortedPemMap.get(permGrp); if (sortedList == null) { sortedList = new ArrayList<VXPermMap>(); sortedPemMap.put(permGrp, sortedList); } sortedList.add(vXPermMap); } } for (Entry<String, List<VXPermMap>> entry : sortedPemMap.entrySet()) { VXPermObj vXPermObj = new VXPermObj(); List<String> userList = new ArrayList<String>(); List<String> groupList = new ArrayList<String>(); List<String> permList = new ArrayList<String>(); String ipAddress = ""; List<VXPermMap> permListForGrp = entry.getValue(); for (VXPermMap permMap : permListForGrp) { if (permMap.getPermFor() == AppConstants.XA_PERM_FOR_USER) { if (!userList.contains(permMap.getUserName())) { userList.add(permMap.getUserName()); } } else if (permMap.getPermFor() == AppConstants.XA_PERM_FOR_GROUP) { if (!groupList.contains(permMap.getGroupName())) { groupList.add(permMap.getGroupName()); } } String perm = AppConstants.getLabelFor_XAPermType(permMap .getPermType()); if (!permList.contains(perm)) { permList.add(perm); } ipAddress = permMap.getIpAddress(); } if (!userList.isEmpty()) { vXPermObj.setUserList(userList); } if (!groupList.isEmpty()) { vXPermObj.setGroupList(groupList); } vXPermObj.setPermList(permList); vXPermObj.setIpAddress(ipAddress); permObjList.add(vXPermObj); } return permObjList; } public VXPolicyList mapToVXPolicyList(VXResourceList vXResourceList) { List<VXPolicy> policyList = new ArrayList<VXPolicy>(); for (VXResource vXAsset : vXResourceList.getVXResources()) { VXPolicy vXRepo = mapXAToPublicObject(vXAsset); policyList.add(vXRepo); } VXPolicyList vXPolicyList = new VXPolicyList(policyList); return vXPolicyList; } private List<VXPermMap> mapPermObjToPermList(List<VXPermObj> permObjList) { List<VXPermMap> permMapList = new ArrayList<VXPermMap>(); Random rand = new Random(); for (VXPermObj permObj : permObjList) { String ipAddress = permObj.getIpAddress(); if (!stringUtil.isEmpty(permObj.getUserList())) { String permGrp = new Date() + " : " + rand.nextInt(9999); for (String user : permObj.getUserList()) { XXUser xxUser = xaDaoMgr.getXXUser().findByUserName(user); if (xxUser == null) { logger.error("No User found with this name : " + user); throw restErrorUtil.createRESTException( "No User found with name : " + user, MessageEnums.DATA_NOT_FOUND); } for (String permission : permObj.getPermList()) { VXPermMap vXPermMap = new VXPermMap(); int permType = AppConstants .getEnumFor_XAPermType(permission); vXPermMap.setPermFor(AppConstants.XA_PERM_FOR_USER); vXPermMap.setPermGroup(permGrp); vXPermMap.setPermType(permType); vXPermMap.setUserId(xxUser.getId()); vXPermMap.setIpAddress(ipAddress); permMapList.add(vXPermMap); } } } if (!stringUtil.isEmpty(permObj.getGroupList())) { String permGrp = new Date() + " : " + rand.nextInt(9999); for (String group : permObj.getGroupList()) { XXGroup xxGroup = xaDaoMgr.getXXGroup().findByGroupName( group); if (xxGroup == null) { logger.error("No UserGroup found with this name : " + group); throw restErrorUtil.createRESTException( "No User found with name : " + group, MessageEnums.DATA_NOT_FOUND); } for (String permission : permObj.getPermList()) { VXPermMap vXPermMap = new VXPermMap(); int permType = AppConstants .getEnumFor_XAPermType(permission); vXPermMap.setPermFor(AppConstants.XA_PERM_FOR_GROUP); vXPermMap.setPermGroup(permGrp); vXPermMap.setPermType(permType); vXPermMap.setGroupId(xxGroup.getId()); vXPermMap.setIpAddress(ipAddress); permMapList.add(vXPermMap); } } } } return permMapList; } public List<VXPermMap> updatePermGroup(VXResource vXResource) { XXResource xxResource = xaDaoMgr.getXXResource().getById( vXResource.getId()); if (xxResource == null) { logger.info("Resource : " + vXResource.getPolicyName() + " Not Found, while updating PermGroup"); throw restErrorUtil.createRESTException( "Resource Not found to update PermGroup", MessageEnums.DATA_NOT_FOUND); } Long resId = vXResource.getId(); List<VXPermMap> updatedPermMapList = new ArrayList<VXPermMap>(); SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.addParam("resourceId", resId); VXPermMapList currentPermMaps = xPermMapService .searchXPermMaps(searchCriteria); List<VXPermMap> currentPermMapList = currentPermMaps.getVXPermMaps(); HashMap<String, List<String>> userPermMap = new HashMap<String, List<String>>(); for (VXPermMap currentPermMap : currentPermMapList) { Long userId = currentPermMap.getUserId(); Long groupId = currentPermMap.getGroupId(); int permFor = currentPermMap.getPermFor(); int permType = currentPermMap.getPermType(); String ipAddress = currentPermMap.getIpAddress(); String uniKey = resId + uniqueKeySeparator + permFor; if (permFor == AppConstants.XA_PERM_FOR_GROUP) { uniKey = uniKey + uniqueKeySeparator + groupId; } else if (permFor == AppConstants.XA_PERM_FOR_USER) { uniKey = uniKey + uniqueKeySeparator + userId; } List<String> permList = userPermMap.get(uniKey); if (permList == null) { permList = new ArrayList<String>(); userPermMap.put(uniKey, permList); } permList.add(""+permType); if (stringUtil.isEmpty(ipAddress)) { permList.add(ipAddress); } } List<List<String>> masterKeyList = new ArrayList<List<String>>(); List<String> proceedKeyList = new ArrayList<String>(); for (Entry<String, List<String>> upMap : userPermMap.entrySet()) { if (proceedKeyList.contains(upMap.getKey())) { continue; } List<String> keyList = new ArrayList<String>(); keyList.add(upMap.getKey()); proceedKeyList.add(upMap.getKey()); for (Entry<String, List<String>> entry : userPermMap.entrySet()) { if (proceedKeyList.contains(entry.getKey())) { continue; } boolean result = compareTwoListElements(upMap.getValue(), entry.getValue()); if (result) { keyList.add(entry.getKey()); proceedKeyList.add(entry.getKey()); } } masterKeyList.add(keyList); } for (List<String> keyList : masterKeyList) { Random rand = new Random(); String permGrp = new Date() + " : " + rand.nextInt(9999); for (String key : keyList) { SearchCriteria scPermMap = new SearchCriteria(); String[] keyEle = StringUtils.split(key, uniqueKeySeparator); if (keyEle != null && keyEle.length == 3) { int permFor = Integer.parseInt(keyEle[1]); int ugId = Integer.parseInt(keyEle[2]); scPermMap.addParam("resourceId", resId); scPermMap.addParam("permFor", permFor); if (permFor == AppConstants.XA_PERM_FOR_GROUP) { scPermMap.addParam("groupId", ugId); } else if (permFor == AppConstants.XA_PERM_FOR_USER) { scPermMap.addParam("userId", ugId); } VXPermMapList permList = xPermMapService .searchXPermMaps(scPermMap); for (VXPermMap vXPerm : permList.getVXPermMaps()) { vXPerm.setPermGroup(permGrp); xPermMapService.updateResource(vXPerm); updatedPermMapList.add(vXPerm); } } else { logger.info("variable : keyEle, should fulfill the checked" + " condition, but its not fulfilling required " + "condition. Ignoring appropriate permMap from" + " updating permGroup. Key : " + key + "Resource Id : " + resId); } } } return updatedPermMapList; } private boolean compareTwoListElements(List<?> list1, List<?> list2) { if (list1 == null || list2 == null) { return false; } if (list1.size() != list2.size()) { return false; } int listSize = list1.size(); for (int i = 0; i < listSize; i++) { Object obj1 = list1.get(i); if (!list2.contains(obj1)) { return false; } } return true; } public int getResourceType(VXDataObject vObj) { int resourceType = AppConstants.RESOURCE_PATH; if (vObj == null) { return resourceType; } VXPolicy vXPolicy = null; VXResource vXResource = null; if (vObj instanceof VXPolicy) { vXPolicy = (VXPolicy) vObj; } else if (vObj instanceof VXResource) { vXResource = (VXResource) vObj; } else { return resourceType; } String databases = null; String tables = null; String columns = null; String udfs = null; String columnFamilies = null; String topologies = null; String services = null; if (vXPolicy != null) { databases = vXPolicy.getDatabases(); tables = vXPolicy.getTables(); columns = vXPolicy.getColumns(); udfs = vXPolicy.getUdfs(); columnFamilies = vXPolicy.getColumnFamilies(); topologies = vXPolicy.getTopologies(); services = vXPolicy.getServices(); } else if (vXResource != null) { databases = vXResource.getDatabases(); tables = vXResource.getTables(); columns = vXResource.getColumns(); udfs = vXResource.getUdfs(); columnFamilies = vXResource.getColumnFamilies(); topologies = vXResource.getTopologies(); services = vXResource.getServices(); } if (!stringUtil.isEmpty(databases)) { resourceType = AppConstants.RESOURCE_DB; if (!stringUtil.isEmptyOrWildcardAsterisk(tables)) { resourceType = AppConstants.RESOURCE_TABLE; } if (!stringUtil.isEmptyOrWildcardAsterisk(columns)) { resourceType = AppConstants.RESOURCE_COLUMN; } if (!stringUtil.isEmpty(udfs)) { resourceType = AppConstants.RESOURCE_UDF; } } else if (!stringUtil.isEmpty(tables)) { resourceType = AppConstants.RESOURCE_TABLE; if (!stringUtil.isEmptyOrWildcardAsterisk(columnFamilies)) { resourceType = AppConstants.RESOURCE_COL_FAM; } if (!stringUtil.isEmptyOrWildcardAsterisk(columns)) { resourceType = AppConstants.RESOURCE_COLUMN; } } else if (!stringUtil.isEmpty(topologies)) { resourceType = AppConstants.RESOURCE_TOPOLOGY; if (!stringUtil.isEmptyOrWildcardAsterisk(services)) { resourceType = AppConstants.RESOURCE_SERVICE_NAME; } } return resourceType; } }