You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ve...@apache.org on 2015/04/13 15:56:02 UTC

incubator-ranger git commit: RANGER-392 : Implement update/delete of ServiceDef Object

Repository: incubator-ranger
Updated Branches:
  refs/heads/master fabc9e205 -> c1de019f4


RANGER-392 : Implement update/delete of ServiceDef Object

Signed-off-by: Velmurugan Periasamy <ve...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/c1de019f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/c1de019f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/c1de019f

Branch: refs/heads/master
Commit: c1de019f45437c632ee4aaf97b9d43cd822a4183
Parents: fabc9e2
Author: Gautam Borad <gb...@gmail.com>
Authored: Mon Apr 13 14:52:10 2015 +0530
Committer: Velmurugan Periasamy <ve...@apache.org>
Committed: Mon Apr 13 09:55:34 2015 -0400

----------------------------------------------------------------------
 .../org/apache/ranger/biz/ServiceDBStore.java   | 520 ++++++++++++++++++-
 .../ranger/db/XXAccessTypeDefGrantsDao.java     |  24 +
 .../java/org/apache/ranger/db/XXPolicyDao.java  |  12 +
 .../apache/ranger/db/XXPolicyItemAccessDao.java |  12 +
 .../ranger/db/XXPolicyItemConditionDao.java     |  12 +
 .../apache/ranger/db/XXPolicyResourceDao.java   |  12 +
 .../org/apache/ranger/db/XXResourceDefDao.java  |  12 +
 .../java/org/apache/ranger/db/XXServiceDao.java |  15 +
 .../ranger/entity/XXAccessTypeDefGrants.java    |   8 +-
 .../org/apache/ranger/rest/PublicAPIsv2.java    |   8 +-
 .../org/apache/ranger/rest/ServiceREST.java     |  11 +-
 .../resources/META-INF/jpa_named_queries.xml    |  37 +-
 .../org/apache/ranger/rest/TestServiceREST.java |   9 +-
 .../rest/TestServiceRESTForValidation.java      |  11 +-
 14 files changed, 674 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 7da3d8b..239723a 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -57,6 +57,7 @@ import org.apache.ranger.db.XXPolicyResourceMapDao;
 import org.apache.ranger.db.XXResourceDefDao;
 import org.apache.ranger.db.XXServiceConfigDefDao;
 import org.apache.ranger.db.XXServiceConfigMapDao;
+import org.apache.ranger.db.XXServiceDao;
 import org.apache.ranger.entity.XXAccessTypeDef;
 import org.apache.ranger.entity.XXAccessTypeDefGrants;
 import org.apache.ranger.entity.XXContextEnricherDef;
@@ -287,8 +288,8 @@ public class ServiceDBStore extends AbstractServiceStore {
 			XXAccessTypeDefGrantsDao xxATDGrantDao = daoMgr.getXXAccessTypeDefGrants();
 			for(String impliedGrant : impliedGrants) {
 				XXAccessTypeDefGrants xImpliedGrant = new XXAccessTypeDefGrants();
-				xImpliedGrant.setAtdid(xAccessType.getId());
-				xImpliedGrant.setImpliedgrant(impliedGrant);
+				xImpliedGrant.setAtdId(xAccessType.getId());
+				xImpliedGrant.setImpliedGrant(impliedGrant);
 				xImpliedGrant = xxATDGrantDao.create(xImpliedGrant);
 			}
 		}
@@ -345,34 +346,529 @@ public class ServiceDBStore extends AbstractServiceStore {
 	}
 
 	@Override
-	public RangerServiceDef updateServiceDef(RangerServiceDef serviceDef)
-			throws Exception {
+	public RangerServiceDef updateServiceDef(RangerServiceDef serviceDef) throws Exception {
 		if (LOG.isDebugEnabled()) {
 			LOG.debug("==> ServiceDefDBStore.updateServiceDef(" + serviceDef + ")");
 		}
 
-		RangerServiceDef ret = null;
+		Long serviceDefId = serviceDef.getId();
+
+		XXServiceDef existing = daoMgr.getXXServiceDef().getById(serviceDefId);
+		if (existing == null) {
+			throw restErrorUtil.createRESTException("no service-def exists with ID=" + serviceDef.getId(),
+					MessageEnums.DATA_NOT_FOUND);
+		}
+
+		String existingName = existing.getName();
+
+		boolean renamed = !StringUtils.equalsIgnoreCase(serviceDef.getName(), existingName);
+
+		if (renamed) {
+			XXServiceDef renamedSVCDef = daoMgr.getXXServiceDef().findByName(serviceDef.getName());
+
+			if (renamedSVCDef != null) {
+				throw restErrorUtil.createRESTException(
+						"another service-def already exists with name '" + serviceDef.getName() + "'. ID="
+								+ renamedSVCDef.getId(), MessageEnums.DATA_NOT_UPDATABLE);
+			}
+		}
+
+		List<RangerServiceConfigDef> configs 			= serviceDef.getConfigs() != null 			? serviceDef.getConfigs()   		  : new ArrayList<RangerServiceConfigDef>();
+		List<RangerResourceDef> resources 				= serviceDef.getResources() != null  		? serviceDef.getResources() 		  : new ArrayList<RangerResourceDef>();
+		List<RangerAccessTypeDef> accessTypes 			= serviceDef.getAccessTypes() != null 		? serviceDef.getAccessTypes() 	  	  : new ArrayList<RangerAccessTypeDef>();
+		List<RangerPolicyConditionDef> policyConditions = serviceDef.getPolicyConditions() != null 	? serviceDef.getPolicyConditions() 	  : new ArrayList<RangerPolicyConditionDef>();
+		List<RangerContextEnricherDef> contextEnrichers = serviceDef.getContextEnrichers() != null 	? serviceDef.getContextEnrichers() 	  : new ArrayList<RangerContextEnricherDef>();
+		List<RangerEnumDef> enums 						= serviceDef.getEnums() != null 			? serviceDef.getEnums() 			  : new ArrayList<RangerEnumDef>();
+
+		Long version = serviceDef.getVersion();
+		if (version == null) {
+			version = new Long(1);
+			LOG.info("Found Version Value: `null`, so setting value of version to 1. While updating object version should not be null.");
+		} else {
+			version = new Long(version.longValue() + 1);
+		}
+		serviceDef.setVersion(version);
+		serviceDef = serviceDefService.update(serviceDef);
+		XXServiceDef createdSvcDef = daoMgr.getXXServiceDef().getById(serviceDefId);
+
+		updateChildObjectsOfServiceDef(createdSvcDef, configs, resources, accessTypes, policyConditions, contextEnrichers, enums);
 
-		// TODO: updateServiceDef()
+		RangerServiceDef updatedSvcDef = getServiceDef(serviceDefId);
+		dataHistService.createObjectDataHistory(updatedSvcDef, RangerDataHistService.ACTION_UPDATE);
 
 		if (LOG.isDebugEnabled()) {
-			LOG.debug("<== ServiceDefDBStore.updateServiceDef(" + serviceDef + "): " + ret);
+			LOG.debug("<== ServiceDefDBStore.updateServiceDef(" + serviceDef + "): " + serviceDef);
 		}
 
-		return ret;
+		return updatedSvcDef;
 	}
 
+	public void updateChildObjectsOfServiceDef(XXServiceDef createdSvcDef, List<RangerServiceConfigDef> configs,
+			List<RangerResourceDef> resources, List<RangerAccessTypeDef> accessTypes,
+			List<RangerPolicyConditionDef> policyConditions, List<RangerContextEnricherDef> contextEnrichers,
+			List<RangerEnumDef> enums) {
+
+		Long serviceDefId = createdSvcDef.getId();
+
+		List<XXServiceConfigDef> xxConfigs = daoMgr.getXXServiceConfigDef().findByServiceDefId(serviceDefId);
+		List<XXResourceDef> xxResources = daoMgr.getXXResourceDef().findByServiceDefId(serviceDefId);
+		List<XXAccessTypeDef> xxAccessTypes = daoMgr.getXXAccessTypeDef().findByServiceDefId(serviceDefId);
+		List<XXPolicyConditionDef> xxPolicyConditions = daoMgr.getXXPolicyConditionDef().findByServiceDefId(
+				serviceDefId);
+		List<XXContextEnricherDef> xxContextEnrichers = daoMgr.getXXContextEnricherDef().findByServiceDefId(
+				serviceDefId);
+		List<XXEnumDef> xxEnums = daoMgr.getXXEnumDef().findByServiceDefId(serviceDefId);
+
+		XXServiceConfigDefDao xxServiceConfigDao = daoMgr.getXXServiceConfigDef();
+		for (RangerServiceConfigDef config : configs) {
+			boolean found = false;
+			for (XXServiceConfigDef xConfig : xxConfigs) {
+				if (config.getId() != null && config.getId().equals(xConfig.getId())) {
+					found = true;
+					xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef,
+							RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+					xConfig = xxServiceConfigDao.update(xConfig);
+					config = serviceDefService.populateXXToRangerServiceConfigDef(xConfig);
+					break;
+				}
+			}
+			if (!found) {
+				XXServiceConfigDef xConfig = new XXServiceConfigDef();
+				xConfig = serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, createdSvcDef,
+						RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+				xConfig = xxServiceConfigDao.create(xConfig);
+				config = serviceDefService.populateXXToRangerServiceConfigDef(xConfig);
+			}
+		}
+		for (XXServiceConfigDef xConfig : xxConfigs) {
+			boolean found = false;
+			for (RangerServiceConfigDef config : configs) {
+				if (xConfig.getId() != null && xConfig.getId().equals(config.getId())) {
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				xxServiceConfigDao.remove(xConfig);
+			}
+		}
+
+		XXResourceDefDao xxResDefDao = daoMgr.getXXResourceDef();
+		for (RangerResourceDef resource : resources) {
+			boolean found = false;
+			for (XXResourceDef xRes : xxResources) {
+				if (resource.getId() != null && resource.getId().equals(xRes.getId())) {
+					found = true;
+					xRes = serviceDefService.populateRangerResourceDefToXX(resource, xRes, createdSvcDef,
+							RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+					xxResDefDao.update(xRes);
+					resource = serviceDefService.populateXXToRangerResourceDef(xRes);
+					break;
+				}
+			}
+			if (!found) {
+				XXResourceDef parent = xxResDefDao.findByNameAndServiceDefId(resource.getParent(), serviceDefId);
+				Long parentId = (parent != null) ? parent.getId() : null;
+
+				XXResourceDef xResource = new XXResourceDef();
+				xResource = serviceDefService.populateRangerResourceDefToXX(resource, xResource, createdSvcDef,
+						RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+				xResource.setParent(parentId);
+				xResource = xxResDefDao.create(xResource);
+			}
+		}
+		for (XXResourceDef xRes : xxResources) {
+			boolean found = false;
+			for (RangerResourceDef resource : resources) {
+				if (xRes.getId() != null && xRes.getId().equals(resource.getId())) {
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				List<XXPolicyResource> policyResList = daoMgr.getXXPolicyResource().findByResDefId(xRes.getId());
+				if (!stringUtil.isEmpty(policyResList)) {
+					throw restErrorUtil.createRESTException("Policy/Policies are referring to this resource: "
+							+ xRes.getName() + ". Please remove such references from policy before updating service-def.",
+							MessageEnums.DATA_NOT_UPDATABLE);
+				}
+				deleteXXResourceDef(xRes);
+			}
+		}
+
+		XXAccessTypeDefDao xxATDDao = daoMgr.getXXAccessTypeDef();
+		for (RangerAccessTypeDef access : accessTypes) {
+			boolean found = false;
+			for (XXAccessTypeDef xAccess : xxAccessTypes) {
+				if (access.getId() != null && access.getId().equals(xAccess.getId())) {
+					found = true;
+					xAccess = serviceDefService.populateRangerAccessTypeDefToXX(access, xAccess, createdSvcDef,
+							RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+					xAccess = xxATDDao.update(xAccess);
+
+					Collection<String> impliedGrants = access.getImpliedGrants();
+					XXAccessTypeDefGrantsDao xxATDGrantDao = daoMgr.getXXAccessTypeDefGrants();
+					List<String> xxImpliedGrants = xxATDGrantDao.findImpliedGrantsByATDId(xAccess.getId());
+					for (String impliedGrant : impliedGrants) {
+						boolean foundGrant = false;
+						for (String xImpliedGrant : xxImpliedGrants) {
+							if (StringUtils.equalsIgnoreCase(impliedGrant, xImpliedGrant)) {
+								foundGrant = true;
+								break;
+							}
+						}
+						if (!foundGrant) {
+							XXAccessTypeDefGrants xImpliedGrant = new XXAccessTypeDefGrants();
+							xImpliedGrant.setAtdId(xAccess.getId());
+							xImpliedGrant.setImpliedGrant(impliedGrant);
+							xImpliedGrant = xxATDGrantDao.create(xImpliedGrant);
+						}
+					}
+					for (String xImpliedGrant : xxImpliedGrants) {
+						boolean foundGrant = false;
+						for (String impliedGrant : impliedGrants) {
+							if (StringUtils.equalsIgnoreCase(xImpliedGrant, impliedGrant)) {
+								foundGrant = true;
+								break;
+							}
+						}
+						if (!foundGrant) {
+							XXAccessTypeDefGrants xATDGrant = xxATDGrantDao.findByNameAndATDId(xAccess.getId(),
+									xImpliedGrant);
+							xxATDGrantDao.remove(xATDGrant);
+
+						}
+					}
+					access = serviceDefService.populateXXToRangerAccessTypeDef(xAccess);
+					break;
+				}
+			}
+			if (!found) {
+				XXAccessTypeDef xAccessType = new XXAccessTypeDef();
+				xAccessType = serviceDefService.populateRangerAccessTypeDefToXX(access, xAccessType, createdSvcDef,
+						RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+				xAccessType = xxATDDao.create(xAccessType);
+
+				Collection<String> impliedGrants = access.getImpliedGrants();
+				XXAccessTypeDefGrantsDao xxATDGrantDao = daoMgr.getXXAccessTypeDefGrants();
+				for (String impliedGrant : impliedGrants) {
+					XXAccessTypeDefGrants xImpliedGrant = new XXAccessTypeDefGrants();
+					xImpliedGrant.setAtdId(xAccessType.getId());
+					xImpliedGrant.setImpliedGrant(impliedGrant);
+					xImpliedGrant = xxATDGrantDao.create(xImpliedGrant);
+				}
+				access = serviceDefService.populateXXToRangerAccessTypeDef(xAccessType);
+			}
+		}
+
+		for (XXAccessTypeDef xAccess : xxAccessTypes) {
+			boolean found = false;
+			for (RangerAccessTypeDef access : accessTypes) {
+				if (xAccess.getId() != null && xAccess.getId().equals(access.getId())) {
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				List<XXPolicyItemAccess> polItemAccessList = daoMgr.getXXPolicyItemAccess().findByType(xAccess.getId());
+				if(!stringUtil.isEmpty(polItemAccessList)) {
+					throw restErrorUtil.createRESTException("Policy/Policies are referring to this access-type: "
+							+ xAccess.getName() + ". Please remove such references from policy before updating service-def.",
+							MessageEnums.DATA_NOT_UPDATABLE);
+				}
+				deleteXXAccessTypeDef(xAccess);
+			}
+		}
+
+		XXPolicyConditionDefDao xxPolCondDao = daoMgr.getXXPolicyConditionDef();
+		for (RangerPolicyConditionDef condition : policyConditions) {
+			boolean found = false;
+			for (XXPolicyConditionDef xCondition : xxPolicyConditions) {
+				if (condition.getId() != null && condition.getId().equals(xCondition.getId())) {
+					found = true;
+					xCondition = serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition,
+							createdSvcDef, RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+					xCondition = xxPolCondDao.update(xCondition);
+					condition = serviceDefService.populateXXToRangerPolicyConditionDef(xCondition);
+					break;
+				}
+			}
+			if (!found) {
+				XXPolicyConditionDef xCondition = new XXPolicyConditionDef();
+				xCondition = serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition,
+						createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+				xCondition = xxPolCondDao.create(xCondition);
+				condition = serviceDefService.populateXXToRangerPolicyConditionDef(xCondition);
+			}
+		}
+		for(XXPolicyConditionDef xCondition : xxPolicyConditions) {
+			boolean found = false;
+			for(RangerPolicyConditionDef condition : policyConditions) {
+				if(xCondition.getId() != null && xCondition.getId().equals(condition.getId())) {
+					found = true;
+					break;
+				}
+			}
+			if(!found) {
+				List<XXPolicyItemCondition> policyItemCondList = daoMgr.getXXPolicyItemCondition()
+						.findByPolicyConditionDefId(xCondition.getId());
+				if(!stringUtil.isEmpty(policyItemCondList)) {
+					throw restErrorUtil.createRESTException("Policy/Policies are referring to this policy-condition: "
+							+ xCondition.getName() + ". Please remove such references from policy before updating service-def.",
+							MessageEnums.DATA_NOT_UPDATABLE);
+				}
+				for(XXPolicyItemCondition policyItemCond : policyItemCondList) {
+					daoMgr.getXXPolicyItemCondition().remove(policyItemCond);
+				}
+				xxPolCondDao.remove(xCondition);
+			}
+		}
+
+		XXContextEnricherDefDao xxContextEnricherDao = daoMgr.getXXContextEnricherDef();
+		for (RangerContextEnricherDef context : contextEnrichers) {
+			boolean found = false;
+			for (XXContextEnricherDef xContext : xxContextEnrichers) {
+				if (context.getId() != null && context.getId().equals(xContext.getId())) {
+					found = true;
+					xContext = serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, createdSvcDef,
+							RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+					xContext = xxContextEnricherDao.update(xContext);
+					context = serviceDefService.populateXXToRangerContextEnricherDef(xContext);
+					break;
+				}
+			}
+			if (!found) {
+				XXContextEnricherDef xContext = new XXContextEnricherDef();
+				xContext = serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, createdSvcDef,
+						RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+				context = serviceDefService.populateXXToRangerContextEnricherDef(xContext);
+			}
+		}
+		for (XXContextEnricherDef xContext : xxContextEnrichers) {
+			boolean found = false;
+			for (RangerContextEnricherDef context : contextEnrichers) {
+				if (xContext.getId() != null && xContext.getId().equals(context.getId())) {
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				daoMgr.getXXContextEnricherDef().remove(xContext);
+			}
+		}
+
+		XXEnumDefDao xxEnumDefDao = daoMgr.getXXEnumDef();
+		for (RangerEnumDef enumDef : enums) {
+			boolean found = false;
+			for (XXEnumDef xEnumDef : xxEnums) {
+				if (enumDef.getId() != null && enumDef.getId().equals(xEnumDef.getId())) {
+					found = true;
+					xEnumDef = serviceDefService.populateRangerEnumDefToXX(enumDef, xEnumDef, createdSvcDef,
+							RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+					xEnumDef = xxEnumDefDao.update(xEnumDef);
+
+					XXEnumElementDefDao xEnumEleDao = daoMgr.getXXEnumElementDef();
+					List<XXEnumElementDef> xxEnumEleDefs = xEnumEleDao.findByEnumDefId(xEnumDef.getId());
+					List<RangerEnumElementDef> enumEleDefs = enumDef.getElements();
+
+					for (RangerEnumElementDef eleDef : enumEleDefs) {
+						boolean foundEle = false;
+						for (XXEnumElementDef xEleDef : xxEnumEleDefs) {
+							if (eleDef.getId() != null && eleDef.getId().equals(xEleDef.getId())) {
+								foundEle = true;
+								xEleDef = serviceDefService.populateRangerEnumElementDefToXX(eleDef, xEleDef, xEnumDef,
+										RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+								xEleDef = xEnumEleDao.update(xEleDef);
+								break;
+							}
+						}
+						if (!foundEle) {
+							XXEnumElementDef xElement = new XXEnumElementDef();
+							xElement = serviceDefService.populateRangerEnumElementDefToXX(eleDef, xElement, xEnumDef,
+									RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+							xElement = xEnumEleDao.create(xElement);
+						}
+					}
+					for (XXEnumElementDef xxEleDef : xxEnumEleDefs) {
+						boolean foundEle = false;
+						for (RangerEnumElementDef enumEle : enumEleDefs) {
+							if (xxEleDef.getId() != null && xxEleDef.getId().equals(enumEle.getId())) {
+								foundEle = true;
+								break;
+							}
+						}
+						if (!foundEle) {
+							xEnumEleDao.remove(xxEleDef);
+						}
+					}
+					enumDef = serviceDefService.populateXXToRangerEnumDef(xEnumDef);
+					break;
+				}
+			}
+			if (!found) {
+				XXEnumDef xEnum = new XXEnumDef();
+				xEnum = serviceDefService.populateRangerEnumDefToXX(enumDef, xEnum, createdSvcDef,
+						RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+				xEnum = xxEnumDefDao.create(xEnum);
+
+				List<RangerEnumElementDef> elements = enumDef.getElements();
+				XXEnumElementDefDao xxEnumEleDefDao = daoMgr.getXXEnumElementDef();
+				for (RangerEnumElementDef element : elements) {
+					XXEnumElementDef xElement = new XXEnumElementDef();
+					xElement = serviceDefService.populateRangerEnumElementDefToXX(element, xElement, xEnum,
+							RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+					xElement = xxEnumEleDefDao.create(xElement);
+				}
+				enumDef = serviceDefService.populateXXToRangerEnumDef(xEnum);
+			}
+		}
+		for (XXEnumDef xEnumDef : xxEnums) {
+			boolean found = false;
+			for (RangerEnumDef enumDef : enums) {
+				if (xEnumDef.getId() != null && xEnumDef.getId().equals(enumDef.getId())) {
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				List<XXEnumElementDef> enumEleDefList = daoMgr.getXXEnumElementDef().findByEnumDefId(xEnumDef.getId());
+				for (XXEnumElementDef eleDef : enumEleDefList) {
+					daoMgr.getXXEnumElementDef().remove(eleDef);
+				}
+				xxEnumDefDao.remove(xEnumDef);
+			}
+		}
+	}
+	
 	@Override
-	public void deleteServiceDef(Long servceId) throws Exception {
+	public void deleteServiceDef(Long serviceDefId) throws Exception {
+		deleteServiceDef(serviceDefId, false);
+	}
+
+	public void deleteServiceDef(Long serviceDefId, boolean forceDelete) throws Exception {
 		if (LOG.isDebugEnabled()) {
-			LOG.debug("==> ServiceDefDBStore.deleteServiceDef(" + servceId + ")");
+			LOG.debug("==> ServiceDefDBStore.deleteServiceDef(" + serviceDefId + ")");
 		}
 
-		// TODO: deleteServiceDef()
+		RangerServiceDef serviceDef = getServiceDef(serviceDefId);
+		if(serviceDef == null) {
+			throw restErrorUtil.createRESTException("No Service Definiton found for Id: " + serviceDefId,
+					MessageEnums.DATA_NOT_FOUND);
+		}
+		
+		if (!forceDelete) {
+			List<XXService> svcDefServiceList = daoMgr.getXXService().findByServiceDefId(serviceDefId);
+			if (!stringUtil.isEmpty(svcDefServiceList)) {
+				throw restErrorUtil.createRESTException(
+						"Services exists under given service definition, can't delete Service-Def: "
+								+ serviceDef.getName(), MessageEnums.OPER_NOT_ALLOWED_FOR_ENTITY);
+			}
+		}
+
+		List<XXAccessTypeDef> accTypeDefs = daoMgr.getXXAccessTypeDef().findByServiceDefId(serviceDefId);
+		for(XXAccessTypeDef accessType : accTypeDefs) {
+			deleteXXAccessTypeDef(accessType);
+		}
+		
+		XXContextEnricherDefDao xContextEnricherDao = daoMgr.getXXContextEnricherDef();
+		List<XXContextEnricherDef> contextEnrichers = xContextEnricherDao.findByServiceDefId(serviceDefId);
+		for(XXContextEnricherDef context : contextEnrichers) {
+			xContextEnricherDao.remove(context);
+		}
+		
+		XXEnumDefDao enumDefDao = daoMgr.getXXEnumDef();
+		List<XXEnumDef> enumDefList = enumDefDao.findByServiceDefId(serviceDefId);
+		for (XXEnumDef enumDef : enumDefList) {
+			List<XXEnumElementDef> enumEleDefList = daoMgr.getXXEnumElementDef().findByEnumDefId(enumDef.getId());
+			for (XXEnumElementDef eleDef : enumEleDefList) {
+				daoMgr.getXXEnumElementDef().remove(eleDef);
+			}
+			enumDefDao.remove(enumDef);
+		}
+		
+		XXPolicyConditionDefDao policyCondDao = daoMgr.getXXPolicyConditionDef();
+		List<XXPolicyConditionDef> policyCondList = policyCondDao.findByServiceDefId(serviceDefId);
+		
+		for (XXPolicyConditionDef policyCond : policyCondList) {
+			List<XXPolicyItemCondition> policyItemCondList = daoMgr.getXXPolicyItemCondition().findByPolicyConditionDefId(policyCond.getId());
+			for (XXPolicyItemCondition policyItemCond : policyItemCondList) {
+				daoMgr.getXXPolicyItemCondition().remove(policyItemCond);
+			}
+			policyCondDao.remove(policyCond);
+		}
+		
+		List<XXResourceDef> resDefList = daoMgr.getXXResourceDef().findByServiceDefId(serviceDefId);
+		for(XXResourceDef resDef : resDefList) {
+			deleteXXResourceDef(resDef);
+		}
+		
+		XXServiceConfigDefDao configDefDao = daoMgr.getXXServiceConfigDef();
+		List<XXServiceConfigDef> configDefList = configDefDao.findByServiceDefId(serviceDefId);
+		for(XXServiceConfigDef configDef : configDefList) {
+			configDefDao.remove(configDef);
+		}
+		
+		XXServiceDao serviceDao = daoMgr.getXXService();
+		List<XXService> serviceList = serviceDao.findByServiceDefId(serviceDefId);
+		for(XXService service : serviceList) {
+			deleteService(service.getId());
+		}
+		
+		Long version = serviceDef.getVersion();
+		if(version == null) {
+			version = new Long(1);
+			LOG.info("Found Version Value: `null`, so setting value of version to 1, While updating object, version should not be null.");
+		} else {
+			version = new Long(version.longValue() + 1);
+		}
+		serviceDef.setVersion(version);
+		
+		serviceDefService.delete(serviceDef);
+		LOG.info("ServiceDefinition has been deleted successfully. Service-Def Name: " + serviceDef.getName());
+		
+		dataHistService.createObjectDataHistory(serviceDef, RangerDataHistService.ACTION_DELETE);
 
 		if (LOG.isDebugEnabled()) {
-			LOG.debug("<== ServiceDefDBStore.deleteServiceDef(" + servceId + ")");
+			LOG.debug("<== ServiceDefDBStore.deleteServiceDef(" + serviceDefId + ")");
+		}
+	}
+	
+	public void deleteXXAccessTypeDef(XXAccessTypeDef xAccess) {
+		List<XXAccessTypeDefGrants> atdGrantsList = daoMgr.getXXAccessTypeDefGrants().findByATDId(xAccess.getId());
+
+		for (XXAccessTypeDefGrants atdGrant : atdGrantsList) {
+			daoMgr.getXXAccessTypeDefGrants().remove(atdGrant);
+		}
+
+		List<XXPolicyItemAccess> policyItemAccessList = daoMgr.getXXPolicyItemAccess().findByType(xAccess.getId());
+		for (XXPolicyItemAccess policyItemAccess : policyItemAccessList) {
+			daoMgr.getXXPolicyItemAccess().remove(policyItemAccess);
+		}
+		daoMgr.getXXAccessTypeDef().remove(xAccess);
+	}
+
+	public void deleteXXResourceDef(XXResourceDef xRes) {
+
+		List<XXResourceDef> xChildObjs = daoMgr.getXXResourceDef().findByParentResId(xRes.getId());
+		for(XXResourceDef childRes : xChildObjs) {			
+			deleteXXResourceDef(childRes);
+		}
+
+		List<XXPolicyResource> xxResources = daoMgr.getXXPolicyResource().findByResDefId(xRes.getId());
+		for (XXPolicyResource xPolRes : xxResources) {
+			deleteXXPolicyResource(xPolRes);
+		}
+
+		daoMgr.getXXResourceDef().remove(xRes);
+	}
+
+	public void deleteXXPolicyResource(XXPolicyResource xPolRes) {
+		List<XXPolicyResourceMap> polResMapList = daoMgr.getXXPolicyResourceMap().findByPolicyResId(xPolRes.getId());
+		XXPolicyResourceMapDao polResMapDao = daoMgr.getXXPolicyResourceMap();
+		for (XXPolicyResourceMap xxPolResMap : polResMapList) {
+			polResMapDao.remove(xxPolResMap);
 		}
+		daoMgr.getXXPolicyResource().remove(xPolRes);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java
index 2ee8e9b..14e723e 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXAccessTypeDefGrantsDao.java
@@ -47,4 +47,28 @@ public class XXAccessTypeDefGrantsDao extends BaseDao<XXAccessTypeDefGrants> {
 		}
 	}
 
+	public XXAccessTypeDefGrants findByNameAndATDId(Long atdId, String name) {
+		if (atdId == null || name == null) {
+			return null;
+		}
+		try {
+			return getEntityManager().createNamedQuery("XXAccessTypeDefGrants.findByNameAndATDId", tClass)
+					.setParameter("atdId", atdId).setParameter("name", name).getSingleResult();
+		} catch (NoResultException e) {
+			return null;
+		}
+	}
+
+	public List<XXAccessTypeDefGrants> findByATDId(Long atdId) {
+		if (atdId == null) {
+			return new ArrayList<XXAccessTypeDefGrants>();
+		}
+		try {
+			return getEntityManager().createNamedQuery("XXAccessTypeDefGrants.findByATDId", tClass)
+					.setParameter("atdId", atdId).getResultList();
+		} catch (NoResultException e) {
+			return new ArrayList<XXAccessTypeDefGrants>();
+		}
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
index e2f5a41..eb7c2aa 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
@@ -84,4 +84,16 @@ public class XXPolicyDao extends BaseDao<XXPolicy> {
 		}
 	}
 
+	public List<XXPolicy> findByServiceDefId(Long serviceDefId) {
+		if(serviceDefId == null) {
+			return new ArrayList<XXPolicy>();
+		}
+		try {
+			return getEntityManager().createNamedQuery("XXPolicy.findByServiceDefId", tClass)
+					.setParameter("serviceDefId", serviceDefId).getResultList();
+		} catch (NoResultException e) {
+			return new ArrayList<XXPolicy>();
+		}
+	}
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java
index a5a180a..d9952e0 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemAccessDao.java
@@ -44,4 +44,16 @@ public class XXPolicyItemAccessDao extends BaseDao<XXPolicyItemAccess> {
 		}
 	}
 
+	public List<XXPolicyItemAccess> findByType(Long type) {
+		if (type == null) {
+			return new ArrayList<XXPolicyItemAccess>();
+		}
+		try {
+			return getEntityManager().createNamedQuery("XXPolicyItemAccess.findByType", tClass)
+					.setParameter("type", type).getResultList();
+		} catch (NoResultException e) {
+			return new ArrayList<XXPolicyItemAccess>();
+		}
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java
index 4296816..4ed59f1 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyItemConditionDao.java
@@ -59,4 +59,16 @@ public class XXPolicyItemConditionDao extends BaseDao<XXPolicyItemCondition> {
 		}
 	}
 
+	public List<XXPolicyItemCondition> findByPolicyConditionDefId(Long polCondDefId) {
+		if (polCondDefId == null) {
+			return new ArrayList<XXPolicyItemCondition>();
+		}
+		try {
+			return getEntityManager().createNamedQuery("XXPolicyItemCondition.findByPolicyConditionDefId", tClass)
+					.setParameter("polCondDefId", polCondDefId).getResultList();
+		} catch (NoResultException e) {
+			return new ArrayList<XXPolicyItemCondition>();
+		}
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java
index bb55bc2..0cdb75e 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyResourceDao.java
@@ -58,4 +58,16 @@ public class XXPolicyResourceDao extends BaseDao<XXPolicyResource> {
 		}
 	}
 
+	public List<XXPolicyResource> findByResDefId(Long resDefId) {
+		if (resDefId == null) {
+			return new ArrayList<XXPolicyResource>();
+		}
+		try {
+			return getEntityManager().createNamedQuery("XXPolicyResource.findByResDefId", tClass)
+					.setParameter("resDefId", resDefId).getResultList();
+		} catch (NoResultException e) {
+			return new ArrayList<XXPolicyResource>();
+		}
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java
index a3e2244..aee56e8 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXResourceDefDao.java
@@ -86,4 +86,16 @@ public class XXResourceDefDao extends BaseDao<XXResourceDef> {
 		}
 	}
 
+	public List<XXResourceDef> findByParentResId(Long parentId) {
+		if(parentId == null) {
+			return new ArrayList<XXResourceDef>();
+		}
+		try {
+			return getEntityManager().createNamedQuery("XXResourceDef.findByParentResId", tClass)
+					.setParameter("parentId", parentId).getResultList();
+		} catch (NoResultException e) {
+			return new ArrayList<XXResourceDef>();
+		}
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
index a665bb7..4f35ad3 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
@@ -17,6 +17,9 @@
 
 package org.apache.ranger.db;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.persistence.NoResultException;
 
 import org.apache.ranger.common.db.BaseDao;
@@ -54,4 +57,16 @@ public class XXServiceDao extends BaseDao<XXService> {
 		}
 	}
 
+	public List<XXService> findByServiceDefId(Long serviceDefId) {
+		if (serviceDefId == null) {
+			return new ArrayList<XXService>();
+		}
+		try {
+			return getEntityManager().createNamedQuery("XXService.findByServiceDefId", tClass)
+					.setParameter("serviceDefId", serviceDefId).getResultList();
+		} catch (NoResultException e) {
+			return new ArrayList<XXService>();
+		}
+	}
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java b/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java
index 118d5d9..fa90d0b 100644
--- a/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java
+++ b/security-admin/src/main/java/org/apache/ranger/entity/XXAccessTypeDefGrants.java
@@ -85,7 +85,7 @@ public class XXAccessTypeDefGrants extends XXDBBase implements
 	 * @param atdId
 	 *            Value to set member attribute <b> atdId</b>
 	 */
-	public void setAtdid(Long atdId) {
+	public void setAtdId(Long atdId) {
 		this.atdId = atdId;
 	}
 
@@ -94,7 +94,7 @@ public class XXAccessTypeDefGrants extends XXDBBase implements
 	 * 
 	 * @return Date - value of member attribute <b>atdId</b> .
 	 */
-	public Long getAtdid() {
+	public Long getAtdId() {
 		return this.atdId;
 	}
 
@@ -105,7 +105,7 @@ public class XXAccessTypeDefGrants extends XXDBBase implements
 	 * @param impliedGrant
 	 *            Value to set member attribute <b> impliedGrant</b>
 	 */
-	public void setImpliedgrant(String impliedGrant) {
+	public void setImpliedGrant(String impliedGrant) {
 		this.impliedGrant = impliedGrant;
 	}
 
@@ -114,7 +114,7 @@ public class XXAccessTypeDefGrants extends XXDBBase implements
 	 * 
 	 * @return Date - value of member attribute <b>impliedGrant</b> .
 	 */
-	public String getImpliedgrant() {
+	public String getImpliedGrant() {
 		return this.impliedGrant;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
index 9527bcb..059f787 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java
@@ -153,16 +153,16 @@ public class PublicAPIsv2 {
 	@DELETE
 	@Path("/api/servicedef/{id}")
 	@PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-	public void deleteServiceDef(@PathParam("id") Long id) {
-		serviceREST.deleteServiceDef(id);
+	public void deleteServiceDef(@PathParam("id") Long id, @Context HttpServletRequest request) {
+		serviceREST.deleteServiceDef(id, request);
 	}
 
 	@DELETE
 	@Path("/api/servicedef/name/{name}")
 	@PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-	public void deleteServiceDefByName(@PathParam("name") String name) {
+	public void deleteServiceDefByName(@PathParam("name") String name, @Context HttpServletRequest request) {
 		RangerServiceDef serviceDef = serviceREST.getServiceDefByName(name);
-		serviceREST.deleteServiceDef(serviceDef.getId());
+		serviceREST.deleteServiceDef(serviceDef.getId(), request);
 	}
 
 	/*

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index 38c011c..a9ade43 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -201,7 +201,7 @@ public class ServiceREST {
 	@Path("/definitions/{id}")
 	@Produces({ "application/json", "application/xml" })
 	@PreAuthorize("hasRole('ROLE_SYS_ADMIN')")
-	public void deleteServiceDef(@PathParam("id") Long id) {
+	public void deleteServiceDef(@PathParam("id") Long id, @Context HttpServletRequest request) {
 		if(LOG.isDebugEnabled()) {
 			LOG.debug("==> ServiceREST.deleteServiceDef(" + id + ")");
 		}
@@ -209,7 +209,14 @@ public class ServiceREST {
 		try {
 			RangerServiceDefValidator validator = validatorFactory.getServiceDefValidator(svcStore);
 			validator.validate(id, Action.DELETE);
-			svcStore.deleteServiceDef(id);
+			
+			String forceDeleteStr = request.getParameter("forceDelete");
+			boolean forceDelete = false;
+			if(!StringUtils.isEmpty(forceDeleteStr) && forceDeleteStr.equalsIgnoreCase("true")) {
+				forceDelete = true;
+			}
+			
+			svcStore.deleteServiceDef(id, forceDelete);
 		} catch(Exception excp) {
 			LOG.error("deleteServiceDef(" + id + ") failed", excp);
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
----------------------------------------------------------------------
diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
index b16635f..737675d 100644
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -209,6 +209,11 @@
 	<named-query name="XXPolicy.findByResourceSignature">
 		<query>select obj from XXPolicy obj where obj.resourceSignature = :resSignature</query>
 	</named-query>
+	
+	<named-query name="XXPolicy.findByServiceDefId">
+		<query>select obj from XXPolicy obj, XXService svc where 
+		obj.service = svc.id and svc.type = :serviceDefId</query>
+	</named-query>
 
 	<!-- XXServiceDef -->
 	<named-query name="XXServiceDef.findByName">
@@ -236,11 +241,25 @@
 				and xSvc.id = xPol.service and xPol.id = :policyId and obj.name = :name order by obj.level</query>
 	</named-query>
 
+	<named-query name="XXResourceDef.findByParentResId">
+		<query>
+			select obj from XXResourceDef obj where obj.parent = :parentId
+		</query>
+	</named-query>
+
 	<!-- XXAccessTypeDefGrants -->
 	<named-query name="XXAccessTypeDefGrants.findImpliedGrantsByATDId">
 		<query>select obj.impliedGrant from XXAccessTypeDefGrants obj where obj.atdId = :atdId</query>
 	</named-query>
 
+	<named-query name="XXAccessTypeDefGrants.findByNameAndATDId">
+		<query>select obj from XXAccessTypeDefGrants obj where obj.impliedGrant = :name and obj.atdId = :atdId</query>
+	</named-query>
+	
+	<named-query name="XXAccessTypeDefGrants.findByATDId">
+		<query>select obj from XXAccessTypeDefGrants obj where obj.atdId = :atdId</query>
+	</named-query>
+
 	<!-- XXEnumElementDef -->
 	<named-query name="XXEnumElementDef.findByEnumDefId">
 		<query>select obj from XXEnumElementDef obj where obj.enumDefId = :enumDefId order by obj.order</query>
@@ -321,6 +340,10 @@
 	<named-query name="XXService.getMaxIdOfXXService">
 		<query>select MAX(obj.id) from XXService obj</query>
 	</named-query>
+	
+	<named-query name="XXService.findByServiceDefId">
+		<query>select obj from XXService obj where obj.type = :serviceDefId</query>
+	</named-query>
 
 	<!-- XXPolicyResource -->
 	<named-query name="XXPolicyResource.findByResDefIdAndPolicyId">
@@ -332,6 +355,10 @@
 		<query>select obj from XXPolicyResource obj where obj.policyId = :policyId</query>
 	</named-query>
 
+	<named-query name="XXPolicyResource.findByResDefId">
+		<query>select obj from XXPolicyResource obj where obj.resDefId = :resDefId</query>
+	</named-query>
+	
 	<!-- XXPolicyResourceMap -->
 	<named-query name="XXPolicyResourceMap.findByPolicyResId">
 		<query>select obj from XXPolicyResourceMap obj where obj.resourceId = :polResId order by obj.order</query>
@@ -341,7 +368,11 @@
 	<named-query name="XXPolicyItemAccess.findByPolicyItemId">
 		<query>select obj from XXPolicyItemAccess obj where obj.policyItemId = :polItemId order by obj.order</query>
 	</named-query>
-
+	
+	<named-query name="XXPolicyItemAccess.findByType">
+		<query>select obj from XXPolicyItemAccess obj where obj.type = :type</query>
+	</named-query>
+	
 	<!-- XXPolicyItemCondition -->
 	<named-query name="XXPolicyItemCondition.findByPolicyItemId">
 		<query>select obj from XXPolicyItemCondition obj where obj.policyItemId = :polItemId order by obj.order</query>
@@ -352,6 +383,10 @@
 				obj.policyItemId = :polItemId and obj.type = :polCondDefId order by obj.order</query>
 	</named-query>
 
+	<named-query name="XXPolicyItemCondition.findByPolicyConditionDefId">
+		<query>select obj from XXPolicyItemCondition obj where obj.type = :polCondDefId</query>
+	</named-query>
+	
 	<!-- XXPolicyItemGroupPerm -->
 	<named-query name="XXPolicyItemGroupPerm.findByPolicyItemId">
 		<query>select obj from XXPolicyItemGroupPerm obj where obj.policyItemId = :polItemId order by obj.order</query>

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
----------------------------------------------------------------------
diff --git a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
index b523552..0676512 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java
@@ -352,7 +352,8 @@ public class TestServiceREST {
 
 		Mockito.when(validatorFactory.getServiceDefValidator(svcStore))
 				.thenReturn(serviceDefValidator);
-		serviceREST.deleteServiceDef(rangerServiceDef.getId());
+		HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+		serviceREST.deleteServiceDef(rangerServiceDef.getId(), request);
 		Mockito.verify(validatorFactory).getServiceDefValidator(svcStore);
 	}
 
@@ -487,7 +488,8 @@ public class TestServiceREST {
 
 		Mockito.when(validatorFactory.getServiceDefValidator(svcStore))
 				.thenReturn(serviceDefValidator);
-		serviceREST.deleteServiceDef(rangerServiceDef.getId());
+		HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+		serviceREST.deleteServiceDef(rangerServiceDef.getId(), request);
 		Mockito.verify(validatorFactory).getServiceDefValidator(svcStore);
 		Mockito.when(svcStore.getService(rangerService.getId())).thenReturn(
 				rangerService);
@@ -522,7 +524,8 @@ public class TestServiceREST {
 
 		Mockito.when(validatorFactory.getServiceDefValidator(svcStore))
 				.thenReturn(serviceDefValidator);
-		serviceREST.deleteServiceDef(rangerServiceDef.getId());
+		HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+		serviceREST.deleteServiceDef(rangerServiceDef.getId(), request);
 		Mockito.verify(validatorFactory).getServiceDefValidator(svcStore);
 		Mockito.verify(serviceMgr).validateConfig(rangerService, svcStore);
 	}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/c1de019f/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java
----------------------------------------------------------------------
diff --git a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java
index b33cd97..f4534a1 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestServiceRESTForValidation.java
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.WebApplicationException;
 
 import org.apache.commons.logging.Log;
@@ -46,6 +47,7 @@ import org.apache.ranger.plugin.model.validation.RangerValidator.Action;
 import org.apache.ranger.rest.ServiceREST;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 public class TestServiceRESTForValidation {
 
@@ -309,7 +311,8 @@ public class TestServiceRESTForValidation {
 			_serviceRest.updateServiceDef(_serviceDef);
 			verify(_serviceDefValidator).validate(_serviceDef, Action.UPDATE);
 
-			_serviceRest.deleteServiceDef(3L);
+			HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+			_serviceRest.deleteServiceDef(3L, request);
 			verify(_serviceDefValidator).validate(3L, Action.DELETE);
 		} catch (Throwable t) {
 			t.printStackTrace();
@@ -346,7 +349,8 @@ public class TestServiceRESTForValidation {
 
 		doThrow(_exception).when(_serviceDefValidator).validate(4L, Action.DELETE);
 		try {
-			_serviceRest.deleteServiceDef(4L);
+			HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+			_serviceRest.deleteServiceDef(4L, request);
 			fail("Should have thrown exception!");
 		} catch (WebApplicationException t) {
 			verify(_serviceDefValidator).validate(4L, Action.DELETE);
@@ -385,7 +389,8 @@ public class TestServiceRESTForValidation {
 		
 		doThrow(_exception).when(_store).deleteServiceDef(5L);
 		try {
-			_serviceRest.deleteServiceDef(5L);
+			HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+			_serviceRest.deleteServiceDef(5L, request);
 			fail("Should have thrown exception!");
 		} catch (WebApplicationException e) {
 			verify(_serviceDefValidator).validate(5L, Action.DELETE);