Merge "Adding JUNITs for ONAP-PAP-REST"
authorPamela Dragosh <pdragosh@research.att.com>
Wed, 7 Feb 2018 14:10:21 +0000 (14:10 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 7 Feb 2018 14:10:21 +0000 (14:10 +0000)
26 files changed:
LogParser/parserlog.properties
LogParser/pom.xml
LogParser/src/main/java/org/onap/xacml/parser/ParseLog.java
ONAP-PAP-REST/pom.xml
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/UpdateOthersPAPS.java [new file with mode: 0644]
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectData.java [new file with mode: 0644]
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/test/UpdateOthersPAPSTest.java [new file with mode: 0644]
ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectDataTest.java [new file with mode: 0644]
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngineFactory.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPAPPolicy.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDP.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPGroup.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPGroupStatus.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPPIPConfig.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPPolicy.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPStatus.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pip/engines/OperationHistoryEngine.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pip/engines/aaf/AAFEngine.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/util/MetricsUtil.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/util/XACMLPolicyScanner.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/util/XACMLPolicyWriter.java
ONAP-XACML/src/test/java/org/onap/policy/xacml/test/util/AAFEngineTest.java
POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java
POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java

index 66ce34d..76716d5 100644 (file)
@@ -2,7 +2,7 @@
 # ============LICENSE_START=======================================================
 # LogParser
 # ================================================================================
-# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -23,13 +23,15 @@ RESOURCE_NAME=logparser_pap01
 javax.persistence.jdbc.driver=org.mariadb.jdbc.Driver
 javax.persistence.jdbc.url=jdbc:mariadb://localhost:3306/onap_sdk
 javax.persistence.jdbc.user=policy_user
-javax.persistence.jdbc.password=policy_user
+#javax.persistence.jdbc.password=policy_user
+javax.persistence.jdbc.password=Za2Xy8XOo9wn8V1EetPgoQ==
 
 #Log Parser application values
 JDBC_DRIVER=org.mariadb.jdbc.Driver
 JDBC_URL=jdbc:mariadb://localhost:3306/log
 JDBC_USER=policy_user
-JDBC_PASSWORD=policy_user
+#JDBC_PASSWORD=policy_user
+JDBC_PASSWORD=Za2Xy8XOo9wn8V1EetPgoQ==
 SERVER=https://localhost:9091/pap/
 LOGTYPE=PAP
 LOGPATH=C:\\Workspaces\\HealthCheck\\pap-rest.log
index 8af1dc2..c7b1814 100644 (file)
@@ -3,7 +3,7 @@
   ============LICENSE_START=======================================================
   ONAP Policy Engine
   ================================================================================
-  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
                    <groupId>org.mockito</groupId>
                    <artifactId>mockito-all</artifactId>
                    <version>1.10.19</version>
-               </dependency>       
+               </dependency> 
+               <dependency>
+                       <groupId>org.onap.policy.engine</groupId>
+                       <artifactId>PolicyEngineUtils</artifactId>
+                       <version>${project.version}</version>
+                       <exclusions>
+                               <exclusion>
+                                       <groupId>com.att.aft</groupId>
+                                       <artifactId>dme2</artifactId>
+                               </exclusion>
+                               <exclusion>
+                                       <groupId>org.json</groupId>
+                                       <artifactId>json</artifactId>
+                               </exclusion>
+                               <exclusion>
+                                       <groupId>org.onap.dmaap.messagerouter.dmaapclient</groupId>
+                                       <artifactId>dmaapClient</artifactId>
+                               </exclusion>
+                               <exclusion>
+                                       <groupId>com.att.nsa</groupId>
+                                       <artifactId>cambriaClient</artifactId>
+                               </exclusion>
+                               <exclusion>
+                                       <groupId>com.att.cadi</groupId>
+                                       <artifactId>cadi-aaf</artifactId>
+                               </exclusion>
+                       </exclusions>
+               </dependency>                              
        </dependencies>
        <build>
                <plugins>
index 1dbe125..827516e 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * LogParser
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -50,6 +50,7 @@ import org.onap.policy.common.im.AdministrativeStateException;
 import org.onap.policy.common.im.IntegrityMonitor;
 import org.onap.policy.common.im.StandbyStatusException;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.utils.CryptoUtils;
 import org.onap.xacml.parser.LogEntryObject.LOGTYPE;
 
 /**
@@ -808,7 +809,8 @@ public class ParseLog {
                                        jdbcUrl = config.getProperty("JDBC_URL").replace("'", "");
                                        jdbcUser = config.getProperty("JDBC_USER");
                                        jdbcDriver =  config.getProperty("JDBC_DRIVER");
-                                       jdbcPassword = config.getProperty("JDBC_PASSWORD");
+                                       jdbcPassword = CryptoUtils.decryptTxtNoExStr(config.getProperty("JDBC_PASSWORD", ""));
+                                       config.setProperty("javax.persistence.jdbc.password", CryptoUtils.decryptTxtNoExStr(config.getProperty("javax.persistence.jdbc.password", "")));
                                        return config;
 
                                } catch (IOException e) {                                       
index 7602294..f0e3f33 100644 (file)
@@ -3,7 +3,7 @@
   ============LICENSE_START=======================================================
   ONAP Policy Engine
   ================================================================================
-  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
                        <artifactId>tomcat-dbcp</artifactId>
                        <version>8.5.9</version>
                </dependency>
-
+               <!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito -->
+               <dependency>
+               <groupId>org.powermock</groupId>
+               <artifactId>powermock-api-mockito</artifactId>
+               <version>1.7.3</version>
+               <scope>test</scope>
+               </dependency>
+               <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>1.7.3</version>
+            <scope>test</scope>
+        </dependency>
        </dependencies>
        <properties>
                <springframework.version>4.2.0.RELEASE</springframework.version>
diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/UpdateOthersPAPS.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/UpdateOthersPAPS.java
new file mode 100644 (file)
index 0000000..c1891b3
--- /dev/null
@@ -0,0 +1,240 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PAP-REST
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.pap.xacml.rest;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONObject;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.pap.xacml.rest.adapters.UpdateObjectData;
+import org.onap.policy.pap.xacml.rest.components.Policy;
+import org.onap.policy.pap.xacml.rest.util.JsonMessage;
+import org.onap.policy.rest.XACMLRestProperties;
+import org.onap.policy.rest.dao.CommonClassDao;
+import org.onap.policy.rest.jpa.ActionBodyEntity;
+import org.onap.policy.rest.jpa.ConfigurationDataEntity;
+import org.onap.policy.rest.jpa.PolicyDBDaoEntity;
+import org.onap.policy.utils.CryptoUtils;
+import org.onap.policy.xacml.api.XACMLErrorConstants;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@Controller
+public class UpdateOthersPAPS {
+       
+       private static final Logger     policyLogger    = FlexLogger.getLogger(UpdateOthersPAPS.class);
+       
+       private static CommonClassDao commonClassDao;
+       
+       private static final String contentType = "application/json";
+       private static String configType =".Config_";
+       private static String actionType =".Action_";
+       private static String error ="error";
+       public static CommonClassDao getCommonClassDao() {
+               return commonClassDao;
+       }
+
+       public static void setCommonClassDao(CommonClassDao commonClassDao) {
+               UpdateOthersPAPS.commonClassDao = commonClassDao;
+       }
+
+       @Autowired
+       private UpdateOthersPAPS(CommonClassDao commonClassDao){
+               UpdateOthersPAPS.commonClassDao = commonClassDao;
+       }
+       
+       public UpdateOthersPAPS() {
+               //Empty Constructor
+       }
+
+       @RequestMapping(value="/notifyOtherPAPs", method= RequestMethod.POST)
+       public void  notifyOthersPAPsToUpdateConfigurations(HttpServletRequest request, HttpServletResponse response){
+               Map<String, Object> model = new HashMap<>();
+               ObjectMapper mapper = new ObjectMapper();
+               UpdateObjectData body = new UpdateObjectData();
+               body.setAction(request.getParameter("action"));
+               body.setNewPolicyName(request.getParameter("newPolicyName"));
+               body.setOldPolicyName(request.getParameter("oldPolicyName"));
+
+               String currentPap = XACMLRestProperties.getProperty("xacml.rest.pap.url");
+               List<Object> getPAPUrls = commonClassDao.getData(PolicyDBDaoEntity.class);
+               if(getPAPUrls != null && !getPAPUrls.isEmpty()){
+                       for(int i = 0; i < getPAPUrls.size(); i++){
+                               PolicyDBDaoEntity papId = (PolicyDBDaoEntity) getPAPUrls.get(i);
+                               String papUrl = papId.getPolicyDBDaoUrl();
+                               if(!papUrl.equals(currentPap)){
+                                       String userName = papId.getUsername();
+                                       String password = papId.getPassword();
+                                       Base64.Encoder encoder = Base64.getEncoder();
+                                       String txt;
+                                       try{
+                                               txt = new String(CryptoUtils.decryptTxt(password), StandardCharsets.UTF_8);
+                                       } catch(Exception e){
+                                               policyLogger.debug(e);
+                                               //if we can't decrypt, might as well try it anyway
+                                               txt = password;
+                                       }
+                                       String encoding = encoder.encodeToString((userName+":"+txt).getBytes(StandardCharsets.UTF_8));
+                                       HttpHeaders headers = new HttpHeaders();
+                                       headers.set("Authorization", "Basic " + encoding);
+                                       headers.set("Content-Type", contentType);
+
+                                       RestTemplate restTemplate = new RestTemplate();
+                                       HttpEntity<?> requestEntity = new HttpEntity<>(body, headers);
+                                       HttpClientErrorException exception = null;
+
+                                       try{
+                                               restTemplate.exchange(papUrl + "onap/updateConfiguration", HttpMethod.POST, requestEntity, String.class);
+                                       }catch(Exception e){
+                                               policyLogger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + papUrl, e);
+                                               exception = new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage());
+                                               if("409 Conflict".equals(e.getMessage())){
+                                                       policyLogger.error(e.getMessage());
+                                   response.addHeader(error, e.getMessage());
+                                               }
+                                       }
+                                       if(exception != null && exception.getStatusCode()!=null){
+                                               String message;
+                                               if(exception.getStatusCode().equals(HttpStatus.UNAUTHORIZED)){
+                                                       message = XACMLErrorConstants.ERROR_PERMISSIONS +":"+exception.getStatusCode()+":" + "ERROR_AUTH_GET_PERM" ;
+                                                       policyLogger.error(message);
+                                               }else if(exception.getStatusCode().equals(HttpStatus.BAD_REQUEST)){
+                                                       message = XACMLErrorConstants.ERROR_DATA_ISSUE + ":"+exception.getStatusCode()+":" + exception.getResponseBodyAsString();
+                                                       policyLogger.error(message);
+                                               }else if(exception.getStatusCode().equals(HttpStatus.NOT_FOUND)){
+                                                       message = XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + papUrl + exception;
+                                                       policyLogger.error(message);
+                                               }else{
+                                                       message = XACMLErrorConstants.ERROR_PROCESS_FLOW + ":"+exception.getStatusCode()+":" + exception.getResponseBodyAsString();
+                                                       policyLogger.error(message);
+                                               }
+                                               model.put(papUrl, message);
+                                       }else{
+                                               model.put(papUrl, "Success");
+                                       }
+                               }
+                       }
+                       JsonMessage msg;
+                       try {
+                               msg = new JsonMessage(mapper.writeValueAsString(model));
+                               JSONObject j = new JSONObject(msg);
+                               response.getWriter().write(j.toString());
+                       } catch (Exception e) {
+                               policyLogger.error("Exception Occured"+e);
+                       }
+               }
+       }
+       
+       @RequestMapping(value="/updateConfiguration", method= RequestMethod.POST)
+       @ResponseBody
+       public void updateConfiguration(@RequestBody UpdateObjectData data, HttpServletResponse response){
+               String action = data.getAction();
+               String newPolicyName = data.getNewPolicyName();
+               String oldPolicyName = data.getOldPolicyName();
+               try{
+                       if("rename".equals(action)){
+                               if(oldPolicyName.contains(configType) || oldPolicyName.contains(actionType)){
+                                       File file;
+                                       if(oldPolicyName.contains(configType)){
+                                               file = new File(Policy.getConfigHome() + File.separator + oldPolicyName);
+                                       }else{
+                                               file = new File(Policy.getActionHome() + File.separator + oldPolicyName);
+                                       }
+                                       if(file.exists()){
+                                               File renamefile;
+                                               if(oldPolicyName.contains(configType)){
+                                                       renamefile = new File(Policy.getConfigHome() + File.separator + newPolicyName);
+                                               }else{
+                                                       renamefile = new File(Policy.getActionHome() + File.separator + newPolicyName);
+                                               }
+                                               if(file.renameTo(renamefile)){
+                                                       policyLogger.info("Policy has been renamed Successfully"+newPolicyName);
+                                                       response.addHeader("rename", "Success");
+                                               }else{
+                                                       response.addHeader("rename", "Failure");
+                                               }
+                                       }
+                               }
+                       }else if("delete".equals(action)){
+                               if(oldPolicyName.contains(configType)){
+                                       Files.deleteIfExists(Paths.get(Policy.getConfigHome() + File.separator + oldPolicyName));
+                               }else if(oldPolicyName.contains("Action_")){
+                                       Files.deleteIfExists(Paths.get(Policy.getActionHome() + File.separator + oldPolicyName));
+                               }
+                       }else if("clonePolicy".equals(action) || "exportPolicy".equals(action)){
+                               if(newPolicyName.contains(configType)){
+                                       ConfigurationDataEntity configEntiy = (ConfigurationDataEntity) commonClassDao.getEntityItem(ConfigurationDataEntity.class, "configurationName", newPolicyName);
+                                       saveConfigurationData(configEntiy, newPolicyName);
+                               }else if(newPolicyName.contains(actionType)){
+                                       ActionBodyEntity actionEntiy = (ActionBodyEntity) commonClassDao.getEntityItem(ActionBodyEntity.class, "actionBodyName", newPolicyName);
+                                       saveActionBodyData(actionEntiy, newPolicyName);
+                               }
+                       }
+               } catch (IOException e) {
+                       policyLogger.error("Exception Occured While updating Configuration"+e);
+               }
+       }
+       
+       private void saveConfigurationData(ConfigurationDataEntity configEntiy, String newPolicyName){
+               try(FileWriter fw = new FileWriter(Policy.getConfigHome() + File.separator + newPolicyName)){
+                       BufferedWriter bw = new BufferedWriter(fw);
+                       bw.write(configEntiy.getConfigBody());
+                       bw.close();
+               }catch (IOException e) {
+                       policyLogger.error("Exception Occured While closing the File input stream"+e);
+               }
+       }
+       
+       private void saveActionBodyData(ActionBodyEntity actionEntiy , String newPolicyName){
+               try(FileWriter fw  = new FileWriter(Policy.getActionHome() + File.separator + newPolicyName)){
+                       BufferedWriter bw = new BufferedWriter(fw);
+                       bw.write(actionEntiy.getActionBody());
+                       bw.close();
+               }catch (IOException e) {
+                       policyLogger.error("Exception Occured While closing the File input stream"+e);
+               }
+       }
+}
\ No newline at end of file
diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectData.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectData.java
new file mode 100644 (file)
index 0000000..04006f3
--- /dev/null
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PAP-REST
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.pap.xacml.rest.adapters;
+
+public class UpdateObjectData {
+       private String oldPolicyName;
+       private String newPolicyName;
+       private String action;
+       
+       public String getOldPolicyName() {
+               return oldPolicyName;
+       }
+       
+       public void setOldPolicyName(String oldPolicyName) {
+               this.oldPolicyName = oldPolicyName;
+       }
+       
+       public String getNewPolicyName() {
+               return newPolicyName;
+       }
+       
+       public void setNewPolicyName(String newPolicyName) {
+               this.newPolicyName = newPolicyName;
+       }
+       
+       public String getAction() {
+               return action;
+       }
+       
+       public void setAction(String action) {
+               this.action = action;
+       }
+}
diff --git a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/test/UpdateOthersPAPSTest.java b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/test/UpdateOthersPAPSTest.java
new file mode 100644 (file)
index 0000000..f9ed0ac
--- /dev/null
@@ -0,0 +1,116 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP-PAP-REST
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.pap.test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.json.JSONObject;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Matchers;
+import org.mockito.Mockito;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.pap.xacml.rest.UpdateOthersPAPS;
+import org.onap.policy.pap.xacml.rest.adapters.UpdateObjectData;
+import org.onap.policy.pap.xacml.rest.components.Policy;
+import org.onap.policy.rest.dao.CommonClassDao;
+import org.onap.policy.rest.jpa.PolicyDBDaoEntity;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+@RunWith(PowerMockRunner.class)
+public class UpdateOthersPAPSTest {
+
+       private static Logger logger = FlexLogger.getLogger(UpdateOthersPAPSTest.class);
+       private static CommonClassDao commonClassDao;
+       private HttpServletRequest request;
+       private MockHttpServletResponse response;
+       
+       @Before
+       public void setUp() throws Exception {
+               logger.info("setUp: Entering");
+        commonClassDao = mock(CommonClassDao.class);
+        
+        request = mock(HttpServletRequest.class);       
+               response =  new MockHttpServletResponse();
+               List<Object> data = new ArrayList<>();
+               PolicyDBDaoEntity entity = new PolicyDBDaoEntity();
+               entity.setPolicyDBDaoUrl("http://localhost:8070/pap");
+               entity.setUsername("test");
+               entity.setPassword("test");
+               
+               PolicyDBDaoEntity entity1 = new PolicyDBDaoEntity();
+               entity1.setPolicyDBDaoUrl("http://localhost:8071/pap");
+               entity1.setUsername("test");
+               entity1.setPassword("test");
+               
+               data.add(entity);
+               data.add(entity1);
+               System.setProperty("xacml.rest.pap.url","http://localhost:8070/pap");
+               when(commonClassDao.getData(PolicyDBDaoEntity.class)).thenReturn(data);
+       }
+       
+       @Test
+       public void testNotifyOthersPAPsToUpdateConfigurations(){
+               UpdateOthersPAPS updateOtherPaps = new UpdateOthersPAPS();
+               UpdateOthersPAPS.setCommonClassDao(commonClassDao);
+               when(request.getParameter("action")).thenReturn("rename");
+               when(request.getParameter("newPolicyName")).thenReturn("com.Config_newTest.1.json");
+               when(request.getParameter("oldPolicyName")).thenReturn("com.Config_Test.1.json");
+               updateOtherPaps.notifyOthersPAPsToUpdateConfigurations(request, response);
+               try {
+                       JSONObject responseString = new JSONObject(response.getContentAsString());
+                       assertTrue(responseString.get("data").toString().contains("http://localhost:8071/pap")); 
+               } catch (Exception e) {
+                       fail();
+               }
+       }
+       
+       @PrepareForTest({Policy.class})
+       @Test
+       public void testUpdateConfiguration() throws Exception{
+               UpdateOthersPAPS updateOtherPaps = new UpdateOthersPAPS();
+               UpdateObjectData data = new UpdateObjectData();
+               PowerMockito.mockStatic(Policy.class);
+               data.setNewPolicyName("com.Config_newTest.1.json");
+               data.setOldPolicyName("com.Config_Test.1.json");
+               data.setAction("rename");
+               when(Policy.getConfigHome()).thenReturn("test");
+               when(Policy.getActionHome()).thenReturn("test");
+               File mockedFile = Mockito.mock(File.class);
+               Mockito.when(mockedFile.exists()).thenReturn(true);
+               PowerMockito.whenNew(File.class).withParameterTypes(String.class).withArguments(Matchers.anyString()).thenReturn(mockedFile);
+               updateOtherPaps.updateConfiguration(data, response);
+               assertTrue(response.getStatus() == 200);
+       }
+}
diff --git a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectDataTest.java b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectDataTest.java
new file mode 100644 (file)
index 0000000..2c1bc1c
--- /dev/null
@@ -0,0 +1,39 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.pap.xacml.rest.adapters;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+public class UpdateObjectDataTest {
+       
+       @Test
+       public void testClosedLoopFaultTrapDatas(){
+               UpdateObjectData updateObject = new UpdateObjectData();
+               updateObject.setAction("Rename");
+               assertTrue("Rename".equals(updateObject.getAction()));
+               updateObject.setNewPolicyName("com.Config_test1.1.json");
+               assertTrue("com.Config_test1.1.json".equals(updateObject.getNewPolicyName()));
+               updateObject.setOldPolicyName("com.Config_test.1.json");
+               assertTrue("com.Config_test.1.json".equals(updateObject.getOldPolicyName()));
+       }
+       
+}
index 3173bc1..4399f71 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -125,10 +125,10 @@ public class StdEngine extends StdPDPItemSetChangeNotifier implements PAPPolicyE
                if (Files.notExists(this.repository)) {
                        Files.createDirectory(repository);
                }
-               if (Files.isDirectory(this.repository) == false) {
+               if (!Files.isDirectory(this.repository)) {
                        throw new PAPException ("Repository is NOT a directory: " + this.repository.toAbsolutePath());
                }
-               if (Files.isWritable(this.repository) == false) {
+               if (!Files.isWritable(this.repository)) {
                        throw new PAPException ("Repository is NOT writable: " + this.repository.toAbsolutePath());
                }
                //
@@ -467,7 +467,7 @@ public class StdEngine extends StdPDPItemSetChangeNotifier implements PAPPolicyE
                                        this.doSave();
                                } else {
                                        PolicyLogger.error("Failed to add to new group, putting back into original group.");
-                                       if (((StdPDPGroup) currentGroup).removePDP(pdp) == false) {
+                                       if (!((StdPDPGroup) currentGroup).removePDP(pdp)) {
                                                PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + "Failed to put PDP back into original group.");
                                        }
                                }
@@ -492,8 +492,8 @@ public class StdEngine extends StdPDPItemSetChangeNotifier implements PAPPolicyE
                // the only things that the user can change are name and description
                currentPDP.setDescription(pdp.getDescription());
                currentPDP.setName(pdp.getName());
-               if (currentPDP instanceof OnapPDP && pdp instanceof OnapPDP) {
-                       ((OnapPDP)currentPDP).setJmxPort(((OnapPDP)pdp).getJmxPort());
+               if (currentPDP instanceof OnapPDP) {
+                       ((OnapPDP)currentPDP).setJmxPort(pdp.getJmxPort());
                }
                this.doSave();
        }
@@ -769,9 +769,7 @@ public class StdEngine extends StdPDPItemSetChangeNotifier implements PAPPolicyE
                        // Save the configuration
                        //
                        this.saveConfiguration();
-               } catch (IOException e) {
-                       PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "StdEngine", "Failed to save configuration");
-               } catch (PAPException e) {
+               } catch (IOException|PAPException e) {
                        PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "StdEngine", "Failed to save configuration");
                }               
        }
index ee67856..dd8a921 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ public class StdEngineFactory extends ONAPPapEngineFactory {
        @Override
        public PAPPolicyEngine newEngine() throws FactoryException, PAPException {
                try {
-                       return (PAPPolicyEngine) new StdEngine();
+                       return new StdEngine();
                } catch (IOException e) {
                        PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "StdEngineFactory", "Failed to create engine");
                        return null;
@@ -47,7 +47,7 @@ public class StdEngineFactory extends ONAPPapEngineFactory {
        public PAPPolicyEngine newEngine(Properties properties) throws FactoryException,
                        PAPException {
                try {
-                       return (PAPPolicyEngine) new StdEngine(properties);
+                       return new StdEngine(properties);
                } catch (IOException e) {
                        PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "StdEngineFactory", "Failed to create engine");
                        return null;
index c66d11b..a8c59e8 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index e059ea6..8727b81 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -210,9 +210,6 @@ public class StdPDP extends StdPDPItemSetChangeNotifier implements OnapPDP, Comp
                if (o == null) {
                        return -1;
                }
-               if ( ! (o instanceof StdPDP)) {
-                       return -1;
-               }
                if (o.name == null) {
                        return -1;
                }
index 9289c24..bdbbf33 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -89,6 +89,21 @@ public class StdPDPGroup extends StdPDPItemSetChangeNotifier implements OnapPDPG
        @JsonIgnore
        private Integer jmxport;
        
+       public StdPDPGroup() {
+               //
+               // Methods needed for JSON deserialization
+               //
+       }
+       
+       public StdPDPGroup(OnapPDPGroup group) {
+               this.id = group.getId();
+               this.name = group.getName();
+               this.description = group.getDescription();
+               this.isDefault = group.isDefaultGroup();
+               this.pdps = group.getOnapPdps();
+               this.policies = group.getPolicies();
+               this.pipConfigs = group.getPipConfigs();
+       }
        
        public StdPDPGroup(String id, Path directory) {
                this.id = id;
@@ -333,7 +348,6 @@ public class StdPDPGroup extends StdPDPItemSetChangeNotifier implements OnapPDPG
                // to occur: 1) old default=false (don't want to fire) and
                // then 2) new default=true (yes fire - but we'll have to do that
                // elsewhere.
-               //this.firePDPGroupChanged(this);
        }
 
        @Override
@@ -474,7 +488,7 @@ public class StdPDPGroup extends StdPDPItemSetChangeNotifier implements OnapPDPG
                        logger.info("Copied " + num + " bytes for policy " + name);
                        
                        StdPDPPolicy tempRootPolicy = new StdPDPPolicy(id, isRoot, name, tempFile.toUri());
-                       if (tempRootPolicy.isValid() == false) {
+                       if (!tempRootPolicy.isValid()) {
                                try {
                                        Files.delete(tempFile);
                                } catch(Exception ee) {
@@ -544,7 +558,7 @@ public class StdPDPGroup extends StdPDPItemSetChangeNotifier implements OnapPDPG
                        
                        // policy is new to this group
                        StdPDPPolicy tempRootPolicy = new StdPDPPolicy(id, true, name, policyFile.toUri());
-                       if (tempRootPolicy.isValid() == false) {
+                       if (!tempRootPolicy.isValid()) {
                                try {
                                        Files.delete(policyFile);
                                } catch(Exception ee) {
@@ -606,7 +620,7 @@ public class StdPDPGroup extends StdPDPItemSetChangeNotifier implements OnapPDPG
                        
                        // policy is new to this group
                        StdPDPPolicy tempRootPolicy = new StdPDPPolicy(id, true, name, policyFile.toUri());
-                       if (tempRootPolicy.isValid() == false) {
+                       if (!tempRootPolicy.isValid()) {
                                try {
                                        Files.delete(policyFile);
                                } catch(Exception ee) {
@@ -924,23 +938,6 @@ public class StdPDPGroup extends StdPDPItemSetChangeNotifier implements OnapPDPG
                this.changed();
        }
 
-       
-       public StdPDPGroup() {
-               //
-               // Methods needed for JSON deserialization
-               //
-       }
-       
-       public StdPDPGroup(OnapPDPGroup group) {
-               this.id = group.getId();
-               this.name = group.getName();
-               this.description = group.getDescription();
-               this.isDefault = group.isDefaultGroup();
-               this.pdps = group.getOnapPdps();
-               this.policies = group.getPolicies();
-               this.pipConfigs = group.getPipConfigs();
-       }
-
        public boolean isDefault() {
                return isDefault;
        }
index ae4649e..dd9bf0a 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -71,18 +71,30 @@ public class StdPDPGroupStatus implements PDPGroupStatus {
 
        public StdPDPGroupStatus(PDPGroupStatus stat) {
                this.status = stat.getStatus();
-               this.failedPDPs.clear(); this.failedPDPs.addAll(stat.getFailedPDPs());
-               this.failedPIPConfigs.clear(); this.failedPIPConfigs.addAll(stat.getFailedPipConfigs());
-               this.failedPolicies.clear(); this.failedPolicies.addAll(stat.getFailedPolicies());
-               this.inSynchPDPs.clear(); this.inSynchPDPs.addAll(stat.getInSynchPDPs());
-               this.lastUpdateFailedPDPs.clear(); this.lastUpdateFailedPDPs.addAll(stat.getLastUpdateFailedPDPs());
-               this.loadedPIPConfigs.clear(); this.loadedPIPConfigs.addAll(stat.getLoadedPipConfigs());
-               this.loadedPolicies.clear(); this.loadedPolicies.addAll(stat.getLoadedPolicies());
-               this.loadErrors.clear(); this.loadErrors.addAll(stat.getLoadErrors());
-               this.loadWarnings.clear(); this.loadWarnings.addAll(stat.getLoadWarnings());
-               this.outOfSynchPDPs.clear(); this.outOfSynchPDPs.addAll(stat.getOutOfSynchPDPs());
-               this.unknownPDPs.clear(); this.unknownPDPs.addAll(stat.getUpdatingPDPs());
-               this.updatingPDPs.clear(); this.updatingPDPs.addAll(stat.getUpdatingPDPs());
+               this.failedPDPs.clear(); 
+               this.failedPDPs.addAll(stat.getFailedPDPs());
+               this.failedPIPConfigs.clear(); 
+               this.failedPIPConfigs.addAll(stat.getFailedPipConfigs());
+               this.failedPolicies.clear(); 
+               this.failedPolicies.addAll(stat.getFailedPolicies());
+               this.inSynchPDPs.clear(); 
+               this.inSynchPDPs.addAll(stat.getInSynchPDPs());
+               this.lastUpdateFailedPDPs.clear(); 
+               this.lastUpdateFailedPDPs.addAll(stat.getLastUpdateFailedPDPs());
+               this.loadedPIPConfigs.clear(); 
+               this.loadedPIPConfigs.addAll(stat.getLoadedPipConfigs());
+               this.loadedPolicies.clear(); 
+               this.loadedPolicies.addAll(stat.getLoadedPolicies());
+               this.loadErrors.clear(); 
+               this.loadErrors.addAll(stat.getLoadErrors());
+               this.loadWarnings.clear(); 
+               this.loadWarnings.addAll(stat.getLoadWarnings());
+               this.outOfSynchPDPs.clear(); 
+               this.outOfSynchPDPs.addAll(stat.getOutOfSynchPDPs());
+               this.unknownPDPs.clear(); 
+               this.unknownPDPs.addAll(stat.getUpdatingPDPs());
+               this.updatingPDPs.clear(); 
+               this.updatingPDPs.addAll(stat.getUpdatingPDPs());
        }
 
        public Set<PDPPIPConfig> getLoadedPIPConfigs() {
@@ -286,16 +298,16 @@ public class StdPDPGroupStatus implements PDPGroupStatus {
        @Override
        @JsonIgnore
        public boolean isGroupOk() {
-               if (this.policiesOK() == false) {
+               if (!this.policiesOK()) {
                        return false;
                }
-               if (this.pipConfigOK() == false) {
+               if (!this.pipConfigOK()) {
                        return false;
                }
-               if (this.pdpsOK() == false) {
+               if (!this.pdpsOK()) {
                        return false;
                }
-               if (this.loadErrors.isEmpty() == false) {
+               if (!this.loadErrors.isEmpty()) {
                        return false;
                }
                return this.status == Status.OK;
index 0c832b3..9a65d50 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index 79e41f8..03170bd 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -64,7 +64,12 @@ public class StdPDPPolicy implements PDPPolicy, Serializable {
        
        private URI location = null;
        
-
+       public StdPDPPolicy() {
+               //
+               // Methods needed for JSON Deserialization
+               //
+       }
+       
        public StdPDPPolicy(String id, boolean isRoot) {
                this.id = id;
                this.isRoot = isRoot;
@@ -173,7 +178,7 @@ public class StdPDPPolicy implements PDPPolicy, Serializable {
                }
                if (this.policyId != null) {
                        ArrayList<String> foo = Lists.newArrayList(Splitter.on(':').split(this.policyId));
-                       if (foo.isEmpty() == false) {
+                       if (!foo.isEmpty()) {
                                return foo.get(foo.size() - 1);
                        }
                }
@@ -337,14 +342,6 @@ public class StdPDPPolicy implements PDPPolicy, Serializable {
                return versionString;
        }
        
-
-       
-       public StdPDPPolicy() {
-               //
-               // Methods needed for JSON Deserialization
-               //
-       }
-       
        public void setPolicyId(String policyId) {
                this.policyId = policyId;
        }
index 6e1f2d6..e42d544 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index 7c75e58..355a6f6 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -80,6 +80,10 @@ public class OperationHistoryEngine extends StdConfigurableEngine{
                        XACML3.ID_ATTRIBUTE_CATEGORY_RESOURCE, 
                        new IdentifierImpl("target"), 
                        XACML.ID_DATATYPE_STRING);
+       
+       public OperationHistoryEngine() {
+               super();
+       }
 
        private void addIntegerAttribute(StdMutablePIPResponse stdPIPResponse, Identifier category, Identifier attributeId, int value, PIPRequest pipRequest) {
                AttributeValue<BigInteger> attributeValue       = null;
@@ -93,10 +97,6 @@ public class OperationHistoryEngine extends StdConfigurableEngine{
                }
        }
 
-       public OperationHistoryEngine() {
-               super();
-       }
-
        @Override
        public Collection<PIPRequest> attributesRequired() {
                return new ArrayList<>();
index de46d01..de35e0e 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index fd8b3c6..58f5a49 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +21,12 @@ package org.onap.policy.xacml.util;
 
 public class MetricsUtil {
        
+       private MetricsUtil() {
+               //
+               // private constructor to hide the implicit public one for utility class
+               // 
+       }
+       
        public static class AvgLatency {
                private long cumLatency = 0;
                private long count = 0;
index b8b19ec..e243437 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -62,7 +62,6 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeSelectorType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.ConditionType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.IdReferenceType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionsType;
@@ -152,10 +151,8 @@ public class XACMLPolicyScanner {
                if (this.policyObject == null) {
                        return null;
                }
-               if (this.callback != null) {
-                       if (this.callback.onBeginScan(this.policyObject) == CallbackResult.STOP) {
-                               return this.policyObject;
-                       }
+               if (this.callback != null && this.callback.onBeginScan(this.policyObject) == CallbackResult.STOP) {
+                       return this.policyObject;
                }
                if (this.policyObject instanceof PolicyType) {
                        this.scanPolicy(null, (PolicyType) this.policyObject);
@@ -186,10 +183,8 @@ public class XACMLPolicyScanner {
                if (logger.isTraceEnabled()) {
                        logger.trace("scanning policy set: " + policySet.getPolicySetId() + " " + policySet.getDescription());
                }
-               if (this.callback != null) {
-                       if (this.callback.onPreVisitPolicySet(parent, policySet) == CallbackResult.STOP) {
-                               return CallbackResult.STOP;
-                       }
+               if (this.callback != null && this.callback.onPreVisitPolicySet(parent, policySet) == CallbackResult.STOP) {
+                       return CallbackResult.STOP;
                }
                //
                // Scan its info
@@ -208,28 +203,18 @@ public class XACMLPolicyScanner {
                //
                List<JAXBElement<?>> list = policySet.getPolicySetOrPolicyOrPolicySetIdReference();
                for (JAXBElement<?> element: list) {
-                       if ("PolicySet".equals(element.getName().getLocalPart())) {
-                               if (this.scanPolicySet(policySet, (PolicySetType)element.getValue()) == CallbackResult.STOP) {
-                                       return CallbackResult.STOP;
-                               }
-                       } else if ("Policy".equals(element.getName().getLocalPart())) {
-                               if (this.scanPolicy(policySet, (PolicyType)element.getValue()) == CallbackResult.STOP) {
-                                       return CallbackResult.STOP;
-                               }
-                       } else if (element.getValue() instanceof IdReferenceType) {
-                               if ("PolicySetIdReference".equals(element.getName().getLocalPart())) {
-                                       
-                               } else if ("PolicyIdReference".equals(element.getName().getLocalPart())) {
-                                       
-                               }
+                       if ("PolicySet".equals(element.getName().getLocalPart()) && 
+                               this.scanPolicySet(policySet, (PolicySetType)element.getValue()) == CallbackResult.STOP) {
+                               return CallbackResult.STOP;
+                       } else if ("Policy".equals(element.getName().getLocalPart()) &&
+                                          this.scanPolicy(policySet, (PolicyType)element.getValue()) == CallbackResult.STOP) {
+                               return CallbackResult.STOP;
                        } else {
                                logger.warn("generating policy sets found unsupported element: " + element.getName().getNamespaceURI());
                        }
                }
-               if (this.callback != null) {
-                       if (this.callback.onPostVisitPolicySet(parent, policySet) == CallbackResult.STOP) {
-                               return CallbackResult.STOP;
-                       }
+               if (this.callback != null && this.callback.onPostVisitPolicySet(parent, policySet) == CallbackResult.STOP) {
+                       return CallbackResult.STOP;
                }
                return CallbackResult.CONTINUE;
        }
@@ -246,10 +231,8 @@ public class XACMLPolicyScanner {
                if (logger.isTraceEnabled()) {
                        logger.trace("scanning policy: " + policy.getPolicyId() + " " + policy.getDescription());
                }
-               if (this.callback != null) {
-                       if (this.callback.onPreVisitPolicy(parent, policy) == CallbackResult.STOP) {
-                               return CallbackResult.STOP;
-                       }
+               if (this.callback != null && this.callback.onPreVisitPolicy(parent, policy) == CallbackResult.STOP) {
+                       return CallbackResult.STOP;
                }
                //
                // Scan its info
@@ -276,10 +259,8 @@ public class XACMLPolicyScanner {
                                if (logger.isTraceEnabled()) {
                                        logger.trace("scanning rule: " + rule.getRuleId() + " " + rule.getDescription());
                                }
-                               if (this.callback != null) {
-                                       if (this.callback.onPreVisitRule(policy, rule) == CallbackResult.STOP) {
-                                               return CallbackResult.STOP;
-                                       }
+                               if (this.callback != null && this.callback.onPreVisitRule(policy, rule) == CallbackResult.STOP) {
+                                       return CallbackResult.STOP;
                                }
                                if (this.scanTarget(rule, rule.getTarget()) == CallbackResult.STOP) {
                                        return CallbackResult.STOP;
@@ -293,16 +274,12 @@ public class XACMLPolicyScanner {
                                if (this.scanAdvice(rule, rule.getAdviceExpressions()) == CallbackResult.STOP) {
                                        return CallbackResult.STOP;
                                }
-                               if (this.callback != null) {
-                                       if (this.callback.onPostVisitRule(policy, rule) == CallbackResult.STOP) {
-                                               return CallbackResult.STOP;
-                                       }
+                               if (this.callback != null && this.callback.onPostVisitRule(policy, rule) == CallbackResult.STOP) {
+                                       return CallbackResult.STOP;
                                }
                        } else if (o instanceof VariableDefinitionType) {
-                               if (this.callback != null) {
-                                       if (this.callback.onVariable(policy, (VariableDefinitionType) o) == CallbackResult.STOP) {
-                                               return CallbackResult.STOP;
-                                       }
+                               if (this.callback != null && this.callback.onVariable(policy, (VariableDefinitionType) o) == CallbackResult.STOP) {
+                                       return CallbackResult.STOP;
                                }
                        } else {
                                if (logger.isDebugEnabled()) {
@@ -310,10 +287,8 @@ public class XACMLPolicyScanner {
                                }
                        }
                }
-               if (this.callback != null) {
-                       if (this.callback.onPostVisitPolicy(parent, policy) == CallbackResult.STOP) {
-                               return CallbackResult.STOP;
-                       }
+               if (this.callback != null && this.callback.onPostVisitPolicy(parent, policy) == CallbackResult.STOP) {
+                       return CallbackResult.STOP;
                }
                return CallbackResult.CONTINUE;
        }
@@ -369,10 +344,8 @@ public class XACMLPolicyScanner {
                                                                } else {
                                                                        logger.warn("NULL designator/selector or value for match.");
                                                                }
-                                                               if (attribute != null && this.callback != null) {
-                                                                       if (this.callback.onAttribute(parent, target, attribute) == CallbackResult.STOP) {
-                                                                               return CallbackResult.STOP;
-                                                                       }
+                                                               if (attribute != null && this.callback != null && this.callback.onAttribute(parent, target, attribute) == CallbackResult.STOP) {
+                                                                       return CallbackResult.STOP;
                                                                }
                                                        }
                                                }
@@ -417,10 +390,8 @@ public class XACMLPolicyScanner {
                                        ob.addAttributeAssignment(attribute);
                                }
                        }
-                       if (this.callback != null) {
-                               if (this.callback.onObligation(parent, expression, ob) == CallbackResult.STOP) {
-                                       return CallbackResult.STOP;
-                               }
+                       if (this.callback != null && this.callback.onObligation(parent, expression, ob) == CallbackResult.STOP) {
+                               return CallbackResult.STOP;
                        }
                }
                return CallbackResult.CONTINUE;
@@ -460,10 +431,8 @@ public class XACMLPolicyScanner {
                                        ob.addAttributeAssignment(attribute);
                                }
                        }
-                       if (this.callback != null) {
-                               if (this.callback.onAdvice(parent, expression, ob) == CallbackResult.STOP) {
-                                       return CallbackResult.STOP;
-                               }
+                       if (this.callback != null && this.callback.onAdvice(parent, expression, ob) == CallbackResult.STOP) {
+                               return CallbackResult.STOP;
                        }
                }
                return CallbackResult.CONTINUE;
@@ -481,12 +450,8 @@ public class XACMLPolicyScanner {
                        return CallbackResult.CONTINUE;
                }
                for (Object o : list) {
-                       if (o instanceof VariableDefinitionType) {
-                               if (this.callback != null) {
-                                       if (this.callback.onVariable(policy, (VariableDefinitionType) o) == CallbackResult.STOP) {
-                                               return CallbackResult.STOP;
-                                       }
-                               }
+                       if (o instanceof VariableDefinitionType && this.callback != null && this.callback.onVariable(policy, (VariableDefinitionType) o) == CallbackResult.STOP) {
+                               return CallbackResult.STOP;
                        }
                }
                
@@ -501,12 +466,8 @@ public class XACMLPolicyScanner {
         * @return
         */
        protected CallbackResult scanConditions(RuleType rule, ConditionType condition) {
-               if (condition != null) {
-                       if (this.callback != null) {
-                               if (this.callback.onCondition(rule, condition) == CallbackResult.STOP) {
-                                       return CallbackResult.STOP;
-                               }
-                       }
+               if (condition != null && this.callback != null && this.callback.onCondition(rule, condition) == CallbackResult.STOP) {
+                       return CallbackResult.STOP;
                }
                return CallbackResult.CONTINUE;
        }
index 0807f75..cb3d448 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -144,10 +144,7 @@ public class XACMLPolicyWriter {
                        Marshaller m = context.createMarshaller();
                        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
                        m.marshal(policyElement, byteArrayOutputStream);
-                       ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
-
-                       return byteArrayInputStream;
-
+                       return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
                } catch (JAXBException e) {
                        PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "XACMLPolicyWriter", "writePolicyFile failed");
                        return null;
index 65646e1..516c548 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,5 +20,7 @@
 package org.onap.policy.xacml.test.util;
 
 public class AAFEngineTest {
-
+       //
+       // Some tests to be added
+       //
 }
index 16a8ff7..9498529 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -653,7 +653,7 @@ public class PolicyManagerServlet extends HttpServlet {
                        scopeName = scopeName.replace("/", File.separator);
                }
                if(scopeName.contains("\\")){
-                       scopeName = scopeName.replace("\\", "\\\\\\\\");
+                       scopeName = scopeName.replace("\\", "\\\\");
                }
                String query = "from PolicyVersion where POLICY_NAME like :scopeName";
                String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName";
@@ -751,7 +751,14 @@ public class PolicyManagerServlet extends HttpServlet {
                        String newPath = params.getString("newPath");
                        oldPath = oldPath.substring(oldPath.indexOf('/')+1);
                        newPath = newPath.substring(newPath.indexOf('/')+1);
+                       String checkValidation = null;
                        if(oldPath.endsWith(".xml")){
+                               checkValidation = newPath.replace(".xml", "");
+                               checkValidation = checkValidation.substring(checkValidation.indexOf('_') + 1, checkValidation.lastIndexOf("."));
+                               checkValidation = checkValidation.substring(checkValidation.lastIndexOf("/")+1);
+                               if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){
+                                       return error("Policy Rename Failed. The Name contains special characters.");
+                               }
                                JSONObject result = policyRename(oldPath, newPath, userId);
                                if(!(Boolean)(result.getJSONObject("result").get("success"))){
                                        return result;
@@ -763,10 +770,14 @@ public class PolicyManagerServlet extends HttpServlet {
                                        scopeName = scopeName.replace("/", File.separator);
                                        newScopeName = newScopeName.replace("/", File.separator);
                                }
-                               if(scopeName.contains("\\")){
-                                       scopeName = scopeName.replace("\\", "\\\\\\\\");
-                                       newScopeName = newScopeName.replace("\\", "\\\\\\\\");
-                               }
+                               checkValidation = newScopeName.substring(newScopeName.lastIndexOf(File.separator)+1);
+                if(scopeName.contains("\\")){
+                    scopeName = scopeName.replace("\\", "\\\\\\\\");
+                    newScopeName = newScopeName.replace("\\", "\\\\\\\\");
+                }
+                if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){
+                    return error("Scope Rename Failed. The Name contains special characters.");
+                }
                                PolicyController controller = getPolicyControllerInstance();
                                String query = "from PolicyVersion where POLICY_NAME like :scopeName";
                                String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName";
@@ -901,7 +912,12 @@ public class PolicyManagerServlet extends HttpServlet {
                                }
                                for(int i=0; i<oldEntityData.size(); i++){
                                        entity = (PolicyEntity) oldEntityData.get(i);
-                                       checkOldPolicyEntryAndUpdate(entity, newPolicySplit[0] , newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], policyName, newpolicyName, oldpolicyName, userId);
+                                       String checkEntityName = entity.getPolicyName().replace(".xml", "");
+                    checkEntityName = checkEntityName.substring(0, checkEntityName.lastIndexOf('.'));
+                    String originalPolicyName = oldpolicyName.substring(oldpolicyName.lastIndexOf(File.separator)+1);
+                    if(checkEntityName.equals(originalPolicyName)){
+                        checkOldPolicyEntryAndUpdate(entity, newPolicySplit[0] , newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], policyName, newpolicyName, oldpolicyName, userId);
+                    }
                                }
                        }else{
                                return error("Policy rename failed due to policy not able to retrieve from database. Please, contact super-admin.");
@@ -931,21 +947,24 @@ public class PolicyManagerServlet extends HttpServlet {
                        entity.setPolicyData(entity.getPolicyData().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension));
                        entity.setScope(newScope);
                        entity.setModifiedBy(userId);
+                       
+                       String oldConfigurationName = null;
+                       String newConfigurationName = null;
                        if(newpolicyName.contains("Config_")){
-                               String oldConfigurationName = configEntity.getConfigurationName();
+                               oldConfigurationName = configEntity.getConfigurationName();
                                configEntity.setConfigurationName(configEntity.getConfigurationName().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension));
                                controller.updateData(configEntity);
-                               String newConfigurationName = configEntity.getConfigurationName();
+                               newConfigurationName = configEntity.getConfigurationName();
                                File file = new File(PolicyController.getConfigHome() + File.separator + oldConfigurationName);
                                if(file.exists()){
                                        File renamefile = new File(PolicyController.getConfigHome() + File.separator + newConfigurationName);
                                        file.renameTo(renamefile);
                                }
                        }else if(newpolicyName.contains("Action_")){
-                               String oldConfigurationName = actionEntity.getActionBodyName();
+                               oldConfigurationName = actionEntity.getActionBodyName();
                                actionEntity.setActionBody(actionEntity.getActionBody().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension));
                                controller.updateData(actionEntity);
-                               String newConfigurationName = actionEntity.getActionBodyName();
+                               newConfigurationName = actionEntity.getActionBodyName();
                                File file = new File(PolicyController.getActionHome() + File.separator + oldConfigurationName);
                                if(file.exists()){
                                        File renamefile = new File(PolicyController.getActionHome() + File.separator + newConfigurationName);
@@ -954,6 +973,8 @@ public class PolicyManagerServlet extends HttpServlet {
                        }
                        controller.updateData(entity);
 
+                       PolicyRestController restController = new PolicyRestController();
+                       restController.notifyOtherPAPSToUpdateConfigurations("rename", newConfigurationName, oldConfigurationName);
                        PolicyVersion versionEntity = (PolicyVersion) controller.getEntityItem(PolicyVersion.class, "policyName", oldpolicyName);
                        versionEntity.setPolicyName(policyName);
                        versionEntity.setModifiedBy(userId);
@@ -972,18 +993,20 @@ public class PolicyManagerServlet extends HttpServlet {
                }
        }
 
-       private JSONObject cloneRecord(String newpolicyName, String oldScope, String inRemoveoldPolicyExtension, String newScope, String removenewPolicyExtension, PolicyEntity entity, String userId) throws ServletException{
+       private JSONObject cloneRecord(String newpolicyName, String oldScope, String inRemoveoldPolicyExtension, String newScope, String inRemovenewPolicyExtension, PolicyEntity entity, String userId) throws ServletException{
                String queryEntityName;
                PolicyController controller = getPolicyControllerInstance();
                PolicyEntity cloneEntity = new PolicyEntity();
                cloneEntity.setPolicyName(newpolicyName);
                String removeoldPolicyExtension = inRemoveoldPolicyExtension;
+               String removenewPolicyExtension = inRemovenewPolicyExtension;
                removeoldPolicyExtension = removeoldPolicyExtension.replace(".xml", "");
                removenewPolicyExtension = removenewPolicyExtension.replace(".xml", "");
                cloneEntity.setPolicyData(entity.getPolicyData().replace(oldScope+"."+removeoldPolicyExtension, newScope+"."+removenewPolicyExtension));
                cloneEntity.setScope(entity.getScope());
                String oldConfigRemoveExtension = removeoldPolicyExtension.replace(".xml", "");
                String newConfigRemoveExtension = removenewPolicyExtension.replace(".xml", "");
+               String newConfigurationName = null;
                if(newpolicyName.contains("Config_")){
                        ConfigurationDataEntity configurationDataEntity = new ConfigurationDataEntity();
                        configurationDataEntity.setConfigurationName(entity.getConfigurationData().getConfigurationName().replace(oldScope+"."+oldConfigRemoveExtension, newScope+"."+newConfigRemoveExtension));
@@ -996,7 +1019,7 @@ public class PolicyManagerServlet extends HttpServlet {
                        controller.saveData(configurationDataEntity);
                        ConfigurationDataEntity configEntiy = (ConfigurationDataEntity) controller.getEntityItem(ConfigurationDataEntity.class, "configurationName", queryEntityName);
                        cloneEntity.setConfigurationData(configEntiy);
-                       String newConfigurationName = configEntiy.getConfigurationName();
+                       newConfigurationName = configEntiy.getConfigurationName();
                        try (FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + newConfigurationName);
                                        BufferedWriter bw = new BufferedWriter(fw)){
                                bw.write(configEntiy.getConfigBody());
@@ -1014,19 +1037,23 @@ public class PolicyManagerServlet extends HttpServlet {
                        controller.saveData(actionBodyEntity);
                        ActionBodyEntity actionEntiy = (ActionBodyEntity) controller.getEntityItem(ActionBodyEntity.class, "actionBodyName", queryEntityName);
                        cloneEntity.setActionBodyEntity(actionEntiy);
-                       String newConfigurationName = actionEntiy.getActionBodyName();
-                       try (FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + newConfigurationName);
-                               BufferedWriter bw = new BufferedWriter(fw)){
-                               bw.write(actionEntiy.getActionBody());
-                       } catch (IOException e) {
+                       newConfigurationName = actionEntiy.getActionBodyName();
+                        try (FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + newConfigurationName);
+                                        BufferedWriter bw = new BufferedWriter(fw)){
+                                bw.write(actionEntiy.getActionBody());
+                        } catch (IOException e) {
                                LOGGER.error("Exception Occured While cloning the configuration file"+e);
                        }
                }
+               
                cloneEntity.setDeleted(entity.isDeleted());
                cloneEntity.setCreatedBy(userId);
                cloneEntity.setModifiedBy(userId);
                controller.saveData(cloneEntity);
 
+               //Notify others paps regarding clone policy.
+               PolicyRestController restController = new PolicyRestController();
+               restController.notifyOtherPAPSToUpdateConfigurations("clonePolicy", newConfigurationName, null);
                return success();
        }
 
@@ -1055,8 +1082,17 @@ public class PolicyManagerServlet extends HttpServlet {
                        }else if(newPolicyCheck.contains("Decision_")){
                                newPolicyCheck = newPolicyCheck.replace(".Decision_", ":Decision_");
                        }
+                       if(!newPolicyCheck.contains(":")){
+                                return error("Policy Clone Failed. The Name contains special characters.");
+                       }
                        String[] newPolicySplit = newPolicyCheck.split(":");
 
+                       String checkValidation = newPolicySplit[1].replace(".xml", "");
+            checkValidation = checkValidation.substring(checkValidation.indexOf('_') + 1, checkValidation.lastIndexOf("."));
+            if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){
+                return error("Policy Clone Failed. The Name contains special characters.");
+            }
+            
                        String oldPolicyCheck = orignalPolicyName;
                        if(oldPolicyCheck.contains("Config_")){
                                oldPolicyCheck = oldPolicyCheck.replace(".Config_", ":Config_");
@@ -1182,9 +1218,11 @@ public class PolicyManagerServlet extends HttpServlet {
                                                                if(policyNamewithoutExtension.contains("Config_")){
                                                                        Files.deleteIfExists(Paths.get(PolicyController.getConfigHome() + File.separator + policyEntity.getConfigurationData().getConfigurationName()));
                                                                        controller.deleteData(policyEntity.getConfigurationData());
+                                                                       restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getConfigurationData().getConfigurationName());
                                                                }else if(policyNamewithoutExtension.contains("Action_")){
                                                                        Files.deleteIfExists(Paths.get(PolicyController.getActionHome() + File.separator + policyEntity.getActionBodyEntity().getActionBodyName()));
                                                                        controller.deleteData(policyEntity.getActionBodyEntity());
+                                                                       restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getActionBodyEntity().getActionBodyName());
                                                                }
                                                        }
                                                }
@@ -1237,9 +1275,11 @@ public class PolicyManagerServlet extends HttpServlet {
                                                        if(policyNamewithoutExtension.contains("Config_")){
                                                                Files.deleteIfExists(Paths.get(PolicyController.getConfigHome() + File.separator + policyEntity.getConfigurationData().getConfigurationName()));
                                                                controller.deleteData(policyEntity.getConfigurationData());
+                                                               restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getConfigurationData().getConfigurationName());
                                                        }else if(policyNamewithoutExtension.contains("Action_")){
                                                                Files.deleteIfExists(Paths.get(PolicyController.getActionHome() + File.separator + policyEntity.getActionBodyEntity().getActionBodyName()));
                                                                controller.deleteData(policyEntity.getActionBodyEntity());
+                                                               restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getActionBodyEntity().getActionBodyName());
                                                        }
 
                                                        if(version > 1){
@@ -1262,7 +1302,12 @@ public class PolicyManagerServlet extends HttpServlet {
                                                                entity.setModifiedBy(userId);
                                                                controller.watchPolicyFunction(entity, policyNamewithExtension, "DeleteOne");
 
-                                                               String updatequery = "update PolicyVersion set active_version='"+highestVersion+"' , highest_version='"+highestVersion+"' where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"'";
+                                                               String updatequery = "";
+                                                               if(highestVersion != 0){
+                                                                       updatequery = "update PolicyVersion set active_version='"+highestVersion+"' , highest_version='"+highestVersion+"' where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"'"; 
+                                                               }else{
+                                                                       updatequery = "delete from PolicyVersion  where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0";
+                                                               }
                                                                controller.executeQuery(updatequery);
                                                        }else{
                                                                String policyVersionQuery = "delete from PolicyVersion  where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0";
@@ -1297,9 +1342,11 @@ public class PolicyManagerServlet extends HttpServlet {
                                                        if(policyNamewithoutExtension.contains("Config_")){
                                                                Files.deleteIfExists(Paths.get(PolicyController.getConfigHome() + File.separator + policyEntity.getConfigurationData().getConfigurationName()));
                                                                controller.deleteData(policyEntity.getConfigurationData());
+                                                               restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getConfigurationData().getConfigurationName());
                                                        }else if(policyNamewithoutExtension.contains("Action_")){
                                                                Files.deleteIfExists(Paths.get(PolicyController.getActionHome() + File.separator + policyEntity.getActionBodyEntity().getActionBodyName()));
                                                                controller.deleteData(policyEntity.getActionBodyEntity());
+                                                               restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getActionBodyEntity().getActionBodyName());
                                                        }
                                                }
                                        }
index 63d0cb2..507f198 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -384,7 +384,7 @@ public class PolicyRestController extends RestrictedBaseController{
        }
        
        @RequestMapping(value={"/saveDictionary/*/*"}, method={RequestMethod.POST})
-       public ModelAndView saveDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException{
+       public void saveDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException{
                String userId = "";
                String uri = request.getRequestURI().replace("/saveDictionary", "");
                if(uri.startsWith("/")){
@@ -401,12 +401,15 @@ public class PolicyRestController extends RestrictedBaseController{
                policyLogger.info("***********************************************************************************************************************************");
                
                String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim());
-               response.getWriter().write(body);
-               return null;
+               if(body != null && !body.isEmpty()){
+                       response.getWriter().write(body);
+               }else{
+                       response.getWriter().write("Failed");
+               }               
        }
        
        @RequestMapping(value={"/deleteDictionary/*/*"}, method={RequestMethod.POST})
-       public ModelAndView deletetDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException {
+       public void deletetDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException {
                String uri = request.getRequestURI().replace("/deleteDictionary", "");
                if(uri.startsWith("/")){
                        uri = uri.substring(uri.indexOf('/')+1);
@@ -419,8 +422,11 @@ public class PolicyRestController extends RestrictedBaseController{
                policyLogger.info("*************************************************************************************************************************************");
                
                String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim());
-               response.getWriter().write(body);
-               return null;
+               if(body != null && !body.isEmpty()){
+                       response.getWriter().write(body);
+               }else{
+                       response.getWriter().write("Failed");
+               }               
        }
        
        @RequestMapping(value={"/searchDictionary"}, method={RequestMethod.POST})
@@ -471,7 +477,9 @@ public class PolicyRestController extends RestrictedBaseController{
                        resultList = json.get("policyresult");
                }catch(Exception e){
                        List<String> data = new ArrayList<>();
-                       data.add("Elastic Search Server is down");
+                       resultList = json.get("data");
+                       data.add("Exception");
+                       data.add(resultList.toString());
                        resultList = data;
                        policyLogger.error("Exception Occured while searching for Policy in Elastic Database" +e);
                }
@@ -490,5 +498,10 @@ public class PolicyRestController extends RestrictedBaseController{
                String uri = "searchPolicy?action=delete&policyName='"+fileName+"'";
                callPAP(null, "POST", uri.trim());
        }
+       
+       public String notifyOtherPAPSToUpdateConfigurations(String mode, String newName, String oldName){
+               String uri = "onap/notifyOtherPAPs?action="+mode+"&newPolicyName="+newName+"&oldPolicyName="+oldName+"";
+               return callPAP(null, "POST", uri.trim());
+       }
 
 }
index 5365af1..40056d9 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP Policy Engine
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -44,8 +44,8 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
 import org.json.JSONObject;
+import org.onap.policy.admin.PolicyRestController;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.rest.adapter.PolicyExportAdapter;
@@ -73,25 +73,18 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 @RequestMapping("/")
 public class PolicyExportAndImportController extends RestrictedBaseController {
        private static Logger   logger  = FlexLogger.getLogger(PolicyExportAndImportController.class);
-
-       private ArrayList<String> selectedPolicy;
-       private Set<String> scopes = null;
-       private List<String> roles = null;
-       private static String SUPERADMIN = "super-admin";
-       private static String SUPEREDITOR = "super-editor";
-       private static String ADMIN = "admin";
-       private static String EDITOR = "editor";
-
-       private static CommonClassDao commonClassDao;
        
-       private PolicyEntity policyEntity;
-       private ConfigurationDataEntity configurationDataEntity;
-       private ActionBodyEntity actionBodyEntity;
-       private PolicyVersion policyVersion;
+       private static String superAdmin = "super-admin";
+       private static String superEditor = "super-editor";
+       private static String admin = "admin";
+       private static String editor = "editor";
+       private static String policyName = "policyName";
+       private static String configurationName = "configurationName";
+       private static String configurationbody = "configurationbody";
+       private static String config = "Config_";
 
-       private Workbook workbook;
+       private static CommonClassDao commonClassDao;
 
-       private HSSFWorkbook workBook2;
        
        private PolicyController policyController;
        public PolicyController getPolicyController() {
@@ -121,33 +114,33 @@ public class PolicyExportAndImportController extends RestrictedBaseController {
 
        @RequestMapping(value={"/policy_download/exportPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
        public void exportPolicy(HttpServletRequest request, HttpServletResponse response) throws IOException{
-               try{
+               try(HSSFWorkbook workBook2 = new HSSFWorkbook()){
                        String file;
-                       selectedPolicy = new ArrayList<>();
+                       ArrayList<String> selectedPolicy = new ArrayList<>();
                        ObjectMapper mapper = new ObjectMapper();
                        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                        JsonNode root = mapper.readTree(request.getReader());
                        PolicyExportAdapter adapter = mapper.readValue(root.get("exportData").toString(), PolicyExportAdapter.class);
                        for (Object policyId :  adapter.getPolicyDatas()) {
                                LinkedHashMap<?, ?> selected = (LinkedHashMap<?, ?>)policyId;
-                               String policyWithScope = selected.get("policyName").toString() + "." + selected.get("activeVersion").toString() + ".xml";
+                               String policyWithScope = selected.get(policyName).toString() + "." + selected.get("activeVersion").toString() + ".xml";
                                String scope = policyWithScope.substring(0 , policyWithScope.lastIndexOf(File.separator)).replace(File.separator, ".");
                                String policyName = policyWithScope.substring(policyWithScope.lastIndexOf(File.separator)+1);
                                selectedPolicy.add(policyName+":"+scope);
                        }
                        List<Object> entityData = commonClassDao.getMultipleDataOnAddingConjunction(PolicyEntity.class, "policyName:scope", selectedPolicy);
 
-                       workBook2 = new HSSFWorkbook();
                        HSSFSheet sheet = workBook2.createSheet("PolicyEntity");
 
                        HSSFRow headingRow = sheet.createRow(0);
-                       headingRow.createCell(0).setCellValue("policyName");
+                       headingRow.createCell(0).setCellValue(policyName);
                        headingRow.createCell(1).setCellValue("scope");
                        headingRow.createCell(2).setCellValue("version");
                        headingRow.createCell(3).setCellValue("policyData");
                        headingRow.createCell(4).setCellValue("description");
-                       headingRow.createCell(5).setCellValue("configurationbody");
-                       headingRow.createCell(6).setCellValue("configurationName");
+                       headingRow.createCell(5).setCellValue(configurationName);
+                       headingRow.createCell(6).setCellValue("bodySize");
+                       headingRow.createCell(7).setCellValue(configurationbody);
 
                        short rowNo = 1;
                        for (Object object : entityData) {
@@ -160,16 +153,36 @@ public class PolicyExportAndImportController extends RestrictedBaseController {
                                row.createCell(4).setCellValue(policyEntity.getDescription());
                                if(!policyEntity.getPolicyName().contains("Decision_")){
                                        if(policyEntity.getConfigurationData() != null){
-                                               row.createCell(5).setCellValue(policyEntity.getConfigurationData().getConfigBody());
-                                               row.createCell(6).setCellValue(policyEntity.getConfigurationData().getConfigurationName());
+                                               row.createCell(5).setCellValue(policyEntity.getConfigurationData().getConfigurationName());
+                                               String body = policyEntity.getConfigurationData().getConfigBody();
+                                               if(policyEntity.getPolicyName().contains("Config_BRMS_Param_")){
+                                                       int index = 0;
+                                                       int arraySize = 0;
+                                                       while (index < body.length()) {
+                                                               if(arraySize == 0){
+                                                                       row.createCell(7).setCellValue(body.substring(index, Math.min(index + 30000, body.length())));
+                                                               }else{
+                                                                       headingRow.createCell(7 + arraySize).setCellValue(configurationbody+arraySize);
+                                                                       row.createCell(7 + arraySize).setCellValue(body.substring(index, Math.min(index + 30000, body.length())));
+                                                               }
+                                                               index += 30000;
+                                                               arraySize += 1;
+                                                       }
+                                                       row.createCell(6).setCellValue(arraySize);
+                                               }else{  
+                                                       row.createCell(6).setCellValue(0);
+                                                       row.createCell(7).setCellValue(body);
+                                               }       
                                        }
                                        if(policyEntity.getActionBodyEntity() != null){
-                                               row.createCell(5).setCellValue(policyEntity.getActionBodyEntity().getActionBody());
-                                               row.createCell(6).setCellValue(policyEntity.getActionBodyEntity().getActionBodyName());
+                                               row.createCell(5).setCellValue(policyEntity.getActionBodyEntity().getActionBodyName());
+                                               row.createCell(6).setCellValue(0);
+                                               row.createCell(7).setCellValue(policyEntity.getActionBodyEntity().getActionBody());
                                        }
                                }else{
                                        row.createCell(5).setCellValue("");
-                                       row.createCell(6).setCellValue("");
+                                       row.createCell(6).setCellValue(0);
+                                       row.createCell(7).setCellValue("");
                                }
                                rowNo++;
                        }
@@ -177,8 +190,8 @@ public class PolicyExportAndImportController extends RestrictedBaseController {
                        String tmp = System.getProperty("catalina.base") + File.separator + "webapps" + File.separator + "temp";
                        String deleteCheckPath = tmp + File.separator + "PolicyExport.xls";
                        File deleteCheck = new File(deleteCheckPath);
-                       if(deleteCheck.exists()){
-                               deleteCheck.delete();
+                       if(deleteCheck.exists() && deleteCheck.delete()){
+                               logger.info("Deleted the file from system before exporting a new file.");
                        }
                        File temPath = new File(tmp);
                        if(!temPath.exists()){
@@ -216,178 +229,217 @@ public class PolicyExportAndImportController extends RestrictedBaseController {
                String userId = UserUtils.getUserSession(request).getOrgUserId();
                UserInfo userInfo = (UserInfo) commonClassDao.getEntityItem(UserInfo.class, "userLoginId", userId);
 
+               //Check if the Role and Scope Size are Null get the values from db. 
                List<Object> userRoles = controller.getRoles(userId);
                Pair<Set<String>, List<String>> pair = org.onap.policy.utils.UserUtils.checkRoleAndScope(userRoles);
-               roles = pair.u;
-               scopes = pair.t;
+               List<String> roles = pair.u;
+               Set<String> scopes = pair.t;
                
-               FileInputStream excelFile = new FileInputStream(new File(file));
-               workbook = new HSSFWorkbook(excelFile);
-               Sheet datatypeSheet = workbook.getSheetAt(0);
-               Iterator<Row> rowIterator = datatypeSheet.iterator();
-
-               while (rowIterator.hasNext()) {
-                       finalColumn = false;
-                       policyEntity = new PolicyEntity();
-                       configurationDataEntity = new ConfigurationDataEntity();
-                       actionBodyEntity = new ActionBodyEntity();
-                       policyVersion = new PolicyVersion();
-                       Row currentRow = rowIterator.next();
-                       if (currentRow.getRowNum() == 0) {
-                               continue;
-                       }
-                       Iterator<Cell> cellIterator = currentRow.cellIterator();
-                       while (cellIterator.hasNext()) {
-                               Cell cell = cellIterator.next();
-                               if ("policyName".equalsIgnoreCase(getCellHeaderName(cell))) {
-                                       policyEntity.setPolicyName(cell.getStringCellValue());
-                               }
-                               if ("scope".equalsIgnoreCase(getCellHeaderName(cell))) {
-                                       policyEntity.setScope(cell.getStringCellValue());
-                               }
-                               if ("policyData".equalsIgnoreCase(getCellHeaderName(cell))) {
-                                       policyEntity.setPolicyData(cell.getStringCellValue());
-                               }
-                               if ("description".equalsIgnoreCase(getCellHeaderName(cell))) {
-                                       policyEntity.setDescription(cell.getStringCellValue());
-                               }
-                               if ("configurationbody".equalsIgnoreCase(getCellHeaderName(cell))) {
-                                       if(policyEntity.getPolicyName().contains("Config_")){
-                                               configExists = true;
-                                               configurationDataEntity.setConfigBody(cell.getStringCellValue());
-                                       }else if(policyEntity.getPolicyName().contains("Action_")){
-                                               actionExists = true;
-                                               actionBodyEntity.setActionBody(cell.getStringCellValue());
-                                       }       
-                               }
-                               if ("configurationName".equalsIgnoreCase(getCellHeaderName(cell))) {
-                                       finalColumn = true;
-                                       configName = cell.getStringCellValue();
-                                       if(policyEntity.getPolicyName().contains("Config_")){
-                                               configurationDataEntity.setConfigurationName(cell.getStringCellValue());
-                                       }else if(policyEntity.getPolicyName().contains("Action_")){
-                                               actionBodyEntity.setActionBodyName(cell.getStringCellValue());
-                                       }       
-                               }
+               try(FileInputStream excelFile = new FileInputStream(new File(file)); HSSFWorkbook workbook = new HSSFWorkbook(excelFile)){
+                       Sheet datatypeSheet = workbook.getSheetAt(0);
+                       Iterator<Row> rowIterator = datatypeSheet.iterator();
 
-                               if(finalColumn){
-                                       scope = policyEntity.getScope().replace(".", File.separator);
-                                       String query = "FROM PolicyEntity where policyName = :policyName and scope = :policyScope";
-                                       SimpleBindings params = new SimpleBindings();
-                                       params.put("policyName", policyEntity.getPolicyName());
-                                       params.put("policyScope", policyEntity.getScope());
-                                       List<Object> queryData = controller.getDataByQuery(query, params);
-                                       if(!queryData.isEmpty()){
-                                               continue;
+                       while (rowIterator.hasNext()) {
+                               finalColumn = false;
+                               PolicyEntity policyEntity = new PolicyEntity();
+                               ConfigurationDataEntity configurationDataEntity = new ConfigurationDataEntity();
+                               ActionBodyEntity actionBodyEntity = new ActionBodyEntity();
+                               PolicyVersion policyVersion = new PolicyVersion();
+                               Row currentRow = rowIterator.next();
+                               if (currentRow.getRowNum() == 0) {
+                                       continue;
+                               }
+                               Iterator<Cell> cellIterator = currentRow.cellIterator();
+                               StringBuilder body = new StringBuilder();
+                               int bodySize = 0;
+                               int setBodySize = 0;
+                               boolean configurationBodySet = false;
+                               while (cellIterator.hasNext()) {
+                                       Cell cell = cellIterator.next();
+                                       if (policyName.equalsIgnoreCase(getCellHeaderName(cell))) {
+                                               policyEntity.setPolicyName(cell.getStringCellValue());
+                                               finalColumn = false; 
+                                               configurationBodySet = false;
+                                               configExists = false;
+                                               actionExists = false;
                                        }
-                                       if (roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR)) {
-                                               //1. if Role contains super admin create scope.
-                                               //2. if Role contains super editor don't create new scope and add to list to show to user.
-                                               
-                                               PolicyEditorScopes policyEditorScope = (PolicyEditorScopes) commonClassDao.getEntityItem(PolicyEditorScopes.class, "scopeName", scope);
-                                               if(policyEditorScope == null){
-                                                       if(roles.contains(SUPERADMIN)){
-                                                               PolicyEditorScopes policyEditorScopeEntity = new PolicyEditorScopes();
-                                                               policyEditorScopeEntity.setScopeName(scope);
-                                                               policyEditorScopeEntity.setUserCreatedBy(userInfo);
-                                                               policyEditorScopeEntity.setUserModifiedBy(userInfo);
-                                                               commonClassDao.save(policyEditorScopeEntity);
-                                                       }else{
-                                                               //Add Error Message a new Scope Exists, contact super-admin to create a new scope
-                                                               continue;
+                                       if ("scope".equalsIgnoreCase(getCellHeaderName(cell))) {
+                                               policyEntity.setScope(cell.getStringCellValue());
+                                       }
+                                       if ("policyData".equalsIgnoreCase(getCellHeaderName(cell))) {
+                                               policyEntity.setPolicyData(cell.getStringCellValue());
+                                       }
+                                       if ("description".equalsIgnoreCase(getCellHeaderName(cell))) {
+                                               policyEntity.setDescription(cell.getStringCellValue());
+                                       }
+                                       if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell))) {
+                                               if(policyEntity.getPolicyName().contains(config)){
+                                                       if(policyEntity.getPolicyName().contains("Config_BRMS_Param_")){
+                                                               setBodySize += 1;
                                                        }
-                                               }
+                                                       if(setBodySize == bodySize){
+                                                               finalColumn = true;
+                                                               configurationBodySet = true;
+                                                       }else if(setBodySize == 0){
+                                                               configurationBodySet = true;
+                                                       }
+                                                       configExists = true;
+                                                       body.append(cell.getStringCellValue());
+                                               }else if(policyEntity.getPolicyName().contains("Action_")){
+                                                       actionExists = true;
+                                                       actionBodyEntity.setActionBody(cell.getStringCellValue());
+                                               }       
                                        }
-                                       if (roles.contains(ADMIN) || roles.contains(EDITOR)) {
-                                               if(scopes.isEmpty()){
-                                                       logger.error("No Scopes has been Assigned to the User. Please, Contact Super-Admin");
+                                       if ("bodySize".equalsIgnoreCase(getCellHeaderName(cell))) {
+                                               if(cell.getNumericCellValue() < 1){
+                                                       finalColumn = true;
                                                }else{
-                                                       //1. if Role contains admin, then check if parent scope has role admin, if not don't create a scope and add to list.
-                                                       if(roles.contains(ADMIN)){
-                                                               String scopeCheck = scope.substring(0, scope.lastIndexOf('.'));
-                                                               if(scopes.contains(scopeCheck)){
+                                                       bodySize = (int) cell.getNumericCellValue();
+                                               }
+                                       }
+                                       if (configurationName.equalsIgnoreCase(getCellHeaderName(cell))) {
+                                               configName = cell.getStringCellValue();
+                                               if(policyEntity.getPolicyName().contains(config)){
+                                                       configurationDataEntity.setConfigurationName(cell.getStringCellValue());
+                                               }else if(policyEntity.getPolicyName().contains("Action_")){
+                                                       actionBodyEntity.setActionBodyName(cell.getStringCellValue());
+                                               }       
+                                       }
+
+                                       if(finalColumn && configurationBodySet){
+                                               configurationDataEntity.setConfigBody(body.toString());
+                                               scope = policyEntity.getScope().replace(".", File.separator);
+                                               String query = "FROM PolicyEntity where policyName = :policyName and scope = :policyScope";
+                                               SimpleBindings params = new SimpleBindings();
+                                               params.put(policyName, policyEntity.getPolicyName());
+                                               params.put("policyScope", policyEntity.getScope());
+                                               List<Object> queryData = controller.getDataByQuery(query, params);
+                                               if(!queryData.isEmpty()){
+                                                       continue;
+                                               }
+                                               if (roles.contains(superAdmin) || roles.contains(superEditor)) {
+                                                       //1. if Role contains super admin create scope.
+                                                       //2. if Role contains super editor don't create new scope and add to list to show to user.
+
+                                                       PolicyEditorScopes policyEditorScope = (PolicyEditorScopes) commonClassDao.getEntityItem(PolicyEditorScopes.class, "scopeName", scope);
+                                                       if(policyEditorScope == null){
+                                                               if(roles.contains(superAdmin)){
                                                                        PolicyEditorScopes policyEditorScopeEntity = new PolicyEditorScopes();
                                                                        policyEditorScopeEntity.setScopeName(scope);
                                                                        policyEditorScopeEntity.setUserCreatedBy(userInfo);
                                                                        policyEditorScopeEntity.setUserModifiedBy(userInfo);
                                                                        commonClassDao.save(policyEditorScopeEntity);
                                                                }else{
+                                                                       //Add Error Message a new Scope Exists, contact super-admin to create a new scope
                                                                        continue;
                                                                }
-                                                       }else{
-                                                               continue;
                                                        }
                                                }
-                                       }       
-
-                                       if(configExists){
-                                               if(configName.endsWith("json")){
-                                                       configurationDataEntity.setConfigType("JSON");
-                                               }else if(configName.endsWith("txt")){
-                                                       configurationDataEntity.setConfigType("OTHER");
-                                               }else if(configName.endsWith("xml")){
-                                                       configurationDataEntity.setConfigType("XML");
-                                               }else if(configName.endsWith("properties")){
-                                                       configurationDataEntity.setConfigType("PROPERTIES");
-                                               }
-                                               configurationDataEntity.setDeleted(false);
-                                               configurationDataEntity.setCreatedBy(userId);
-                                               configurationDataEntity.setModifiedBy(userId);
-                                               commonClassDao.save(configurationDataEntity);
-                                               try(FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + configName)){
-                                                       BufferedWriter bw = new BufferedWriter(fw);
-                                                       bw.write(configurationDataEntity.getConfigBody());
-                                                       bw.close();
-                                               } catch (IOException e) {
-                                                       logger.error("Exception Occured While cloning the configuration file",e);
+                                               if (roles.contains(admin) || roles.contains(editor)) {
+                                                       if(scopes.isEmpty()){
+                                                               logger.error("No Scopes has been Assigned to the User. Please, Contact Super-Admin");
+                                                       }else{
+                                                               //1. if Role contains admin, then check if parent scope has role admin, if not don't create a scope and add to list.
+                                                               if(roles.contains(admin)){
+                                                                       String scopeCheck = scope.substring(0, scope.lastIndexOf('.'));
+                                                                       if(scopes.contains(scopeCheck)){
+                                                                               PolicyEditorScopes policyEditorScopeEntity = new PolicyEditorScopes();
+                                                                               policyEditorScopeEntity.setScopeName(scope);
+                                                                               policyEditorScopeEntity.setUserCreatedBy(userInfo);
+                                                                               policyEditorScopeEntity.setUserModifiedBy(userInfo);
+                                                                               commonClassDao.save(policyEditorScopeEntity);
+                                                                       }else{
+                                                                               continue;
+                                                                       }
+                                                               }else{
+                                                                       continue;
+                                                               }
+                                                       }
+                                               }       
+
+                                               if(configExists){
+                                                       if(configName.endsWith("json")){
+                                                               configurationDataEntity.setConfigType("JSON");
+                                                       }else if(configName.endsWith("txt")){
+                                                               configurationDataEntity.setConfigType("OTHER");
+                                                       }else if(configName.endsWith("xml")){
+                                                               configurationDataEntity.setConfigType("XML");
+                                                       }else if(configName.endsWith("properties")){
+                                                               configurationDataEntity.setConfigType("PROPERTIES");
+                                                       }
+                                                       configurationDataEntity.setDeleted(false);
+                                                       configurationDataEntity.setCreatedBy(userId);
+                                                       configurationDataEntity.setModifiedBy(userId);
+                                                       commonClassDao.save(configurationDataEntity);
+                                                       writeConfigurationFile(configurationDataEntity);
                                                }
-                                       }
-                                       if(actionExists){
-                                               actionBodyEntity.setDeleted(false);
-                                               actionBodyEntity.setCreatedBy(userId);
-                                               actionBodyEntity.setModifiedBy(userId);
-                                               commonClassDao.save(actionBodyEntity);
-                                               try(FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + actionBodyEntity.getActionBodyName())) {
-                                                       BufferedWriter bw = new BufferedWriter(fw);
-                                                       bw.write(actionBodyEntity.getActionBody());
-                                                       bw.close();
-                                               } catch (IOException e) {
-                                                       logger.error("Exception Occured While cloning the configuration file",e);
+                                               if(actionExists){
+                                                       actionBodyEntity.setDeleted(false);
+                                                       actionBodyEntity.setCreatedBy(userId);
+                                                       actionBodyEntity.setModifiedBy(userId);
+                                                       commonClassDao.save(actionBodyEntity);
+                                                       writeActionBodyFile(actionBodyEntity);
                                                }
-                                       }
-                                       if(configName != null){
-                                               if(configName.contains("Config_")){
-                                                       ConfigurationDataEntity configuration = (ConfigurationDataEntity) commonClassDao.getEntityItem(ConfigurationDataEntity.class, "configurationName", configName);
-                                                       policyEntity.setConfigurationData(configuration);
-                                               }else{
-                                                       ActionBodyEntity actionBody = (ActionBodyEntity) commonClassDao.getEntityItem(ActionBodyEntity.class, "actionBodyName", configName);
-                                                       policyEntity.setActionBodyEntity(actionBody);
+                                               if(configName != null){
+                                                       if(configName.contains(config)){
+                                                               ConfigurationDataEntity configuration = (ConfigurationDataEntity) commonClassDao.getEntityItem(ConfigurationDataEntity.class, configurationName, configName);
+                                                               policyEntity.setConfigurationData(configuration);
+                                                       }else{
+                                                               ActionBodyEntity actionBody = (ActionBodyEntity) commonClassDao.getEntityItem(ActionBodyEntity.class, "actionBodyName", configName);
+                                                               policyEntity.setActionBodyEntity(actionBody);
+                                                       }
                                                }
+                                               policyEntity.setCreatedBy(userId);
+                                               policyEntity.setModifiedBy(userId);
+                                               policyEntity.setDeleted(false);
+                                               commonClassDao.save(policyEntity);
+
+                                               policyVersion = new PolicyVersion();
+                                               String policyName = policyEntity.getPolicyName().replace(".xml", "");
+                                               int version = Integer.parseInt(policyName.substring(policyName.lastIndexOf('.')+1));
+                                               policyName = policyName.substring(0, policyName.lastIndexOf('.'));
+
+                                               policyVersion.setPolicyName(scope.replace(".", File.separator) + File.separator + policyName);
+                                               policyVersion.setActiveVersion(version);
+                                               policyVersion.setHigherVersion(version);
+                                               policyVersion.setCreatedBy(userId);
+                                               policyVersion.setModifiedBy(userId);
+                                               commonClassDao.save(policyVersion);
+
+                                               //Notify Other paps regarding Export Policy.
+                                               PolicyRestController restController = new PolicyRestController();
+                                               restController.notifyOtherPAPSToUpdateConfigurations("exportPolicy", configName, null);
                                        }
-                                       policyEntity.setCreatedBy(userId);
-                                       policyEntity.setModifiedBy(userId);
-                                       policyEntity.setDeleted(false);
-                                       commonClassDao.save(policyEntity);
-                                       
-                                       policyVersion = new PolicyVersion();
-                                       String policyName = policyEntity.getPolicyName().replace(".xml", "");
-                                       int version = Integer.parseInt(policyName.substring(policyName.lastIndexOf('.')+1));
-                                       policyName = policyName.substring(0, policyName.lastIndexOf('.'));
-                                       
-                                       policyVersion.setPolicyName(scope.replace(".", File.separator) + File.separator + policyName);
-                                       policyVersion.setActiveVersion(version);
-                                       policyVersion.setHigherVersion(version);
-                                       policyVersion.setCreatedBy(userId);
-                                       policyVersion.setModifiedBy(userId);
-                                       commonClassDao.save(policyVersion);
                                }
                        }
+               }catch(IOException e){
+                       logger.error("Exception Occured While importing the Policy"+e);
                }
                return null;
        }
 
+       private void writeConfigurationFile(ConfigurationDataEntity configurationDataEntity){
+               try(FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + configurationDataEntity.getConfigurationName())){
+                       BufferedWriter bw = new BufferedWriter(fw);
+                       bw.write(configurationDataEntity.getConfigBody());
+                       bw.close();
+               } catch (IOException e) {
+                       logger.error("Exception Occured While cloning the configuration file",e);
+               }
+       }
+       
+       private void writeActionBodyFile(ActionBodyEntity actionBodyEntity){
+               try(FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + actionBodyEntity.getActionBodyName())) {
+                       BufferedWriter bw = new BufferedWriter(fw);
+                       bw.write(actionBodyEntity.getActionBody());
+                       bw.close();
+               } catch (IOException e) {
+                       logger.error("Exception Occured While cloning the configuration file",e);
+               }
+       }
+       
        //return the column header name value
        private String getCellHeaderName(Cell cell){
                return cell.getSheet().getRow(0).getCell(cell.getColumnIndex()).getRichStringCellValue().toString();
        }
-}
+}
\ No newline at end of file