Repository: incubator-ranger
Updated Branches:
  refs/heads/master 2c6554ca9 -> 1fc84ff6b


RANGER-960: service-def update should preserve the permission order


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

Branch: refs/heads/master
Commit: 1fc84ff6bd864e908ee173aff37d5b0388de2110
Parents: 2c6554c
Author: Madhan Neethiraj <[email protected]>
Authored: Thu Apr 28 22:49:45 2016 -0700
Committer: Madhan Neethiraj <[email protected]>
Committed: Fri Apr 29 15:28:25 2016 -0700

----------------------------------------------------------------------
 .../org/apache/ranger/biz/ServiceDBStore.java   | 32 +++++++++++++++-----
 .../resources/META-INF/jpa_named_queries.xml    |  6 ++--
 .../apache/ranger/biz/TestServiceDBStore.java   |  7 +++++
 3 files changed, 35 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1fc84ff6/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 1380456..ab0798b 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
@@ -537,13 +537,15 @@ public class ServiceDBStore extends AbstractServiceStore {
                List<XXEnumDef> xxEnums = 
daoMgr.getXXEnumDef().findByServiceDefId(serviceDefId);
 
                XXServiceConfigDefDao xxServiceConfigDao = 
daoMgr.getXXServiceConfigDef();
-               for (RangerServiceConfigDef config : configs) {
+               for (int i = 0; i < configs.size(); i++) {
+                       RangerServiceConfigDef config = configs.get(i);
                        boolean found = false;
                        for (XXServiceConfigDef xConfig : xxConfigs) {
                                if (config.getItemId() != null && 
config.getItemId().equals(xConfig.getItemId())) {
                                        found = true;
                                        xConfig = 
serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, 
createdSvcDef,
                                                        
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+                                       xConfig.setOrder(i);
                                        xConfig = 
xxServiceConfigDao.update(xConfig);
                                        config = 
serviceDefService.populateXXToRangerServiceConfigDef(xConfig);
                                        break;
@@ -553,6 +555,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                                XXServiceConfigDef xConfig = new 
XXServiceConfigDef();
                                xConfig = 
serviceDefService.populateRangerServiceConfigDefToXX(config, xConfig, 
createdSvcDef,
                                                
RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+                               xConfig.setOrder(i);
                                xConfig = xxServiceConfigDao.create(xConfig);
                                config = 
serviceDefService.populateXXToRangerServiceConfigDef(xConfig);
                        }
@@ -614,13 +617,15 @@ public class ServiceDBStore extends AbstractServiceStore {
                }
 
                XXAccessTypeDefDao xxATDDao = daoMgr.getXXAccessTypeDef();
-               for (RangerAccessTypeDef access : accessTypes) {
+               for(int i = 0; i < accessTypes.size(); i++) {
+                       RangerAccessTypeDef access = accessTypes.get(i);
                        boolean found = false;
                        for (XXAccessTypeDef xAccess : xxAccessTypes) {
                                if (access.getItemId() != null && 
access.getItemId().equals(xAccess.getItemId())) {
                                        found = true;
                                        xAccess = 
serviceDefService.populateRangerAccessTypeDefToXX(access, xAccess, 
createdSvcDef,
                                                        
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+                                       xAccess.setOrder(i);
                                        xAccess = xxATDDao.update(xAccess);
 
                                        Collection<String> impliedGrants = 
access.getImpliedGrants();
@@ -664,6 +669,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                                XXAccessTypeDef xAccessType = new 
XXAccessTypeDef();
                                xAccessType = 
serviceDefService.populateRangerAccessTypeDefToXX(access, xAccessType, 
createdSvcDef,
                                                
RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+                               xAccessType.setOrder(i);
                                xAccessType = xxATDDao.create(xAccessType);
 
                                Collection<String> impliedGrants = 
access.getImpliedGrants();
@@ -698,13 +704,15 @@ public class ServiceDBStore extends AbstractServiceStore {
                }
 
                XXPolicyConditionDefDao xxPolCondDao = 
daoMgr.getXXPolicyConditionDef();
-               for (RangerPolicyConditionDef condition : policyConditions) {
+               for (int i = 0; i < policyConditions.size(); i++) {
+                       RangerPolicyConditionDef condition = 
policyConditions.get(i);
                        boolean found = false;
                        for (XXPolicyConditionDef xCondition : 
xxPolicyConditions) {
                                if (condition.getItemId() != null && 
condition.getItemId().equals(xCondition.getItemId())) {
                                        found = true;
                                        xCondition = 
serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition,
                                                        createdSvcDef, 
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+                                       xCondition.setOrder(i);
                                        xCondition = 
xxPolCondDao.update(xCondition);
                                        condition = 
serviceDefService.populateXXToRangerPolicyConditionDef(xCondition);
                                        break;
@@ -714,6 +722,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                                XXPolicyConditionDef xCondition = new 
XXPolicyConditionDef();
                                xCondition = 
serviceDefService.populateRangerPolicyConditionDefToXX(condition, xCondition,
                                                createdSvcDef, 
RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+                               xCondition.setOrder(i);
                                xCondition = xxPolCondDao.create(xCondition);
                                condition = 
serviceDefService.populateXXToRangerPolicyConditionDef(xCondition);
                        }
@@ -742,13 +751,15 @@ public class ServiceDBStore extends AbstractServiceStore {
                }
 
                XXContextEnricherDefDao xxContextEnricherDao = 
daoMgr.getXXContextEnricherDef();
-               for (RangerContextEnricherDef context : contextEnrichers) {
+               for (int i = 0; i < contextEnrichers.size(); i++) {
+                       RangerContextEnricherDef context = 
contextEnrichers.get(i);
                        boolean found = false;
                        for (XXContextEnricherDef xContext : 
xxContextEnrichers) {
                                if (context.getItemId() != null && 
context.getItemId().equals(xContext.getItemId())) {
                                        found = true;
                                        xContext = 
serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, 
createdSvcDef,
                                                        
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+                                       xContext.setOrder(i);
                                        xContext = 
xxContextEnricherDao.update(xContext);
                                        context = 
serviceDefService.populateXXToRangerContextEnricherDef(xContext);
                                        break;
@@ -758,6 +769,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                                XXContextEnricherDef xContext = new 
XXContextEnricherDef();
                                xContext = 
serviceDefService.populateRangerContextEnricherDefToXX(context, xContext, 
createdSvcDef,
                                                
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+                               xContext.setOrder(i);
                                xContext = 
xxContextEnricherDao.create(xContext);
                                context = 
serviceDefService.populateXXToRangerContextEnricherDef(xContext);
                        }
@@ -789,13 +801,15 @@ public class ServiceDBStore extends AbstractServiceStore {
                                        List<XXEnumElementDef> xxEnumEleDefs = 
xEnumEleDao.findByEnumDefId(xEnumDef.getId());
                                        List<RangerEnumElementDef> enumEleDefs 
= enumDef.getElements();
 
-                                       for (RangerEnumElementDef eleDef : 
enumEleDefs) {
+                                       for (int i = 0; i < enumEleDefs.size(); 
i++) {
+                                               RangerEnumElementDef eleDef = 
enumEleDefs.get(i);
                                                boolean foundEle = false;
                                                for (XXEnumElementDef xEleDef : 
xxEnumEleDefs) {
                                                        if (eleDef.getItemId() 
!= null && eleDef.getItemId().equals(xEleDef.getItemId())) {
                                                                foundEle = true;
                                                                xEleDef = 
serviceDefService.populateRangerEnumElementDefToXX(eleDef, xEleDef, xEnumDef,
                                                                                
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+                                                               
xEleDef.setOrder(i);
                                                                xEleDef = 
xEnumEleDao.update(xEleDef);
                                                                break;
                                                        }
@@ -804,6 +818,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                                                        XXEnumElementDef 
xElement = new XXEnumElementDef();
                                                        xElement = 
serviceDefService.populateRangerEnumElementDefToXX(eleDef, xElement, xEnumDef,
                                                                        
RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+                                                       xElement.setOrder(i);
                                                        xElement = 
xEnumEleDao.create(xElement);
                                                }
                                        }
@@ -868,7 +883,8 @@ public class ServiceDBStore extends AbstractServiceStore {
                List<XXResourceDef>         xxResourceDefs       = 
xxResDefDao.findByServiceDefId(serviceDefId);
 
                // create or update dataMasks
-               for (RangerDataMaskTypeDef dataMask : dataMasks) {
+               for(int i = 0; i < dataMasks.size(); i++) {
+                       RangerDataMaskTypeDef dataMask = dataMasks.get(i);
                        boolean found = false;
                        for (XXDataMaskTypeDef xxDataMask : xxDataMaskTypes) {
                                if (xxDataMask.getItemId() != null && 
xxDataMask.getItemId().equals(dataMask.getItemId())) {
@@ -879,6 +895,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                                        found = true;
                                        xxDataMask = 
serviceDefService.populateRangerDataMaskDefToXX(dataMask, xxDataMask, 
createdSvcDef,
                                                        
RangerServiceDefService.OPERATION_UPDATE_CONTEXT);
+                                       xxDataMask.setOrder(i);
                                        xxDataMask = 
dataMaskTypeDao.update(xxDataMask);
                                        dataMask = 
serviceDefService.populateXXToRangerDataMaskTypeDef(xxDataMask);
                                        break;
@@ -892,6 +909,7 @@ public class ServiceDBStore extends AbstractServiceStore {
 
                                XXDataMaskTypeDef xxDataMask = new 
XXDataMaskTypeDef();
                                xxDataMask = 
serviceDefService.populateRangerDataMaskDefToXX(dataMask, xxDataMask, 
createdSvcDef, RangerServiceDefService.OPERATION_CREATE_CONTEXT);
+                               xxDataMask.setOrder(i);
                                xxDataMask = dataMaskTypeDao.create(xxDataMask);
                        }
                }
@@ -917,7 +935,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                for(RangerAccessTypeDef accessType : dataMaskAccessTypes) {
                        if(! isAccessTypeInList(accessType.getName(), 
xxAccessTypeDefs)) {
                                throw 
restErrorUtil.createRESTException("accessType with name: "
-                                               + accessType.getName() + " does 
not exists", MessageEnums.DATA_NOT_FOUND);
+                                               + accessType.getName() + " does 
not exist", MessageEnums.DATA_NOT_FOUND);
                        }
                }
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1fc84ff6/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 39c8ec3..f209bc4 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
@@ -321,7 +321,7 @@
 
        <!-- XXAccessTypeDef -->
        <named-query name="XXAccessTypeDef.findByServiceDefId">
-               <query>select obj from XXAccessTypeDef obj where obj.defId = 
:serviceDefId</query>
+               <query>select obj from XXAccessTypeDef obj where obj.defId = 
:serviceDefId order by obj.order</query>
        </named-query>
 
        <named-query name="XXAccessTypeDef.findByNameAndServiceId">
@@ -331,7 +331,7 @@
 
        <!-- XXPolicyConditionDef -->
        <named-query name="XXPolicyConditionDef.findByServiceDefId">
-               <query>select obj from XXPolicyConditionDef obj where obj.defId 
= :serviceDefId</query>
+               <query>select obj from XXPolicyConditionDef obj where obj.defId 
= :serviceDefId order by obj.order</query>
        </named-query>
 
        <named-query name="XXPolicyConditionDef.findByServiceDefIdAndName">
@@ -367,7 +367,7 @@
 
        <!-- XXDataMaskTypeDef -->
        <named-query name="XXDataMaskTypeDef.findByServiceDefId">
-               <query>select obj from XXDataMaskTypeDef obj where obj.defId = 
:serviceDefId</query>
+               <query>select obj from XXDataMaskTypeDef obj where obj.defId = 
:serviceDefId order by obj.order</query>
        </named-query>
 
        <named-query name="XXDataMaskTypeDef.findByNameAndServiceId">

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1fc84ff6/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java 
b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
index 7af5c45..aaafde0 100644
--- a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
+++ b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
@@ -465,6 +465,13 @@ public class TestServiceDBStore {
                serviceConfigDefObj.setType("1");
                svcConfDefList.add(serviceConfigDefObj);
 
+               Mockito.when(
+                               
serviceDefService.populateRangerServiceConfigDefToXX(
+                                               
Mockito.any(RangerServiceConfigDef.class), 
Mockito.any(XXServiceConfigDef.class), Mockito.any(XXServiceDef.class),
+                                               
Mockito.eq(RangerServiceDefService.OPERATION_CREATE_CONTEXT))).thenReturn(serviceConfigDefObj);
+               Mockito.when(xServiceConfigDefDao.create(serviceConfigDefObj))
+                               .thenReturn(serviceConfigDefObj);
+
                List<XXResourceDef> resDefList = new ArrayList<XXResourceDef>();
                XXResourceDef resourceDef = new XXResourceDef();
                resourceDef.setAddedByUserId(Id);

Reply via email to