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


RANGER-392 : Implement update/delete of ServiceDef Object

Signed-off-by: Velmurugan Periasamy <[email protected]>


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 <[email protected]>
Authored: Mon Apr 13 14:52:10 2015 +0530
Committer: Velmurugan Periasamy <[email protected]>
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);

Reply via email to