RANGER-2913: Import policy fails when policy with same name present in multiple service

Signed-off-by: pradeep <pradeep@apache.org>
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 abd8aa6..a1db600 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
@@ -251,4 +251,26 @@
 		}
 		return ret;
 	}
+
+	public XXPolicy findPolicy(String policyName, String serviceName, String zoneName) {
+		if (policyName == null || serviceName == null) {
+			return null;
+		}
+
+		try {
+			if (zoneName == null) {
+				return getEntityManager().createNamedQuery("XXPolicy.findPolicyByPolicyNameAndServiceName", tClass)
+						.setParameter("policyName", policyName).setParameter("serviceName", serviceName)
+						.getSingleResult();
+			} else {
+				return getEntityManager()
+						.createNamedQuery("XXPolicy.findPolicyByPolicyNameAndServiceNameAndZoneName", tClass)
+						.setParameter("policyName", policyName).setParameter("serviceName", serviceName)
+						.setParameter("zoneName", zoneName).getSingleResult();
+			}
+		} catch (NoResultException e) {
+			return null;
+		}
+
+	}
 }
\ No newline at end of file
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 c795525..18abc29 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
@@ -1751,7 +1751,7 @@
 
 				if (existingPolicy == null) {
 					if (StringUtils.isNotEmpty(policy.getName())) {
-						XXPolicy dbPolicy = daoManager.getXXPolicy().findByPolicyName(policy.getName());
+						XXPolicy dbPolicy = daoManager.getXXPolicy().findPolicy(policy.getName(), policy.getService(), policy.getZoneName());
 						if (dbPolicy != null) {
 							policy.setName(policy.getName() + System.currentTimeMillis());
 						}
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 22e71e5..5813209 100755
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -323,6 +323,14 @@
 		<query>select DISTINCT(obj.service) from XXPolicy obj, XXPolicyRefRole policyRefRole where policyRefRole.roleId = :roleId and policyRefRole.policyId = obj.id</query>
 	</named-query>
 
+	<named-query name="XXPolicy.findPolicyByPolicyNameAndServiceName">
+		<query>select obj from XXPolicy obj, XXService svc where obj.name = :policyName and obj.service = svc.id and svc.name = :serviceName</query>
+	</named-query>
+
+	<named-query name="XXPolicy.findPolicyByPolicyNameAndServiceNameAndZoneName">
+		<query>select obj from XXPolicy obj, XXService svc, XXSecurityZone zone where obj.name = :policyName and obj.service = svc.id and svc.name = :serviceName and obj.zoneId = zone.id and zone.name = :zoneName</query>
+	</named-query>
+
 	<named-query name="XXPolicy.findRoleRefPolicyCount">
 		<query>select count(roleRef.policyId)
 			from XXPolicy policy, XXPolicyRefRole roleRef