RANGER-1352 : Improving message for importing policies

Signed-off-by: Velmurugan Periasamy <vel@apache.org>
diff --git a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java
index b0bc2b9..5614c16 100755
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerMasterKey.java
@@ -205,7 +205,7 @@
 	}
 	private byte[] encryptKey(byte[] data, PBEKeySpec keyspec) throws Throwable {
 		SecretKey key = getPasswordKey(keyspec);
-		if(keyspec != null && keyspec.getSalt() != null){
+		if(keyspec.getSalt() != null) {
 			PBEParameterSpec paramSpec = new PBEParameterSpec(keyspec.getSalt(), keyspec.getIterationCount());
 			Cipher c = Cipher.getInstance(key.getAlgorithm());
 			c.init(Cipher.ENCRYPT_MODE, key,paramSpec);
@@ -219,7 +219,7 @@
 	}
 	private byte[] decryptKey(byte[] encrypted, PBEKeySpec keyspec) throws Throwable {
 		SecretKey key = getPasswordKey(keyspec);
-		if(keyspec != null && keyspec.getSalt() != null){
+		if(keyspec.getSalt() != null) {
 			PBEParameterSpec paramSpec = new PBEParameterSpec(keyspec.getSalt(), keyspec.getIterationCount());
 			Cipher c = Cipher.getInstance(key.getAlgorithm());
 			c.init(Cipher.DECRYPT_MODE, key, paramSpec);
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 89cc32f..daf3c8e 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
@@ -1591,8 +1591,8 @@
 			if (CollectionUtils.isNotEmpty(policyLists)){
 				svcStore.getPoliciesInExcel(policyLists, response);
 			}else{
+				response.setStatus(HttpServletResponse.SC_NO_CONTENT);
 				LOG.error("No policies found to download!");
-				throw restErrorUtil.createRESTException(HttpServletResponse.SC_NO_CONTENT, "No policies found to download!", true);
 			}
 			
 			RangerExportPolicyList rangerExportPolicyList = new RangerExportPolicyList();
@@ -1638,8 +1638,8 @@
 			if (CollectionUtils.isNotEmpty(policyLists)){
 				svcStore.getPoliciesInCSV(policyLists, response);
 			}else{
+				response.setStatus(HttpServletResponse.SC_NO_CONTENT);
 				LOG.error("No policies found to download!");
-				throw restErrorUtil.createRESTException(HttpServletResponse.SC_NO_CONTENT, "No policies found to download!", true);
 			}
 			
 			RangerExportPolicyList rangerExportPolicyList = new RangerExportPolicyList();
@@ -1689,8 +1689,9 @@
 			if (CollectionUtils.isNotEmpty(policyLists)) {
 				svcStore.getPoliciesInJson(policyLists, response);
 			} else {
+				checkPoliciesExists = true;
+				response.setStatus(HttpServletResponse.SC_NO_CONTENT);
 				LOG.error("There is no Policy to Export!!");
-				throw restErrorUtil.createRESTException(HttpServletResponse.SC_NO_CONTENT, "There is no Policy to Export!!", true);
 			}
 			if(!checkPoliciesExists){
 				RangerExportPolicyList rangerExportPolicyList = new RangerExportPolicyList();
@@ -1814,17 +1815,25 @@
 					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 (!CollectionUtils.sizeIsEmpty(rangerExportPolicyList.getMetaDataInfo())){
 						metaDataInfo = new ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+					} else {
+						LOG.info("metadata info is not provided!!");
 					}
 					if (!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!!");
 					}
-					
 					if (CollectionUtils.sizeIsEmpty(servicesMappingMap) && isOverride){
 						if(!CollectionUtils.sizeIsEmpty(policies)){
 							for (RangerPolicy policyInJson: policies){
@@ -1917,7 +1926,8 @@
 						}
 					}
 				} catch (IOException e) {
-					e.printStackTrace();
+					LOG.error(e.getMessage());
+					throw restErrorUtil.createRESTException(e.getMessage());
 				}
 			}else{
 				LOG.error("Provided file format is not supported!!");
@@ -1932,7 +1942,7 @@
 			}
 			trxLogListError.add(xxTrxLogError);
 			bizUtil.createTrxLog(trxLogListError);
-			throw ex;
+			throw restErrorUtil.createRESTException(ex.getMessage());
 	      }catch (WebApplicationException excp) {
 			LOG.error("Error while importing policy from file!!", excp);
 			xxTrxLogError.setAction("IMPORT ERROR");
diff --git a/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js b/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js
index a963370..338fffb 100644
--- a/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js
+++ b/security-admin/src/main/webapp/scripts/views/UploadServicePolicy.js
@@ -45,7 +45,7 @@
 		},
 
 		initialize : function(options) {
-			_.extend(this, _.pick(options, 'collection','serviceNames'));
+			_.extend(this, _.pick(options, 'collection','serviceNames','services'));
 			
 		},
 		onSourceChange : function(e){
@@ -54,14 +54,24 @@
 		},
 		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' , " " );
+		   }
 		},
 		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}; });
+			this.ui.sourceInput.val(this.model.get('source'));
+			this.ui.destinationSelect.val(this.model.get('destination'));
 			this.ui.destinationSelect.select2({
 				closeOnSelect: true,
 				placeholder: 'Select service name',
@@ -89,6 +99,7 @@
 			return {
 				'collection' 	: this.collection,
 				'serviceNames' 	: this.serviceNames,
+				'services': this.services,
 			};
 		},
 		initialize: function(options) {
@@ -237,7 +248,19 @@
 				});
 				var names = componentServices.map(function(m){ return { 'name' : m.get('name') } });
 				that.serviceNames = names;
-				that.collection.trigger('reset')
+				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');
 		},
 		importPolicy : function(e){
diff --git a/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
index 7a1933e..197bc84 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
@@ -472,8 +472,7 @@
 		onDownload: function(e){
 			var that = this, url = '';
 			if(!this.allowDownload){
-				XAUtil.alertBoxWithTimeSet(localization.tt('msg.noPolicytoExport'))
-				
+				return XAUtil.alertBoxWithTimeSet(localization.tt('msg.noPolicytoExport'))
 			}
 			if(!this.searchedFlag) {
 				url =  this.previousSearchUrl;