This is an automated email from the ASF dual-hosted git repository.

pradeep pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new c9f8102  RANGER-2351 : Implement Import / Export of Policies by Zone
c9f8102 is described below

commit c9f8102cc8dfe80e15d12fa936e9956224d6238e
Author: Nikhil P <nikhil.pur...@gmail.com>
AuthorDate: Thu Apr 25 12:40:56 2019 +0530

    RANGER-2351 : Implement Import / Export of Policies by Zone
    
    Signed-off-by: Pradeep <prad...@apache.org>
---
 .../apache/ranger/biz/RangerPolicyRetriever.java   |   1 +
 .../java/org/apache/ranger/biz/ServiceDBStore.java |  81 ++--
 .../java/org/apache/ranger/db/XXPolicyDao.java     |  13 +
 .../ranger/db/XXSecurityZoneRefServiceDao.java     |  24 ++
 .../java/org/apache/ranger/rest/ServiceREST.java   | 394 ++++++++++++-------
 .../ranger/service/RangerBaseModelService.java     |   3 +-
 .../apache/ranger/service/RangerPolicyService.java |  14 +
 .../ranger/service/RangerPolicyServiceBase.java    |   1 +
 .../main/resources/META-INF/jpa_named_queries.xml  |  16 +
 .../webapp/scripts/modules/globalize/message/en.js |   2 +
 .../src/main/webapp/scripts/utils/XAGlobals.js     |   4 +-
 .../webapp/scripts/views/DownloadServicePolicy.js  |   9 +-
 .../webapp/scripts/views/UploadServicePolicy.js    | 417 ++++++++++++---------
 .../scripts/views/policymanager/ServiceLayout.js   |  11 +-
 .../webapp/scripts/views/reports/AuditLayout.js    |   6 +-
 .../views/reports/PlugableServiceDiffDetail.js     |   6 +-
 .../templates/common/uploadservicepolicy_tmpl.html |  62 +--
 .../org/apache/ranger/rest/TestServiceREST.java    |  65 +++-
 18 files changed, 744 insertions(+), 385 deletions(-)

diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/RangerPolicyRetriever.java 
b/security-admin/src/main/java/org/apache/ranger/biz/RangerPolicyRetriever.java
index 1bd8dc0..f48a803 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/biz/RangerPolicyRetriever.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/biz/RangerPolicyRetriever.java
@@ -526,6 +526,7 @@ public class RangerPolicyRetriever {
                                                
ret.setVersion(xPolicy.getVersion());
                                                
ret.setPolicyType(xPolicy.getPolicyType() == null ? 
RangerPolicy.POLICY_TYPE_ACCESS : xPolicy.getPolicyType());
                                                
ret.setService(service.getName());
+                                               
ret.setServiceType(service.getType().toString());
                                                
ret.setZoneName(lookupCache.getSecurityZoneName(xPolicy.getZoneId()));
                                                
updatePolicyReferenceFields(ret);
                                                getPolicyLabels(ret);
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 7ad0570..35dc940 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
@@ -1906,7 +1906,8 @@ public class ServiceDBStore extends AbstractServiceStore {
                handlePolicyUpdate(service, 
RangerPolicyDelta.CHANGE_TYPE_POLICY_CREATE, createdPolicy);
                dataHistService.createObjectDataHistory(createdPolicy, 
RangerDataHistService.ACTION_CREATE);
 
-               List<XXTrxLog> trxLogList = 
policyService.getTransactionLog(createdPolicy, 
RangerPolicyService.OPERATION_CREATE_CONTEXT);
+               List<XXTrxLog> trxLogList = getTransactionLogList(createdPolicy,
+                               
RangerPolicyService.OPERATION_IMPORT_CREATE_CONTEXT, 
RangerPolicyService.OPERATION_CREATE_CONTEXT);
                bizUtil.createTrxLog(trxLogList);
 
                return createdPolicy;
@@ -2039,7 +2040,8 @@ public class ServiceDBStore extends AbstractServiceStore {
                
                policy.setVersion(version);
                
-               List<XXTrxLog> trxLogList = 
policyService.getTransactionLog(policy, 
RangerPolicyService.OPERATION_DELETE_CONTEXT);
+               List<XXTrxLog> trxLogList = getTransactionLogList(policy, 
RangerPolicyService.OPERATION_IMPORT_DELETE_CONTEXT,
+                               RangerPolicyService.OPERATION_DELETE_CONTEXT);
 
                policyRefUpdater.cleanupRefTables(policy);
                deleteExistingPolicyLabel(policy);
@@ -2054,6 +2056,18 @@ public class ServiceDBStore extends AbstractServiceStore 
{
                LOG.info("Policy Deleted Successfully. PolicyName : " + 
policyName);
        }
 
+       List<XXTrxLog> getTransactionLogList(RangerPolicy policy, int 
operationImportContext, int operationContext) {
+               List<XXTrxLog> trxLogList;
+               StackTraceElement[] trace = 
Thread.currentThread().getStackTrace();
+               if (trace.length > 3 && 
(StringUtils.contains(trace[4].getMethodName(), "import") ||
+    StringUtils.contains(trace[5].getMethodName(), "import"))) {
+      trxLogList = policyService.getTransactionLog(policy, 
operationImportContext);
+               } else {
+                       trxLogList = policyService.getTransactionLog(policy, 
operationContext);
+               }
+               return trxLogList;
+       }
+
        @Override
        public RangerPolicy getPolicy(Long id) throws Exception {
                return policyService.read(id);
@@ -2165,7 +2179,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                if(LOG.isDebugEnabled()) {
                        LOG.debug("==> ServiceDBStore.getServicePolicies(" + 
serviceId + ")");
                }
-
+               String zoneName = filter.getParam("zoneName");
                XXService service = daoMgr.getXXService().getById(serviceId);
 
                if (service == null) {
@@ -2173,7 +2187,9 @@ public class ServiceDBStore extends AbstractServiceStore {
                }
 
                List<RangerPolicy> ret = getServicePolicies(service, filter);
-
+               if(StringUtils.isBlank(zoneName)) {
+                       ret = noZoneFilter(ret);
+               }
                if(LOG.isDebugEnabled()) {
                        LOG.debug("<== ServiceDBStore.getServicePolicies(" + 
serviceId + ") : policy-count=" + (ret == null ? 0 : ret.size()));
                }
@@ -2181,6 +2197,16 @@ public class ServiceDBStore extends AbstractServiceStore 
{
 
        }
 
+       public List<RangerPolicy> noZoneFilter(List<RangerPolicy> 
servicePolicies) {
+               List<RangerPolicy> noZonePolicies = new 
ArrayList<RangerPolicy>();
+               for (RangerPolicy policy : servicePolicies) {
+                       if (StringUtils.isBlank(policy.getZoneName())) {
+                               noZonePolicies.add(policy);
+                       }
+               }
+               return noZonePolicies;
+       }
+
        public PList<RangerPolicy> getPaginatedServicePolicies(Long serviceId, 
SearchFilter filter) throws Exception {
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> 
ServiceDBStore.getPaginatedServicePolicies(" + serviceId + ")");
@@ -2207,7 +2233,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                }
 
                List<RangerPolicy> ret = null;
-
+               String zoneName = filter.getParam("zoneName");
                XXService service = 
daoMgr.getXXService().findByName(serviceName);
 
                if (service == null) {
@@ -2215,7 +2241,9 @@ public class ServiceDBStore extends AbstractServiceStore {
                }
 
                ret = getServicePolicies(service, filter);
-
+               if(StringUtils.isBlank(zoneName)) {
+                       ret = noZoneFilter(ret);
+               }
                if(LOG.isDebugEnabled()) {
                        LOG.debug("<== ServiceDBStore.getServicePolicies(" + 
serviceName + "): count=" + ((ret == null) ? 0 : ret.size()));
                }
@@ -3850,25 +3878,24 @@ public class ServiceDBStore extends 
AbstractServiceStore {
                        }
                }
        }
-       
-       public Map<String, String> getServiceMap(InputStream serviceMapStream)
-                       throws IOException {
+
+       public Map<String, String> getMapFromInputStream(InputStream mapStream) 
throws IOException {
                if (LOG.isDebugEnabled()) {
-                       LOG.debug("==> ServiceDBStore.getServiceMap()");
+                       LOG.debug("==> ServiceDBStore.getMapFromInputStream()");
                }
-               Map<String, String> serviceMap = new LinkedHashMap<String, 
String>();
-               String serviceMapString = IOUtils.toString(serviceMapStream);
-               if (StringUtils.isNotEmpty(serviceMapString)) {
-                       serviceMap = jsonUtil.jsonToMap(serviceMapString);
+               Map<String, String> inputMap = new LinkedHashMap<String, 
String>();
+               String inputMapString = IOUtils.toString(mapStream);
+               if (StringUtils.isNotEmpty(inputMapString)) {
+                       inputMap = jsonUtil.jsonToMap(inputMapString);
                }
-               if(!CollectionUtils.sizeIsEmpty(serviceMap)){
+               if (!CollectionUtils.sizeIsEmpty(inputMap)) {
                        if (LOG.isDebugEnabled()) {
-                               LOG.debug("<== ServiceDBStore.getServiceMap()");
+                               LOG.debug("<== 
ServiceDBStore.getMapFromInputStream()");
                        }
-                       return serviceMap;
-               }else{
-                       LOG.error("Provided service map is empty!!");
-                       throw restErrorUtil.createRESTException("Provided 
service map is empty!!");
+                       return inputMap;
+               } else {
+                       LOG.error("Provided zone/service input map is empty!!");
+                       throw restErrorUtil.createRESTException("Provided 
zone/service map is empty!!");
                }
        }
        
@@ -3876,7 +3903,8 @@ public class ServiceDBStore extends AbstractServiceStore {
                if (StringUtils.isNotEmpty(policy.getName().trim())
                                && 
StringUtils.isNotEmpty(policy.getService().trim())
                                && 
StringUtils.isNotEmpty(policy.getResources().toString().trim())) {
-                       policiesMap.put(policy.getName().trim() + " " + 
policy.getService().trim() + " " + policy.getResources().toString().trim(), 
policy);
+                       policiesMap.put(policy.getName().trim() + " " + 
policy.getService().trim() + " "
+                                       + 
policy.getResources().toString().trim() + " " + policy.getZoneName(), policy);
                }else if (StringUtils.isEmpty(policy.getName().trim()) && 
StringUtils.isNotEmpty(policy.getService().trim())){
                        LOG.error("Policy Name is not provided for service : " 
+ policy.getService().trim());
                        throw restErrorUtil.createRESTException("Policy Name is 
not provided for service : " + policy.getService().trim());
@@ -3890,10 +3918,13 @@ public class ServiceDBStore extends 
AbstractServiceStore {
                return policiesMap;
        }
        
-       public Map<String, RangerPolicy> createPolicyMap(
-                       Map<String, String> servicesMappingMap,
-                       List<String> sourceServices, List<String> 
destinationServices,
-                       RangerPolicy policy, Map<String, RangerPolicy> 
policiesMap) {
+       public Map<String, RangerPolicy> createPolicyMap(Map<String, String> 
zoneMappingMap, List<String> sourceZones,
+                       String destinationZoneName, Map<String, String> 
servicesMappingMap, List<String> sourceServices,
+                       List<String> destinationServices, RangerPolicy policy, 
Map<String, RangerPolicy> policiesMap) {
+
+               if (!CollectionUtils.sizeIsEmpty(zoneMappingMap)) {
+                       policy.setZoneName(destinationZoneName);// set 
destination zone name in policy.
+               }
                if (!CollectionUtils.sizeIsEmpty(servicesMappingMap)) {
                        if (!StringUtils.isEmpty(policy.getService().trim())){
                                if 
(sourceServices.contains(policy.getService().trim())) {
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 6cb85f9..5d513bd 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
@@ -64,6 +64,19 @@ public class XXPolicyDao extends BaseDao<XXPolicy> {
                return ret;
        }
 
+       public XXPolicy findByPolicyName(String polName) {
+               if (polName == null) {
+                       return null;
+               }
+               try {
+                       XXPolicy xPol = 
getEntityManager().createNamedQuery("XXPolicy.findByPolicyName", tClass)
+                                       .setParameter("polName", 
polName).getSingleResult();
+                       return xPol;
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
        public List<XXPolicy> findByServiceId(Long serviceId) {
                if (serviceId == null) {
                        return new ArrayList<XXPolicy>();
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXSecurityZoneRefServiceDao.java
 
b/security-admin/src/main/java/org/apache/ranger/db/XXSecurityZoneRefServiceDao.java
index d568d81..f5c1a88 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/db/XXSecurityZoneRefServiceDao.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXSecurityZoneRefServiceDao.java
@@ -59,4 +59,28 @@ public class XXSecurityZoneRefServiceDao extends 
BaseDao<XXSecurityZoneRefServic
                        return Collections.emptyList();
                }
        }
+
+       public List<XXSecurityZoneRefService> findByServiceName(String 
serviceName) {
+               if (serviceName == null) {
+                       return Collections.emptyList();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXSecurityZoneRefService.findByServiceName",
 tClass)
+                                       .setParameter("serviceName", 
serviceName).getResultList();
+               } catch (NoResultException e) {
+                       return Collections.emptyList();
+               }
+       }
+
+       public List<XXSecurityZoneRefService> findByServiceNameAndZoneId(String 
serviceName, Long zoneId) {
+               if (serviceName == null) {
+                       return Collections.emptyList();
+               }
+               try {
+                       return 
getEntityManager().createNamedQuery("XXSecurityZoneRefService.findByServiceNameAndZoneId",
 tClass)
+                                       .setParameter("serviceName", 
serviceName).setParameter("zoneId", zoneId).getResultList();
+               } catch (NoResultException e) {
+                       return Collections.emptyList();
+               }
+       }
 }
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 6ddb359..f17b65e 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
@@ -82,6 +82,8 @@ import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.db.XXGroupUserDao;
 import org.apache.ranger.entity.XXGroupUser;
 import org.apache.ranger.entity.XXPolicyExportAudit;
+import org.apache.ranger.entity.XXSecurityZone;
+import org.apache.ranger.entity.XXSecurityZoneRefService;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXServiceDef;
 import org.apache.ranger.entity.XXTrxLog;
@@ -1992,10 +1994,10 @@ public class ServiceREST {
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> ServiceREST.getPoliciesInJson()");
                }
-               
+
                RangerPerfTracer perf = null;
                SearchFilter filter = 
searchUtil.getSearchFilter(request,policyService.sortFields);
-
+               String zoneName = filter.getParam("zoneName");
                try {
                        if (RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
                                perf = 
RangerPerfTracer.getPerfTracer(PERF_LOG,"ServiceREST.getPoliciesInJson()");
@@ -2007,6 +2009,9 @@ public class ServiceREST {
                        List<RangerPolicy> policyLists = new 
ArrayList<RangerPolicy>();
                        
                        policyLists = getAllFilteredPolicyList(filter, request, 
policyLists);
+                       if (StringUtils.isBlank(zoneName)) {// if zoneName not 
provided in search parameter, return only policies which are not in any zone.
+                               policyLists = 
svcStore.noZoneFilter(policyLists);
+                       }
                        if (CollectionUtils.isNotEmpty(policyLists)) {
                                for (RangerPolicy rangerPolicy : policyLists) {
                                        if (rangerPolicy != null) {
@@ -2052,10 +2057,11 @@ public class ServiceREST {
        public void importPoliciesFromFile(
                        @Context HttpServletRequest request,
                        @FormDataParam("servicesMapJson") InputStream 
serviceMapStream,
+                       @FormDataParam("zoneMapJson") InputStream zoneMapStream,
                        @FormDataParam("file") InputStream uploadedInputStream,
                        @FormDataParam("file") FormDataContentDisposition 
fileDetail,
-                       @QueryParam("isOverride") Boolean isOverride) {
-               
+                       @QueryParam("isOverride") Boolean isOverride,
+                       @QueryParam("importType") String importType) {
                if (LOG.isDebugEnabled()) {
                        LOG.debug("==> ServiceREST.importPoliciesFromFile()");
                }
@@ -2081,98 +2087,57 @@ public class ServiceREST {
                                isOverride = false;
                        }
                        List<String> serviceNameList = new ArrayList<String>();
-                       String serviceType = null;
-                       List<String> serviceTypeList = null;
-                       SearchFilter filter = 
searchUtil.getSearchFilter(request,policyService.sortFields);
-                       if 
(StringUtils.isNotEmpty(request.getParameter(PARAM_SERVICE_TYPE))){
-                               serviceType = 
request.getParameter(PARAM_SERVICE_TYPE);
-                       }
-                       if(StringUtils.isNotEmpty(serviceType)){
-                               serviceTypeList = new 
ArrayList<String>(Arrays.asList(serviceType.split(",")));
-                       }
-                       List<RangerService> rangerServiceList = null;
-                       List<RangerService> rangerServiceLists = new 
ArrayList<RangerService>();
-                       if (CollectionUtils.isNotEmpty(serviceTypeList)){
-                               for (String s : serviceTypeList) {
-                                       filter.removeParam(PARAM_SERVICE_TYPE);
-                                       filter.setParam(PARAM_SERVICE_TYPE, 
s.trim());
-                                       rangerServiceList = getServices(filter);
-                                       
rangerServiceLists.addAll(rangerServiceList);
-                               }
-                       }
-                       if(!CollectionUtils.sizeIsEmpty(rangerServiceLists)){
-                               for(RangerService rService : 
rangerServiceLists){
-                                       if 
(StringUtils.isNotEmpty(rService.getName())){
-                                               
serviceNameList.add(rService.getName());
-                                       }
-                               }
-                       }
 
+                       getServiceNameList(request,serviceNameList);
                        Map<String, String> servicesMappingMap = new 
LinkedHashMap<String, String>();
                        List<String> sourceServices = new ArrayList<String>();
                        List<String> destinationServices = new 
ArrayList<String>();
+                       Map<String, String> zoneMappingMap = new 
LinkedHashMap<String, String>();
+                       List<String> sourceZones = new ArrayList<String>();
+                       List<String> destinationZones = new ArrayList<String>();
+                       if (zoneMapStream != null) {
+                               zoneMappingMap = 
svcStore.getMapFromInputStream(zoneMapStream);
+                               processZoneMapping(zoneMappingMap, sourceZones, 
destinationZones);
+                       }
+
                        if (serviceMapStream != null){
-                               servicesMappingMap = 
svcStore.getServiceMap(serviceMapStream);
-                       }
-                       if(!CollectionUtils.sizeIsEmpty(servicesMappingMap)){
-                               for (Entry<String, String> map : 
servicesMappingMap.entrySet()) {
-                                       String sourceServiceName = null;
-                                       String destinationServiceName = null;
-                                       if 
(StringUtils.isNotEmpty(map.getKey().trim()) && 
StringUtils.isNotEmpty(map.getValue().trim())){
-                                               sourceServiceName = 
map.getKey().trim();
-                                               destinationServiceName = 
map.getValue().trim();
-                                       }else{
-                                               LOG.error("Source service or 
destonation service name is not provided!!");
-                                               throw 
restErrorUtil.createRESTException("Source service or destonation service name 
is not provided!!");
-                                       }
-                                       if 
(StringUtils.isNotEmpty(sourceServiceName)
-                                                       && 
StringUtils.isNotEmpty(destinationServiceName)) {
-                                               
sourceServices.add(sourceServiceName);
-                                               
destinationServices.add(destinationServiceName);
-                                       }
-                               }
-                       }       
-                       
+                               servicesMappingMap = 
svcStore.getMapFromInputStream(serviceMapStream);
+                               processServiceMapping(servicesMappingMap, 
sourceServices, destinationServices);
+                       }
+
                        String fileName = fileDetail.getFileName();
                        int totalPolicyCreate = 0;
+                       String zoneNameInJson = null;
                        Map<String, RangerPolicy> policiesMap = new 
LinkedHashMap<String, RangerPolicy>();
                        List<String> dataFileSourceServices = new 
ArrayList<String>();
                        if (fileName.endsWith("json")) {
                                try {
                                        RangerExportPolicyList 
rangerExportPolicyList = null;
                                        List<RangerPolicy> policies = null;
-                                       Gson gson = new Gson();
-                                       
-                                       String policiesString = 
IOUtils.toString(uploadedInputStream);
-                                       policiesString = policiesString.trim();
-                                       if 
(StringUtils.isNotEmpty(policiesString)){
-                                               gson.fromJson(policiesString, 
RangerExportPolicyList.class);
-                                               rangerExportPolicyList = new 
ObjectMapper().readValue(policiesString, RangerExportPolicyList.class);
-                                       } else {
-                                               LOG.error("Provided json file 
is empty!!");
-                                               throw 
restErrorUtil.createRESTException("Provided json file is empty!!");
-                                       }
-                                       if (rangerExportPolicyList != null && 
!CollectionUtils.sizeIsEmpty(rangerExportPolicyList.getMetaDataInfo())){
+                                       rangerExportPolicyList = 
processPolicyInputJsonForMetaData(uploadedInputStream,rangerExportPolicyList);
+                                       if (rangerExportPolicyList != null && 
!CollectionUtils.sizeIsEmpty(rangerExportPolicyList.getMetaDataInfo())) {
                                                metaDataInfo = new 
ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
                                        } else {
                                                LOG.info("metadata info is not 
provided!!");
                                        }
-                                       if (rangerExportPolicyList != null && 
!CollectionUtils.sizeIsEmpty(rangerExportPolicyList.getPolicies())){
-                                               policies = 
rangerExportPolicyList.getPolicies();
-                                       } else {
-                                               LOG.error("Provided json file 
does not contain any policy!!");
-                                               throw 
restErrorUtil.createRESTException("Provided json file does not contain any 
policy!!");
-                                       }
+                                       policies = 
getPoliciesFromProvidedJson(rangerExportPolicyList);
+
+                                       int i = 0;
                                        if 
(CollectionUtils.sizeIsEmpty(servicesMappingMap) && isOverride){
                                                if(policies != null && 
!CollectionUtils.sizeIsEmpty(policies)){
                                                        for (RangerPolicy 
policyInJson: policies){
-                                                               if 
(policyInJson != null) {
+                                                               if 
(policyInJson != null ) {
+                                                                       if (i 
== 0 && StringUtils.isNotBlank(policyInJson.getZoneName())) {
+                                                                               
zoneNameInJson = policyInJson.getZoneName().trim();
+                                                                       }
                                                                        if 
(StringUtils.isNotEmpty(policyInJson.getService().trim())) {
                                                                                
String serviceName = policyInJson.getService().trim();
                                                                                
if (CollectionUtils.isNotEmpty(serviceNameList) && 
serviceNameList.contains(serviceName)) {
                                                                                
        sourceServices.add(serviceName);
                                                                                
        destinationServices.add(serviceName);
-                                                                               
} else if (CollectionUtils.isEmpty(serviceNameList)) {
+                                                                               
} else if (CollectionUtils.isEmpty(serviceNameList)
+                                                                               
                && !sourceServices.contains(serviceName)
+                                                                               
                && !destinationServices.contains(serviceName)) {
                                                                                
        sourceServices.add(serviceName);
                                                                                
        destinationServices.add(serviceName);
                                                                                
}
@@ -2181,18 +2146,24 @@ public class ServiceREST {
                                                                                
throw restErrorUtil.createRESTException("Service Name or Policy Name is not 
provided!!");
                                                                        }
                                                                }
+                                                               i++;
                                                        }
                                                }
                                        }else if 
(!CollectionUtils.sizeIsEmpty(servicesMappingMap)) {
                                                if (policies != null && 
!CollectionUtils.sizeIsEmpty(policies)){
+                                                       i = 0;
                                                        for (RangerPolicy 
policyInJson: policies){
                                                                if 
(policyInJson != null){
+                                                                       if (i 
== 0 && StringUtils.isNotBlank(policyInJson.getZoneName())) {
+                                                                               
zoneNameInJson = policyInJson.getZoneName().trim();
+                                                                       }
                                                                        if 
(StringUtils.isNotEmpty(policyInJson.getService().trim())) {
                                                                                
dataFileSourceServices.add(policyInJson.getService().trim());
                                                                        }else{
                                                                                
LOG.error("Service Name or Policy Name is not provided!!");
                                                                                
throw restErrorUtil.createRESTException("Service Name or Policy Name is not 
provided!!");
                                                                        }
+                                                                       i++;
                                                                }
                                                        }
                                                        
if(!dataFileSourceServices.containsAll(sourceServices)){
@@ -2208,12 +2179,13 @@ public class ServiceREST {
                                        } else if 
(updateIfExists.equalsIgnoreCase("true")) {
                                                isOverride = false;
                                        }
+                                       String destinationZoneName = 
getDestinationZoneName(destinationZones,zoneNameInJson);
                                        if (isOverride && 
"false".equalsIgnoreCase(updateIfExists) && StringUtils.isEmpty(polResource)) {
                                                if (LOG.isDebugEnabled()) {
                                                        LOG.debug("Deleting 
Policy from provided services in servicesMapJson file...");
                                                }
                                                if 
(CollectionUtils.isNotEmpty(sourceServices) && 
CollectionUtils.isNotEmpty(destinationServices)) {
-                                                       
deletePoliciesProvidedInServiceMap(sourceServices, destinationServices);
+                                                       
deletePoliciesProvidedInServiceMap(sourceServices, 
destinationServices,destinationZoneName);//In order to delete Zone specific 
policies from service
                                                }
                                        }
 
@@ -2222,61 +2194,32 @@ public class ServiceREST {
                                                        LOG.debug("Deleting 
Policy from provided services in servicesMapJson file for specific 
resource...");
                                                }
                                                if 
(CollectionUtils.isNotEmpty(sourceServices) && 
CollectionUtils.isNotEmpty(destinationServices)){
-                                                       
deletePoliciesForResource(sourceServices, destinationServices, request, 
policies);
+                                                       
deletePoliciesForResource(sourceServices, destinationServices, request, 
policies,destinationZoneName);//In order to delete Zone specific policies from 
service
                                                }
                                        }
                                        if (policies != null && 
!CollectionUtils.sizeIsEmpty(policies)){
                                                for (RangerPolicy policyInJson: 
policies){
                                                        if (policyInJson != 
null){
-                                                               policiesMap = 
svcStore.createPolicyMap(servicesMappingMap, sourceServices, 
destinationServices, policyInJson, policiesMap);
-                                                       }
-                                               }
-                                       }
-                                       if 
(!CollectionUtils.sizeIsEmpty(policiesMap.entrySet())) {
-                                               for (Entry<String, 
RangerPolicy> entry : policiesMap.entrySet()) {
-                                                       RangerPolicy policy = 
entry.getValue();
-                                                       if (policy != null){
-                                                               if 
(!CollectionUtils.isEmpty(serviceNameList)) {
-                                                                       for 
(String service : serviceNameList) {
-                                                                               
if (StringUtils.isNotEmpty(service.trim()) && 
StringUtils.isNotEmpty(policy.getService().trim())){
-                                                                               
        if (policy.getService().trim().equalsIgnoreCase(service.trim())) {
-                                                                               
                if (updateIfExists != null && !updateIfExists.isEmpty()){
-                                                                               
                        request.setAttribute(PARAM_SERVICE_NAME, 
policy.getService());
-                                                                               
                        request.setAttribute(PARAM_POLICY_NAME, 
policy.getName());
-                                                                               
                }
-                                                                               
                createPolicy(policy, request);
-                                                                               
                totalPolicyCreate = totalPolicyCreate + 1;
-                                                                               
                if (LOG.isDebugEnabled()) {
-                                                                               
                        LOG.debug("Policy " + policy.getName() + " created 
successfully.");
-                                                                               
                }
-                                                                               
                break;
-                                                                               
        }
-                                                                               
} else {
-                                                                               
        LOG.error("Service Name or Policy Name is not provided!!");
-                                                                               
        throw restErrorUtil.createRESTException("Service Name or Policy Name is 
not provided!!");
-                                                                               
}
-                                                                       }
-                                                               } else {
-                                                                       if 
(updateIfExists != null && !updateIfExists.isEmpty()){
-                                                                               
request.setAttribute(PARAM_SERVICE_NAME, policy.getService());
-                                                                               
request.setAttribute(PARAM_POLICY_NAME, policy.getName());
-                                                                       }
-                                                                       
createPolicy(policy, request);
-                                                                       
totalPolicyCreate = totalPolicyCreate + 1;
-                                                                       if 
(LOG.isDebugEnabled()) {
-                                                                               
LOG.debug("Policy " + policy.getName() + " created successfully.");
+                                                               if 
(StringUtils.isNotBlank(destinationZoneName)) {
+                                                                       boolean 
isZoneServiceExistAtDestination = 
validateDestZoneServiceMapping(destinationZoneName, policyInJson, 
servicesMappingMap);
+                                                                       
if(!isZoneServiceExistAtDestination) {
+                                                                               
LOG.warn("provided service of policy in File is not associated with zone");
+                                                                               
continue;
                                                                        }
                                                                }
+                                                               policiesMap = 
svcStore.createPolicyMap(zoneMappingMap, sourceZones, destinationZoneName,
+                                                                               
servicesMappingMap, sourceServices, destinationServices, policyInJson,
+                                                                               
policiesMap);// zone Info is also sent for creating policy map
                                                        }
                                                }
-                                               if (LOG.isDebugEnabled()) {
-                                                       LOG.debug("Total Policy 
Created From Json file : " + totalPolicyCreate);
-                                               }
-                                               if(!(totalPolicyCreate > 0)){
-                                                       LOG.error("zero policy 
is created from provided data file!!");
-                                                       throw 
restErrorUtil.createRESTException("zero policy is created from provided data 
file!!");
-                                               }
                                        }
+
+                                       totalPolicyCreate = 
createPolicesBasedOnPolicyMap(request,policiesMap, serviceNameList, 
updateIfExists, totalPolicyCreate);
+                                       if(!(totalPolicyCreate > 0)){
+                                               LOG.error("zero policy is 
created from provided data file!!");
+                                               throw 
restErrorUtil.createRESTException("zero policy is created from provided data 
file!!");
+                                       }
+
                                } catch (IOException e) {
                                        LOG.error(e.getMessage());
                                        throw 
restErrorUtil.createRESTException(e.getMessage());
@@ -2332,6 +2275,193 @@ public class ServiceREST {
                }
        }
        
+       private int createPolicesBasedOnPolicyMap(HttpServletRequest request, 
Map<String, RangerPolicy> policiesMap,
+                       List<String> serviceNameList, String updateIfExists, 
int totalPolicyCreate) {
+               if (!CollectionUtils.sizeIsEmpty(policiesMap.entrySet())) {
+                       for (Entry<String, RangerPolicy> entry : 
policiesMap.entrySet()) {
+                               RangerPolicy policy = entry.getValue();
+                               if (policy != null){
+                                       if 
(!CollectionUtils.isEmpty(serviceNameList)) {
+                                               for (String service : 
serviceNameList) {
+                                                       if 
(StringUtils.isNotEmpty(service.trim()) && 
StringUtils.isNotEmpty(policy.getService().trim())){
+                                                               if 
(policy.getService().trim().equalsIgnoreCase(service.trim())) {
+                                                                       if 
(updateIfExists != null && !updateIfExists.isEmpty()){
+                                                                               
request.setAttribute(PARAM_SERVICE_NAME, policy.getService());
+                                                                               
request.setAttribute(PARAM_POLICY_NAME, policy.getName());
+                                                                       }
+                                                                       
createPolicy(policy, request);
+                                                                       
totalPolicyCreate = totalPolicyCreate + 1;
+                                                                       if 
(LOG.isDebugEnabled()) {
+                                                                               
LOG.debug("Policy " + policy.getName() + " created successfully.");
+                                                                       }
+                                                                       break;
+                                                               }
+                                                       } else {
+                                                               
LOG.error("Service Name or Policy Name is not provided!!");
+                                                               throw 
restErrorUtil.createRESTException("Service Name or Policy Name is not 
provided!!");
+                                                       }
+                                               }
+                                       } else {
+                                               if (updateIfExists != null && 
!updateIfExists.isEmpty()){
+                                                       
request.setAttribute(PARAM_SERVICE_NAME, policy.getService());
+                                                       
request.setAttribute(PARAM_POLICY_NAME, policy.getName());
+                                               }
+                                               createPolicy(policy, request);
+                                               totalPolicyCreate = 
totalPolicyCreate + 1;
+                                               if (LOG.isDebugEnabled()) {
+                                                       LOG.debug("Policy " + 
policy.getName() + " created successfully.");
+                                               }
+                                       }
+                               }
+                       }
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("Total Policy Created From Json file 
: " + totalPolicyCreate);
+                       }
+               }
+               return totalPolicyCreate;
+       }
+
+       private List<RangerPolicy> 
getPoliciesFromProvidedJson(RangerExportPolicyList rangerExportPolicyList) {
+               List<RangerPolicy> policies = null;
+               if (rangerExportPolicyList != null && 
!CollectionUtils.sizeIsEmpty(rangerExportPolicyList.getPolicies())) {
+                       policies = rangerExportPolicyList.getPolicies();
+               } else {
+                       LOG.error("Provided json file does not contain any 
policy!!");
+                       throw restErrorUtil.createRESTException("Provided json 
file does not contain any policy!!");
+               }
+               return policies;
+       }
+
+       private RangerExportPolicyList 
processPolicyInputJsonForMetaData(InputStream uploadedInputStream,
+                       RangerExportPolicyList rangerExportPolicyList) throws 
IOException, WebApplicationException {
+               Gson gson = new Gson();
+               String policiesString = IOUtils.toString(uploadedInputStream);
+               policiesString = policiesString.trim();
+               if (StringUtils.isNotEmpty(policiesString)) {
+                       gson.fromJson(policiesString, 
RangerExportPolicyList.class);
+                       rangerExportPolicyList = new 
ObjectMapper().readValue(policiesString, RangerExportPolicyList.class);
+               } else {
+                       LOG.error("Provided json file is empty!!");
+                       throw restErrorUtil.createRESTException("Provided json 
file is empty!!");
+               }
+               return rangerExportPolicyList;
+       }
+
+       private void getServiceNameList(HttpServletRequest request, 
List<String> serviceNameList) {
+               SearchFilter filter = 
searchUtil.getSearchFilter(request,policyService.sortFields);
+               String serviceType = null;
+               List<String> serviceTypeList = null;
+               if 
(StringUtils.isNotEmpty(request.getParameter(PARAM_SERVICE_TYPE))){
+                       serviceType = request.getParameter(PARAM_SERVICE_TYPE);
+               }
+               if(StringUtils.isNotEmpty(serviceType)){
+                       serviceTypeList = new 
ArrayList<String>(Arrays.asList(serviceType.split(",")));
+               }
+               List<RangerService> rangerServiceList = null;
+               List<RangerService> rangerServiceLists = new 
ArrayList<RangerService>();
+               if (CollectionUtils.isNotEmpty(serviceTypeList)){
+                       for (String s : serviceTypeList) {
+                               filter.removeParam(PARAM_SERVICE_TYPE);
+                               filter.setParam(PARAM_SERVICE_TYPE, s.trim());
+                               rangerServiceList = getServices(filter);
+                               rangerServiceLists.addAll(rangerServiceList);
+                       }
+               }
+               if(!CollectionUtils.sizeIsEmpty(rangerServiceLists)){
+                       for(RangerService rService : rangerServiceLists){
+                               if (StringUtils.isNotEmpty(rService.getName())){
+                                       serviceNameList.add(rService.getName());
+                               }
+                       }
+               }
+       }
+
+       private boolean validateDestZoneServiceMapping(String 
destinationZoneName, RangerPolicy policyInJson,
+                       Map<String, String> servicesMappingMap) {
+               boolean isZoneServiceExistAtDestination = false;
+               XXSecurityZone xdestZone = 
daoManager.getXXSecurityZoneDao().findByZoneName(destinationZoneName);
+               if (xdestZone == null) {
+                       LOG.error("destination zone provided does not exist");
+                       throw restErrorUtil.createRESTException("destination 
zone provided does not exist");
+               }
+               // CHECK IF json policies service is there on destination and 
asscioated with
+               // destination zone.
+
+               String serviceNameToCheck = policyInJson.getService();
+
+               if (StringUtils.isNotBlank(serviceNameToCheck) && 
servicesMappingMap.containsKey(serviceNameToCheck)) {
+                       serviceNameToCheck = 
servicesMappingMap.get(policyInJson.getService());
+               }
+               List<XXSecurityZoneRefService> serviceZoneMapping = 
daoManager.getXXSecurityZoneRefService()
+                               .findByServiceNameAndZoneId(serviceNameToCheck, 
xdestZone.getId());
+
+               if (!CollectionUtils.isEmpty(serviceZoneMapping)) {
+                       isZoneServiceExistAtDestination = true;
+               }
+
+               return isZoneServiceExistAtDestination;
+       }
+
+       private String getDestinationZoneName(List<String> destinationZones, 
String zoneNameInJson) {
+               String destinationZoneName = null;
+               if (CollectionUtils.isNotEmpty(destinationZones)) {
+                       destinationZoneName = destinationZones.get(0);
+               } else {
+                       destinationZoneName = zoneNameInJson;
+               }
+               return destinationZoneName;
+       }
+
+       private void processServiceMapping(Map<String, String> 
servicesMappingMap, List<String> sourceServices,
+                       List<String> destinationServices) {
+               if (!CollectionUtils.sizeIsEmpty(servicesMappingMap)) {
+                       for (Entry<String, String> map : 
servicesMappingMap.entrySet()) {
+                               String sourceServiceName = null;
+                               String destinationServiceName = null;
+                               if (StringUtils.isNotEmpty(map.getKey().trim()) 
&& StringUtils.isNotEmpty(map.getValue().trim())) {
+                                       sourceServiceName = map.getKey().trim();
+                                       destinationServiceName = 
map.getValue().trim();
+                               } else {
+                                       LOG.error("Source service or 
destination service name is not provided!!");
+                                       throw restErrorUtil
+                                                       
.createRESTException("Source service or destonation service name is not 
provided!!");
+                               }
+                               if (StringUtils.isNotEmpty(sourceServiceName) 
&& StringUtils.isNotEmpty(destinationServiceName)) {
+                                       sourceServices.add(sourceServiceName);
+                                       
destinationServices.add(destinationServiceName);
+                               }
+                       }
+               }
+       }
+
+       private void processZoneMapping(Map<String, String> zoneMappingMap, 
List<String> sourceZones,
+                       List<String> destinationZones) {
+
+               if (!CollectionUtils.sizeIsEmpty(zoneMappingMap)) {
+                       for (Entry<String, String> map : 
zoneMappingMap.entrySet()) {
+                               String sourceZoneName = null;
+                               String destinationZoneName = null;
+                               if (StringUtils.isNotEmpty(map.getKey().trim()) 
|| StringUtils.isNotEmpty(map.getValue().trim())) {
+                                       // zone to zone
+                                       // zone to unzone
+                                       // unzone to zone
+                                       sourceZoneName = map.getKey().trim();
+                                       destinationZoneName = 
map.getValue().trim();
+                                       LOG.info("sourceZoneName =" + 
sourceZoneName + "destinationZoneName = " + destinationZoneName);
+                               } else if 
(StringUtils.isEmpty(map.getKey().trim()) && 
StringUtils.isEmpty(map.getValue().trim())) {
+                                       LOG.info("Unzone to unzone policies 
import");
+                               } else {
+                                       LOG.error("Source zone or destination 
zone name is not provided!!");
+                                       throw 
restErrorUtil.createRESTException("Source zone or destination zone name is not 
provided!!");
+                               }
+                               if (StringUtils.isNotEmpty(sourceZoneName) || 
StringUtils.isNotEmpty(destinationZoneName)) {
+                                       sourceZones.add(sourceZoneName);
+                                       
destinationZones.add(destinationZoneName);
+                               }
+                       }
+               }
+       }
+
        private List<RangerPolicy> getAllFilteredPolicyList(SearchFilter filter,
                        HttpServletRequest request, List<RangerPolicy> 
policyLists) {
                String serviceNames = null;
@@ -2426,15 +2556,16 @@ public class ServiceREST {
                return policyLists;
        }
        
-       private void deletePoliciesProvidedInServiceMap(
-                       List<String> sourceServices, List<String> 
destinationServices) {
+       private void deletePoliciesProvidedInServiceMap(List<String> 
sourceServices, List<String> destinationServices, String zoneName) {
                int totalDeletedPilicies = 0;
                if (CollectionUtils.isNotEmpty(sourceServices)
                                && 
CollectionUtils.isNotEmpty(destinationServices)) {
                        RangerPolicyValidator validator = 
validatorFactory.getPolicyValidator(svcStore);
                        for (int i = 0; i < sourceServices.size(); i++) {
-                               if (!destinationServices.get(i).isEmpty()) {
-                                       final RangerPolicyList servicePolicies 
= getServicePolicies(destinationServices.get(i), new SearchFilter());
+                               if (!destinationServices.get(i).isEmpty() ) {
+                                       SearchFilter filter = new 
SearchFilter();
+                                       filter.setParam("zoneName",zoneName);
+                                       final RangerPolicyList servicePolicies 
= getServicePolicies(destinationServices.get(i),filter);
                                        if (servicePolicies != null) {
                                                List<RangerPolicy> 
rangerPolicyList = servicePolicies.getPolicies();
                                                if 
(CollectionUtils.isNotEmpty(rangerPolicyList)) {
@@ -2465,7 +2596,7 @@ public class ServiceREST {
                }
        }
 
-       private void deletePoliciesForResource(List<String> sourceServices, 
List<String> destinationServices, HttpServletRequest request, 
List<RangerPolicy> exportPolicies) {
+       private void deletePoliciesForResource(List<String> sourceServices, 
List<String> destinationServices, HttpServletRequest request, 
List<RangerPolicy> exportPolicies, String zoneName) {
                int totalDeletedPilicies = 0;
                if (CollectionUtils.isNotEmpty(sourceServices)
                                && 
CollectionUtils.isNotEmpty(destinationServices)) {
@@ -2480,7 +2611,9 @@ public class ServiceREST {
                        for (int i = 0; i < sourceServices.size(); i++) {
                                if (!destinationServices.get(i).isEmpty()) {
                                        RangerPolicyList servicePolicies = null;
-                                       servicePolicies = 
getServicePoliciesByName(destinationServices.get(i), request);
+                                       SearchFilter filter = 
searchUtil.getSearchFilter(request,policyService.sortFields);
+                                       filter.setParam("zoneName", zoneName);
+                                       servicePolicies = 
getServicePolicies(destinationServices.get(i), filter);
                                        if (servicePolicies != null) {
                                                List<RangerPolicy> 
rangerPolicyList = servicePolicies.getPolicies();
                                                if 
(CollectionUtils.isNotEmpty(rangerPolicyList)) {
@@ -2600,7 +2733,7 @@ public class ServiceREST {
                RangerPerfTracer perf = null;
 
                SearchFilter filter = searchUtil.getSearchFilter(request, 
policyService.sortFields);
-               String zoneName = filter.getParam("zoneName");
+
                try {
                        if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
                                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"ServiceREST.getServicePolicies(serviceId=" + serviceId + ")");
@@ -2628,9 +2761,7 @@ public class ServiceREST {
                                }
 
                                servicePolicies = 
applyAdminAccessFilter(servicePolicies);
-                               if(StringUtils.isBlank(zoneName)) { //if 
zoneName not provided in search parameter, return only policies which are not 
in any zone.
-                                       servicePolicies = 
applyZoneFilter(servicePolicies);
-                               }
+
                                ret = toRangerPolicyList(servicePolicies, 
filter);
                        }
                } catch(WebApplicationException excp) {
@@ -2650,15 +2781,6 @@ public class ServiceREST {
                return ret;
        }
 
-       private List<RangerPolicy> applyZoneFilter(List<RangerPolicy> 
servicePolicies) {
-               List<RangerPolicy> noZonePolicies = new 
ArrayList<RangerPolicy>();
-               for(RangerPolicy policy : servicePolicies){
-                       if(StringUtils.isBlank(policy.getZoneName())) {
-                               noZonePolicies.add(policy);
-                       }
-               }
-               return noZonePolicies;
-       }
 
        @GET
        @Path("/policies/service/name/{name}")
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
index acba730..b16bfe7 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerBaseModelService.java
@@ -73,7 +73,8 @@ public abstract class RangerBaseModelService<T extends 
XXDBBase, V extends Range
        public static final int OPERATION_CREATE_CONTEXT = 1;
        public static final int OPERATION_UPDATE_CONTEXT = 2;
        public static final int OPERATION_DELETE_CONTEXT = 3;
-
+       public static final int OPERATION_IMPORT_CREATE_CONTEXT = 4;
+       public static final int OPERATION_IMPORT_DELETE_CONTEXT = 5;
        protected Class<T> tEntityClass;
        protected Class<V> tViewClass;
        private Boolean populateExistingBaseFields;
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
index 771feec..0276367 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
@@ -76,8 +76,10 @@ public class RangerPolicyService extends 
RangerPolicyServiceBase<XXPolicy, Range
 
        static HashMap<String, VTrxLogAttr> trxLogAttrs = new HashMap<String, 
VTrxLogAttr>();
        String actionCreate;
+       String actionImportCreate;
        String actionUpdate;
        String actionDelete;
+       String actionImportDelete;
 
        static {
                trxLogAttrs.put("name", new VTrxLogAttr("name", "Policy Name", 
false));
@@ -101,6 +103,8 @@ public class RangerPolicyService extends 
RangerPolicyServiceBase<XXPolicy, Range
        public RangerPolicyService() {
                super();
                actionCreate = "create";
+               actionImportCreate = "Import Create";
+               actionImportDelete = "Import Delete";
                actionUpdate = "update";
                actionDelete = "delete";
        }
@@ -422,6 +426,16 @@ public class RangerPolicyService extends 
RangerPolicyServiceBase<XXPolicy, Range
                                xTrxLog.setPreviousValue(oldValue);
                                xTrxLog.setNewValue(value);
                        }
+                       else if (action == OPERATION_IMPORT_CREATE_CONTEXT) {
+                               if (stringUtil.isEmpty(value)) {
+                                       return null;
+                               }
+                               xTrxLog.setNewValue(value);
+                               actionString = actionImportCreate;
+                       } else if (action == OPERATION_IMPORT_DELETE_CONTEXT) {
+                               xTrxLog.setPreviousValue(value);
+                               actionString = actionImportDelete;
+                       }
                } catch (IllegalArgumentException | IllegalAccessException e) {
                        logger.error("Process field to create trx log 
failure.", e);
                }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
index 8dfbf41..3e1a8e1 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
@@ -140,6 +140,7 @@ public abstract class RangerPolicyServiceBase<T extends 
XXPolicyBase, V extends
                vObj.setGuid(xObj.getGuid());
                vObj.setVersion(xObj.getVersion());
                vObj.setService(xService.getName());
+               vObj.setServiceType(xService.getType().toString());
                vObj.setName(StringUtils.trim(xObj.getName()));
                vObj.setPolicyType(xObj.getPolicyType() == null ? 
RangerPolicy.POLICY_TYPE_ACCESS : xObj.getPolicyType());
                vObj.setPolicyPriority(xObj.getPolicyPriority() == null ? 
RangerPolicy.POLICY_PRIORITY_NORMAL : xObj.getPolicyPriority());
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 97cc58b..e4647b1 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
@@ -266,6 +266,10 @@
 
        <!-- XXPolicy -->
 
+       <named-query name="XXPolicy.findByPolicyName">
+               <query>select obj from XXPolicy obj where obj.name = :polName 
order by obj.id</query>
+       </named-query>
+
        <named-query name="XXPolicy.findByNameAndServiceIdAndZoneId">
                <query>select obj from XXPolicy obj where obj.name = :polName 
and obj.service = :serviceId and obj.zoneId = :zoneId order by obj.id</query>
        </named-query>
@@ -1358,6 +1362,18 @@
         </query>
     </named-query>
 
+       <named-query name="XXSecurityZoneRefService.findByServiceName">
+            <query>
+                select obj from XXSecurityZoneRefService obj where 
obj.serviceName = :serviceName
+            </query>
+        </named-query>
+
+       <named-query name="XXSecurityZoneRefService.findByServiceNameAndZoneId">
+            <query>
+                select obj from XXSecurityZoneRefService obj where 
obj.serviceName = :serviceName and obj.zoneId = :zoneId
+            </query>
+        </named-query>
+
     <named-query name="XXSecurityZoneRefTagService.findByZoneId">
         <query>
             select obj from XXSecurityZoneRefTagService obj where obj.zoneId = 
:zoneId
diff --git 
a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js 
b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
index 19bb04b..7f5204a 100644
--- a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
+++ b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
@@ -455,6 +455,8 @@ define(function(require) {
                 zoneServiceNameValidation: 'Please select Service Name for 
selected zone.',
                 adminUserGroupValidation: 'Please select atleast one Admin 
Users/Usergroups to Zone else Zone will not be added.',
                 auditorUserGroupValidation: 'Please select atleast one Auditor 
Users/Usergroups to Zone else Zone will not be added.',
+                selectZoneFile          : 'Selected file does not contain zone 
details, Please select appropriate file containing zone details',
+                selectOtherFile         : 'Selected file contains zone 
details, Please select appropriate file without zone details'
 
                        },
                        plcHldr : {
diff --git a/security-admin/src/main/webapp/scripts/utils/XAGlobals.js 
b/security-admin/src/main/webapp/scripts/utils/XAGlobals.js
index 8036d2f..2117f66 100644
--- a/security-admin/src/main/webapp/scripts/utils/XAGlobals.js
+++ b/security-admin/src/main/webapp/scripts/utils/XAGlobals.js
@@ -83,7 +83,9 @@ define(function(require){
                        Export_Csv   : { value: 'EXPORT CSV',   label: 'Export 
Csv' },
                        Export_Excel : { value: 'EXPORT EXCEL', label: 'Export 
Excel' },
                        Import_End   : { value: 'IMPORT END',   label: 'Import 
End' },
-                       Import_Start : { value: 'IMPORT START', label: 'Import 
Start'}
+                       Import_Start : { value: 'IMPORT START', label: 'Import 
Start'},
+                       Import_Create : { value: 'IMPORT CREATE', label: 
'Import Create'},
+                       Import_Delete: { value: 'IMPORT DELETE', label: 'Import 
Delete'}
        };
 
         XAGlobals.Timezones = [{"text":"Africa/Abidjan 
(GMT)","id":"Africa/Abidjan"},{"text":"Africa/Accra 
(GMT)","id":"Africa/Accra"},{"text":"Africa/Addis_Ababa 
(EAT)","id":"Africa/Addis_Ababa"},{"text":"Africa/Algiers 
(CET)","id":"Africa/Algiers"},{"text":"Africa/Asmara 
(EAT)","id":"Africa/Asmara"},{"text":"Africa/Asmera 
(EAT)","id":"Africa/Asmera"},{"text":"Africa/Bamako 
(GMT)","id":"Africa/Bamako"},{"text":"Africa/Bangui 
(WAT)","id":"Africa/Bangui"},{"text":"Africa/Banjul (GMT)","id [...]
diff --git 
a/security-admin/src/main/webapp/scripts/views/DownloadServicePolicy.js 
b/security-admin/src/main/webapp/scripts/views/DownloadServicePolicy.js
index 2b5cfdd..f701e3f 100644
--- a/security-admin/src/main/webapp/scripts/views/DownloadServicePolicy.js
+++ b/security-admin/src/main/webapp/scripts/views/DownloadServicePolicy.js
@@ -75,14 +75,19 @@ define(function(require){
                        if(urlString.slice(-1) == "/") {
                                urlString = urlString.slice(0,-1);
                        };
+                        if(App.vZone && App.vZone.vZoneName && 
!_.isEmpty(App.vZone.vZoneName)){
+                                var exportUrl = urlString +urls+ 
'?serviceName='+serviceName+'&zoneName='+App.vZone.vZoneName;
+                        }else{
+                                var exportUrl = urlString +urls+ 
'?serviceName='+serviceName;
+                        }
                        XAUtil.blockUI();
                        $.ajax({
                        type: "GET",
-                       url:urlString +urls+ 
'?serviceName='+serviceName+'&checkPoliciesExists=true',
+                        url:exportUrl+'&checkPoliciesExists=true',
                        success:function(data,status,response){
                                XAUtil.blockUI('unblock');
                                if(response.status == 200 || 
response.statusText == "ok"){
-                                   var downloadUrl = urlString + 
urls+'?serviceName='+serviceName+'&checkPoliciesExists=false';
+                                    var downloadUrl = 
exportUrl+'&checkPoliciesExists=false';
                                    var downloadReport = $('<a href 
="'+downloadUrl+'"></a>');
                                    downloadReport.appendTo('body');
                                    downloadReport[0].click();
diff --git 
a/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js 
b/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js
index 68022e9..94362bf 100644
--- a/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js
+++ b/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js
@@ -18,13 +18,14 @@
  */
 
 define(function(require){
-    'use strict';
+       'use strict';
 
        var Backbone            = require('backbone');
        var App                         = require('App');
        var XAUtil                      = require('utils/XAUtils');
        var XAEnums                     = require('utils/XAEnums');
        var XALinks             = require('modules/XALinks');
+       var localization        = require('utils/XALangSupport');
        var UploadservicepolicyTmpl = 
require('hbs!tmpl/common/uploadservicepolicy_tmpl');
        
        var ServiceMappingItem = Backbone.Marionette.ItemView.extend({
@@ -45,7 +46,7 @@ define(function(require){
                },
 
                initialize : function(options) {
-                       _.extend(this, _.pick(options, 
'collection','serviceNames','services'));
+                       _.extend(this, _.pick(options, 
'collection','serviceNames','services','sourceData','zoneDestination','serviceType'));
                        
                },
                onSourceChange : function(e){
@@ -53,31 +54,54 @@ define(function(require){
                        this.model.set('source', _.isEmpty(sourceValue) ? 
undefined : sourceValue);
                },
                onDestinationSelect : function(e) {
-                  this.model.set('destination', 
_.isEmpty(e.currentTarget.value) ? undefined : e.currentTarget.value);
-                  var serviceTypes = _.find( this.services.models , 
function(m){
-                          return m.get('name') == e.currentTarget.value
-                  });
-                  if(!_.isUndefined(serviceTypes)){
-                          this.model.set('serviceType' , 
serviceTypes.get('type') );
-                  }else{
-                          this.model.set('serviceType' , " " );
-                  }
+                       this.model.set('destination', 
_.isEmpty(e.currentTarget.value) ? undefined : e.currentTarget.value);
+                       var serviceTypes = _.find( this.services.models , 
function(m){
+                               return m.get('name') == e.currentTarget.value
+                       });
+                       if(!_.isUndefined(serviceTypes)){
+                               this.model.set('serviceType' , 
serviceTypes.get('type') );
+                       }else{
+                               this.model.set('serviceType' , " " );
+                       }
                },
                onDeleteMapClick : function(){
                        this.collection.remove(this.model)      
                },
- 
+
                onRender : function() {
                        var that = this;
-                       var options = _.map(this.serviceNames, function(m, 
key){ return { 'id' : m.name, 'text' : m.name}; });
+                       // source services
                        this.ui.sourceInput.val(this.model.get('source'));
-                       
this.ui.destinationSelect.val(this.model.get('destination'));
+                       var sourceOptions = 
_.map(_.groupBy(this.sourceData.policies , function(m){return m.service}), 
function(m, key){ return { 'id' : key, 'text' : key}; });
+                       this.ui.sourceInput.select2({
+                               closeOnSelect: true,
+                               placeholder: 'Select source name',
+                               width: '220px',
+                               allowClear: true,
+                               data:sourceOptions,
+                       });
+                       // destination services
+                       var serviceNameList = [], options;
+                       if(that.model && that.model.has('sourceServiceType')){
+                               serviceNameList = _.filter(this.serviceNames, 
function(m){
+                                       return m.get('type') == 
that.model.get('sourceServiceType')
+                               })
+                               options = _.map(serviceNameList, function(m){ 
return { 'id' : m.get('name'), 'text' : m.get('name')}});
+                       }else{
+                               options = _.map(this.serviceNames, function(m){ 
return { 'id' : m.get('name'), 'text' : m.get('name')}});
+                       }
+                       if(_.some(options,function(m){return m.id === 
that.model.get('source')})){
+                               
this.ui.destinationSelect.val(that.model.get('source'));
+                               this.model.set('destination', 
that.model.get('source'))
+                       }else{
+                               this.ui.destinationSelect.val();
+                       }
                        this.ui.destinationSelect.select2({
                                closeOnSelect: true,
                                placeholder: 'Select service name',
-                           width: '220px',
-                           allowClear: true,
-                           data:options,
+                               width: '220px',
+                               allowClear: true,
+                               data:options,
                        });
                }
        });
@@ -99,30 +123,26 @@ define(function(require){
                        return {
                                'collection'    : this.collection,
                                'serviceNames'  : this.serviceNames,
-                               'services': this.services,
+                               'services'      : this.services,
+                               'sourceData'    : this.importFileData,
+                               'zoneDestination': 
this.ui.zoneDestination.val(),
+                               'serviceType'   : this.serviceType
                        };
                },
                initialize: function(options) {
-                        this.bind("ok", this.okClicked);
-                        _.extend(this, _.pick(options, 
'collection','serviceNames','serviceDefList','serviceType','services',
-                                'zoneServiceDefList','zoneServices'));
-                        var that =this, componentServices=[];
-                        if(!_.isEmpty(that.zoneServices) && 
!_.isUndefined(that.zoneServices)){
-                                _.each(that.zoneServices, function(value, key){
-                                        if(key === that.serviceType){
-                                                componentServices = 
componentServices.concat(value);
-                                        }
-                                });
-                        }else{
-                                componentServices = 
this.services.where({'type' : this.serviceType });
-                        }
-                  this.serviceNames = componentServices.map(function(m){ 
return { 'name' : m.get('name') } });
+                       this.bind("ok", this.okClicked);
+                       _.extend(this, _.pick(options, 
'collection','serviceNames','serviceDefList','serviceType','services',
+                               'rangerZoneList'));
                },
                ui:{
                        'importFilePolicy'  : '[data-id="uploadPolicyFile"]',
                        'addServiceMaping'      : 
'[data-id="addServiceMaping"]',
-                       'componentType'         : '[data-id="componentType"]',
-                       'fileNameClosebtn'      : '[data-id="fileNameClosebtn"]'
+                       'fileNameClosebtn'      : 
'[data-id="fileNameClosebtn"]',
+                       'zoneSource'        : '[data-id="zoneSource"]',
+                       'zoneDestination'   : '[data-id="zoneDestination"]',
+                       'selectFileValidationMsg' : 
'[data-id="selectFileValidationMsg"]',
+                       'selectServicesMapping': 
'[data-id="selectServicesMapping"]',
+                       'selectZoneMapping' : '[data-id="selectZoneMapping"]'
                },
                events: function() {
                        var events = {};
@@ -132,24 +152,13 @@ define(function(require){
                        return events;
                },
                okClicked: function (modal) {
-                       if( _.isUndefined(this.targetFileObj) || 
(_.isEmpty(this.ui.componentType.val()) && 
this.ui.componentType.is(":visible"))){
-                               if(_.isUndefined(this.targetFileObj)){
-                                       
this.$el.find('.selectFileValidationMsg').show();
-                               }else{
-                                       
this.$el.find('.selectFileValidationMsg').hide();
-                               }
-                               if (_.isEmpty(this.ui.componentType.val())){
-                                       
this.$el.find('.seviceFiledValidationFile').show();
-                               }else{
-                                       
this.$el.find('.seviceFiledValidationFile').hide();
-                               }
+                       if( _.isUndefined(this.targetFileObj)){
+                               this.ui.selectFileValidationMsg.show();
                                return modal.preventClose();
                        }
-                       var that = this, serviceMapping = {}, fileObj = 
this.targetFileObj, preventModal = false , url ="";
-                       
if(this.$el.find('input[data-name="override"]').is(':checked')){
-                   url = 
"service/plugins/policies/importPoliciesFromFile?isOverride=true";
-                       }else{
-                   url = 
"service/plugins/policies/importPoliciesFromFile?isOverride=false";
+                       var that = this, serviceMapping = {}, fileObj = 
this.targetFileObj, preventModal = false , url ="", zoneMapping = {};;
+                       if(!_.isEmpty(this.ui.zoneDestination.val()) || 
!_.isEmpty(this.ui.zoneSource.val())){
+                               zoneMapping[this.ui.zoneSource.val()] = 
this.ui.zoneDestination.val();
                        }
                        this.collection.each(function(m){
                                if( m.get('source') !== undefined && 
m.get('destination') == undefined 
@@ -159,7 +168,7 @@ define(function(require){
                                        preventModal = true;
                                }
                                if(!_.isUndefined(m.get('source'))){
-                                       serviceMapping[m.get('source')] = 
m.get('destination') 
+                                       serviceMapping[m.get('source')] = 
m.get('destination');
                                }
                        });
                        if(preventModal){
@@ -168,19 +177,19 @@ define(function(require){
                        }
                        if(this.collection.length>1){
                                that.collection.models.some(function(m){
-                                          if (!_.isEmpty(m.attributes)) {
-                               if (m.has('source') && m.get('source') != '') {
-                                   var model = that.collection.where({
-                                       'source': m.get('source')
-                                   });
-                                   if (model.length > 1) {
-                                       
that.$el.find('.serviceMapTextError').show();
-                                       
that.$el.find('.serviceMapErrorMsg').hide();
-                                       preventModal = true;
-                                       return true;
-                                   }
-                               }
-                                          }
+                                       if (!_.isEmpty(m.attributes)) {
+                                               if (m.has('source') && 
m.get('source') != '') {
+                                                       var model = 
that.collection.where({
+                                                               'source': 
m.get('source')
+                                                       });
+                                                       if (model.length > 1) {
+                                                               
that.$el.find('.serviceMapTextError').show();
+                                                               
that.$el.find('.serviceMapErrorMsg').hide();
+                                                               preventModal = 
true;
+                                                               return true;
+                                                       }
+                                               }
+                                       }
                                })
                        }
                        if(preventModal){
@@ -188,129 +197,203 @@ define(function(require){
                                return;
                        }
                        this.formData = new FormData();
-               this.formData.append('file', fileObj);
-               if(!_.isEmpty(serviceMapping)){ 
-                       this.formData.append('servicesMapJson', new 
Blob([JSON.stringify(serviceMapping)],{type:'application/json'}));
-               }
-               var compString = ''
-               if(!_.isUndefined(that.serviceType)){
-                       compString=that.serviceType
-               }else{
-                       compString = this.ui.componentType.val()
-               }
-               XAUtil.blockUI();
-                       $.ajax({
-                       type: 'POST',
-                       url: url+"&serviceType="+compString,
-                       enctype: 'multipart/form-data',
-                       data: this.formData,
-                       cache: false,
-                       dataType:'Json',
-                       contentType: false,
-                       processData: false,
-                       success: function () {
-                               XAUtil.blockUI('unblock');
-                               var msg =  'File import successfully.' ;
+                       this.formData.append('file', fileObj);
+                       //service mapping details
+                       if(!_.isEmpty(serviceMapping)){
+                               this.formData.append('servicesMapJson', new 
Blob([JSON.stringify(serviceMapping)],{type:'application/json'}));
+                       }
+                       //zone mapping details
+                       if(!_.isEmpty(zoneMapping)){
+                               this.formData.append('zoneMapJson', new 
Blob([JSON.stringify(zoneMapping)],{type:'application/json'}));
+                       }
+                       //override flag
+                       
if(this.$el.find('input[data-name="override"]').is(':checked')){
+                               url = 
"service/plugins/policies/importPoliciesFromFile?isOverride=true";
+                       }else{
+                               url = 
"service/plugins/policies/importPoliciesFromFile?isOverride=false";
+                       }
+                       var compString = ''
+                       if(!_.isUndefined(that.serviceType)){
+                               compString=that.serviceType
+                       }else{
+                               var selectedZoneServices = [], selectedZone;
+                               if(!_.isUndefined( 
that.ui.zoneDestination.val()) && !_.isEmpty( that.ui.zoneDestination.val())){
+                                       selectedZone = 
this.rangerZoneList.find(function(m) {
+                                               return 
that.ui.zoneDestination.val() === m.get('name');
+                                       });
+                                       _.each(selectedZone.get('services'), 
function(value, key) {
+                                               var model = 
that.services.find(function(m) {
+                                                       return m.get('name') == 
key
+                                               })
+                                               if (model) {
+                                                       
selectedZoneServices.push(model);
+                                               }
+                                       })
+                               }else{
+                                       selectedZoneServices = 
this.serviceNames;
+                               }
+                               compString = 
_.map(_.groupBy(selectedZoneServices, function(m){return m.get('type')}), 
function(m, key){return key}).toString();
+                       }
+                       XAUtil.blockUI();
+                       $.ajax({
+                               type: 'POST',
+                               url: url+"&serviceType="+compString,
+                               enctype: 'multipart/form-data',
+                               data: this.formData,
+                               cache: false,
+                               dataType:'Json',
+                               contentType: false,
+                               processData: false,
+                               success: function () {
+                                       XAUtil.blockUI('unblock');
+                                       var msg =  'File import successfully.' ;
                                        XAUtil.notifySuccess('Success', msg);
        
-                       },
-                             error : function(response,model){
-                               XAUtil.blockUI('unblock');
-                               if ( response && response.responseJSON && 
response.responseJSON.msgDesc){
-                                       if(response.status == '419'){
-                                               
XAUtil.defaultErrorHandler(model,response);
-                                       }else{
-                                               XAUtil.notifyError('Error', 
response.responseJSON.msgDesc);
+                               },
+                               error : function(response,model){
+                                       XAUtil.blockUI('unblock');
+                                       if ( response && response.responseJSON 
&& response.responseJSON.msgDesc){
+                                               if(response.status == '419'){
+                                                       
XAUtil.defaultErrorHandler(model,response);
+                                               }else{
+                                                       
XAUtil.notifyError('Error', response.responseJSON.msgDesc);
+                                               }
+                                       } else {
+                                               XAUtil.notifyError('Error', 
'File import failed.');
                                        }
-                               } else {
-                               XAUtil.notifyError('Error', 'File import 
failed.');
                                }
-                             }
-                   });
-           },
-           onAddClick : function(){
-               this.collection.add(new Backbone.Model());
-           },
-               onRender: function() {
-                       this.$el.find('.fileValidation').hide();
-               this.$el.find('.selectFileValidationMsg').hide();
-               if(this.serviceType==undefined){
-                          this.$el.find('.seviceFiled').show();
-                          this.renderComponentSelect();
-               }else{
-                          this.$el.find('.seviceFiled').hide();
-               }
+                       });
                },
-               /* add 'component' and 'policy type' select */
-               renderComponentSelect: function(){
-                       var that = this;
-                        if(!_.isEmpty(this.zoneServiceDefList) && 
!_.isUndefined(this.zoneServiceDefList)){
-                                var options = 
this.zoneServiceDefList.map(function(m){ return { 'id' : m.get('name'), 'text' 
: m.get('name')}});
-                        }else{
-                                var options = 
this.serviceDefList.map(function(m){ return { 'id' : m.get('name'), 'text' : 
m.get('name')}});
-                        }
-                       var optionVal = options.map(function(m){return m.text})
-            this.ui.componentType.val(optionVal);
-                       this.ui.componentType.select2({
-                               multiple: true,
-                               closeOnSelect: true,
-                               placeholder: 'Select Component',
-                           width: '530px',
-                           allowClear: true,
-                           data: options
-                       }).on('change', function(e){
-                               var selectedComp  = e.currentTarget.value, 
componentServices = [];
-                               _.each(selectedComp.split(","), function(type){
-                                        if(!_.isEmpty(that.zoneServices) && 
!_.isUndefined(that.zoneServices)){
-                                                _.each(that.zoneServices, 
function(value, key){
-                                                        if(key === type){
-                                                                
componentServices = componentServices.concat(value);
-                                                        }
-                                                });
-                                        }else{
-                                                that.serviceNam = 
that.services.where({'type' : type });
-                                                componentServices = 
componentServices.concat(that.serviceNam);
-                                        }
-                               });
-                               var names = componentServices.map(function(m){ 
return { 'name' : m.get('name') } });
-                               that.serviceNames = names;
-                               if(!_.isUndefined(e.removed)){
-                                       _.each(that.collection.models , 
function(m){
-                                               if(m.get('serviceType') == 
e.removed.id){
-                                                       var mapModels = 
that.collection.filter(function(m){
-                                                               return 
m.get('serviceType') == e.removed.id;
-                                                       })
-                                                       
if(!_.isUndefined(mapModels)){
-                                                               
that.collection.remove(mapModels);
-                                                       }
-                                               }
-                                       });
-                               }
-                               that.collection.trigger('reset');
-                       }).trigger('change');
+               onAddClick : function(){
+                       this.collection.add(new Backbone.Model());
+               },
+               onRender: function() {
+                       this.$el.find('.fileValidation').hide();
+                       this.ui.selectFileValidationMsg.hide();
+                       this.ui.selectZoneMapping.hide();
+                       this.ui.selectServicesMapping.hide();
                },
                importPolicy : function(e){
                        var that =this;
                        console.log("uploading....");
                        this.$el.find('.selectFile').hide(); 
-                       this.$el.find('.selectFileValidationMsg').hide(); 
+                       this.ui.selectFileValidationMsg.hide(); 
                        this.$el.find('.fileValidation').hide();
+                       this.selectedFileValidation(e)
                        this.targetFileObj = e.target.files[0];
                        if(!_.isUndefined(this.targetFileObj)){
-                                
this.$el.find('.selectFile').html('<i>'+this.targetFileObj.name+
-                                        '</i><label class="icon icon-remove 
icon-1x icon-remove-btn" data-id="fileNameClosebtn"></label>').show();
-                       }else{
+                               
this.$el.find('.selectFile').html('<i>'+this.targetFileObj.name+
+                                       '</i><label class="icon icon-remove 
icon-1x icon-remove-btn" 
data-id="fileNameClosebtn"></label>').removeClass('text-color-red').show();
+                       } else {
                                this.$el.find('.selectFile').html("No file 
chosen").show();
                        }
                },
+               selectedFileValidation : function(file){
+                       var that = this,
+                       fileReader = new FileReader();
+                       fileReader.onload =     function(e){
+                               try {
+                                       that.importFileData = 
JSON.parse(e.target.result);
+                               } catch(e) {
+                                       // error in the above string (in this 
case, yes)!
+                                       
that.$el.find(that.ui.selectFileValidationMsg).html(e).show();
+                                       return
+                               }
+                               var sourceZonePolicy = 
_.filter(that.importFileData.policies, function(m){
+                                       if(m.zoneName){ return m.zoneName }
+                               });
+                               
that.selectZoneMappingData(_.groupBy(sourceZonePolicy, function(m){ return 
m.zoneName }));
+                       }
+                       fileReader.readAsText(file.target.files[0]);
+               },
+               selectZoneMappingData: function(sourceZoneName){
+                       var that = this;
+                       //souece zone value
+                       this.ui.selectZoneMapping.show();
+                       this.ui.selectServicesMapping.show();
+                       if(sourceZoneName){
+                               
this.ui.zoneSource.val(_.escape(_.keys(sourceZoneName)[0]));
+                       }else{
+                               this.ui.zoneSource.val('');
+                       }
+                       //Destination zone value
+                       this.setServiceDestination();
+                       //Destination service values
+                       if(this.serviceType && ! _.isEmpty(this.serviceType)){
+                               this.serviceNames = 
this.services.models.filter(function(m){return that.serviceType == 
m.get('type')});
+                       }else{
+                               this.serviceNames = this.services.models
+                       }
+                       this.setServiceSourceData();
+               },
+
+               setServiceSourceData: function(){
+                       var that = this,
+                       serviceSources = _.groupBy(that.importFileData.policies 
, function(m){
+                               return m.service
+                       })
+                       _.map(serviceSources, function(m , key){
+                               var sourceServiceDef = 
that.serviceDefList.find(function(model){
+                                       return model.get('id') == 
m[0].serviceType
+                               });
+                               if(sourceServiceDef){
+                                       that.collection.add(new 
Backbone.Model({'source' : key, 'sourceServiceType' : 
sourceServiceDef.get('name')}));
+                               }else{
+                                       that.collection.add(new 
Backbone.Model({'source' : key}));
+                               }
+                       })
+               },
+               setServiceDestination : function(){
+                       var that =this,
+                       zoneNameOption = _.map(this.rangerZoneList.models, 
function(m){
+                               return { 'id':m.get('name'), 
'text':m.get('name')}
+                       });
+                       this.ui.zoneDestination.attr('disabled',false);
+                       this.ui.zoneDestination.select2({
+                               closeOnSelect: true,
+                               placeholder: 'Select service name',
+                               width: '220px',
+                               allowClear: true,
+                               data:zoneNameOption,
+                       }).on('change', function(e){
+                               that.collection.reset();
+                               if(e.added && !_.isEmpty(e.val)){
+                                       var  zoneServiceList = [];
+                                       that.ui.selectServicesMapping.show();
+                                       that.serviceNames = 
that.services.models;
+                                       var selectedZone = 
that.rangerZoneList.find(function(m) {return e.val === m.get('name')});
+                                       _.filter(selectedZone.get('services'), 
function(m, key){
+                                               var zoneServiceModel = 
that.serviceNames.find(function(serviceModel){
+                                                       return 
serviceModel.get('name') === key
+                                               })
+                                               if(zoneServiceModel){
+                                                       
zoneServiceList.push(zoneServiceModel);
+                                               }
+                                       });
+                                       that.serviceNames = zoneServiceList;
+                                       that.setServiceSourceData();
+                               }else{
+                                       if(that.serviceType && ! 
_.isEmpty(that.serviceType)){
+                                               that.serviceNames = 
that.services.models.filter(function(m){return that.serviceType == 
m.get('type')});
+                                       }else{
+                                               that.serviceNames = 
that.services.models;
+                                       }
+                                       that.setServiceSourceData();
+                               }
+                       });
+               },
                fileNameClosebtn : function(){
-            this.$el.find('.selectFile').hide()
-               this.$el.find('.selectFile').html("No file chosen").show()
+                       this.$el.find('.selectFile').hide()
+                       this.$el.find('.selectFile').html("No file 
chosen").removeClass('text-color-red').show()
                        this.$el.find('.fileValidation').hide();
-                       this.$el.find('.selectFileValidationMsg').hide();
+                       this.ui.selectFileValidationMsg.hide();
                        this.targetFileObj = undefined;
                        this.ui.importFilePolicy.val('');
-               }
+                       this.ui.selectServicesMapping.hide();
+                       this.ui.selectZoneMapping.hide();
+                       this.collection.reset();
+                       this.ui.zoneDestination.val('');
+               }
                
        });
        return UploadServicePolicy; 
diff --git 
a/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js 
b/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
index fd3bb4e..767f278 100644
--- 
a/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
+++ 
b/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
@@ -230,17 +230,16 @@ define(function(require){
                                
                        }
                        var view = new vUploadServicePolicy({
-                serviceType            : serviceType,
-                               collection              : new 
Backbone.Collection([""]),
+                               serviceType             : serviceType,
+                               collection              : new 
Backbone.Collection(),
                                serviceDefList  : this.collection,
-                                services               : this.services,
-                zoneServiceDefList : 
this.componentCollectionModels(this.ui.selectZoneName.val()),
-                zoneServices    : 
this.componentServicesModels(this.ui.selectZoneName.val()),
+                               services                : this.services,
+                               rangerZoneList  : this.rangerZoneList,
             });
                        var modal = new Backbone.BootstrapModal({
                                content : view, 
                                okText  :"Import",
-                               title   : 'Import Policy',
+                                title  : App.vZone && App.vZone.vZoneName && 
!_.isEmpty(App.vZone.vZoneName) ? 'Import Policy For Zone' : 'Import Policy',
                                animate : true
                        }).open();
 
diff --git 
a/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js 
b/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
index 7589bfa..5ae06d5 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
@@ -950,7 +950,11 @@ define(function(require) {
                                                                html =  '<label 
class="label label-yellow capitalize">'+rawValue+'</label>';
                                                        }else if(rawValue == 
'delete'){
                                                                html =  '<label 
class="label label-important capitalize">'+rawValue+'</label>';
-                                                       } else {
+                                                       }else if(rawValue 
=='IMPORT START'){
+                                                               html =  '<label 
class="label label-info capitalize">'+rawValue+'</label>';
+                                                       }else if(rawValue 
=='IMPORT END'){
+                                                               html =  '<label 
class="label label-info capitalize">'+rawValue+'</label>';
+                                                       }                       
                                else {
                                                                rawValue = 
rawValue.toLowerCase() 
                                                                html =  '<label 
class="label capitalize ">'+rawValue+'</label>';
                                                        }
diff --git 
a/security-admin/src/main/webapp/scripts/views/reports/PlugableServiceDiffDetail.js
 
b/security-admin/src/main/webapp/scripts/views/reports/PlugableServiceDiffDetail.js
index 3df0ec4..cc9ee8d 100644
--- 
a/security-admin/src/main/webapp/scripts/views/reports/PlugableServiceDiffDetail.js
+++ 
b/security-admin/src/main/webapp/scripts/views/reports/PlugableServiceDiffDetail.js
@@ -100,7 +100,7 @@ define(function(require){
                },
                initializeServiceDef : function(){
                        var url, policyName = 
this.collection.findWhere({'attributeName':'Policy Name'});
-                       if(this.action == 'create'){
+                       if(this.action == 'create' || this.action == 'Import 
Create'){
                                this.policyName = policyName.get('newValue');
                        } else if(this.action == 'delete'){
                                this.policyName = 
policyName.get('previousValue');
@@ -177,7 +177,7 @@ define(function(require){
                        return difference;
                },
                getTemplateForView : function(){
-                       if(this.action == 'create'){
+                       if(this.action == 'create' || this.action == 'Import 
Create'){
                                this.template = PolicyOperationDiff_tmpl;
                        }else if(this.action == 'update'){
                                this.template = PolicyUpdateOperationDiff_tmpl;
@@ -320,7 +320,7 @@ define(function(require){
                                if(val != oldResources[key])
                                        
this.collection.add({'attributeName':key, 
'newValue':val.toString(),'previousValue': oldResources[key],type : "Policy 
Resources"});
                        }, this);
-                       } else if(this.action == "create"){
+                       } else if(this.action == "create" || this.action == 
"Import Create"){
                                _.each(resources,function(val, key){ 
this.collection.add({'attributeName':key, 'newValue':val.toString()}); }, this);
                        } else{
                                _.each(oldResources,function(val, key){ 
this.collection.add({'attributeName':key, 'previousValue':val.toString()}); }, 
this);
diff --git 
a/security-admin/src/main/webapp/templates/common/uploadservicepolicy_tmpl.html 
b/security-admin/src/main/webapp/templates/common/uploadservicepolicy_tmpl.html
index 150a885..1e4621a 100644
--- 
a/security-admin/src/main/webapp/templates/common/uploadservicepolicy_tmpl.html
+++ 
b/security-admin/src/main/webapp/templates/common/uploadservicepolicy_tmpl.html
@@ -12,13 +12,6 @@ KIND, either express or implied. See the License for the 
specific
 language governing permissions and limitations under the License. --}}
 
 <div>
-       <div class="seviceFiled">
-               <label><b>Service Type : </b></label>
-               <div class="form-inline">
-                       <input type="text" data-id="componentType" />
-                       <span class="seviceFiledValidationFile hide 
text-color-red"> Required</span>
-               </div>
-       </div>
        <div>
                <div>
                        <b>Select File : </b>
@@ -27,32 +20,47 @@ language governing permissions and limitations under the 
License. --}}
                        file <i class="icon-upload-alt"> </i> <input 
type="file" name="image"
                        data-id="uploadPolicyFile" style="display: none;"
                        accept=" .json " />
-               </label> <span class="selectFileValidationMsg 
text-color-red">Please
-                       select json file </span> <label class="float-right" 
for="override">
-                       Override Policy : <input id="override" type="checkbox"
-                       data-id="source" data-name="override" 
class="margin-left12">
+               </label>
+               <span class="text-color-red" 
data-id="selectFileValidationMsg">Please select json file </span>
+               <label class="float-right" for="override">
+                       Override Policy : <input id="override" type="checkbox" 
data-id="source" data-name="override" class="margin-left12">
                </label>
                <div class="selectFile margin-left6">No file chosen</div>
-               <div class="fileValidation text-color-red margin-left6">Please
-                       Select Json file format</div>
-               <hr>
-               <div class="uploadSet">
+               <div class="fileValidation text-color-red margin-left6">Please 
Select Json file format</div>
+               <div data-id="selectZoneMapping">
+                       <hr>
+                       <div class="alert alert-warning show" 
data-id="policyInfoAlert"><i class="icon-info-sign searchInfo m-r-xs"></i>
+                               All services gets listed on service destination 
when Zone destination is blank. When zone is selected at destination, then only 
services associated with that zone will be listed. 
+                       </div>
+                       <div class="control-group">
+                               <span><b>Specify Zone Mapping : </b></span>
+                               <div>
+                                       <span 
class="margin-left-75">Source</span>
+                                       <span 
class="margin-left-213">Destination</span>
+                               </div>
+                       </div>
+                       <div class="form-horizontal">
+                               <input type="text" data-id="zoneSource" 
readOnly>
+                                &nbsp;&nbsp;To&nbsp;&nbsp;
+                               <input type="text" data-id="zoneDestination" 
placeholder="No zone selected">
+                       </div>
+               </div>
+               <div class="uploadSet" data-id="selectServicesMapping">
+                       <hr>
                        <span><b>Specify Service Mapping : </b></span>
                        <div>
                                <span class="margin-left-75">Source</span> 
                                <span class="margin-left-213">Destination</span>
                        </div>
-                       <div class="serviceMapErrorMsg text-color-red hide 
margin-bottom-11">Please
-                               select/enter service name.</div>
-                       <div class="serviceMapTextError text-color-red hide 
margin-bottom-11" >Source 
-                           service name should not be same.</div>
+                       <div class="serviceMapErrorMsg text-color-red hide 
margin-bottom-11">Please select/enter service name.</div>
+                       <div class="serviceMapTextError text-color-red hide 
margin-bottom-11" >Source service name should not be same.</div>
                </div>
        </div>
-       <div class="js-serviceMappingItems"></div>
-       <button type="button" class="btn btn-small" data-id="addServiceMaping"
-               title="Add">
-               <i class="icon-plus"></i>
-       </button>
-</div>
-
-
+       <div data-id="selectServicesMapping">
+               <div class="js-serviceMappingItems "></div>
+               <button type="button" class="btn btn-small" 
data-id="addServiceMaping"
+                       title="Add">
+                       <i class="icon-plus"></i>
+               </button>
+       </div>
+</div>
\ No newline at end of file
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 8f39607..0d75192 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
@@ -33,6 +33,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.ws.rs.WebApplicationException;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.admin.client.datatype.RESTResponse;
 import org.apache.ranger.biz.AssetMgr;
@@ -52,9 +53,13 @@ import org.apache.ranger.common.ServiceUtil;
 import org.apache.ranger.common.StringUtil;
 import org.apache.ranger.common.UserSessionBase;
 import org.apache.ranger.db.RangerDaoManager;
+import org.apache.ranger.db.XXSecurityZoneDao;
+import org.apache.ranger.db.XXSecurityZoneRefServiceDao;
 import org.apache.ranger.db.XXServiceDao;
 import org.apache.ranger.db.XXServiceDefDao;
 import org.apache.ranger.entity.XXPortalUser;
+import org.apache.ranger.entity.XXSecurityZone;
+import org.apache.ranger.entity.XXSecurityZoneRefService;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXServiceDef;
 import org.apache.ranger.plugin.model.RangerPluginInfo;
@@ -1536,7 +1541,7 @@ public class TestServiceREST {
                request.setAttribute("serviceType", 
"hdfs,hbase,hive,yarn,knox,storm,solr,kafka,nifi,atlas,sqoop");
                HttpServletResponse response = 
Mockito.mock(HttpServletResponse.class);
                SearchFilter filter = new SearchFilter();
-
+               filter.setParam("zoneName", "zone1");
                Mockito.when(searchUtil.getSearchFilter(request, 
policyService.sortFields)).thenReturn(filter);
                
Mockito.when(svcStore.getPolicies(filter)).thenReturn(rangerPolicyList);
                Mockito.when(bizUtil.isAdmin()).thenReturn(true);
@@ -1547,7 +1552,6 @@ public class TestServiceREST {
                Mockito.when(daoManager.getXXService()).thenReturn(xServiceDao);
 
                
Mockito.when(daoManager.getXXServiceDef()).thenReturn(xServiceDefDao);
-
                
Mockito.when(daoManager.getXXService().findByName("HDFS_1-1-20150316062453")).thenReturn(xService);
                
Mockito.when(daoManager.getXXServiceDef().getById(xService.getType())).thenReturn(xServiceDef);
                serviceREST.getPoliciesInJson(request, response, false);
@@ -1644,36 +1648,45 @@ public class TestServiceREST {
                Mockito.verify(svcStore).getPoliciesInExcel(rangerPolicyList, 
response);
        }
 
+
        @SuppressWarnings("unchecked")
        @Test
        public void test49importPoliciesFromFileAllowingOverride() throws 
Exception {
                HttpServletRequest request = 
Mockito.mock(HttpServletRequest.class);
-
+               RangerPolicyValidator policyValidator = 
Mockito.mock(RangerPolicyValidator.class) ;
                Map<String, RangerPolicy> policiesMap = new 
LinkedHashMap<String, RangerPolicy>();
-
                RangerPolicy rangerPolicy = rangerPolicy();
-
                XXService xService = xService();
                policiesMap.put("Name", rangerPolicy);
                XXServiceDao xServiceDao = Mockito.mock(XXServiceDao.class);
                XXServiceDef xServiceDef = serviceDef();
                XXServiceDefDao xServiceDefDao = 
Mockito.mock(XXServiceDefDao.class);
+               XXSecurityZoneRefServiceDao xSecZoneRefServiceDao = 
Mockito.mock(XXSecurityZoneRefServiceDao.class);
+               XXSecurityZoneRefService xSecZoneRefService = 
Mockito.mock(XXSecurityZoneRefService.class);
+               XXSecurityZoneDao xSecZoneDao = 
Mockito.mock(XXSecurityZoneDao.class);
+               XXSecurityZone xSecZone = Mockito.mock(XXSecurityZone.class);
+               List<XXSecurityZoneRefService> zoneServiceList = new 
ArrayList<>();
+               zoneServiceList.add(xSecZoneRefService);
+               Map<String, String> zoneMappingMap = new LinkedHashMap<String, 
String>();
+               zoneMappingMap.put("ZoneSource", "ZoneDestination");
 
                String PARAM_SERVICE_TYPE = "serviceType";
                String serviceTypeList = 
"hdfs,hbase,hive,yarn,knox,storm,solr,kafka,nifi,atlas,sqoop";
                request.setAttribute("serviceType", 
"hdfs,hbase,hive,yarn,knox,storm,solr,kafka,nifi,atlas,sqoop");
                SearchFilter filter = new SearchFilter();
                filter.setParam("serviceType", "value");
-               Mockito.when(searchUtil.getSearchFilter(request, 
policyService.sortFields)).thenReturn(filter);
 
-               
Mockito.when(request.getParameter(PARAM_SERVICE_TYPE)).thenReturn(serviceTypeList);
                File jsonPolicyFile = new File(importPoliceTestFilePath);
                InputStream uploadedInputStream = new 
FileInputStream(jsonPolicyFile);
                FormDataContentDisposition fileDetail = 
FormDataContentDisposition.name("file")
                                
.fileName(jsonPolicyFile.getName()).size(uploadedInputStream.toString().length()).build();
                boolean isOverride = true;
 
-               Mockito.when(svcStore.createPolicyMap(Mockito.any(Map.class), 
Mockito.any(List.class), Mockito.any(List.class),
+               InputStream zoneInputStream 
=IOUtils.toInputStream("ZoneSource=ZoneDestination", "UTF-8");
+
+               Mockito.when(searchUtil.getSearchFilter(request, 
policyService.sortFields)).thenReturn(filter);
+               
Mockito.when(request.getParameter(PARAM_SERVICE_TYPE)).thenReturn(serviceTypeList);
+               Mockito.when(svcStore.createPolicyMap(Mockito.any(Map.class), 
Mockito.any(List.class),Mockito.anyString(),Mockito.any(Map.class), 
Mockito.any(List.class), Mockito.any(List.class),
                                Mockito.any(RangerPolicy.class), 
Mockito.any(Map.class))).thenReturn(policiesMap);
                
Mockito.when(validatorFactory.getPolicyValidator(svcStore)).thenReturn(policyValidator);
                Mockito.when(bizUtil.isAdmin()).thenReturn(true);
@@ -1683,8 +1696,15 @@ public class TestServiceREST {
 
                
Mockito.when(daoManager.getXXService().findByName("HDFS_1-1-20150316062453")).thenReturn(xService);
                
Mockito.when(daoManager.getXXServiceDef().getById(xService.getType())).thenReturn(xServiceDef);
+               
Mockito.when(validatorFactory.getPolicyValidator(svcStore)).thenReturn(policyValidator);
+               
Mockito.when(svcStore.getMapFromInputStream(zoneInputStream)).thenReturn(zoneMappingMap);
+               
Mockito.when(daoManager.getXXSecurityZoneDao()).thenReturn(xSecZoneDao);
+               
Mockito.when(xSecZoneDao.findByZoneName(Mockito.anyString())).thenReturn(xSecZone);
+               
Mockito.when(daoManager.getXXSecurityZoneRefService()).thenReturn(xSecZoneRefServiceDao);
+               
Mockito.when(xSecZoneRefServiceDao.findByServiceNameAndZoneId(Mockito.anyString(),Mockito.anyLong())).thenReturn(zoneServiceList);
+
+               serviceREST.importPoliciesFromFile(request, null, 
zoneInputStream, uploadedInputStream, fileDetail, isOverride , "unzoneToZone");
 
-               serviceREST.importPoliciesFromFile(request, null, 
uploadedInputStream, fileDetail, isOverride);
                Mockito.verify(svcStore).createPolicy(rangerPolicy);
 
        }
@@ -1693,32 +1713,39 @@ public class TestServiceREST {
        @Test
        public void test50importPoliciesFromFileNotAllowingOverride() throws 
Exception {
                HttpServletRequest request = 
Mockito.mock(HttpServletRequest.class);
-
                Map<String, RangerPolicy> policiesMap = new 
LinkedHashMap<String, RangerPolicy>();
-
                RangerPolicy rangerPolicy = rangerPolicy();
-
                XXService xService = xService();
                policiesMap.put("Name", rangerPolicy);
                XXServiceDao xServiceDao = Mockito.mock(XXServiceDao.class);
                XXServiceDef xServiceDef = serviceDef();
                XXServiceDefDao xServiceDefDao = 
Mockito.mock(XXServiceDefDao.class);
+               XXSecurityZoneRefServiceDao xSecZoneRefServiceDao = 
Mockito.mock(XXSecurityZoneRefServiceDao.class);
+               XXSecurityZoneRefService xSecZoneRefService = 
Mockito.mock(XXSecurityZoneRefService.class);
+               XXSecurityZoneDao xSecZoneDao = 
Mockito.mock(XXSecurityZoneDao.class);
+               XXSecurityZone xSecZone = Mockito.mock(XXSecurityZone.class);
+               List<XXSecurityZoneRefService> zoneServiceList = new 
ArrayList<>();
+               zoneServiceList.add(xSecZoneRefService);
+               Map<String, String> zoneMappingMap = new LinkedHashMap<String, 
String>();
+               zoneMappingMap.put("ZoneSource", "ZoneDestination");
 
                String PARAM_SERVICE_TYPE = "serviceType";
                String serviceTypeList = 
"hdfs,hbase,hive,yarn,knox,storm,solr,kafka,nifi,atlas,sqoop";
                request.setAttribute("serviceType", 
"hdfs,hbase,hive,yarn,knox,storm,solr,kafka,nifi,atlas,sqoop");
                SearchFilter filter = new SearchFilter();
                filter.setParam("serviceType", "value");
-               Mockito.when(searchUtil.getSearchFilter(request, 
policyService.sortFields)).thenReturn(filter);
 
-               
Mockito.when(request.getParameter(PARAM_SERVICE_TYPE)).thenReturn(serviceTypeList);
                File jsonPolicyFile = new File(importPoliceTestFilePath);
                InputStream uploadedInputStream = new 
FileInputStream(jsonPolicyFile);
                FormDataContentDisposition fileDetail = 
FormDataContentDisposition.name("file")
                                
.fileName(jsonPolicyFile.getName()).size(uploadedInputStream.toString().length()).build();
                boolean isOverride = false;
 
-               Mockito.when(svcStore.createPolicyMap(Mockito.any(Map.class), 
Mockito.any(List.class), Mockito.any(List.class),
+               InputStream zoneInputStream = 
IOUtils.toInputStream("ZoneSource=ZoneDestination", "UTF-8");
+
+               Mockito.when(searchUtil.getSearchFilter(request, 
policyService.sortFields)).thenReturn(filter);
+               
Mockito.when(request.getParameter(PARAM_SERVICE_TYPE)).thenReturn(serviceTypeList);
+               Mockito.when(svcStore.createPolicyMap(Mockito.any(Map.class), 
Mockito.any(List.class),Mockito.anyString(),Mockito.any(Map.class), 
Mockito.any(List.class), Mockito.any(List.class),
                                Mockito.any(RangerPolicy.class), 
Mockito.any(Map.class))).thenReturn(policiesMap);
                
Mockito.when(validatorFactory.getPolicyValidator(svcStore)).thenReturn(policyValidator);
                Mockito.when(bizUtil.isAdmin()).thenReturn(true);
@@ -1729,7 +1756,13 @@ public class TestServiceREST {
                
Mockito.when(daoManager.getXXService().findByName("HDFS_1-1-20150316062453")).thenReturn(xService);
                
Mockito.when(daoManager.getXXServiceDef().getById(xService.getType())).thenReturn(xServiceDef);
 
-               serviceREST.importPoliciesFromFile(request, null, 
uploadedInputStream, fileDetail, isOverride);
+               
Mockito.when(svcStore.getMapFromInputStream(zoneInputStream)).thenReturn(zoneMappingMap);
+               
Mockito.when(daoManager.getXXSecurityZoneDao()).thenReturn(xSecZoneDao);
+               
Mockito.when(xSecZoneDao.findByZoneName(Mockito.anyString())).thenReturn(xSecZone);
+               
Mockito.when(daoManager.getXXSecurityZoneRefService()).thenReturn(xSecZoneRefServiceDao);
+               
Mockito.when(xSecZoneRefServiceDao.findByServiceNameAndZoneId(Mockito.anyString(),Mockito.anyLong())).thenReturn(zoneServiceList);
+
+               serviceREST.importPoliciesFromFile(request, null, 
zoneInputStream, uploadedInputStream, fileDetail, isOverride, "unzoneToUnZone");
                Mockito.verify(svcStore).createPolicy(rangerPolicy);
 
        }

Reply via email to