FIX SONAR ISSUE NESTED TRY BLOCKS 17/56717/3
authorKrishnajinka <kris.jinka@samsung.com>
Wed, 18 Jul 2018 10:49:30 +0000 (19:49 +0900)
committerKrishnajinka <kris.jinka@samsung.com>
Fri, 20 Jul 2018 02:38:15 +0000 (11:38 +0900)
refactor the code for nested try blocks and rework
based on comments and fix nested loops complexity

Issue-ID: POLICY-976
Change-Id: Ied02b7838b5e4839a4906f79ff37c4fd6afeccfe
Signed-off-by: Krishnajinka <kris.jinka@samsung.com>
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateNewMicroServiceModel.java
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/Policy.java
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/PolicyDBDao.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/util/XACMLPolicyWriter.java
POLICY-SDK-APP/src/main/java/org/onap/policy/admin/CheckPDP.java
POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyAdapter.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/admin/RESTfulPAPEngine.java

index d6718ab..f7f8a33 100644 (file)
@@ -57,7 +57,7 @@ public class CreateNewMicroServiceModel {
     private HashMap<String,MSAttributeObject > classMap = new HashMap<>();
 
 
     private HashMap<String,MSAttributeObject > classMap = new HashMap<>();
 
 
-    MSModelUtils utils = new MSModelUtils(XACMLPapServlet.getMsOnapName(), XACMLPapServlet.getMsPolicyName());
+    private MSModelUtils utils = new MSModelUtils(XACMLPapServlet.getMsOnapName(), XACMLPapServlet.getMsPolicyName());
 
     public CreateNewMicroServiceModel(String fileName, String serviceName, String string, String version) {
         super();
 
     public CreateNewMicroServiceModel(String fileName, String serviceName, String string, String version) {
         super();
@@ -80,31 +80,8 @@ public class CreateNewMicroServiceModel {
             File directory = new File("ExtractDir" + File.separator + randomID);
             List<File> fileList = listModelFiles(directory.toString());
             //get all the files from a director
             File directory = new File("ExtractDir" + File.separator + randomID);
             List<File> fileList = listModelFiles(directory.toString());
             //get all the files from a director
-            for (File file : fileList){
-                if (file.isFile()){
-                    int i = file.getName().lastIndexOf('.');
-                    String type = file.getName().substring(i+1);
-
-                    if(type != null && "yml".equalsIgnoreCase(type)){
-
-                        processYmlModel(file.toString(), modelName);
-
-                    }else{
-
-                        tempMap = utils.processEpackage(file.getAbsolutePath(), MODEL_TYPE.XMI);
-                        classMap.putAll(tempMap);
-                    }
-                }
-            }
-            cleanUpFile = "ExtractDir" + File.separator + randomID + ".zip";
-            try {
-                FileUtils.deleteDirectory(new File("ExtractDir" + File.separator + randomID));
-                FileUtils.deleteDirectory(new File(randomID));
-                File deleteFile = new File(cleanUpFile);
-                FileUtils.forceDelete(deleteFile);
-            } catch (IOException e) {
-                logger.error("Failed to unzip model file " + randomID, e);
-            }
+            processFiles(modelName, fileList);
+            doCleanUpFiles(randomID);
         }else {
             if(importFile.contains(".yml")){
 
         }else {
             if(importFile.contains(".yml")){
 
@@ -122,6 +99,39 @@ public class CreateNewMicroServiceModel {
         }
     }
 
         }
     }
 
+    private void processFiles(String modelName, List<File> fileList) {
+        Map<String, MSAttributeObject> tempMap;
+        for (File file : fileList){
+            if (file.isFile()){
+                int i = file.getName().lastIndexOf('.');
+                String type = file.getName().substring(i+1);
+
+                if("yml".equalsIgnoreCase(type)){
+
+                    processYmlModel(file.toString(), modelName);
+
+                }else{
+
+                    tempMap = utils.processEpackage(file.getAbsolutePath(), MODEL_TYPE.XMI);
+                    classMap.putAll(tempMap);
+                }
+            }
+        }
+    }
+
+    private void doCleanUpFiles(String randomID) {
+        String cleanUpFile;
+        cleanUpFile = "ExtractDir" + File.separator + randomID + ".zip";
+        try {
+            FileUtils.deleteDirectory(new File("ExtractDir" + File.separator + randomID));
+            FileUtils.deleteDirectory(new File(randomID));
+            File deleteFile = new File(cleanUpFile);
+            FileUtils.forceDelete(deleteFile);
+        } catch (IOException e) {
+            logger.error("Failed to unzip model file " + randomID, e);
+        }
+    }
+
     private void processYmlModel(String fileName, String  modelName){
 
         try {
     private void processYmlModel(String fileName, String  modelName){
 
         try {
@@ -145,7 +155,7 @@ public class CreateNewMicroServiceModel {
             returnReferenceList.put(modelName, utils.getReferenceAttributes());
             msAttributes.setRefAttribute(returnReferenceList);
 
             returnReferenceList.put(modelName, utils.getReferenceAttributes());
             msAttributes.setRefAttribute(returnReferenceList);
 
-            if(utils.getListConstraints()!=""){
+            if(!PolicyDBDao.isNullOrEmpty(utils.getListConstraints())){
                 LinkedHashMap<String, String> enumList =new LinkedHashMap<>();
                 String[] listArray=utils.getListConstraints().split("#");
                 for(String str:listArray){
                 LinkedHashMap<String, String> enumList =new LinkedHashMap<>();
                 String[] listArray=utils.getListConstraints().split("#");
                 for(String str:listArray){
index 3b3e81e..4c837bb 100644 (file)
@@ -231,13 +231,13 @@ public abstract class Policy {
                String absolutePath = parentPath.toString();
                if (absolutePath != null && !absolutePath.equals(EMPTY_STRING)) {
                        policyDir = absolutePath.substring(absolutePath.lastIndexOf('\\') + 1, absolutePath.length());
                String absolutePath = parentPath.toString();
                if (absolutePath != null && !absolutePath.equals(EMPTY_STRING)) {
                        policyDir = absolutePath.substring(absolutePath.lastIndexOf('\\') + 1, absolutePath.length());
-                       if (policyDir == null || policyDir.equals(EMPTY_STRING)) {
+                       if (policyDir.equals(EMPTY_STRING)) {
                                policyDir = absolutePath.substring(absolutePath.lastIndexOf('/') + 1, absolutePath.length());
                        }
                }
 
                String fileName = "default";
                                policyDir = absolutePath.substring(absolutePath.lastIndexOf('/') + 1, absolutePath.length());
                        }
                }
 
                String fileName = "default";
-               if (policyDir != null && !policyDir.equals(EMPTY_STRING)) {
+               if (!policyDir.equals(EMPTY_STRING)) {
                        if("ClosedLoop_PM".equals(policyConfigType)){
                                fileName = policyType + "_" + "PM" + "_" +java.lang.String.format(policyFileName) + "." +version +".xml";
                        }else if("ClosedLoop_Fault".equals(policyConfigType)){
                        if("ClosedLoop_PM".equals(policyConfigType)){
                                fileName = policyType + "_" + "PM" + "_" +java.lang.String.format(policyFileName) + "." +version +".xml";
                        }else if("ClosedLoop_Fault".equals(policyConfigType)){
@@ -271,9 +271,8 @@ public abstract class Policy {
                        //
                        //Does not need to be XACMLPolicyWriterWithPapNotify since it is already in the PAP
                        //and this transaction is intercepted up stream.
                        //
                        //Does not need to be XACMLPolicyWriterWithPapNotify since it is already in the PAP
                        //and this transaction is intercepted up stream.
-                       InputStream inputStream = null;
-                       try {
-                               inputStream = XACMLPolicyWriter.getXmlAsInputStream((PolicyType) policyData);
+
+                       try(InputStream inputStream = XACMLPolicyWriter.getXmlAsInputStream((PolicyType) policyData)) {
                                PolicyDef policyDef = DOMPolicyDef.load(inputStream);
                                if (policyDef == null) {
                                        success.put("validation", "PolicyDef Validation Failed");
                                PolicyDef policyDef = DOMPolicyDef.load(inputStream);
                                if (policyDef == null) {
                                        success.put("validation", "PolicyDef Validation Failed");
@@ -283,13 +282,6 @@ public abstract class Policy {
                        } catch (Exception e) {
                                LOGGER.error("PolicyDef Validation failed"+e);
                                success.put("error", "Validation Failed");
                        } catch (Exception e) {
                                LOGGER.error("PolicyDef Validation failed"+e);
                                success.put("error", "Validation Failed");
-                       }finally{
-                               try {
-                                       if(inputStream != null)
-                                               inputStream.close();
-                               } catch (IOException e) {
-                                       LOGGER.error("Exception Occured while closing the input stream"+e);
-                               }
                        }
                } else {
                        PolicyLogger.error("Unknown data type sent back.");
                        }
                } else {
                        PolicyLogger.error("Unknown data type sent back.");
index 2374ac4..dc1287b 100644 (file)
@@ -7,9 +7,9 @@
  * 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
  * 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
  *      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.
  * 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.
@@ -86,14 +86,13 @@ import org.onap.policy.xacml.std.pap.StdPDPPolicy;
 import org.onap.policy.xacml.util.XACMLPolicyWriter;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import org.onap.policy.xacml.util.XACMLPolicyWriter;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
+import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
 
 import com.att.research.xacml.api.pap.PAPException;
 import com.att.research.xacml.api.pap.PDP;
 import com.att.research.xacml.api.pap.PDPPolicy;
 import com.att.research.xacml.util.XACMLProperties;
 
 
 import com.att.research.xacml.api.pap.PAPException;
 import com.att.research.xacml.api.pap.PDP;
 import com.att.research.xacml.api.pap.PDPPolicy;
 import com.att.research.xacml.util.XACMLProperties;
 
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
-
 public class PolicyDBDao {
     private static final Logger logger = FlexLogger.getLogger(PolicyDBDao.class);
     private List<?> otherServers;
 public class PolicyDBDao {
     private static final Logger logger = FlexLogger.getLogger(PolicyDBDao.class);
     private List<?> otherServers;
@@ -101,31 +100,30 @@ public class PolicyDBDao {
     private static PolicyDBDao currentInstance = null;
     private PAPPolicyEngine papEngine;
 
     private static PolicyDBDao currentInstance = null;
     private PAPPolicyEngine papEngine;
 
-    public static final String JSON_CONFIG = "JSON";
-    public static final String XML_CONFIG = "XML";
-    public static final String PROPERTIES_CONFIG = "PROPERTIES";
-    public static final String OTHER_CONFIG = "OTHER";
-    public static final String AUDIT_USER = "audit";
+    private static final String JSON_CONFIG = "JSON";
+    private static final String XML_CONFIG = "XML";
+    private static final String PROPERTIES_CONFIG = "PROPERTIES";
+    private static final String OTHER_CONFIG = "OTHER";
 
     //Declared to static variables which were repeating multiple times across the PolicyDBDao
     public static final String config = "Config";
     public static final String action = "Action";
 
     //Declared to static variables which were repeating multiple times across the PolicyDBDao
     public static final String config = "Config";
     public static final String action = "Action";
-    public static final String groupIdVar = "groupId";
-    public static final String deletedVar = "deleted";
-    public static final String groupEntitySelectQuery = "SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted";
-    public static final String pdpEntitySelectQuery = "SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted";
-    public static final String groupCannotBeFound = "The group could not be found with id ";
-    public static final String foundInDBNotDeleted = " were found in the database that are not deleted";
-    public static final String moreThanOnePDP = "Somehow, more than one pdp with the same id ";
-    public static final String deletedStatusFound = " and deleted status were found in the database";
-    public static final String duplicateGroupId = "Somehow, more than one group with the same id ";
-    public static final String pdpIdVariable = "pdpId";
-    public static final String queryFailedToCheckExisting = "Query failed trying to check for existing group";
-    public static final String queryFailedToGetGroup = "Query failed trying to get group ";
+    private static final String groupIdVar = "groupId";
+    private static final String deletedVar = "deleted";
+    private static final String groupEntitySelectQuery = "SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted";
+    private static final String pdpEntitySelectQuery = "SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted";
+    private static final String groupCannotBeFound = "The group could not be found with id ";
+    private static final String foundInDBNotDeleted = " were found in the database that are not deleted";
+    private static final String moreThanOnePDP = "Somehow, more than one pdp with the same id ";
+    private static final String deletedStatusFound = " and deleted status were found in the database";
+    private static final String duplicateGroupId = "Somehow, more than one group with the same id ";
+    private static final String pdpIdVariable = "pdpId";
+    private static final String queryFailedToCheckExisting = "Query failed trying to check for existing group";
+    private static final String queryFailedToGetGroup = "Query failed trying to get group ";
     public static final String scope = "scope";
     public static final String scope = "scope";
-    public static final String policyDBDaoVar = "PolicyDBDao";
-    public static final String duplicatePolicyId = "Somehow, more than one policy with the id ";
-    public static final String foundInDB = " were found in the database";
+    private static final String policyDBDaoVar = "PolicyDBDao";
+    private static final String duplicatePolicyId = "Somehow, more than one policy with the id ";
+    private static final String foundInDB = " were found in the database";
 
     private static boolean isJunit = false;
 
 
     private static boolean isJunit = false;
 
@@ -425,11 +423,11 @@ public class PolicyDBDao {
         return true;
     }
 
         return true;
     }
 
-    public void notifyOthers(long entityId,String entityType){
+    private void notifyOthers(long entityId,String entityType){
         notifyOthers(entityId,entityType,null);
     }
 
         notifyOthers(entityId,entityType,null);
     }
 
-    public void notifyOthers(long entityId, String entityType, String newGroupId){
+    private void notifyOthers(long entityId, String entityType, String newGroupId){
         logger.debug("notifyOthers(long entityId, String entityType, long newGroupId) as notifyOthers("+entityId+","+entityType+","+newGroupId+") called");
         LinkedList<Thread> notifyThreads = new LinkedList<>();
 
         logger.debug("notifyOthers(long entityId, String entityType, long newGroupId) as notifyOthers("+entityId+","+entityType+","+newGroupId+") called");
         LinkedList<Thread> notifyThreads = new LinkedList<>();
 
@@ -481,19 +479,18 @@ public class PolicyDBDao {
             URL url;
             String papUrl;
             try {
             URL url;
             String papUrl;
             try {
-                    String[] papUrlUserPass = getPapUrlUserPass();
-                    if(papUrlUserPass == null ){
-                        papUrl = "undefined";
-                    } else {
-                        papUrl = papUrlUserPass[0];
-                    }
+                String[] papUrlUserPass = getPapUrlUserPass();
+                if(papUrlUserPass == null ){
+                    papUrl = "undefined";
+                } else {
+                    papUrl = papUrlUserPass[0];
+                }
                 logger.debug("We are going to try to notify "+o);
                 //is this our own url?
                 String ourUrl = o;
                 try{
                     ourUrl = splitPapUrlUserPass((String)o)[0];
                 }catch(Exception e){
                 logger.debug("We are going to try to notify "+o);
                 //is this our own url?
                 String ourUrl = o;
                 try{
                     ourUrl = splitPapUrlUserPass((String)o)[0];
                 }catch(Exception e){
-                    ourUrl = o;
                     logger.debug(e);
                 }
                 if(o == null){
                     logger.debug(e);
                 }
                 if(o == null){
@@ -617,57 +614,57 @@ public class PolicyDBDao {
         int pauseBetweenRetries = 1000;
         switch(entityType){
 
         int pauseBetweenRetries = 1000;
         switch(entityType){
 
-        case POLICY_NOTIFICATION:
-            for(int i=0; i<retries;i++){
-                try{
-                    handleIncomingPolicyChange(entityId);
-                    break;
-                } catch(Exception e){
-                    logger.debug(e);
-                    PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingPolicyChange("+url+", "+entityId+", "+extraData+")");
-                }
-                try{
-                    Thread.sleep(pauseBetweenRetries);
-                }catch(InterruptedException ie){
-                    Thread.currentThread().interrupt();
-                    break;
-                }
-            }
-            break;
-        case PDP_NOTIFICATION:
-            for(int i=0; i<retries;i++){
-                try{
-                    handleIncomingPdpChange(entityId, transaction);
-                    break;
-                } catch(Exception e){
-                    logger.debug(e);
-                    PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingPdpChange("+url+", "+entityId+", "+transaction+")");
-                }
-                try{
-                    Thread.sleep(pauseBetweenRetries);
-                }catch(InterruptedException ie){
-                    Thread.currentThread().interrupt();
-                    break;
+            case POLICY_NOTIFICATION:
+                for(int i=0; i<retries;i++){
+                    try{
+                        handleIncomingPolicyChange(entityId);
+                        break;
+                    } catch(Exception e){
+                        logger.debug(e);
+                        PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingPolicyChange("+url+", "+entityId+", "+extraData+")");
+                    }
+                    try{
+                        Thread.sleep(pauseBetweenRetries);
+                    }catch(InterruptedException ie){
+                        Thread.currentThread().interrupt();
+                        break;
+                    }
                 }
                 }
-            }
-            break;
-        case GROUP_NOTIFICATION:
-            for(int i=0; i<retries;i++){
-                try{
-                    handleIncomingGroupChange(entityId, extraData, transaction);
-                    break;
-                }catch(Exception e){
-                    logger.debug(e);
-                    PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingGroupChange("+url+", "+entityId+", "+extraData+", "+transaction+", "+xacmlPapServlet+")");
+                break;
+            case PDP_NOTIFICATION:
+                for(int i=0; i<retries;i++){
+                    try{
+                        handleIncomingPdpChange(entityId, transaction);
+                        break;
+                    } catch(Exception e){
+                        logger.debug(e);
+                        PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingPdpChange("+url+", "+entityId+", "+transaction+")");
+                    }
+                    try{
+                        Thread.sleep(pauseBetweenRetries);
+                    }catch(InterruptedException ie){
+                        Thread.currentThread().interrupt();
+                        break;
+                    }
                 }
                 }
-                try{
-                    Thread.sleep(pauseBetweenRetries);
-                }catch(InterruptedException ie){
-                    Thread.currentThread().interrupt();
-                    break;
+                break;
+            case GROUP_NOTIFICATION:
+                for(int i=0; i<retries;i++){
+                    try{
+                        handleIncomingGroupChange(entityId, extraData, transaction);
+                        break;
+                    }catch(Exception e){
+                        logger.debug(e);
+                        PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingGroupChange("+url+", "+entityId+", "+extraData+", "+transaction+", "+xacmlPapServlet+")");
+                    }
+                    try{
+                        Thread.sleep(pauseBetweenRetries);
+                    }catch(InterruptedException ie){
+                        Thread.currentThread().interrupt();
+                        break;
+                    }
                 }
                 }
-            }
-            break;
+                break;
         }
         //no changes should be being made in this function, we still need to close
         transaction.rollbackTransaction();
         }
         //no changes should be being made in this function, we still need to close
         transaction.rollbackTransaction();
@@ -909,7 +906,7 @@ public class PolicyDBDao {
                 throw new PolicyDBException();
             }
         } catch(Exception e){
                 throw new PolicyDBException();
             }
         } catch(Exception e){
-            nameAndVersion[0] = originalPolicyName;         
+            nameAndVersion[0] = originalPolicyName;
             logger.debug(e);
         }
         try{
             logger.debug(e);
         }
         try{
@@ -923,7 +920,7 @@ public class PolicyDBDao {
         }
         return nameAndVersion;
     }
         }
         return nameAndVersion;
     }
-    
+
     private void handleIncomingPdpChange(String pdpId, PolicyDBDaoTransaction transaction) throws PAPException{
         //get pdp
         long pdpIdLong = -1;
     private void handleIncomingPdpChange(String pdpId, PolicyDBDaoTransaction transaction) throws PAPException{
         //get pdp
         long pdpIdLong = -1;
@@ -1321,7 +1318,7 @@ public class PolicyDBDao {
     private String[] getNameScopeAndVersionFromPdpPolicy(String fileName){
         String[] splitByDots = fileName.split("\\.");
         if(splitByDots.length < 3){
     private String[] getNameScopeAndVersionFromPdpPolicy(String fileName){
         String[] splitByDots = fileName.split("\\.");
         if(splitByDots.length < 3){
-                return null;
+            return null;
         }
         String policyName = splitByDots[splitByDots.length-3];
         String version = splitByDots[splitByDots.length-2];
         }
         String policyName = splitByDots[splitByDots.length-3];
         String version = splitByDots[splitByDots.length-2];
@@ -1367,7 +1364,7 @@ public class PolicyDBDao {
      * @param strings One or more Strings (or nulls) to check if they are null or empty
      * @return true if one or more of the given strings are empty or null
      */
      * @param strings One or more Strings (or nulls) to check if they are null or empty
      * @return true if one or more of the given strings are empty or null
      */
-    private static boolean isNullOrEmpty(String... strings){
+    public static boolean isNullOrEmpty(String... strings){
         for(String s : strings){
             if(s == null || "".equals(s)){
                 return true;
         for(String s : strings){
             if(s == null || "".equals(s)){
                 return true;
@@ -1939,22 +1936,14 @@ public class PolicyDBDao {
 
         @Override
         public void createPolicy(Policy policy, String username){
 
         @Override
         public void createPolicy(Policy policy, String username){
-            InputStream policyXmlStream = null;
+
             try{
                 logger.debug("createPolicy(PolicyRestAdapter policy, String username) as createPolicy("+policy+","+username+") called");
                 String policyScope = policy.policyAdapter.getDomainDir().replace(File.separator, ".");
                 //Does not need to be XACMLPolicyWriterWithPapNotify since it is already in the PAP
                 //and this transaction is intercepted up stream.
             try{
                 logger.debug("createPolicy(PolicyRestAdapter policy, String username) as createPolicy("+policy+","+username+") called");
                 String policyScope = policy.policyAdapter.getDomainDir().replace(File.separator, ".");
                 //Does not need to be XACMLPolicyWriterWithPapNotify since it is already in the PAP
                 //and this transaction is intercepted up stream.
-                String policyDataString;
-                try {
-                    policyXmlStream = XACMLPolicyWriter.getXmlAsInputStream((PolicyType)policy.getCorrectPolicyDataObject());
-                    policyDataString = IOUtils.toString(policyXmlStream);
-                } catch (IOException e) {
-                    policyDataString = "could not read";
-                    PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught IOException on IOUtils.toString("+policyXmlStream+")");
-                    throw new IllegalArgumentException("Cannot parse the policy xml from the PolicyRestAdapter.");
-                }
-                IOUtils.closeQuietly(policyXmlStream);
+
+                String policyDataString = getPolicyDataString((PolicyType)policy.getCorrectPolicyDataObject());
                 if(isJunit){
                     //Using parentPath object to set policy data.
                     policyDataString = policy.policyAdapter.getParentPath();
                 if(isJunit){
                     //Using parentPath object to set policy data.
                     policyDataString = policy.policyAdapter.getParentPath();
@@ -1971,19 +1960,7 @@ public class PolicyDBDao {
 
                     prefix = configPath.substring(configPath.indexOf(policyScope+".")+policyScope.concat(".").length(), configPath.lastIndexOf(policy.policyAdapter.getPolicyName()));
                     if(isNullOrEmpty(policy.policyAdapter.getConfigBodyData())){
 
                     prefix = configPath.substring(configPath.indexOf(policyScope+".")+policyScope.concat(".").length(), configPath.lastIndexOf(policy.policyAdapter.getPolicyName()));
                     if(isNullOrEmpty(policy.policyAdapter.getConfigBodyData())){
-                        String configData = "";
-                        try{
-                            String newConfigPath = configPath;
-                            try{
-                                newConfigPath = processConfigPath(newConfigPath);
-                            }catch(Exception e2){
-                                logger.error("Could not process config path: "+newConfigPath,e2);
-                            }
-                            configData = readConfigFile(newConfigPath);
-                        }catch(Exception e){
-                            logger.error("Could not read config body data for "+configPath,e);
-                        }
-                        policy.policyAdapter.setConfigBodyData(configData);
+                        policy.policyAdapter.setConfigBodyData(getConfigData(configPath));
                     }
                 } else if (action.equalsIgnoreCase(policy.policyAdapter.getPolicyType())) {
                     prefix = "Action_";
                     }
                 } else if (action.equalsIgnoreCase(policy.policyAdapter.getPolicyType())) {
                     prefix = "Action_";
@@ -2017,16 +1994,39 @@ public class PolicyDBDao {
                         }
                     }
                 }
                         }
                     }
                 }
-
                 createPolicy(policy.policyAdapter, username, policyScope,finalName,policyDataString);
                 createPolicy(policy.policyAdapter, username, policyScope,finalName,policyDataString);
-            }finally{
-                if(policyXmlStream != null){
-                    try {
-                        policyXmlStream.close();
-                    } catch (IOException e) {
-                        logger.error("Exception Occured while closing input stream"+e);
-                    }
-                }
+            } catch (Exception e) {
+                logger.error("Could not create policy for "+policy,e);
+                throw e;
+            }
+        }
+
+        private String getConfigData(String configPath) {
+            String configData = "";
+            try{
+                configData = getConfigPath(configPath);
+            }catch(Exception e){
+                logger.error("Could not read config body data for "+configPath,e);
+            }
+            return configData;
+        }
+
+        private String getConfigPath(String configPath) {
+            try{
+                String newConfigPath = processConfigPath(configPath);
+                return readConfigFile(newConfigPath);
+            } catch(IllegalArgumentException e2){
+                logger.error("Could not process config path: "+configPath,e2);
+            }
+            return "";
+        }
+
+        private String getPolicyDataString(PolicyType policyType) {
+            try (InputStream policyXmlStream = XACMLPolicyWriter.getXmlAsInputStream(policyType)) {
+                return IOUtils.toString(policyXmlStream, StandardCharsets.UTF_8);
+            } catch (IOException e) {
+                PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught IOException on IOUtils.toString(policyXmlStream)");
+                throw new IllegalArgumentException("Cannot parse the policy xml from the PolicyRestAdapter.", e);
             }
         }
 
             }
         }
 
@@ -2140,37 +2140,7 @@ public class PolicyDBDao {
                         //should be fast since getPolicies uses a HashSet in StdPDPGroup
                         if(!newPolicySet.contains(pol.getId())){
                             String[] scopeAndName = getNameScopeAndVersionFromPdpPolicy(pol.getId());
                         //should be fast since getPolicies uses a HashSet in StdPDPGroup
                         if(!newPolicySet.contains(pol.getId())){
                             String[] scopeAndName = getNameScopeAndVersionFromPdpPolicy(pol.getId());
-                            PolicyEntity policyToDelete = null;
-                            try{
-                                if(scopeAndName!=null){
-                                    policyToDelete = getPolicy(scopeAndName[0],scopeAndName[1]);
-                                    if ("XACMLPapServlet.doDelete".equals(username)) {
-                                        Iterator<PolicyEntity> dbPolicyIt = groupToUpdateInDB.getPolicies().iterator();
-                                        String policyName = getPolicyNameAndVersionFromPolicyFileName(policyToDelete.getPolicyName())[0];
-
-                                        logger.info("PolicyDBDao: delete policy from GroupEntity");
-                                        try{
-                                            while(dbPolicyIt.hasNext()){
-                                                PolicyEntity dbpolicy = dbPolicyIt.next();
-                                                if(policyToDelete.getScope().equals(dbpolicy.getScope()) &&
-                                                        getPolicyNameAndVersionFromPolicyFileName(dbpolicy.getPolicyName())[0].equals(policyName)) {
-                                                    dbPolicyIt.remove();
-
-                                                    logger.info("PolicyDBDao: deleting policy from the existing group:\n "
-                                                            + "policyName is " + policyToDelete.getScope()+"."+policyToDelete.getPolicyName() + "\n"
-                                                            + "group is " + groupToUpdateInDB.getGroupId());
-                                                }
-                                            }
-                                        }catch(Exception e){
-                                            logger.debug(e);
-                                            PolicyLogger.error("Could not delete policy with name: "+ policyToDelete.getScope()+"."+policyToDelete.getPolicyName()+"\n ID: "+ policyToDelete.getPolicyId());
-                                        }
-                                    }
-                                }
-                            }catch(Exception e){
-                                PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not get policy to remove: "+pol.getId());
-                                throw new PersistenceException("Could not get policy to remove: "+pol.getId());
-                            }
+                            deletePolicyInScope(username, groupToUpdateInDB, pol, scopeAndName);
                         }
                     }
                 }
                         }
                     }
                 }
@@ -2201,6 +2171,45 @@ public class PolicyDBDao {
             }
         }
 
             }
         }
 
+        private void deletePolicyInScope(String username, GroupEntity groupToUpdateInDB, PDPPolicy pol, String[] scopeAndName) {
+            PolicyEntity policyToDelete;
+            if (scopeAndName == null) {
+                return;
+            }
+            try{
+                policyToDelete = getPolicy(scopeAndName[0],scopeAndName[1]);
+                if ("XACMLPapServlet.doDelete".equals(username)) {
+                    Iterator<PolicyEntity> dbPolicyIt = groupToUpdateInDB.getPolicies().iterator();
+                    String policyName = getPolicyNameAndVersionFromPolicyFileName(policyToDelete.getPolicyName())[0];
+
+                    logger.info("PolicyDBDao: delete policy from GroupEntity");
+                    deletePolicyFromGroupEntity(groupToUpdateInDB, policyToDelete, dbPolicyIt, policyName);
+                }
+            }catch(Exception e){
+                PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not get policy to remove: "+pol.getId());
+                throw new PersistenceException("Could not get policy to remove: "+pol.getId());
+            }
+        }
+
+        private void deletePolicyFromGroupEntity(GroupEntity groupToUpdateInDB, PolicyEntity policyToDelete, Iterator<PolicyEntity> dbPolicyIt, String policyName) {
+            try{
+                while(dbPolicyIt.hasNext()){
+                    PolicyEntity dbpolicy = dbPolicyIt.next();
+                    if(policyToDelete.getScope().equals(dbpolicy.getScope()) &&
+                            getPolicyNameAndVersionFromPolicyFileName(dbpolicy.getPolicyName())[0].equals(policyName)) {
+                        dbPolicyIt.remove();
+
+                        logger.info("PolicyDBDao: deleting policy from the existing group:\n "
+                                + "policyName is " + policyToDelete.getScope()+"."+policyToDelete.getPolicyName() + "\n"
+                                + "group is " + groupToUpdateInDB.getGroupId());
+                    }
+                }
+            }catch(Exception e){
+                logger.debug(e);
+                PolicyLogger.error("Could not delete policy with name: "+ policyToDelete.getScope()+"."+policyToDelete.getPolicyName()+"\n ID: "+ policyToDelete.getPolicyId());
+            }
+        }
+
         @Override
         public void addPdpToGroup(String pdpID, String groupID, String pdpName, String pdpDescription, int pdpJmxPort, String username) {
             logger.debug("addPdpToGroup(String pdpID, String groupID, String pdpName, String pdpDescription, int pdpJmxPort, String username) as addPdpToGroup("+pdpID+", "+groupID+", "+pdpName+", "+pdpDescription+", "+pdpJmxPort+", "+username+") called");
         @Override
         public void addPdpToGroup(String pdpID, String groupID, String pdpName, String pdpDescription, int pdpJmxPort, String username) {
             logger.debug("addPdpToGroup(String pdpID, String groupID, String pdpName, String pdpDescription, int pdpJmxPort, String username) as addPdpToGroup("+pdpID+", "+groupID+", "+pdpName+", "+pdpDescription+", "+pdpJmxPort+", "+username+") called");
@@ -2654,4 +2663,4 @@ public class PolicyDBDao {
         }
     }
 
         }
     }
 
-}
+}
\ No newline at end of file
index 168bc54..ecbd3fa 100644 (file)
@@ -147,7 +147,7 @@ public class XACMLPolicyWriter {
                        return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
                } catch (JAXBException e) {
                        PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "XACMLPolicyWriter", "writePolicyFile failed");
                        return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
                } catch (JAXBException e) {
                        PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "XACMLPolicyWriter", "writePolicyFile failed");
-                       return null;
+                       throw new IllegalArgumentException("XACMLPolicyWriter writePolicyFile failed", e);
                }               
        }
        /**
                }               
        }
        /**
index 6433204..be84690 100644 (file)
@@ -57,149 +57,147 @@ import com.att.research.xacml.util.XACMLProperties;
  *
  */
 public class CheckPDP {
  *
  */
 public class CheckPDP {
-       private static Path pdpPath = null;
-       private static Long oldModified = null;
-       private static HashMap<String, String> pdpMap = null;
-       private static final Logger LOGGER = FlexLogger.getLogger(CheckPDP.class);
-       
-       private CheckPDP(){
-               //default constructor
-       }
-       
-       public static Map<String, String> getPdpMap() {
-               return pdpMap;
-       }
-       
-       private static void reset() {
-               pdpPath = null;
-               oldModified = null;
-               pdpMap = null;
-       }
+    private static Path pdpPath = null;
+    private static Long oldModified = null;
+    private static HashMap<String, String> pdpMap = null;
+    private static final Logger LOGGER = FlexLogger.getLogger(CheckPDP.class);
 
 
-       public static boolean validateID(String id) {
-               // ReadFile
-               try {
-                       readFile();
-               } catch (Exception e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
-                       return false;
-               }
-               if (pdpMap == null) {
-                       return false;
-               }
-               // Check ID
-               return pdpMap.containsKey(id);
-       }
+    private CheckPDP(){
+        //default constructor
+    }
 
 
-       private static void readFile(){
-               String pdpFile = null;
-               try{
-                       pdpFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_IDFILE);     
-               }catch (Exception e){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot read the PDP ID File" + e);
-                       return;
-               }
-               if (pdpFile == null) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PDP File name not Valid : " + pdpFile);
-               }
-               if (pdpPath == null) {
-                       pdpPath = Paths.get(pdpFile);
-                       if (!pdpPath.toString().endsWith(".properties") || !pdpPath.toFile().exists()) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "File doesn't exist in the specified Path : "     + pdpPath.toString());
-                               CheckPDP.reset();
-                               return;
-                       }
-                       readProps();
-               }
-               // Check if File is updated recently
-               else {
-                       Long newModified = pdpPath.toFile().lastModified();
-                       if (!newModified.equals(oldModified)) {
-                               // File has been updated.
-                               readProps();
-                       }
-               }
-       }
+    public static Map<String, String> getPdpMap() {
+        return pdpMap;
+    }
 
 
-       @SuppressWarnings({ "unchecked", "rawtypes" })
-       private static void readProps() {
-               Properties pdpProp;
-               pdpProp = new Properties();
-               try {
-                       InputStream in = new FileInputStream(pdpPath.toFile());
-                       oldModified = pdpPath.toFile().lastModified();
-                       pdpProp.load(in);
-                       // Read the Properties and Load the PDPs and encoding.
-                       pdpMap = new HashMap<>();
-                       // Check the Keys for PDP_URLs
-                       Collection<Object> unsorted = pdpProp.keySet();
-                       List<String> sorted = new ArrayList(unsorted);
-                       Collections.sort(sorted);
-                       for (String propKey : sorted) {
-                               loadPDPProperties(propKey, pdpProp);
-                       }
-                       in.close();
-               } catch (IOException e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
-               }
-               if (pdpMap == null || pdpMap.isEmpty()) {
-                       LOGGER.debug(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Cannot Proceed without PDP_URLs");
-                       CheckPDP.reset();
-               }
-       }
-       
-       private static void loadPDPProperties(String propKey, Properties pdpProp){
-               if (propKey.startsWith("PDP_URL")) {
-                       String checkVal = pdpProp.getProperty(propKey);
-                       if (checkVal == null) {
-                               LOGGER.error("Properties file doesn't have the PDP_URL parameter");
-                       }
-                       if (checkVal != null && checkVal.contains(";")) {
-                               List<String> pdpDefault = new ArrayList<>(Arrays.asList(checkVal.split("\\s*;\\s*")));
-                               int pdpCount = 0;
-                               while (pdpCount < pdpDefault.size()) {
-                                       String pdpVal = pdpDefault.get(pdpCount);
-                                       readPDPParam(pdpVal);
-                                       pdpCount++;
-                               }
-                       }
-               }
-       }
+    private static void reset() {
+        pdpPath = null;
+        oldModified = null;
+        pdpMap = null;
+    }
 
 
-       private static void readPDPParam(String pdpVal){
-               if(pdpVal.contains(",")){
-                       List<String> pdpValues = new ArrayList<>(Arrays.asList(pdpVal.split("\\s*,\\s*")));
-                       if(pdpValues.size()==3){
-                               // 1:2 will be UserID:Password
-                               String userID = pdpValues.get(1);
-                               String pass = pdpValues.get(2);
-                               Base64.Encoder encoder = Base64.getEncoder();
-                               // 0 - PDPURL
-                               pdpMap.put(pdpValues.get(0), encoder.encodeToString((userID+":"+pass).getBytes(StandardCharsets.UTF_8)));
-                       }else{
-                               LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS + "No Credentials to send Request: " + pdpValues);
-                       }
-               }else{
-                       LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS + "No Credentials to send Request: " + pdpVal);
-               }
-       }
-       
-       public static String getEncoding(String pdpID){
-               try {
-                       readFile();
-               } catch (Exception e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
-               }
-               String encoding = null;
-               if(pdpMap!=null && (!pdpMap.isEmpty())){
-                       try{
-                               encoding = pdpMap.get(pdpID);
-                       } catch(Exception e){
-                               LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
-                       }
-                       return encoding;
-               }else{
-                       return null;
-               }
-       }
+    public static boolean validateID(String id) {
+        // ReadFile
+        try {
+            readFile();
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+            return false;
+        }
+        if (pdpMap == null) {
+            return false;
+        }
+        // Check ID
+        return pdpMap.containsKey(id);
+    }
+
+    private static void readFile(){
+        String pdpFile = null;
+        try{
+            pdpFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_IDFILE);
+        }catch (Exception e){
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot read the PDP ID File" + e);
+            return;
+        }
+        if (pdpFile == null) {
+            LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PDP File name not Valid : " + pdpFile);
+        }
+        if (pdpPath == null) {
+            pdpPath = Paths.get(pdpFile);
+            if (!pdpPath.toString().endsWith(".properties") || !pdpPath.toFile().exists()) {
+                LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "File doesn't exist in the specified Path : "    + pdpPath.toString());
+                CheckPDP.reset();
+                return;
+            }
+            readProps();
+        }
+        // Check if File is updated recently
+        else {
+            Long newModified = pdpPath.toFile().lastModified();
+            if (!newModified.equals(oldModified)) {
+                // File has been updated.
+                readProps();
+            }
+        }
+    }
+
+    @SuppressWarnings({ "unchecked", "rawtypes" })
+    private static void readProps() {
+        Properties pdpProp;
+        pdpProp = new Properties();
+        try(InputStream in = new FileInputStream(pdpPath.toFile())) {
+            oldModified = pdpPath.toFile().lastModified();
+            pdpProp.load(in);
+            // Read the Properties and Load the PDPs and encoding.
+            pdpMap = new HashMap<>();
+            // Check the Keys for PDP_URLs
+            Collection<Object> unsorted = pdpProp.keySet();
+            List<String> sorted = new ArrayList(unsorted);
+            Collections.sort(sorted);
+            for (String propKey : sorted) {
+                loadPDPProperties(propKey, pdpProp);
+            }
+        } catch (IOException e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+        }
+        if (pdpMap == null || pdpMap.isEmpty()) {
+            LOGGER.debug(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Cannot Proceed without PDP_URLs");
+            CheckPDP.reset();
+        }
+    }
+
+    private static void loadPDPProperties(String propKey, Properties pdpProp){
+        if (propKey.startsWith("PDP_URL")) {
+            String checkVal = pdpProp.getProperty(propKey);
+            if (checkVal == null) {
+                LOGGER.error("Properties file doesn't have the PDP_URL parameter");
+            }
+            if (checkVal != null && checkVal.contains(";")) {
+                List<String> pdpDefault = new ArrayList<>(Arrays.asList(checkVal.split("\\s*;\\s*")));
+                int pdpCount = 0;
+                while (pdpCount < pdpDefault.size()) {
+                    String pdpVal = pdpDefault.get(pdpCount);
+                    readPDPParam(pdpVal);
+                    pdpCount++;
+                }
+            }
+        }
+    }
+
+    private static void readPDPParam(String pdpVal){
+        if(pdpVal.contains(",")){
+            List<String> pdpValues = new ArrayList<>(Arrays.asList(pdpVal.split("\\s*,\\s*")));
+            if(pdpValues.size()==3){
+                // 1:2 will be UserID:Password
+                String userID = pdpValues.get(1);
+                String pass = pdpValues.get(2);
+                Base64.Encoder encoder = Base64.getEncoder();
+                // 0 - PDPURL
+                pdpMap.put(pdpValues.get(0), encoder.encodeToString((userID+":"+pass).getBytes(StandardCharsets.UTF_8)));
+            }else{
+                LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS + "No Credentials to send Request: " + pdpValues);
+            }
+        }else{
+            LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS + "No Credentials to send Request: " + pdpVal);
+        }
+    }
+
+    public static String getEncoding(String pdpID){
+        try {
+            readFile();
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+        }
+        String encoding = null;
+        if(pdpMap!=null && (!pdpMap.isEmpty())){
+            try{
+                encoding = pdpMap.get(pdpID);
+            } catch(Exception e){
+                LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+            }
+            return encoding;
+        }else{
+            return null;
+        }
+    }
 }
 }
index c1d1e9c..f29c8f8 100644 (file)
@@ -7,9 +7,9 @@
  * 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
  * 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
  *      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.
  * 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.
@@ -40,12 +40,31 @@ import com.att.research.xacml.util.XACMLProperties;
 public class PolicyAdapter {
 
        private static final Logger LOGGER      = FlexLogger.getLogger(PolicyAdapter.class);
 public class PolicyAdapter {
 
        private static final Logger LOGGER      = FlexLogger.getLogger(PolicyAdapter.class);
-       
+
        public void configure(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
                if(extendedOptions(policyAdapter, entity)){
                        return;
                }
                String policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf('_'));
        public void configure(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
                if(extendedOptions(policyAdapter, entity)){
                        return;
                }
                String policyNameValue = policyAdapter.getPolicyName().substring(0, policyAdapter.getPolicyName().indexOf('_'));
+               String configPolicyName = getConfigPolicyName(policyAdapter);
+               policyAdapter.setPolicyType(policyNameValue);
+
+               if (configPolicyName != null) {
+                       policyAdapter.setConfigPolicyType(configPolicyName);
+               }
+
+               if("Action".equalsIgnoreCase(policyAdapter.getPolicyType())){
+                       new ActionPolicyController().prePopulateActionPolicyData(policyAdapter, entity);
+               }
+               if("Decision".equalsIgnoreCase(policyAdapter.getPolicyType())){
+                       new DecisionPolicyController().prePopulateDecisionPolicyData(policyAdapter, entity);
+               }
+               if("Config".equalsIgnoreCase(policyAdapter.getPolicyType())){
+                       prePopulatePolicyData(policyAdapter, entity);
+               }
+       }
+
+       private String getConfigPolicyName(PolicyRestAdapter policyAdapter) {
                String  configPolicyName = null ;
                if(policyAdapter.getPolicyName().startsWith("Config_PM")){
                        configPolicyName = "ClosedLoop_PM";
                String  configPolicyName = null ;
                if(policyAdapter.getPolicyName().startsWith("Config_PM")){
                        configPolicyName = "ClosedLoop_PM";
@@ -66,48 +85,37 @@ public class PolicyAdapter {
                }else{
                        configPolicyName = "Base";
                }
                }else{
                        configPolicyName = "Base";
                }
-               if (policyNameValue != null) {
-                       policyAdapter.setPolicyType(policyNameValue);
+               return configPolicyName;
+       }
+
+       private void prePopulatePolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
+               if("Base".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
+                       new CreatePolicyController().prePopulateBaseConfigPolicyData(policyAdapter, entity);
                }
                }
-               if (configPolicyName != null) {
-                       policyAdapter.setConfigPolicyType(configPolicyName);
+               else if("BRMS_Raw".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
+                       new CreateBRMSRawController().prePopulateBRMSRawPolicyData(policyAdapter, entity);
                }
                }
-
-               if("Action".equalsIgnoreCase(policyAdapter.getPolicyType())){
-                       new ActionPolicyController().prePopulateActionPolicyData(policyAdapter, entity);
+               else if("BRMS_Param".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
+                       new CreateBRMSParamController().prePopulateBRMSParamPolicyData(policyAdapter, entity);
                }
                }
-               if("Decision".equalsIgnoreCase(policyAdapter.getPolicyType())){
-                       new DecisionPolicyController().prePopulateDecisionPolicyData(policyAdapter, entity);
+               else if("ClosedLoop_Fault".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
+                       new CreateClosedLoopFaultController().prePopulateClosedLoopFaultPolicyData(policyAdapter, entity);
                }
                }
-               if("Config".equalsIgnoreCase(policyAdapter.getPolicyType())){
-                       if("Base".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
-                               new CreatePolicyController().prePopulateBaseConfigPolicyData(policyAdapter, entity);
-                       }
-                       else if("BRMS_Raw".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
-                               new CreateBRMSRawController().prePopulateBRMSRawPolicyData(policyAdapter, entity);
-                       }
-                       else if("BRMS_Param".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
-                               new CreateBRMSParamController().prePopulateBRMSParamPolicyData(policyAdapter, entity);
-                       }
-                       else if("ClosedLoop_Fault".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
-                               new CreateClosedLoopFaultController().prePopulateClosedLoopFaultPolicyData(policyAdapter, entity);
-                       }
-                       else if("ClosedLoop_PM".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
-                               new CreateClosedLoopPMController().prePopulateClosedLoopPMPolicyData(policyAdapter, entity);
-                       }
-                       else if("Micro Service".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
-                               new CreateDcaeMicroServiceController().prePopulateDCAEMSPolicyData(policyAdapter, entity);
-                       }
-                       else if("Optimization".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
-                               new CreateOptimizationController().prePopulatePolicyData(policyAdapter, entity);
-                       }
-                       else if("Firewall Config".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
-                               new CreateFirewallController().prePopulateFWPolicyData(policyAdapter, entity);
-                       }
+               else if("ClosedLoop_PM".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
+                       new CreateClosedLoopPMController().prePopulateClosedLoopPMPolicyData(policyAdapter, entity);
+               }
+               else if("Micro Service".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
+                       new CreateDcaeMicroServiceController().prePopulateDCAEMSPolicyData(policyAdapter, entity);
+               }
+               else if("Optimization".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
+                       new CreateOptimizationController().prePopulatePolicyData(policyAdapter, entity);
+               }
+               else if("Firewall Config".equalsIgnoreCase(policyAdapter.getConfigPolicyType())){
+                       new CreateFirewallController().prePopulateFWPolicyData(policyAdapter, entity);
                }
        }
                }
        }
-       
-       public boolean extendedOptions(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
+
+       private boolean extendedOptions(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
                return false;
        }
 
                return false;
        }
 
@@ -121,4 +129,4 @@ public class PolicyAdapter {
                return null;
        }
 
                return null;
        }
 
-}
+}
\ No newline at end of file
index b28850d..e99f5cc 100644 (file)
@@ -90,686 +90,703 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 
 @WebServlet(value ="/fm/*",  loadOnStartup = 1, initParams = { @WebInitParam(name = "XACML_PROPERTIES_NAME", value = "xacml.admin.properties", description = "The location of the properties file holding configuration information.") })
 public class PolicyManagerServlet extends HttpServlet {
 
 @WebServlet(value ="/fm/*",  loadOnStartup = 1, initParams = { @WebInitParam(name = "XACML_PROPERTIES_NAME", value = "xacml.admin.properties", description = "The location of the properties file holding configuration information.") })
 public class PolicyManagerServlet extends HttpServlet {
-       private static final Logger LOGGER      = FlexLogger.getLogger(PolicyManagerServlet.class);
-       private static final long serialVersionUID = -8453502699403909016L;
-
-       private enum Mode {
-               LIST, RENAME, COPY, DELETE, EDITFILE, ADDFOLDER, DESCRIBEPOLICYFILE, VIEWPOLICY, ADDSUBSCOPE, SWITCHVERSION, EXPORT, SEARCHLIST
-       }
-
-       private static PolicyController policyController;
-       public synchronized PolicyController getPolicyController() {
-               return policyController;
-       }
-
-       public static synchronized void setPolicyController(PolicyController policyController) {
-               PolicyManagerServlet.policyController = policyController;
-       }
-
-       private static String CONTENTTYPE = "application/json";
-       private static String SUPERADMIN = "super-admin";
-       private static String SUPEREDITOR = "super-editor";
-       private static String SUPERGUEST = "super-guest";
-       private static String ADMIN = "admin";
-       private static String EDITOR = "editor";
-       private static String GUEST = "guest";
-       private static String RESULT = "result";
-
-       private static Path closedLoopJsonLocation;
-       private static JsonArray policyNames;
-       private static String testUserId = null;
-
-       public static JsonArray getPolicyNames() {
-               return policyNames;
-       }
-
-       public static void setPolicyNames(JsonArray policyNames) {
-               PolicyManagerServlet.policyNames = policyNames;
-       }
-
-       private static List<String> serviceTypeNamesList = new ArrayList<>();
-
-       public static List<String> getServiceTypeNamesList() {
-               return serviceTypeNamesList;
-       }
-
-       @Override
-       public void init(ServletConfig servletConfig) throws ServletException {
-               super.init(servletConfig);
-               //
-               // Common initialization
-               //
-               XACMLRest.xacmlInit(servletConfig);
-               //
-               //Initialize ClosedLoop JSON
-               //
-               PolicyManagerServlet.initializeJSONLoad();
-       }
-
-       protected static void initializeJSONLoad() {
-               closedLoopJsonLocation = Paths.get(XACMLProperties
-                               .getProperty(XACMLRestProperties.PROP_ADMIN_CLOSEDLOOP));
-               String location = closedLoopJsonLocation.toString();
-               if (! location.endsWith("json")) {
-                       LOGGER.warn("JSONConfig file does not end with extension .json");
-                       return;
-               }
-               try (FileInputStream inputStream = new FileInputStream(location);
-                       JsonReader jsonReader = Json.createReader(inputStream)) {
-                       policyNames = jsonReader.readArray();
-                       serviceTypeNamesList = new ArrayList<>();
-                       for (int i = 0; i < policyNames.size(); i++) {
-                               javax.json.JsonObject policyName = policyNames.getJsonObject(i);
-                               String name = policyName.getJsonString("serviceTypePolicyName").getString();
-                               serviceTypeNamesList.add(name);
-                       }
-               } catch (IOException e) {
-                       LOGGER.error("Exception Occured while initializing the JSONConfig file"+e);
-               }
-       }
-
-       @Override
-       protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-               LOGGER.debug("doPost");
-               try {
-                       // if request contains multipart-form-data
-                       if (ServletFileUpload.isMultipartContent(request)) {
-                               uploadFile(request, response);
-                       }
-                       // all other post request has json params in body
-                       else {
-                               fileOperation(request, response);
-                       }
-               } catch (Exception e) {
-                       try {
-                               setError(e, response);
-                       }catch(Exception e1){
-                               LOGGER.error("Exception Occured"+e1);
-                       }
-               }
-       }
-
-       //Set Error Message for Exception
-       private void setError(Exception t, HttpServletResponse response) throws IOException {
-               try {
-                       JSONObject responseJsonObject = error(t.getMessage());
-                       response.setContentType(CONTENTTYPE);
-                       PrintWriter out = response.getWriter();
-                       out.print(responseJsonObject);
-                       out.flush();
-               } catch (Exception x) {
-                       LOGGER.error("Exception Occured"+x);
-                       response.sendError(HttpStatus.SC_INTERNAL_SERVER_ERROR, x.getMessage());
-               }
-       }
-
-       //Policy Import Functionality
-       private void uploadFile(HttpServletRequest request, HttpServletResponse response) throws ServletException {
-               try {
-                       String newFile;
-                       Map<String, InputStream> files = new HashMap<>();
-
-                       List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
-                       for (FileItem item : items) {
-                               if (!item.isFormField()) {
-                                       // Process form file field (input type="file").
-                                       files.put(item.getName(), item.getInputStream());
-                                       if(item.getName().endsWith(".xls") && item.getSize() <= PolicyController.getFileSizeLimit()){
-                                               File file = new File(item.getName());
-                                               try (OutputStream outputStream = new FileOutputStream(file);)
-                                               {
-                                                       IOUtils.copy(item.getInputStream(), outputStream);
-                                                       newFile = file.toString();
-                                                       PolicyExportAndImportController importController = new PolicyExportAndImportController();
-                                                       importController.importRepositoryFile(newFile, request);
-                                               }catch(Exception e){
-                                                       LOGGER.error("Upload error : " + e);
-                                               }
-                                       }
-                                       else if (!item.getName().endsWith(".xls")) {
-                                               LOGGER.error("Non .xls filetype uploaded: " + item.getName());
-                                       } 
-                                       else { //uploaded file size is greater than allowed 
-                                               LOGGER.error("Upload file size limit exceeded! File size (Bytes) is: " + item.getSize());
-                                       }
-                               }
-                       }
-
-                       JSONObject responseJsonObject;
-                       responseJsonObject = this.success();
-                       response.setContentType(CONTENTTYPE);
-                       PrintWriter out = response.getWriter();
-                       out.print(responseJsonObject);
-                       out.flush();
-               } catch (Exception e) {
-                       LOGGER.debug("Cannot write file");
-                       throw new ServletException("Cannot write file", e);
-               }
-       }
-
-       //File Operation Functionality
-       private void fileOperation(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-               JSONObject responseJsonObject = null;
-               try {
-                       StringBuilder sb = new StringBuilder();
-                       BufferedReader br = request.getReader();
-                       String str;
-                       while ((str = br.readLine()) != null) {
-                               sb.append(str);
-                       }
-                       br.close();
-                       JSONObject jObj = new JSONObject(sb.toString());
-                       JSONObject params = jObj.getJSONObject("params");
-                       Mode mode = Mode.valueOf(params.getString("mode"));
-                       
-                       String userId = UserUtils.getUserSession(request).getOrgUserId();
-                       LOGGER.info("****************************************Logging UserID while doing actions on Editor tab*******************************************");
-                       LOGGER.info("UserId:  " + userId + "Action Mode:  "+ mode.toString() + "Action Params: "+params.toString());
-                       LOGGER.info("***********************************************************************************************************************************");
-                       
-                       switch (mode) {
-                       case ADDFOLDER:
-                       case ADDSUBSCOPE:
-                               responseJsonObject = addFolder(params, request);
-                               break;
-                       case COPY:
-                               responseJsonObject = copy(params, request);
-                               break;
-                       case DELETE:
-                               responseJsonObject = delete(params, request);
-                               break;
-                       case EDITFILE:
-                       case VIEWPOLICY:
-                               responseJsonObject = editFile(params);
-                               break;
-                       case LIST:
-                               responseJsonObject = list(params, request);
-                               break;
-                       case RENAME:
-                               responseJsonObject = rename(params, request);
-                               break;
-                       case DESCRIBEPOLICYFILE:
-                               responseJsonObject = describePolicy(params);
-                               break;
-                       case SWITCHVERSION:
-                               responseJsonObject = switchVersion(params, request);
-                               break;
-                       case SEARCHLIST:
-                               responseJsonObject = searchPolicyList(params, request);
-                               break;
-                       default:
-                               throw new ServletException("not implemented");
-                       }
-                       if (responseJsonObject == null) {
-                               responseJsonObject = error("generic error : responseJsonObject is null");
-                       }
-               } catch (Exception e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While doing File Operation" + e);
-                       responseJsonObject = error(e.getMessage());
-               }
-               response.setContentType(CONTENTTYPE);
-               PrintWriter out = response.getWriter();
-               out.print(responseJsonObject);
-               out.flush();
-       }
-
-       private JSONObject searchPolicyList(JSONObject params, HttpServletRequest request) {
-               Set<String> scopes;
-               List<String> roles;
-               List<Object> policyData = new ArrayList<>();
-               JSONArray policyList = null;
-               if(params.has("policyList")){
-                       policyList = (JSONArray) params.get("policyList");
-               }
-               PolicyController controller = getPolicyControllerInstance();
-               List<JSONObject> resultList = new ArrayList<>();
-               try {
-                       //Get the Login Id of the User from Request
-                       String userId =  UserUtils.getUserSession(request).getOrgUserId();
-                       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;
-                       if (roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST) ) {
-                               if(scopes.isEmpty()){
-                                       return error("No Scopes has been Assigned to the User. Please, Contact Super-Admin");
-                               }
-                               Set<String> tempScopes = scopes;
-                               for(String scope : tempScopes){
-                                       List<Object> scopesList = queryPolicyEditorScopes(scope);
-                                       if(!scopesList.isEmpty()){
-                                               for(int i = 0; i < scopesList.size(); i++){
-                                                       PolicyEditorScopes tempScope = (PolicyEditorScopes) scopesList.get(i);
-                                                       scopes.add(tempScope.getScopeName());
-                                               }
-                                       }
-                               }
-                       }
-                       if(policyList!= null){
-                               for(int i = 0; i < policyList.length(); i++){
-                                       String policyName = policyList.get(i).toString().replace(".xml", "");
-                                       String version = policyName.substring(policyName.lastIndexOf('.')+1);
-                                       policyName = policyName.substring(0, policyName.lastIndexOf('.')).replace(".", File.separator);
-                                       if(policyName.contains("\\")){
-                                               policyName = policyName.replace("\\", "\\\\");
-                                       }
-                                       String policyVersionQuery = "From PolicyVersion where policy_name = :policyName  and active_version = :version and id >0";
-                                       SimpleBindings pvParams = new SimpleBindings();
-                                       pvParams.put("policyName", policyName);
-                                       pvParams.put("version", version);
-                                       List<Object> activeData = controller.getDataByQuery(policyVersionQuery, pvParams);
-                                       if(!activeData.isEmpty()){
-                                               PolicyVersion policy = (PolicyVersion) activeData.get(0);
-                                               JSONObject el = new JSONObject();
-                                               el.put("name", policy.getPolicyName().replace(File.separator, "/"));
-                                               el.put("date", policy.getModifiedDate());
-                                               el.put("version", policy.getActiveVersion());
-                                               el.put("size", "");
-                                               el.put("type", "file");
-                                               el.put("createdBy", getUserName(policy.getCreatedBy()));
-                                               el.put("modifiedBy", getUserName(policy.getModifiedBy()));
-                                               resultList.add(el);
-                                       }
-                               }
-                       }else{
-                               if (roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR)   || roles.contains(SUPERGUEST) ){
-                                       policyData = controller.getData(PolicyVersion.class);
-                               }else{
-                                       List<Object> filterdatas = controller.getData(PolicyVersion.class);
-                                       for(Object filter : filterdatas){
-                                               PolicyVersion filterdata = (PolicyVersion) filter;
-                                               try{
-                                                       String scopeName = filterdata.getPolicyName().substring(0, filterdata.getPolicyName().lastIndexOf(File.separator));
-                                                       if(scopes.contains(scopeName)){
-                                                               policyData.add(filterdata);
-                                                       }
-                                               }catch(Exception e){
-                                                       LOGGER.error("Exception occured while filtering policyversion data"+e);
-                                               }
-                                       }
-                               }
-
-                               if(!policyData.isEmpty()){
-                                       for(int i =0; i < policyData.size(); i++){
-                                               PolicyVersion policy = (PolicyVersion) policyData.get(i);
-                                               JSONObject el = new JSONObject();
-                                               el.put("name", policy.getPolicyName().replace(File.separator, "/"));
-                                               el.put("date", policy.getModifiedDate());
-                                               el.put("version", policy.getActiveVersion());
-                                               el.put("size", "");
-                                               el.put("type", "file");
-                                               el.put("createdBy", getUserName(policy.getCreatedBy()));
-                                               el.put("modifiedBy", getUserName(policy.getModifiedBy()));
-                                               resultList.add(el);
-                                       }
-                               }
-                       }
-               }catch(Exception e){
-                       LOGGER.error("Exception occured while reading policy Data from Policy Version table for Policy Search Data"+e);
-               }
-
-               return new JSONObject().put(RESULT, resultList);
-       }
-
-       //Switch Version Functionality
-       private JSONObject switchVersion(JSONObject params, HttpServletRequest request) throws ServletException{
-               String path = params.getString("path");
-               String userId = null;
-               try {
-                       userId = UserUtils.getUserSession(request).getOrgUserId();
-               } catch (Exception e) {
-                       LOGGER.error("Exception Occured while reading userid from cookie" +e);
-               }
-               String policyName;
-               String removeExtension = path.replace(".xml", "");
-               if(path.startsWith("/")){
-                       policyName = removeExtension.substring(1, removeExtension.lastIndexOf('.'));
-               }else{
-                       policyName = removeExtension.substring(0, removeExtension.lastIndexOf('.'));
-               }
-
-               String activePolicy;
-               PolicyController controller = getPolicyControllerInstance();
-               if(! params.toString().contains("activeVersion")){
-                       return controller.switchVersionPolicyContent(policyName);
-               }
-               String activeVersion = params.getString("activeVersion");
-               String highestVersion = params.get("highestVersion").toString();
-               if(Integer.parseInt(activeVersion) > Integer.parseInt(highestVersion)){
-                       return error("The Version shouldn't be greater than Highest Value");
-               }
-               activePolicy = policyName + "." + activeVersion + ".xml";
-               String dbCheckName = activePolicy.replace("/", ".");
-               if(dbCheckName.contains("Config_")){
-                       dbCheckName = dbCheckName.replace(".Config_", ":Config_");
-               }else if(dbCheckName.contains("Action_")){
-                       dbCheckName = dbCheckName.replace(".Action_", ":Action_");
-               }else if(dbCheckName.contains("Decision_")){
-                       dbCheckName = dbCheckName.replace(".Decision_", ":Decision_");
-               }
-               String[] splitDBCheckName = dbCheckName.split(":");
-               String peQuery =   "FROM PolicyEntity where policyName = :splitDBCheckName_1 and scope = :splitDBCheckName_0";
-               SimpleBindings policyParams = new SimpleBindings();
-               policyParams.put("splitDBCheckName_1", splitDBCheckName[1]);
-               policyParams.put("splitDBCheckName_0", splitDBCheckName[0]);
-               List<Object> policyEntity = controller.getDataByQuery(peQuery, policyParams);
-               PolicyEntity pentity = (PolicyEntity) policyEntity.get(0);
-               if(pentity.isDeleted()){
-                       return error("The Policy is Not Existing in Workspace");
-               }
-               if(policyName.contains("/")){
-                       policyName = policyName.replace("/", File.separator);
-               }
-               policyName = policyName.substring(policyName.indexOf(File.separator)+1);
-               if(policyName.contains("\\")){
-                       policyName = policyName.replace(File.separator, "\\");
-               }
-               policyName = splitDBCheckName[0].replace(".", File.separator)+File.separator+policyName;
-               String watchPolicyName = policyName;
-               if(policyName.contains("/")){
-                       policyName = policyName.replace("/", File.separator);
-               }
-               if(policyName.contains("\\")){
-                       policyName = policyName.replace("\\", "\\\\");
-               }
-               String query = "update PolicyVersion set active_version='"+activeVersion+"' where policy_name ='"+policyName+"'  and id >0";
-               //query the database
-               controller.executeQuery(query);
-               //Policy Notification
-               PolicyVersion entity = new PolicyVersion();
-               entity.setPolicyName(watchPolicyName);
-               entity.setActiveVersion(Integer.parseInt(activeVersion));
-               entity.setModifiedBy(userId);
-               controller.watchPolicyFunction(entity, activePolicy, "SwitchVersion");
-               return success();
-       }
-
-       //Describe Policy
-       private JSONObject describePolicy(JSONObject params) throws ServletException{
-               JSONObject object = null;
-               String path = params.getString("path");
-               String policyName = null;
-               if(path.startsWith("/")){
-                       path = path.substring(1);
-                       policyName = path.substring(path.lastIndexOf('/') +1);
-                       path = path.replace("/", ".");
-               }else{
-                       path = path.replace("/", ".");
-                       policyName = path;
-               }
-               if(path.contains("Config_")){
-                       path = path.replace(".Config_", ":Config_");
-               }else if(path.contains("Action_")){
-                       path = path.replace(".Action_", ":Action_");
-               }else if(path.contains("Decision_")){
-                       path = path.replace(".Decision_", ":Decision_");
-               }
-               PolicyController controller = getPolicyControllerInstance();
-               String[] split = path.split(":");
-               String query = "FROM PolicyEntity where policyName = :split_1 and scope = :split_0";
-               SimpleBindings peParams = new SimpleBindings();
-               peParams.put("split_1", split[1]);
-               peParams.put("split_0", split[0]);
-               List<Object> queryData = null;
-               if(PolicyController.isjUnit()){
-                       queryData = controller.getDataByQuery(query, null);
-               }else{
-                       queryData = controller.getDataByQuery(query, peParams);
-               }
-               if(queryData.isEmpty()){
-                       return error("Error Occured while Describing the Policy - query is empty");
-               }
-               PolicyEntity entity = (PolicyEntity) queryData.get(0);
-               File temp = null;
-               try {
-                       temp = File.createTempFile(policyName, ".tmp");
-               } catch (IOException e) {
-                       String message = "Failed to create temp file " + policyName + ".tmp";
-                       LOGGER.error(message + e);
-                       return error(message);
-               }
-               try (BufferedWriter bw = new BufferedWriter(new FileWriter(temp))) {
-                       bw.write(entity.getPolicyData());
-               } catch (IOException e) {
-                       LOGGER.error("Exception Occured while Describing the Policy"+e);
-               }
-               object = HumanPolicyComponent.DescribePolicy(temp);
-               if(temp != null){
-                       try {
-                               Files.delete(temp.toPath());
-                       } catch (IOException e) {
-                               LOGGER.warn("Failed to delete " + temp.getName() + e);
-                       }
-               }
-               return object;
-       }
-
-       //Get the List of Policies and Scopes for Showing in Editor tab
-       private JSONObject list(JSONObject params, HttpServletRequest request) throws ServletException {
-               Set<String> scopes = null;
-               List<String> roles = null;
-               try {
-                       PolicyController controller = getPolicyControllerInstance();
-                       //Get the Login Id of the User from Request
-                       String testUserID = getTestUserId();
-                       String userId =  testUserID != null ? testUserID : UserUtils.getUserSession(request).getOrgUserId();
-                       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<JSONObject> resultList = new ArrayList<>();
-                       boolean onlyFolders = params.getBoolean("onlyFolders");
-                       String path = params.getString("path");
-                       if(path.contains("..xml")){
-                               path = path.replaceAll("..xml", "").trim();
-                       }
-
-                       if (roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST) ) {
-                               if(scopes.isEmpty()){
-                                       return error("No Scopes has been Assigned to the User. Please, Contact Super-Admin");
-                               }else{
-                                       if(!"/".equals(path)){
-                                               String tempScope = path.substring(1, path.length());
-                                               tempScope = tempScope.replace("/", File.separator);
-                                               scopes.add(tempScope);
-                                       }
-                               }
-                       }
-
-                       if("/".equals(path)){
-                               if(roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST)){
-                                       List<Object> scopesList = queryPolicyEditorScopes(null);
-                                       for(Object list : scopesList){
-                                               PolicyEditorScopes scope = (PolicyEditorScopes) list;
-                                               if(!(scope.getScopeName().contains(File.separator))){
-                                                       JSONObject el = new JSONObject();
-                                                       el.put("name", scope.getScopeName());
-                                                       el.put("date", scope.getModifiedDate());
-                                                       el.put("size", "");
-                                                       el.put("type", "dir");
-                                                       el.put("createdBy", scope.getUserCreatedBy().getUserName());
-                                                       el.put("modifiedBy", scope.getUserModifiedBy().getUserName());
-                                                       resultList.add(el);
-                                               }
-                                       }
-                               }else if(roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST)){
-                                       for(Object scope : scopes){
-                                               JSONObject el = new JSONObject();
-                                               List<Object> scopesList = queryPolicyEditorScopes(scope.toString());
-                                               if(!scopesList.isEmpty()){
-                                                       PolicyEditorScopes scopeById = (PolicyEditorScopes) scopesList.get(0);
-                                                       el.put("name", scopeById.getScopeName());
-                                                       el.put("date", scopeById.getModifiedDate());
-                                                       el.put("size", "");
-                                                       el.put("type", "dir");
-                                                       el.put("createdBy", scopeById.getUserCreatedBy().getUserName());
-                                                       el.put("modifiedBy", scopeById.getUserModifiedBy().getUserName());
-                                                       resultList.add(el);
-                                               }
-                                       }
-                               }
-                       }else{
-                               try{
-                                       String scopeName = path.substring(path.indexOf('/') +1);
-                                       activePolicyList(scopeName, resultList, roles, scopes, onlyFolders);
-                               } catch (Exception ex) {
-                                       LOGGER.error("Error Occured While reading Policy Files List"+ex );
-                               }
-                       }
-
-                       return new JSONObject().put(RESULT, resultList);
-               } catch (Exception e) {
-                       LOGGER.error("list", e);
-                       return error(e.getMessage());
-               }
-       }
-
-       private List<Object> queryPolicyEditorScopes(String scopeName){
-               String scopeNamequery;
-               SimpleBindings params = new SimpleBindings();
-               if(scopeName == null){
-                       scopeNamequery = "from PolicyEditorScopes";
-               }else{
-                       scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName";
-                       params.put("scopeName", scopeName + "%");
-               }
-               PolicyController controller = getPolicyControllerInstance();
-               List<Object> scopesList;
-               if(PolicyController.isjUnit()){
-                       scopesList = controller.getDataByQuery(scopeNamequery, null);
-               }else{
-                       scopesList = controller.getDataByQuery(scopeNamequery, params);
-               }
-               return  scopesList;
-       }
-
-       //Get Active Policy List based on Scope Selection form Policy Version table
-       private void activePolicyList(String inScopeName, List<JSONObject> resultList, List<String> roles, Set<String> scopes, boolean onlyFolders){
-               PolicyController controller = getPolicyControllerInstance();
-               String scopeName = inScopeName;
-               if(scopeName.contains("/")){
-                       scopeName = scopeName.replace("/", File.separator);
-               }
-               if(scopeName.contains("\\")){
-                       scopeName = scopeName.replace("\\", "\\\\");
-               }
-               String query = "from PolicyVersion where POLICY_NAME like :scopeName";
-               String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName";
-
-               SimpleBindings params = new SimpleBindings();
-               params.put("scopeName", scopeName + "%");
-
-               List<Object> activePolicies;
-               List<Object> scopesList;
-               if(PolicyController.isjUnit()){
-                       activePolicies = controller.getDataByQuery(query, null);
-                       scopesList = controller.getDataByQuery(scopeNamequery, null);
-               }else{
-                       activePolicies = controller.getDataByQuery(query, params);
-                       scopesList = controller.getDataByQuery(scopeNamequery, params);
-               }
-               for(Object list : scopesList){
-                       PolicyEditorScopes scopeById = (PolicyEditorScopes) list;
-                       String scope = scopeById.getScopeName();
-                       if(scope.contains(File.separator)){
-                               String checkScope = scope.substring(0, scope.lastIndexOf(File.separator));
-                               if(scopeName.contains("\\\\")){
-                                       scopeName = scopeName.replace("\\\\", File.separator);
-                               }
-                               if(scope.contains(File.separator)){
-                                       scope = scope.substring(checkScope.length()+1);
-                                       if(scope.contains(File.separator)){
-                                               scope = scope.substring(0, scope.indexOf(File.separator));
-                                       }
-                               }
-                               if(scopeName.equalsIgnoreCase(checkScope)){
-                                       JSONObject el = new JSONObject();
-                                       el.put("name", scope);
-                                       el.put("date", scopeById.getModifiedDate());
-                                       el.put("size", "");
-                                       el.put("type", "dir");
-                                       el.put("createdBy", scopeById.getUserCreatedBy().getUserName());
-                                       el.put("modifiedBy", scopeById.getUserModifiedBy().getUserName());
-                                       resultList.add(el);
-                               }
-                       }
-               }
-               String scopeNameCheck;
-               for (Object list : activePolicies) {
-                       PolicyVersion policy = (PolicyVersion) list;
-                       String scopeNameValue = policy.getPolicyName().substring(0, policy.getPolicyName().lastIndexOf(File.separator));
-                       if(roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST)){
-                               if(scopeName.contains("\\\\")){
-                                       scopeNameCheck = scopeName.replace("\\\\", File.separator);
-                               }else{
-                                       scopeNameCheck = scopeName;
-                               }
-                               if(scopeNameValue.equals(scopeNameCheck)){
-                                       JSONObject el = new JSONObject();
-                                       el.put("name", policy.getPolicyName().substring(policy.getPolicyName().lastIndexOf(File.separator)+1));
-                                       el.put("date", policy.getModifiedDate());
-                                       el.put("version", policy.getActiveVersion());
-                                       el.put("size", "");
-                                       el.put("type", "file");
-                                       el.put("createdBy", getUserName(policy.getCreatedBy()));
-                                       el.put("modifiedBy", getUserName(policy.getModifiedBy()));
-                                       resultList.add(el);
-                               }
-                       }else if(!scopes.isEmpty() && scopes.contains(scopeNameValue)){
-                                       JSONObject el = new JSONObject();
-                                       el.put("name", policy.getPolicyName().substring(policy.getPolicyName().lastIndexOf(File.separator)+1));
-                                       el.put("date", policy.getModifiedDate());
-                                       el.put("version", policy.getActiveVersion());
-                                       el.put("size", "");
-                                       el.put("type", "file");
-                                       el.put("createdBy", getUserName(policy.getCreatedBy()));
-                                       el.put("modifiedBy", getUserName(policy.getModifiedBy()));
-                                       resultList.add(el);
-                       }
-               }
-       }
-
-       private String getUserName(String loginId){
-               PolicyController controller = getPolicyControllerInstance();
-               UserInfo userInfo = (UserInfo) controller.getEntityItem(UserInfo.class, "userLoginId", loginId);
-               if(userInfo == null){
-                       return SUPERADMIN;
-               }
-               return userInfo.getUserName();
-       }
-
-       //Rename Policy
-       private JSONObject rename(JSONObject params, HttpServletRequest request) throws ServletException {
-               try {
-                       boolean isActive = false;
-                       List<String> policyActiveInPDP = new ArrayList<>();
-                       Set<String>  scopeOfPolicyActiveInPDP = new HashSet<>();
-                       String userId = UserUtils.getUserSession(request).getOrgUserId();
-                       String oldPath = params.getString("path");
-                       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;
-                               }
-                       }else{
-                               String scopeName = oldPath;
-                               String newScopeName = newPath;
-                               if(scopeName.contains("/")){
-                                       scopeName = scopeName.replace("/", File.separator);
-                                       newScopeName = newScopeName.replace("/", File.separator);
-                               }
-                               checkValidation = newScopeName.substring(newScopeName.lastIndexOf(File.separator)+1);
+    private static final Logger LOGGER = FlexLogger.getLogger(PolicyManagerServlet.class);
+    private static final long serialVersionUID = -8453502699403909016L;
+
+    private enum Mode {
+        LIST, RENAME, COPY, DELETE, EDITFILE, ADDFOLDER, DESCRIBEPOLICYFILE, VIEWPOLICY, ADDSUBSCOPE, SWITCHVERSION, EXPORT, SEARCHLIST
+    }
+
+    private static PolicyController policyController;
+    public synchronized PolicyController getPolicyController() {
+        return policyController;
+    }
+
+    public static synchronized void setPolicyController(PolicyController policyController) {
+        PolicyManagerServlet.policyController = policyController;
+    }
+
+    private static String CONTENTTYPE = "application/json";
+    private static String SUPERADMIN = "super-admin";
+    private static String SUPEREDITOR = "super-editor";
+    private static String SUPERGUEST = "super-guest";
+    private static String ADMIN = "admin";
+    private static String EDITOR = "editor";
+    private static String GUEST = "guest";
+    private static String RESULT = "result";
+
+    private static Path closedLoopJsonLocation;
+    private static JsonArray policyNames;
+    private static String testUserId = null;
+
+    public static JsonArray getPolicyNames() {
+        return policyNames;
+    }
+
+    public static void setPolicyNames(JsonArray policyNames) {
+        PolicyManagerServlet.policyNames = policyNames;
+    }
+
+    private static List<String> serviceTypeNamesList = new ArrayList<>();
+
+    public static List<String> getServiceTypeNamesList() {
+        return serviceTypeNamesList;
+    }
+
+    @Override
+    public void init(ServletConfig servletConfig) throws ServletException {
+        super.init(servletConfig);
+        //
+        // Common initialization
+        //
+        XACMLRest.xacmlInit(servletConfig);
+        //
+        //Initialize ClosedLoop JSON
+        //
+        PolicyManagerServlet.initializeJSONLoad();
+    }
+
+    protected static void initializeJSONLoad() {
+        closedLoopJsonLocation = Paths.get(XACMLProperties
+                .getProperty(XACMLRestProperties.PROP_ADMIN_CLOSEDLOOP));
+        String location = closedLoopJsonLocation.toString();
+        if (! location.endsWith("json")) {
+            LOGGER.warn("JSONConfig file does not end with extension .json");
+            return;
+        }
+        try (FileInputStream inputStream = new FileInputStream(location);
+             JsonReader jsonReader = Json.createReader(inputStream)) {
+            policyNames = jsonReader.readArray();
+            serviceTypeNamesList = new ArrayList<>();
+            for (int i = 0; i < policyNames.size(); i++) {
+                javax.json.JsonObject policyName = policyNames.getJsonObject(i);
+                String name = policyName.getJsonString("serviceTypePolicyName").getString();
+                serviceTypeNamesList.add(name);
+            }
+        } catch (IOException e) {
+            LOGGER.error("Exception Occured while initializing the JSONConfig file"+e);
+        }
+    }
+
+    @Override
+    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        LOGGER.debug("doPost");
+        try {
+            // if request contains multipart-form-data
+            if (ServletFileUpload.isMultipartContent(request)) {
+                uploadFile(request, response);
+            }
+            // all other post request has json params in body
+            else {
+                fileOperation(request, response);
+            }
+        } catch (Exception e) {
+            try {
+                setError(e, response);
+            }catch(Exception e1){
+                LOGGER.error("Exception Occured"+e1);
+            }
+        }
+    }
+
+    //Set Error Message for Exception
+    private void setError(Exception t, HttpServletResponse response) throws IOException {
+        try {
+            JSONObject responseJsonObject = error(t.getMessage());
+            response.setContentType(CONTENTTYPE);
+            PrintWriter out = response.getWriter();
+            out.print(responseJsonObject);
+            out.flush();
+        } catch (Exception x) {
+            LOGGER.error("Exception Occured"+x);
+            response.sendError(HttpStatus.SC_INTERNAL_SERVER_ERROR, x.getMessage());
+        }
+    }
+
+    //Policy Import Functionality
+    private void uploadFile(HttpServletRequest request, HttpServletResponse response) throws ServletException {
+        try {
+            String newFile;
+            Map<String, InputStream> files = new HashMap<>();
+
+            List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
+            for (FileItem item : items) {
+                if (!item.isFormField()) {
+                    // Process form file field (input type="file").
+                    files.put(item.getName(), item.getInputStream());
+                    processFormFile(request, item);
+                }
+            }
+
+            JSONObject responseJsonObject;
+            responseJsonObject = this.success();
+            response.setContentType(CONTENTTYPE);
+            PrintWriter out = response.getWriter();
+            out.print(responseJsonObject);
+            out.flush();
+        } catch (Exception e) {
+            LOGGER.debug("Cannot write file");
+            throw new ServletException("Cannot write file", e);
+        }
+    }
+
+    private void processFormFile(HttpServletRequest request, FileItem item) {
+        String newFile;
+        if(item.getName().endsWith(".xls") && item.getSize() <= PolicyController.getFileSizeLimit()){
+            File file = new File(item.getName());
+            try (OutputStream outputStream = new FileOutputStream(file);)
+            {
+                IOUtils.copy(item.getInputStream(), outputStream);
+                newFile = file.toString();
+                PolicyExportAndImportController importController = new PolicyExportAndImportController();
+                importController.importRepositoryFile(newFile, request);
+            }catch(Exception e){
+                LOGGER.error("Upload error : " + e);
+            }
+        }
+        else if (!item.getName().endsWith(".xls")) {
+            LOGGER.error("Non .xls filetype uploaded: " + item.getName());
+        }
+        else { //uploaded file size is greater than allowed
+            LOGGER.error("Upload file size limit exceeded! File size (Bytes) is: " + item.getSize());
+        }
+    }
+
+    //File Operation Functionality
+    private void fileOperation(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+        JSONObject responseJsonObject = null;
+        try {
+            StringBuilder sb = new StringBuilder();
+            BufferedReader br = request.getReader();
+            String str;
+            while ((str = br.readLine()) != null) {
+                sb.append(str);
+            }
+            br.close();
+            JSONObject jObj = new JSONObject(sb.toString());
+            JSONObject params = jObj.getJSONObject("params");
+            Mode mode = Mode.valueOf(params.getString("mode"));
+
+            String userId = UserUtils.getUserSession(request).getOrgUserId();
+            LOGGER.info("****************************************Logging UserID while doing actions on Editor tab*******************************************");
+            LOGGER.info("UserId:  " + userId + "Action Mode:  "+ mode.toString() + "Action Params: "+params.toString());
+            LOGGER.info("***********************************************************************************************************************************");
+
+            switch (mode) {
+                case ADDFOLDER:
+                case ADDSUBSCOPE:
+                    responseJsonObject = addFolder(params, request);
+                    break;
+                case COPY:
+                    responseJsonObject = copy(params, request);
+                    break;
+                case DELETE:
+                    responseJsonObject = delete(params, request);
+                    break;
+                case EDITFILE:
+                case VIEWPOLICY:
+                    responseJsonObject = editFile(params);
+                    break;
+                case LIST:
+                    responseJsonObject = list(params, request);
+                    break;
+                case RENAME:
+                    responseJsonObject = rename(params, request);
+                    break;
+                case DESCRIBEPOLICYFILE:
+                    responseJsonObject = describePolicy(params);
+                    break;
+                case SWITCHVERSION:
+                    responseJsonObject = switchVersion(params, request);
+                    break;
+                case SEARCHLIST:
+                    responseJsonObject = searchPolicyList(params, request);
+                    break;
+                default:
+                    throw new ServletException("not implemented");
+            }
+            if (responseJsonObject == null) {
+                responseJsonObject = error("generic error : responseJsonObject is null");
+            }
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While doing File Operation" + e);
+            responseJsonObject = error(e.getMessage());
+        }
+        response.setContentType(CONTENTTYPE);
+        PrintWriter out = response.getWriter();
+        out.print(responseJsonObject);
+        out.flush();
+    }
+
+    private JSONObject searchPolicyList(JSONObject params, HttpServletRequest request) {
+        Set<String> scopes;
+        List<String> roles;
+        List<Object> policyData = new ArrayList<>();
+        JSONArray policyList = null;
+        if(params.has("policyList")){
+            policyList = (JSONArray) params.get("policyList");
+        }
+        PolicyController controller = getPolicyControllerInstance();
+        List<JSONObject> resultList = new ArrayList<>();
+        try {
+            //Get the Login Id of the User from Request
+            String userId =  UserUtils.getUserSession(request).getOrgUserId();
+            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;
+            if (roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST) ) {
+                if(scopes.isEmpty()){
+                    return error("No Scopes has been Assigned to the User. Please, Contact Super-Admin");
+                }
+                Set<String> tempScopes = scopes;
+                for(String scope : tempScopes){
+                    addScope(scopes, scope);
+                }
+            }
+            if(policyList!= null){
+                for(int i = 0; i < policyList.length(); i++){
+                    String policyName = policyList.get(i).toString().replace(".xml", "");
+                    String version = policyName.substring(policyName.lastIndexOf('.')+1);
+                    policyName = policyName.substring(0, policyName.lastIndexOf('.')).replace(".", File.separator);
+                    parsePolicyList(resultList, controller, policyName, version);
+                }
+            }else{
+                if (roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR)   || roles.contains(SUPERGUEST) ){
+                    policyData = controller.getData(PolicyVersion.class);
+                }else{
+                    List<Object> filterdatas = controller.getData(PolicyVersion.class);
+                    for(Object filter : filterdatas){
+                        PolicyVersion filterdata = (PolicyVersion) filter;
+                        try{
+                            String scopeName = filterdata.getPolicyName().substring(0, filterdata.getPolicyName().lastIndexOf(File.separator));
+                            if(scopes.contains(scopeName)){
+                                policyData.add(filterdata);
+                            }
+                        }catch(Exception e){
+                            LOGGER.error("Exception occured while filtering policyversion data"+e);
+                        }
+                    }
+                }
+
+                if(!policyData.isEmpty()){
+                    updateResultList(policyData, resultList);
+                }
+            }
+        }catch(Exception e){
+            LOGGER.error("Exception occured while reading policy Data from Policy Version table for Policy Search Data"+e);
+        }
+
+        return new JSONObject().put(RESULT, resultList);
+    }
+
+    private void updateResultList(List<Object> policyData, List<JSONObject> resultList) {
+        for(int i =0; i < policyData.size(); i++){
+            PolicyVersion policy = (PolicyVersion) policyData.get(i);
+            JSONObject el = new JSONObject();
+            el.put("name", policy.getPolicyName().replace(File.separator, "/"));
+            el.put("date", policy.getModifiedDate());
+            el.put("version", policy.getActiveVersion());
+            el.put("size", "");
+            el.put("type", "file");
+            el.put("createdBy", getUserName(policy.getCreatedBy()));
+            el.put("modifiedBy", getUserName(policy.getModifiedBy()));
+            resultList.add(el);
+        }
+    }
+
+    private void parsePolicyList(List<JSONObject> resultList, PolicyController controller, String policyName, String version) {
+        if(policyName.contains("\\")){
+            policyName = policyName.replace("\\", "\\\\");
+        }
+        String policyVersionQuery = "From PolicyVersion where policy_name = :policyName  and active_version = :version and id >0";
+        SimpleBindings pvParams = new SimpleBindings();
+        pvParams.put("policyName", policyName);
+        pvParams.put("version", version);
+        List<Object> activeData = controller.getDataByQuery(policyVersionQuery, pvParams);
+        if(!activeData.isEmpty()){
+            PolicyVersion policy = (PolicyVersion) activeData.get(0);
+            JSONObject el = new JSONObject();
+            el.put("name", policy.getPolicyName().replace(File.separator, "/"));
+            el.put("date", policy.getModifiedDate());
+            el.put("version", policy.getActiveVersion());
+            el.put("size", "");
+            el.put("type", "file");
+            el.put("createdBy", getUserName(policy.getCreatedBy()));
+            el.put("modifiedBy", getUserName(policy.getModifiedBy()));
+            resultList.add(el);
+        }
+    }
+
+    private void addScope(Set<String> scopes, String scope) {
+        List<Object> scopesList = queryPolicyEditorScopes(scope);
+        if(!scopesList.isEmpty()){
+            for(int i = 0; i < scopesList.size(); i++){
+                PolicyEditorScopes tempScope = (PolicyEditorScopes) scopesList.get(i);
+                scopes.add(tempScope.getScopeName());
+            }
+        }
+    }
+
+    //Switch Version Functionality
+    private JSONObject switchVersion(JSONObject params, HttpServletRequest request) throws ServletException{
+        String path = params.getString("path");
+        String userId = null;
+        try {
+            userId = UserUtils.getUserSession(request).getOrgUserId();
+        } catch (Exception e) {
+            LOGGER.error("Exception Occured while reading userid from cookie" +e);
+        }
+        String policyName;
+        String removeExtension = path.replace(".xml", "");
+        if(path.startsWith("/")){
+            policyName = removeExtension.substring(1, removeExtension.lastIndexOf('.'));
+        }else{
+            policyName = removeExtension.substring(0, removeExtension.lastIndexOf('.'));
+        }
+
+        String activePolicy;
+        PolicyController controller = getPolicyControllerInstance();
+        if(! params.toString().contains("activeVersion")){
+            return controller.switchVersionPolicyContent(policyName);
+        }
+        String activeVersion = params.getString("activeVersion");
+        String highestVersion = params.get("highestVersion").toString();
+        if(Integer.parseInt(activeVersion) > Integer.parseInt(highestVersion)){
+            return error("The Version shouldn't be greater than Highest Value");
+        }
+        activePolicy = policyName + "." + activeVersion + ".xml";
+        String dbCheckName = activePolicy.replace("/", ".");
+        if(dbCheckName.contains("Config_")){
+            dbCheckName = dbCheckName.replace(".Config_", ":Config_");
+        }else if(dbCheckName.contains("Action_")){
+            dbCheckName = dbCheckName.replace(".Action_", ":Action_");
+        }else if(dbCheckName.contains("Decision_")){
+            dbCheckName = dbCheckName.replace(".Decision_", ":Decision_");
+        }
+        String[] splitDBCheckName = dbCheckName.split(":");
+        String peQuery =   "FROM PolicyEntity where policyName = :splitDBCheckName_1 and scope = :splitDBCheckName_0";
+        SimpleBindings policyParams = new SimpleBindings();
+        policyParams.put("splitDBCheckName_1", splitDBCheckName[1]);
+        policyParams.put("splitDBCheckName_0", splitDBCheckName[0]);
+        List<Object> policyEntity = controller.getDataByQuery(peQuery, policyParams);
+        PolicyEntity pentity = (PolicyEntity) policyEntity.get(0);
+        if(pentity.isDeleted()){
+            return error("The Policy is Not Existing in Workspace");
+        }
+        if(policyName.contains("/")){
+            policyName = policyName.replace("/", File.separator);
+        }
+        policyName = policyName.substring(policyName.indexOf(File.separator)+1);
+        if(policyName.contains("\\")){
+            policyName = policyName.replace(File.separator, "\\");
+        }
+        policyName = splitDBCheckName[0].replace(".", File.separator)+File.separator+policyName;
+        String watchPolicyName = policyName;
+        if(policyName.contains("/")){
+            policyName = policyName.replace("/", File.separator);
+        }
+        if(policyName.contains("\\")){
+            policyName = policyName.replace("\\", "\\\\");
+        }
+        String query = "update PolicyVersion set active_version='"+activeVersion+"' where policy_name ='"+policyName+"'  and id >0";
+        //query the database
+        controller.executeQuery(query);
+        //Policy Notification
+        PolicyVersion entity = new PolicyVersion();
+        entity.setPolicyName(watchPolicyName);
+        entity.setActiveVersion(Integer.parseInt(activeVersion));
+        entity.setModifiedBy(userId);
+        controller.watchPolicyFunction(entity, activePolicy, "SwitchVersion");
+        return success();
+    }
+
+    //Describe Policy
+    private JSONObject describePolicy(JSONObject params) throws ServletException{
+        JSONObject object = null;
+        String path = params.getString("path");
+        String policyName = null;
+        if(path.startsWith("/")){
+            path = path.substring(1);
+            policyName = path.substring(path.lastIndexOf('/') +1);
+            path = path.replace("/", ".");
+        }else{
+            path = path.replace("/", ".");
+            policyName = path;
+        }
+        if(path.contains("Config_")){
+            path = path.replace(".Config_", ":Config_");
+        }else if(path.contains("Action_")){
+            path = path.replace(".Action_", ":Action_");
+        }else if(path.contains("Decision_")){
+            path = path.replace(".Decision_", ":Decision_");
+        }
+        PolicyController controller = getPolicyControllerInstance();
+        String[] split = path.split(":");
+        String query = "FROM PolicyEntity where policyName = :split_1 and scope = :split_0";
+        SimpleBindings peParams = new SimpleBindings();
+        peParams.put("split_1", split[1]);
+        peParams.put("split_0", split[0]);
+        List<Object> queryData = null;
+        if(PolicyController.isjUnit()){
+            queryData = controller.getDataByQuery(query, null);
+        }else{
+            queryData = controller.getDataByQuery(query, peParams);
+        }
+        if(queryData.isEmpty()){
+            return error("Error Occured while Describing the Policy - query is empty");
+        }
+        PolicyEntity entity = (PolicyEntity) queryData.get(0);
+        File temp = null;
+        try {
+            temp = File.createTempFile(policyName, ".tmp");
+        } catch (IOException e) {
+            String message = "Failed to create temp file " + policyName + ".tmp";
+            LOGGER.error(message + e);
+            return error(message);
+        }
+        try (BufferedWriter bw = new BufferedWriter(new FileWriter(temp))) {
+            bw.write(entity.getPolicyData());
+        } catch (IOException e) {
+            LOGGER.error("Exception Occured while Describing the Policy"+e);
+        }
+        object = HumanPolicyComponent.DescribePolicy(temp);
+        if(temp != null){
+            try {
+                Files.delete(temp.toPath());
+            } catch (IOException e) {
+                LOGGER.warn("Failed to delete " + temp.getName() + e);
+            }
+        }
+        return object;
+    }
+
+    //Get the List of Policies and Scopes for Showing in Editor tab
+    private JSONObject list(JSONObject params, HttpServletRequest request) throws ServletException {
+        Set<String> scopes = null;
+        List<String> roles = null;
+        try {
+            PolicyController controller = getPolicyControllerInstance();
+            //Get the Login Id of the User from Request
+            String testUserID = getTestUserId();
+            String userId =  testUserID != null ? testUserID : UserUtils.getUserSession(request).getOrgUserId();
+            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<JSONObject> resultList = new ArrayList<>();
+            boolean onlyFolders = params.getBoolean("onlyFolders");
+            String path = params.getString("path");
+            if(path.contains("..xml")){
+                path = path.replaceAll("..xml", "").trim();
+            }
+
+            if (roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST) ) {
+                if(scopes.isEmpty()){
+                    return error("No Scopes has been Assigned to the User. Please, Contact Super-Admin");
+                }else{
+                    if(!"/".equals(path)){
+                        String tempScope = path.substring(1, path.length());
+                        tempScope = tempScope.replace("/", File.separator);
+                        scopes.add(tempScope);
+                    }
+                }
+            }
+
+            if("/".equals(path)){
+                if(roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST)){
+                    List<Object> scopesList = queryPolicyEditorScopes(null);
+                    for(Object list : scopesList){
+                        PolicyEditorScopes scope = (PolicyEditorScopes) list;
+                        if(!(scope.getScopeName().contains(File.separator))){
+                            JSONObject el = new JSONObject();
+                            el.put("name", scope.getScopeName());
+                            el.put("date", scope.getModifiedDate());
+                            el.put("size", "");
+                            el.put("type", "dir");
+                            el.put("createdBy", scope.getUserCreatedBy().getUserName());
+                            el.put("modifiedBy", scope.getUserModifiedBy().getUserName());
+                            resultList.add(el);
+                        }
+                    }
+                }else if(roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST)){
+                    for(Object scope : scopes){
+                        JSONObject el = new JSONObject();
+                        List<Object> scopesList = queryPolicyEditorScopes(scope.toString());
+                        if(!scopesList.isEmpty()){
+                            PolicyEditorScopes scopeById = (PolicyEditorScopes) scopesList.get(0);
+                            el.put("name", scopeById.getScopeName());
+                            el.put("date", scopeById.getModifiedDate());
+                            el.put("size", "");
+                            el.put("type", "dir");
+                            el.put("createdBy", scopeById.getUserCreatedBy().getUserName());
+                            el.put("modifiedBy", scopeById.getUserModifiedBy().getUserName());
+                            resultList.add(el);
+                        }
+                    }
+                }
+            }else{
+                try{
+                    String scopeName = path.substring(path.indexOf('/') +1);
+                    activePolicyList(scopeName, resultList, roles, scopes, onlyFolders);
+                } catch (Exception ex) {
+                    LOGGER.error("Error Occured While reading Policy Files List"+ex );
+                }
+            }
+
+            return new JSONObject().put(RESULT, resultList);
+        } catch (Exception e) {
+            LOGGER.error("list", e);
+            return error(e.getMessage());
+        }
+    }
+
+    private List<Object> queryPolicyEditorScopes(String scopeName){
+        String scopeNamequery;
+        SimpleBindings params = new SimpleBindings();
+        if(scopeName == null){
+            scopeNamequery = "from PolicyEditorScopes";
+        }else{
+            scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName";
+            params.put("scopeName", scopeName + "%");
+        }
+        PolicyController controller = getPolicyControllerInstance();
+        List<Object> scopesList;
+        if(PolicyController.isjUnit()){
+            scopesList = controller.getDataByQuery(scopeNamequery, null);
+        }else{
+            scopesList = controller.getDataByQuery(scopeNamequery, params);
+        }
+        return  scopesList;
+    }
+
+    //Get Active Policy List based on Scope Selection form Policy Version table
+    private void activePolicyList(String inScopeName, List<JSONObject> resultList, List<String> roles, Set<String> scopes, boolean onlyFolders){
+        PolicyController controller = getPolicyControllerInstance();
+        String scopeName = inScopeName;
+        if(scopeName.contains("/")){
+            scopeName = scopeName.replace("/", File.separator);
+        }
+        if(scopeName.contains("\\")){
+            scopeName = scopeName.replace("\\", "\\\\");
+        }
+        String query = "from PolicyVersion where POLICY_NAME like :scopeName";
+        String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName";
+
+        SimpleBindings params = new SimpleBindings();
+        params.put("scopeName", scopeName + "%");
+
+        List<Object> activePolicies;
+        List<Object> scopesList;
+        if(PolicyController.isjUnit()){
+            activePolicies = controller.getDataByQuery(query, null);
+            scopesList = controller.getDataByQuery(scopeNamequery, null);
+        }else{
+            activePolicies = controller.getDataByQuery(query, params);
+            scopesList = controller.getDataByQuery(scopeNamequery, params);
+        }
+        for(Object list : scopesList){
+            PolicyEditorScopes scopeById = (PolicyEditorScopes) list;
+            String scope = scopeById.getScopeName();
+            if(scope.contains(File.separator)){
+                String checkScope = scope.substring(0, scope.lastIndexOf(File.separator));
+                if(scopeName.contains("\\\\")){
+                    scopeName = scopeName.replace("\\\\", File.separator);
+                }
+                if(scope.contains(File.separator)){
+                    scope = scope.substring(checkScope.length()+1);
+                    if(scope.contains(File.separator)){
+                        scope = scope.substring(0, scope.indexOf(File.separator));
+                    }
+                }
+                if(scopeName.equalsIgnoreCase(checkScope)){
+                    JSONObject el = new JSONObject();
+                    el.put("name", scope);
+                    el.put("date", scopeById.getModifiedDate());
+                    el.put("size", "");
+                    el.put("type", "dir");
+                    el.put("createdBy", scopeById.getUserCreatedBy().getUserName());
+                    el.put("modifiedBy", scopeById.getUserModifiedBy().getUserName());
+                    resultList.add(el);
+                }
+            }
+        }
+        String scopeNameCheck;
+        for (Object list : activePolicies) {
+            PolicyVersion policy = (PolicyVersion) list;
+            String scopeNameValue = policy.getPolicyName().substring(0, policy.getPolicyName().lastIndexOf(File.separator));
+            if(roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST)){
+                if(scopeName.contains("\\\\")){
+                    scopeNameCheck = scopeName.replace("\\\\", File.separator);
+                }else{
+                    scopeNameCheck = scopeName;
+                }
+                if(scopeNameValue.equals(scopeNameCheck)){
+                    JSONObject el = new JSONObject();
+                    el.put("name", policy.getPolicyName().substring(policy.getPolicyName().lastIndexOf(File.separator)+1));
+                    el.put("date", policy.getModifiedDate());
+                    el.put("version", policy.getActiveVersion());
+                    el.put("size", "");
+                    el.put("type", "file");
+                    el.put("createdBy", getUserName(policy.getCreatedBy()));
+                    el.put("modifiedBy", getUserName(policy.getModifiedBy()));
+                    resultList.add(el);
+                }
+            }else if(!scopes.isEmpty() && scopes.contains(scopeNameValue)){
+                JSONObject el = new JSONObject();
+                el.put("name", policy.getPolicyName().substring(policy.getPolicyName().lastIndexOf(File.separator)+1));
+                el.put("date", policy.getModifiedDate());
+                el.put("version", policy.getActiveVersion());
+                el.put("size", "");
+                el.put("type", "file");
+                el.put("createdBy", getUserName(policy.getCreatedBy()));
+                el.put("modifiedBy", getUserName(policy.getModifiedBy()));
+                resultList.add(el);
+            }
+        }
+    }
+
+    private String getUserName(String loginId){
+        PolicyController controller = getPolicyControllerInstance();
+        UserInfo userInfo = (UserInfo) controller.getEntityItem(UserInfo.class, "userLoginId", loginId);
+        if(userInfo == null){
+            return SUPERADMIN;
+        }
+        return userInfo.getUserName();
+    }
+
+    //Rename Policy
+    private JSONObject rename(JSONObject params, HttpServletRequest request) throws ServletException {
+        try {
+            boolean isActive = false;
+            List<String> policyActiveInPDP = new ArrayList<>();
+            Set<String>  scopeOfPolicyActiveInPDP = new HashSet<>();
+            String userId = UserUtils.getUserSession(request).getOrgUserId();
+            String oldPath = params.getString("path");
+            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;
+                }
+            }else{
+                String scopeName = oldPath;
+                String newScopeName = newPath;
+                if(scopeName.contains("/")){
+                    scopeName = scopeName.replace("/", File.separator);
+                    newScopeName = newScopeName.replace("/", File.separator);
+                }
+                checkValidation = newScopeName.substring(newScopeName.lastIndexOf(File.separator)+1);
                 if(scopeName.contains("\\")){
                     scopeName = scopeName.replace("\\", "\\\\\\\\");
                     newScopeName = newScopeName.replace("\\", "\\\\\\\\");
                 if(scopeName.contains("\\")){
                     scopeName = scopeName.replace("\\", "\\\\\\\\");
                     newScopeName = newScopeName.replace("\\", "\\\\\\\\");
@@ -777,783 +794,783 @@ public class PolicyManagerServlet extends HttpServlet {
                 if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){
                     return error("Scope Rename Failed. The Name contains special characters.");
                 }
                 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";
-                               SimpleBindings pvParams = new SimpleBindings();
-                               pvParams.put("scopeName", scopeName + "%");
-                               List<Object> activePolicies = controller.getDataByQuery(query, pvParams);
-                               List<Object> scopesList = controller.getDataByQuery(scopeNamequery, pvParams);
-                               for(Object object : activePolicies){
-                                       PolicyVersion activeVersion = (PolicyVersion) object;
-                                       String policyOldPath = activeVersion.getPolicyName().replace(File.separator, "/") + "." + activeVersion.getActiveVersion() + ".xml";
-                                       String policyNewPath = policyOldPath.replace(oldPath, newPath);
-                                       JSONObject result = policyRename(policyOldPath, policyNewPath, userId);
-                                       if(!(Boolean)(result.getJSONObject("result").get("success"))){
-                                               isActive = true;
-                                               policyActiveInPDP.add(policyOldPath);
-                                               String scope = policyOldPath.substring(0, policyOldPath.lastIndexOf('/'));
-                                               scopeOfPolicyActiveInPDP.add(scope.replace("/", File.separator));
-                                       }
-                               }
-                               boolean rename = false;
-                               if(activePolicies.size() != policyActiveInPDP.size()){
-                                       rename = true;
-                               }
-
-                               UserInfo userInfo = new UserInfo();
-                               userInfo.setUserLoginId(userId);
-                               if(policyActiveInPDP.isEmpty()){
-                                       renameScope(scopesList, scopeName, newScopeName, controller);
-                               }else if(rename){
-                                       renameScope(scopesList, scopeName, newScopeName, controller);
-                                       for(String scope : scopeOfPolicyActiveInPDP){
-                                               PolicyEditorScopes editorScopeEntity = new PolicyEditorScopes();
-                                               editorScopeEntity.setScopeName(scope.replace("\\", "\\\\\\\\"));
-                                               editorScopeEntity.setUserCreatedBy(userInfo);
-                                               editorScopeEntity.setUserModifiedBy(userInfo);
-                                               controller.saveData(editorScopeEntity);
-                                       }
-                               }
-                               if(isActive){
-                                       return error("The Following policies rename failed. Since they are active in PDP Groups" +policyActiveInPDP);
-                               }
-                       }
-                       return success();
-               } catch (Exception e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Exception Occured While Renaming Policy"+e);
-                       return error(e.getMessage());
-               }
-       }
-
-       private void renameScope(List<Object> scopesList, String inScopeName, String newScopeName, PolicyController controller){
-               for(Object object : scopesList){
-                       PolicyEditorScopes editorScopeEntity = (PolicyEditorScopes) object;
-                       String scopeName = inScopeName;
-                       if(scopeName.contains("\\\\\\\\")){
-                               scopeName = scopeName.replace("\\\\\\\\", File.separator);
-                               newScopeName = newScopeName.replace("\\\\\\\\", File.separator);
-                       }
-                       String scope = editorScopeEntity.getScopeName().replace(scopeName, newScopeName);
-                       editorScopeEntity.setScopeName(scope);
-                       controller.updateData(editorScopeEntity);
-               }
-       }
-
-       private JSONObject policyRename(String oldPath, String newPath, String userId) throws ServletException {
-               try {
-                       PolicyEntity entity;
-                       PolicyController controller = getPolicyControllerInstance();
-
-                       String policyVersionName = newPath.replace(".xml", "");
-                       String policyName = policyVersionName.substring(0, policyVersionName.lastIndexOf('.')).replace("/", File.separator);
-
-                       String oldpolicyVersionName = oldPath.replace(".xml", "");
-                       String oldpolicyName = oldpolicyVersionName.substring(0, oldpolicyVersionName.lastIndexOf('.')).replace("/", File.separator);
-
-                       String newpolicyName = newPath.replace("/", ".");
-                       String newPolicyCheck = newpolicyName;
-                       if(newPolicyCheck.contains("Config_")){
-                               newPolicyCheck = newPolicyCheck.replace(".Config_", ":Config_");
-                       }else if(newPolicyCheck.contains("Action_")){
-                               newPolicyCheck = newPolicyCheck.replace(".Action_", ":Action_");
-                       }else if(newPolicyCheck.contains("Decision_")){
-                               newPolicyCheck = newPolicyCheck.replace(".Decision_", ":Decision_");
-                       }
-                       String[] newPolicySplit = newPolicyCheck.split(":");
-
-                       String orignalPolicyName = oldPath.replace("/", ".");
-                       String oldPolicyCheck = orignalPolicyName;
-                       if(oldPolicyCheck.contains("Config_")){
-                               oldPolicyCheck = oldPolicyCheck.replace(".Config_", ":Config_");
-                       }else if(oldPolicyCheck.contains("Action_")){
-                               oldPolicyCheck = oldPolicyCheck.replace(".Action_", ":Action_");
-                       }else if(oldPolicyCheck.contains("Decision_")){
-                               oldPolicyCheck = oldPolicyCheck.replace(".Decision_", ":Decision_");
-                       }
-                       String[] oldPolicySplit = oldPolicyCheck.split(":");
-
-                       //Check PolicyEntity table with newPolicy Name
-                       String policyEntityquery = "FROM PolicyEntity where policyName = :newPolicySplit_1 and scope = :newPolicySplit_0";
-                       SimpleBindings policyParams = new SimpleBindings();
-                       policyParams.put("newPolicySplit_1", newPolicySplit[1]);
-                       policyParams.put("newPolicySplit_0", newPolicySplit[0]);
-                       List<Object> queryData = controller.getDataByQuery(policyEntityquery, policyParams);
-                       if(!queryData.isEmpty()){
-                               return error("Policy rename failed. Since, the policy with same name already exists.");
-                       }
-
-                       //Query the Policy Entity with oldPolicy Name
-                       String policyEntityCheck = oldPolicySplit[1].substring(0, oldPolicySplit[1].indexOf('.'));
-                       String oldpolicyEntityquery = "FROM PolicyEntity where policyName like :policyEntityCheck and scope = :oldPolicySplit_0";
-                       SimpleBindings params = new SimpleBindings();
-                       params.put("policyEntityCheck", policyEntityCheck + "%");
-                       params.put("oldPolicySplit_0", oldPolicySplit[0]);
-                       List<Object> oldEntityData = controller.getDataByQuery(oldpolicyEntityquery, params);
-                       if(!oldEntityData.isEmpty()){
-                               StringBuilder groupQuery = new StringBuilder();
-                               groupQuery.append("FROM PolicyGroupEntity where (");
-                               SimpleBindings geParams = new SimpleBindings();
-                               for(int i=0; i<oldEntityData.size(); i++){
-                                       entity = (PolicyEntity) oldEntityData.get(i);
-                                       if(i == 0){
-                                               groupQuery.append("policyid = :policyId");
-                                               geParams.put("policyId", entity.getPolicyId());
-                                       }else{
-                                               groupQuery.append(" or policyid = :policyId" + i);
-                                               geParams.put("policyId" + i, entity.getPolicyId());
-                                       }
-                               }
-                               groupQuery.append(")");
-                               List<Object> groupEntityData = controller.getDataByQuery(groupQuery.toString(), geParams);
-                               if(! groupEntityData.isEmpty()){
-                                       return error("Policy rename failed. Since the policy or its version is active in PDP Groups.");
-                               }
-                               for(int i=0; i<oldEntityData.size(); i++){
-                                       entity = (PolicyEntity) oldEntityData.get(i);
-                                       String checkEntityName = entity.getPolicyName().replace(".xml", "");
+                PolicyController controller = getPolicyControllerInstance();
+                String query = "from PolicyVersion where POLICY_NAME like :scopeName";
+                String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName";
+                SimpleBindings pvParams = new SimpleBindings();
+                pvParams.put("scopeName", scopeName + "%");
+                List<Object> activePolicies = controller.getDataByQuery(query, pvParams);
+                List<Object> scopesList = controller.getDataByQuery(scopeNamequery, pvParams);
+                for(Object object : activePolicies){
+                    PolicyVersion activeVersion = (PolicyVersion) object;
+                    String policyOldPath = activeVersion.getPolicyName().replace(File.separator, "/") + "." + activeVersion.getActiveVersion() + ".xml";
+                    String policyNewPath = policyOldPath.replace(oldPath, newPath);
+                    JSONObject result = policyRename(policyOldPath, policyNewPath, userId);
+                    if(!(Boolean)(result.getJSONObject("result").get("success"))){
+                        isActive = true;
+                        policyActiveInPDP.add(policyOldPath);
+                        String scope = policyOldPath.substring(0, policyOldPath.lastIndexOf('/'));
+                        scopeOfPolicyActiveInPDP.add(scope.replace("/", File.separator));
+                    }
+                }
+                boolean rename = false;
+                if(activePolicies.size() != policyActiveInPDP.size()){
+                    rename = true;
+                }
+
+                UserInfo userInfo = new UserInfo();
+                userInfo.setUserLoginId(userId);
+                if(policyActiveInPDP.isEmpty()){
+                    renameScope(scopesList, scopeName, newScopeName, controller);
+                }else if(rename){
+                    renameScope(scopesList, scopeName, newScopeName, controller);
+                    for(String scope : scopeOfPolicyActiveInPDP){
+                        PolicyEditorScopes editorScopeEntity = new PolicyEditorScopes();
+                        editorScopeEntity.setScopeName(scope.replace("\\", "\\\\\\\\"));
+                        editorScopeEntity.setUserCreatedBy(userInfo);
+                        editorScopeEntity.setUserModifiedBy(userInfo);
+                        controller.saveData(editorScopeEntity);
+                    }
+                }
+                if(isActive){
+                    return error("The Following policies rename failed. Since they are active in PDP Groups" +policyActiveInPDP);
+                }
+            }
+            return success();
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Exception Occured While Renaming Policy"+e);
+            return error(e.getMessage());
+        }
+    }
+
+    private void renameScope(List<Object> scopesList, String inScopeName, String newScopeName, PolicyController controller){
+        for(Object object : scopesList){
+            PolicyEditorScopes editorScopeEntity = (PolicyEditorScopes) object;
+            String scopeName = inScopeName;
+            if(scopeName.contains("\\\\\\\\")){
+                scopeName = scopeName.replace("\\\\\\\\", File.separator);
+                newScopeName = newScopeName.replace("\\\\\\\\", File.separator);
+            }
+            String scope = editorScopeEntity.getScopeName().replace(scopeName, newScopeName);
+            editorScopeEntity.setScopeName(scope);
+            controller.updateData(editorScopeEntity);
+        }
+    }
+
+    private JSONObject policyRename(String oldPath, String newPath, String userId) throws ServletException {
+        try {
+            PolicyEntity entity;
+            PolicyController controller = getPolicyControllerInstance();
+
+            String policyVersionName = newPath.replace(".xml", "");
+            String policyName = policyVersionName.substring(0, policyVersionName.lastIndexOf('.')).replace("/", File.separator);
+
+            String oldpolicyVersionName = oldPath.replace(".xml", "");
+            String oldpolicyName = oldpolicyVersionName.substring(0, oldpolicyVersionName.lastIndexOf('.')).replace("/", File.separator);
+
+            String newpolicyName = newPath.replace("/", ".");
+            String newPolicyCheck = newpolicyName;
+            if(newPolicyCheck.contains("Config_")){
+                newPolicyCheck = newPolicyCheck.replace(".Config_", ":Config_");
+            }else if(newPolicyCheck.contains("Action_")){
+                newPolicyCheck = newPolicyCheck.replace(".Action_", ":Action_");
+            }else if(newPolicyCheck.contains("Decision_")){
+                newPolicyCheck = newPolicyCheck.replace(".Decision_", ":Decision_");
+            }
+            String[] newPolicySplit = newPolicyCheck.split(":");
+
+            String orignalPolicyName = oldPath.replace("/", ".");
+            String oldPolicyCheck = orignalPolicyName;
+            if(oldPolicyCheck.contains("Config_")){
+                oldPolicyCheck = oldPolicyCheck.replace(".Config_", ":Config_");
+            }else if(oldPolicyCheck.contains("Action_")){
+                oldPolicyCheck = oldPolicyCheck.replace(".Action_", ":Action_");
+            }else if(oldPolicyCheck.contains("Decision_")){
+                oldPolicyCheck = oldPolicyCheck.replace(".Decision_", ":Decision_");
+            }
+            String[] oldPolicySplit = oldPolicyCheck.split(":");
+
+            //Check PolicyEntity table with newPolicy Name
+            String policyEntityquery = "FROM PolicyEntity where policyName = :newPolicySplit_1 and scope = :newPolicySplit_0";
+            SimpleBindings policyParams = new SimpleBindings();
+            policyParams.put("newPolicySplit_1", newPolicySplit[1]);
+            policyParams.put("newPolicySplit_0", newPolicySplit[0]);
+            List<Object> queryData = controller.getDataByQuery(policyEntityquery, policyParams);
+            if(!queryData.isEmpty()){
+                return error("Policy rename failed. Since, the policy with same name already exists.");
+            }
+
+            //Query the Policy Entity with oldPolicy Name
+            String policyEntityCheck = oldPolicySplit[1].substring(0, oldPolicySplit[1].indexOf('.'));
+            String oldpolicyEntityquery = "FROM PolicyEntity where policyName like :policyEntityCheck and scope = :oldPolicySplit_0";
+            SimpleBindings params = new SimpleBindings();
+            params.put("policyEntityCheck", policyEntityCheck + "%");
+            params.put("oldPolicySplit_0", oldPolicySplit[0]);
+            List<Object> oldEntityData = controller.getDataByQuery(oldpolicyEntityquery, params);
+            if(!oldEntityData.isEmpty()){
+                StringBuilder groupQuery = new StringBuilder();
+                groupQuery.append("FROM PolicyGroupEntity where (");
+                SimpleBindings geParams = new SimpleBindings();
+                for(int i=0; i<oldEntityData.size(); i++){
+                    entity = (PolicyEntity) oldEntityData.get(i);
+                    if(i == 0){
+                        groupQuery.append("policyid = :policyId");
+                        geParams.put("policyId", entity.getPolicyId());
+                    }else{
+                        groupQuery.append(" or policyid = :policyId" + i);
+                        geParams.put("policyId" + i, entity.getPolicyId());
+                    }
+                }
+                groupQuery.append(")");
+                List<Object> groupEntityData = controller.getDataByQuery(groupQuery.toString(), geParams);
+                if(! groupEntityData.isEmpty()){
+                    return error("Policy rename failed. Since the policy or its version is active in PDP Groups.");
+                }
+                for(int i=0; i<oldEntityData.size(); i++){
+                    entity = (PolicyEntity) oldEntityData.get(i);
+                    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);
                     }
                     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.");
-                       }
-
-                       return success();
-               } catch (Exception e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Exception Occured While Renaming Policy"+e);
-                       return error(e.getMessage());
-               }
-       }
-
-       private JSONObject checkOldPolicyEntryAndUpdate(PolicyEntity entity, String newScope, String removenewPolicyExtension, String oldScope, String removeoldPolicyExtension,
-                       String policyName, String  newpolicyName, String oldpolicyName, String userId) throws ServletException{
-               try {
-                       ConfigurationDataEntity configEntity = entity.getConfigurationData();
-                       ActionBodyEntity actionEntity = entity.getActionBodyEntity();
-                       PolicyController controller = getPolicyControllerInstance();
-
-                       String oldPolicyNameWithoutExtension = removeoldPolicyExtension;
-                       String newPolicyNameWithoutExtension = removenewPolicyExtension;
-                       if(removeoldPolicyExtension.endsWith(".xml")){
-                               oldPolicyNameWithoutExtension = oldPolicyNameWithoutExtension.substring(0, oldPolicyNameWithoutExtension.indexOf('.'));
-                               newPolicyNameWithoutExtension = newPolicyNameWithoutExtension.substring(0, newPolicyNameWithoutExtension.indexOf('.'));
-                       }
-                       entity.setPolicyName(entity.getPolicyName().replace(oldPolicyNameWithoutExtension, newPolicyNameWithoutExtension));
-                       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_")){
-                               oldConfigurationName = configEntity.getConfigurationName();
-                               configEntity.setConfigurationName(configEntity.getConfigurationName().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension));
-                               controller.updateData(configEntity);
-                               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_")){
-                               oldConfigurationName = actionEntity.getActionBodyName();
-                               actionEntity.setActionBody(actionEntity.getActionBody().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension));
-                               controller.updateData(actionEntity);
-                               newConfigurationName = actionEntity.getActionBodyName();
-                               File file = new File(PolicyController.getActionHome() + File.separator + oldConfigurationName);
-                               if(file.exists()){
-                                       File renamefile = new File(PolicyController.getActionHome() + File.separator + newConfigurationName);
-                                       file.renameTo(renamefile);
-                               }
-                       }
-                       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);
-                       controller.updateData(versionEntity);
-                       String movePolicyCheck = policyName.substring(policyName.lastIndexOf(File.separator)+1);
-                       String moveOldPolicyCheck = oldpolicyName.substring(oldpolicyName.lastIndexOf(File.separator)+1);
-                       if(movePolicyCheck.equals(moveOldPolicyCheck)){
-                               controller.watchPolicyFunction(versionEntity, oldpolicyName, "Move");
-                       }else{
-                               controller.watchPolicyFunction(versionEntity, oldpolicyName, "Rename");
-                       }
-                       return success();
-               } catch (Exception e) {
-                       LOGGER.error("Exception Occured"+e);
-                       return error(e.getMessage());
-               }
-       }
-
-       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));
-                       queryEntityName = configurationDataEntity.getConfigurationName();
-                       configurationDataEntity.setConfigBody(entity.getConfigurationData().getConfigBody());
-                       configurationDataEntity.setConfigType(entity.getConfigurationData().getConfigType());
-                       configurationDataEntity.setDeleted(false);
-                       configurationDataEntity.setCreatedBy(userId);
-                       configurationDataEntity.setModifiedBy(userId);
-                       controller.saveData(configurationDataEntity);
-                       ConfigurationDataEntity configEntiy = (ConfigurationDataEntity) controller.getEntityItem(ConfigurationDataEntity.class, "configurationName", queryEntityName);
-                       cloneEntity.setConfigurationData(configEntiy);
-                       newConfigurationName = configEntiy.getConfigurationName();
-                       try (FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + newConfigurationName);
-                                       BufferedWriter bw = new BufferedWriter(fw)){
-                               bw.write(configEntiy.getConfigBody());
-                       } catch (IOException e) {
-                               LOGGER.error("Exception Occured While cloning the configuration file"+e);
-                       }
-               }else if(newpolicyName.contains("Action_")){
-                       ActionBodyEntity actionBodyEntity = new ActionBodyEntity();
-                       actionBodyEntity.setActionBodyName(entity.getActionBodyEntity().getActionBodyName().replace(oldScope+"."+oldConfigRemoveExtension, newScope+"."+newConfigRemoveExtension));
-                       queryEntityName = actionBodyEntity.getActionBodyName();
-                       actionBodyEntity.setActionBody(entity.getActionBodyEntity().getActionBody());
-                       actionBodyEntity.setDeleted(false);
-                       actionBodyEntity.setCreatedBy(userId);
-                       actionBodyEntity.setModifiedBy(userId);
-                       controller.saveData(actionBodyEntity);
-                       ActionBodyEntity actionEntiy = (ActionBodyEntity) controller.getEntityItem(ActionBodyEntity.class, "actionBodyName", queryEntityName);
-                       cloneEntity.setActionBodyEntity(actionEntiy);
-                       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();
-       }
-
-       //Clone the Policy
-       private JSONObject copy(JSONObject params, HttpServletRequest request) throws ServletException {
-               try {
-                       String userId = UserUtils.getUserSession(request).getOrgUserId();
-                       String oldPath = params.getString("path");
-                       String newPath = params.getString("newPath");
-                       oldPath = oldPath.substring(oldPath.indexOf('/')+1);
-                       newPath = newPath.substring(newPath.indexOf('/')+1);
-
-                       String policyVersionName = newPath.replace(".xml", "");
-                       String version = policyVersionName.substring(policyVersionName.indexOf('.')+1);
-                       String policyName = policyVersionName.substring(0, policyVersionName.lastIndexOf('.')).replace("/", File.separator);
-
-                       String newpolicyName = newPath.replace("/", ".");
-
-                       String orignalPolicyName = oldPath.replace("/", ".");
-
-                       String newPolicyCheck = newpolicyName;
-                       if(newPolicyCheck.contains("Config_")){
-                               newPolicyCheck = newPolicyCheck.replace(".Config_", ":Config_");
-                       }else if(newPolicyCheck.contains("Action_")){
-                               newPolicyCheck = newPolicyCheck.replace(".Action_", ":Action_");
-                       }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", "");
+                }
+            }else{
+                return error("Policy rename failed due to policy not able to retrieve from database. Please, contact super-admin.");
+            }
+
+            return success();
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Exception Occured While Renaming Policy"+e);
+            return error(e.getMessage());
+        }
+    }
+
+    private JSONObject checkOldPolicyEntryAndUpdate(PolicyEntity entity, String newScope, String removenewPolicyExtension, String oldScope, String removeoldPolicyExtension,
+                                                    String policyName, String  newpolicyName, String oldpolicyName, String userId) throws ServletException{
+        try {
+            ConfigurationDataEntity configEntity = entity.getConfigurationData();
+            ActionBodyEntity actionEntity = entity.getActionBodyEntity();
+            PolicyController controller = getPolicyControllerInstance();
+
+            String oldPolicyNameWithoutExtension = removeoldPolicyExtension;
+            String newPolicyNameWithoutExtension = removenewPolicyExtension;
+            if(removeoldPolicyExtension.endsWith(".xml")){
+                oldPolicyNameWithoutExtension = oldPolicyNameWithoutExtension.substring(0, oldPolicyNameWithoutExtension.indexOf('.'));
+                newPolicyNameWithoutExtension = newPolicyNameWithoutExtension.substring(0, newPolicyNameWithoutExtension.indexOf('.'));
+            }
+            entity.setPolicyName(entity.getPolicyName().replace(oldPolicyNameWithoutExtension, newPolicyNameWithoutExtension));
+            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_")){
+                oldConfigurationName = configEntity.getConfigurationName();
+                configEntity.setConfigurationName(configEntity.getConfigurationName().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension));
+                controller.updateData(configEntity);
+                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_")){
+                oldConfigurationName = actionEntity.getActionBodyName();
+                actionEntity.setActionBody(actionEntity.getActionBody().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension));
+                controller.updateData(actionEntity);
+                newConfigurationName = actionEntity.getActionBodyName();
+                File file = new File(PolicyController.getActionHome() + File.separator + oldConfigurationName);
+                if(file.exists()){
+                    File renamefile = new File(PolicyController.getActionHome() + File.separator + newConfigurationName);
+                    file.renameTo(renamefile);
+                }
+            }
+            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);
+            controller.updateData(versionEntity);
+            String movePolicyCheck = policyName.substring(policyName.lastIndexOf(File.separator)+1);
+            String moveOldPolicyCheck = oldpolicyName.substring(oldpolicyName.lastIndexOf(File.separator)+1);
+            if(movePolicyCheck.equals(moveOldPolicyCheck)){
+                controller.watchPolicyFunction(versionEntity, oldpolicyName, "Move");
+            }else{
+                controller.watchPolicyFunction(versionEntity, oldpolicyName, "Rename");
+            }
+            return success();
+        } catch (Exception e) {
+            LOGGER.error("Exception Occured"+e);
+            return error(e.getMessage());
+        }
+    }
+
+    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));
+            queryEntityName = configurationDataEntity.getConfigurationName();
+            configurationDataEntity.setConfigBody(entity.getConfigurationData().getConfigBody());
+            configurationDataEntity.setConfigType(entity.getConfigurationData().getConfigType());
+            configurationDataEntity.setDeleted(false);
+            configurationDataEntity.setCreatedBy(userId);
+            configurationDataEntity.setModifiedBy(userId);
+            controller.saveData(configurationDataEntity);
+            ConfigurationDataEntity configEntiy = (ConfigurationDataEntity) controller.getEntityItem(ConfigurationDataEntity.class, "configurationName", queryEntityName);
+            cloneEntity.setConfigurationData(configEntiy);
+            newConfigurationName = configEntiy.getConfigurationName();
+            try (FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + newConfigurationName);
+                 BufferedWriter bw = new BufferedWriter(fw)){
+                bw.write(configEntiy.getConfigBody());
+            } catch (IOException e) {
+                LOGGER.error("Exception Occured While cloning the configuration file"+e);
+            }
+        }else if(newpolicyName.contains("Action_")){
+            ActionBodyEntity actionBodyEntity = new ActionBodyEntity();
+            actionBodyEntity.setActionBodyName(entity.getActionBodyEntity().getActionBodyName().replace(oldScope+"."+oldConfigRemoveExtension, newScope+"."+newConfigRemoveExtension));
+            queryEntityName = actionBodyEntity.getActionBodyName();
+            actionBodyEntity.setActionBody(entity.getActionBodyEntity().getActionBody());
+            actionBodyEntity.setDeleted(false);
+            actionBodyEntity.setCreatedBy(userId);
+            actionBodyEntity.setModifiedBy(userId);
+            controller.saveData(actionBodyEntity);
+            ActionBodyEntity actionEntiy = (ActionBodyEntity) controller.getEntityItem(ActionBodyEntity.class, "actionBodyName", queryEntityName);
+            cloneEntity.setActionBodyEntity(actionEntiy);
+            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();
+    }
+
+    //Clone the Policy
+    private JSONObject copy(JSONObject params, HttpServletRequest request) throws ServletException {
+        try {
+            String userId = UserUtils.getUserSession(request).getOrgUserId();
+            String oldPath = params.getString("path");
+            String newPath = params.getString("newPath");
+            oldPath = oldPath.substring(oldPath.indexOf('/')+1);
+            newPath = newPath.substring(newPath.indexOf('/')+1);
+
+            String policyVersionName = newPath.replace(".xml", "");
+            String version = policyVersionName.substring(policyVersionName.indexOf('.')+1);
+            String policyName = policyVersionName.substring(0, policyVersionName.lastIndexOf('.')).replace("/", File.separator);
+
+            String newpolicyName = newPath.replace("/", ".");
+
+            String orignalPolicyName = oldPath.replace("/", ".");
+
+            String newPolicyCheck = newpolicyName;
+            if(newPolicyCheck.contains("Config_")){
+                newPolicyCheck = newPolicyCheck.replace(".Config_", ":Config_");
+            }else if(newPolicyCheck.contains("Action_")){
+                newPolicyCheck = newPolicyCheck.replace(".Action_", ":Action_");
+            }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.");
             }
             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_");
-                       }else if(oldPolicyCheck.contains("Action_")){
-                               oldPolicyCheck = oldPolicyCheck.replace(".Action_", ":Action_");
-                       }else if(oldPolicyCheck.contains("Decision_")){
-                               oldPolicyCheck = oldPolicyCheck.replace(".Decision_", ":Decision_");
-                       }
-                       String[] oldPolicySplit = oldPolicyCheck.split(":");
-
-                       PolicyController controller = getPolicyControllerInstance();
-
-                       PolicyEntity entity = null;
-                       boolean success = false;
-
-                       //Check PolicyEntity table with newPolicy Name
-                       String policyEntityquery = "FROM PolicyEntity where policyName = :newPolicySplit_1 and scope = :newPolicySplit_0";
-                       SimpleBindings policyParams = new SimpleBindings();
-                       policyParams.put("newPolicySplit_1", newPolicySplit[1]);
-                       policyParams.put("newPolicySplit_0", newPolicySplit[0]);
-                       List<Object> queryData = controller.getDataByQuery(policyEntityquery, policyParams);
-                       if(!queryData.isEmpty()){
-                               return error("Policy already exists with same name");
-                       }
-
-                       //Query the Policy Entity with oldPolicy Name
-                       policyEntityquery = "FROM PolicyEntity where policyName = :oldPolicySplit_1 and scope = :oldPolicySplit_0";
-                       SimpleBindings peParams = new SimpleBindings();
-                       peParams.put("oldPolicySplit_1", oldPolicySplit[1]);
-                       peParams.put("oldPolicySplit_0", oldPolicySplit[0]);
-                       if(PolicyController.isjUnit()){
-                               queryData = controller.getDataByQuery(policyEntityquery, null);
-                       }else{
-                               queryData = controller.getDataByQuery(policyEntityquery, peParams);
-                       }
-                       if(!queryData.isEmpty()){
-                               entity = (PolicyEntity) queryData.get(0);
-                       }
-                       if(entity != null){
-                               cloneRecord(newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1],  newPolicySplit[0], newPolicySplit[1], entity, userId);
-                               success = true;
-                       }
-
-                       if(success){
-                               PolicyVersion entityItem = new PolicyVersion();
-                               entityItem.setActiveVersion(Integer.parseInt(version));
-                               entityItem.setHigherVersion(Integer.parseInt(version));
-                               entityItem.setPolicyName(policyName);
-                               entityItem.setCreatedBy(userId);
-                               entityItem.setModifiedBy(userId);
-                               entityItem.setModifiedDate(new Date());
-                               controller.saveData(entityItem);
-                       }
-
-                       LOGGER.debug("copy from: {} to: {}" + oldPath +newPath);
-
-                       return success();
-               } catch (Exception e) {
-                       LOGGER.error("copy", e);
-                       return error(e.getMessage());
-               }
-       }
-
-       //Delete Policy or Scope Functionality
-       private JSONObject delete(JSONObject params, HttpServletRequest request) throws ServletException {
-               PolicyController controller = getPolicyControllerInstance();
-               PolicyRestController restController = new PolicyRestController();
-               PolicyEntity policyEntity = null;
-               String policyNamewithoutExtension;
-               try {
-                       String userId = UserUtils.getUserSession(request).getOrgUserId();
-                       String deleteVersion = "";
-                       String path = params.getString("path");
-                       LOGGER.debug("delete {}" +path);
-                       if(params.has("deleteVersion")){
-                               deleteVersion  = params.getString("deleteVersion");
-                       }
-                       path = path.substring(path.indexOf('/')+1);
-                       String policyNamewithExtension = path.replace("/", File.separator);
-                       String policyVersionName = policyNamewithExtension.replace(".xml", "");
-                       String query;
-                       SimpleBindings policyParams = new SimpleBindings();
-                       if(path.endsWith(".xml")){
-                               policyNamewithoutExtension = policyVersionName.substring(0, policyVersionName.lastIndexOf('.'));
-                               policyNamewithoutExtension = policyNamewithoutExtension.replace(File.separator, ".");
-                               String splitPolicyName = null;
-                               if(policyNamewithoutExtension.contains("Config_")){
-                                       splitPolicyName = policyNamewithoutExtension.replace(".Config_", ":Config_");
-                               }else if(policyNamewithoutExtension.contains("Action_")){
-                                       splitPolicyName = policyNamewithoutExtension.replace(".Action_", ":Action_");
-                               }else if(policyNamewithoutExtension.contains("Decision_")){
-                                       splitPolicyName = policyNamewithoutExtension.replace(".Decision_", ":Decision_");
-                               }
-                               String[] split = splitPolicyName.split(":");
-
-                               query = "FROM PolicyEntity where policyName like :split_1 and scope = :split_0";
-                               policyParams.put("split_1", split[1] + "%");
-                               policyParams.put("split_0", split[0]);
-                       }else{
-                               policyNamewithoutExtension = path.replace(File.separator, ".");
-                               query = "FROM PolicyEntity where scope like :policyNamewithoutExtension";
-                               policyParams.put("policyNamewithoutExtension", policyNamewithoutExtension + "%");
-                       }
-
-                       List<Object> policyEntityobjects = controller.getDataByQuery(query, policyParams);
-                       String activePolicyName = null;
-                       boolean pdpCheck = false;
-                       if(path.endsWith(".xml")){
-                               policyNamewithoutExtension = policyNamewithoutExtension.replace(".", File.separator);
-                               int version = Integer.parseInt(policyVersionName.substring(policyVersionName.indexOf('.')+1));
-                               if("ALL".equals(deleteVersion)){
-                                       if(!policyEntityobjects.isEmpty()){
-                                               for(Object object : policyEntityobjects){
-                                                       policyEntity = (PolicyEntity) object;
-                                                       String groupEntityquery = "from PolicyGroupEntity where policyid ='"+policyEntity.getPolicyId()+"'";
-                                                       SimpleBindings pgeParams = new SimpleBindings();
-                                                       List<Object> groupobject = controller.getDataByQuery(groupEntityquery, pgeParams);
-                                                       if(!groupobject.isEmpty()){
-                                                               pdpCheck = true;
-                                                               activePolicyName = policyEntity.getScope() +"."+ policyEntity.getPolicyName();
-                                                       }else{
-                                                               //Delete the entity from Elastic Search Database
-                                                               String searchFileName = policyEntity.getScope() + "." + policyEntity.getPolicyName();
-                                                               restController.deleteElasticData(searchFileName);
-                                                               //Delete the entity from Policy Entity table
-                                                               controller.deleteData(policyEntity);
-                                                               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());
-                                                               }
-                                                       }
-                                               }
-                                       }
-                                       //Policy Notification
-                                       PolicyVersion versionEntity = new PolicyVersion();
-                                       versionEntity.setPolicyName(policyNamewithoutExtension);
-                                       versionEntity.setModifiedBy(userId);
-                                       controller.watchPolicyFunction(versionEntity, policyNamewithExtension, "DeleteAll");
-                                       if(pdpCheck){
-                                               //Delete from policyVersion table
-                                               String getActivePDPPolicyVersion = activePolicyName.replace(".xml", "");
-                                               getActivePDPPolicyVersion = getActivePDPPolicyVersion.substring(getActivePDPPolicyVersion.lastIndexOf('.')+1);
-                                               String policyVersionQuery = "update PolicyVersion set active_version='"+getActivePDPPolicyVersion+"' , highest_version='"+getActivePDPPolicyVersion+"'  where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0";
-                                               if(policyVersionQuery != null){
-                                                       controller.executeQuery(policyVersionQuery);
-                                               }
-                                               return error("Policies with Same name has been deleted. Except the Active Policy in PDP.     PolicyName: "+activePolicyName);
-                                       }else{
-                                               //No Active Policy in PDP. So, deleting all entries from policyVersion table
-                                               String policyVersionQuery = "delete from PolicyVersion  where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0";
-                                               if(policyVersionQuery != null){
-                                                       controller.executeQuery(policyVersionQuery);
-                                               }
-                                       }
-                               }else if("CURRENT".equals(deleteVersion)){
-                                       String currentVersionPolicyName = policyNamewithExtension.substring(policyNamewithExtension.lastIndexOf(File.separator)+1);
-                                       String currentVersionScope = policyNamewithExtension.substring(0, policyNamewithExtension.lastIndexOf(File.separator)).replace(File.separator, ".");
-                                       query = "FROM PolicyEntity where policyName = :currentVersionPolicyName and scope = :currentVersionScope";
-
-                                       SimpleBindings peParams = new SimpleBindings();
-                                       peParams.put("currentVersionPolicyName", currentVersionPolicyName);
-                                       peParams.put("currentVersionScope", currentVersionScope);
-
-                                       List<Object> policyEntitys = controller.getDataByQuery(query, peParams);
-                                       if(!policyEntitys.isEmpty()){
-                                               policyEntity = (PolicyEntity) policyEntitys.get(0);
-                                       }
-                                       if(policyEntity != null){
-                                               String groupEntityquery = "from PolicyGroupEntity where policyid = :policyEntityId and policyid > 0";
-                                               SimpleBindings geParams = new SimpleBindings();
-                                               geParams.put("policyEntityId", policyEntity.getPolicyId());
-                                               List<Object> groupobject = controller.getDataByQuery(groupEntityquery, geParams);
-                                               if(groupobject.isEmpty()){
-                                                       //Delete the entity from Elastic Search Database
-                                                       String searchFileName = policyEntity.getScope() + "." + policyEntity.getPolicyName();
-                                                       restController.deleteElasticData(searchFileName);
-                                                       //Delete the entity from Policy Entity table
-                                                       controller.deleteData(policyEntity);
-                                                       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){
-                                                               int highestVersion = 0;
-                                                               if(!policyEntityobjects.isEmpty()){
-                                                                       for(Object object : policyEntityobjects){
-                                                                               policyEntity = (PolicyEntity) object;
-                                                                               String policyEntityName = policyEntity.getPolicyName().replace(".xml", "");
-                                                                               int policyEntityVersion = Integer.parseInt(policyEntityName.substring(policyEntityName.lastIndexOf('.')+1));
-                                                                               if(policyEntityVersion > highestVersion && policyEntityVersion != version){
-                                                                                       highestVersion = policyEntityVersion;
-                                                                               }
-                                                                       }
-                                                               }
-
-                                                               //Policy Notification
-                                                               PolicyVersion entity = new PolicyVersion();
-                                                               entity.setPolicyName(policyNamewithoutExtension);
-                                                               entity.setActiveVersion(highestVersion);
-                                                               entity.setModifiedBy(userId);
-                                                               controller.watchPolicyFunction(entity, policyNamewithExtension, "DeleteOne");
-
-                                                               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";
-                                                               if(policyVersionQuery != null){
-                                                                       controller.executeQuery(policyVersionQuery);
-                                                               }
-                                                       }
-                                               }else{
-                                                       return error("Policy can't be deleted, it is active in PDP Groups.     PolicyName: '"+policyEntity.getScope() + "." +policyEntity.getPolicyName()+"'");
-                                               }
-                                       }
-                               }
-                       }else{
-                               List<String> activePoliciesInPDP = new ArrayList<>();
-                               if(!policyEntityobjects.isEmpty()){
-                                       for(Object object : policyEntityobjects){
-                                               policyEntity = (PolicyEntity) object;
-                                               String groupEntityquery = "from PolicyGroupEntity where policyid = :policyEntityId";
-                                               SimpleBindings geParams = new SimpleBindings();
-                                               geParams.put("policyEntityId", policyEntity.getPolicyId());
-                                               List<Object> groupobject = controller.getDataByQuery(groupEntityquery, geParams);
-                                               if(!groupobject.isEmpty()){
-                                                       pdpCheck = true;
-                                                       activePoliciesInPDP.add(policyEntity.getScope()+"."+policyEntity.getPolicyName());
-                                               }else{
-                                                       //Delete the entity from Elastic Search Database
-                                                       String searchFileName = policyEntity.getScope() + "." + policyEntity.getPolicyName();
-                                                       restController.deleteElasticData(searchFileName);
-                                                       //Delete the entity from Policy Entity table
-                                                       controller.deleteData(policyEntity);
-                                                       policyNamewithoutExtension = policyEntity.getPolicyName();
-                                                       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());
-                                                       }
-                                               }
-                                       }
-                                       //Delete from policyVersion and policyEditor Scope table
-                                       String policyVersionQuery = "delete PolicyVersion where POLICY_NAME like '"+path.replace("\\", "\\\\")+"%' and id >0";
-                                       controller.executeQuery(policyVersionQuery);
-
-                                       //Policy Notification
-                                       PolicyVersion entity = new PolicyVersion();
-                                       entity.setPolicyName(path);
-                                       entity.setModifiedBy(userId);
-                                       controller.watchPolicyFunction(entity, path, "DeleteScope");
-                                       if(pdpCheck){
-                                               //Add Active Policies List to PolicyVersionTable
-                                               for(int i =0; i < activePoliciesInPDP.size(); i++){
-                                                       String activePDPPolicyName = activePoliciesInPDP.get(i).replace(".xml", "");
-                                                       int activePDPPolicyVersion = Integer.parseInt(activePDPPolicyName.substring(activePDPPolicyName.lastIndexOf('.')+1));
-                                                       activePDPPolicyName = activePDPPolicyName.substring(0, activePDPPolicyName.lastIndexOf('.')).replace(".", File.separator);
-                                                       PolicyVersion insertactivePDPVersion = new PolicyVersion();
-                                                       insertactivePDPVersion.setPolicyName(activePDPPolicyName);
-                                                       insertactivePDPVersion.setHigherVersion(activePDPPolicyVersion);
-                                                       insertactivePDPVersion.setActiveVersion(activePDPPolicyVersion);
-                                                       insertactivePDPVersion.setCreatedBy(userId);
-                                                       insertactivePDPVersion.setModifiedBy(userId);
-                                                       controller.saveData(insertactivePDPVersion);
-                                               }
-
-                                               return error("All the Policies has been deleted in Scope. Except the following list of Policies:"+activePoliciesInPDP);
-                                       }else{
-                                               String policyScopeQuery = "delete PolicyEditorScopes where SCOPENAME like '"+path.replace("\\", "\\\\")+"%' and id >0";
-                                           controller.executeQuery(policyScopeQuery);
-                                       }
-                               }else{
-                                       String policyScopeQuery = "delete PolicyEditorScopes where SCOPENAME like '"+path.replace("\\", "\\\\")+"%' and id >0";
-                                       controller.executeQuery(policyScopeQuery);
-                               }
-                       }
-                       return success();
-               } catch (Exception e) {
-                       LOGGER.error("delete", e);
-                       return error(e.getMessage());
-               }
-       }
-
-       //Edit the Policy
-       private JSONObject editFile(JSONObject params) throws ServletException {
-               // get content
-               try {
-                       PolicyController controller = getPolicyControllerInstance();
-                       String mode = params.getString("mode");
-                       String path = params.getString("path");
-                       LOGGER.debug("editFile path: {}"+ path);
-
-                       String domain = path.substring(1, path.lastIndexOf('/'));
-                       domain = domain.replace("/", ".");
-
-                       path = path.substring(1);
-                       path = path.replace("/", ".");
-                       String dbCheckName = path;
-                       if(dbCheckName.contains("Config_")){
-                               dbCheckName = dbCheckName.replace(".Config_", ":Config_");
-                       }else if(dbCheckName.contains("Action_")){
-                               dbCheckName = dbCheckName.replace(".Action_", ":Action_");
-                       }else if(dbCheckName.contains("Decision_")){
-                               dbCheckName = dbCheckName.replace(".Decision_", ":Decision_");
-                       }
-
-                       String[] split = dbCheckName.split(":");
-                       String query = "FROM PolicyEntity where policyName = :split_1 and scope = :split_0";
-                       SimpleBindings peParams = new SimpleBindings();
-                       peParams.put("split_1", split[1]);
-                       peParams.put("split_0", split[0]);
-                       List<Object> queryData;
-                       if(PolicyController.isjUnit()){
-                               queryData = controller.getDataByQuery(query, null);
-                       }else{
-                               queryData = controller.getDataByQuery(query, peParams);
-                       }
-                       PolicyEntity entity = (PolicyEntity) queryData.get(0);
-                       InputStream stream = new ByteArrayInputStream(entity.getPolicyData().getBytes(StandardCharsets.UTF_8));
-
-
-                       Object policy = XACMLPolicyScanner.readPolicy(stream);
-                       PolicyRestAdapter policyAdapter  = new PolicyRestAdapter();
-                       policyAdapter.setData(policy);
-
-                       if("viewPolicy".equalsIgnoreCase(mode)){
-                               policyAdapter.setReadOnly(true);
-                               policyAdapter.setEditPolicy(false);
-                       }else{
-                               policyAdapter.setReadOnly(false);
-                               policyAdapter.setEditPolicy(true);
-                       }
-                       
-                       policyAdapter.setDomainDir(domain);
-                       policyAdapter.setPolicyData(policy);
-                       String policyName = path.replace(".xml", "");
-                       policyName = policyName.substring(0, policyName.lastIndexOf('.'));
-                       policyAdapter.setPolicyName(policyName.substring(policyName.lastIndexOf('.')+1));
-
-                       PolicyAdapter setpolicyAdapter = PolicyAdapter.getInstance();
-                       setpolicyAdapter.configure(policyAdapter,entity);
-
-                       policyAdapter.setParentPath(null);
-                       ObjectMapper mapper = new ObjectMapper();
-                       String json = mapper.writeValueAsString(policyAdapter);
-                       JsonNode jsonNode = mapper.readTree(json);
-
-                       return new JSONObject().put(RESULT, jsonNode);
-               } catch (Exception e) {
-                       LOGGER.error("editFile", e);
-                       return error(e.getMessage());
-               }
-       }
-
-       //Add Scopes
-       private JSONObject addFolder(JSONObject params, HttpServletRequest request) throws ServletException {
-               PolicyController controller = getPolicyControllerInstance();
-               String name = "";
-               try {
-                       String userId = UserUtils.getUserSession(request).getOrgUserId();
-                       String path = params.getString("path");
-                       try{
-                               if(params.has("subScopename")){
-                                       if(! "".equals(params.getString("subScopename"))) {
-                                               name = params.getString("path").replace("/", File.separator) + File.separator +params.getString("subScopename");
-                                       }
-                               }else{
-                                       name = params.getString("name");
-                               }
-                       }catch(Exception e){
-                               name = params.getString("name");
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While Adding Scope"+e);
-                       }
-                       String validateName;
-                       if(name.contains(File.separator)){
-                               validateName = name.substring(name.lastIndexOf(File.separator)+1);
-                       }else{
-                               validateName = name;
-                       }
-                       if(!name.isEmpty()){
-                               String validate = PolicyUtils.policySpecialCharValidator(validateName);
-                               if(!validate.contains("success")){
-                                       return error(validate);
-                               }
-                       }
-                       LOGGER.debug("addFolder path: {} name: {}" + path +name);
-                       if(! "".equals(name)){
-                               if(name.startsWith(File.separator)){
-                                       name = name.substring(1);
-                               }
-                               PolicyEditorScopes entity = (PolicyEditorScopes) controller.getEntityItem(PolicyEditorScopes.class, "scopeName", name);
-                               if(entity == null){
-                                       UserInfo userInfo = new UserInfo();
-                                       userInfo.setUserLoginId(userId);
-                                       PolicyEditorScopes newScope = new PolicyEditorScopes();
-                                       newScope.setScopeName(name);
-                                       newScope.setUserCreatedBy(userInfo);
-                                       newScope.setUserModifiedBy(userInfo);
-                                       controller.saveData(newScope);
-                               }else{
-                                       return error("Scope Already Exists");
-                               }
-                       }
-                       return success();
-               } catch (Exception e) {
-                       LOGGER.error("addFolder", e);
-                       return error(e.getMessage());
-               }
-       }
-
-       //Return Error Object
-       private JSONObject error(String msg) throws ServletException {
-               try {
-                       JSONObject result = new JSONObject();
-                       result.put("success", false);
-                       result.put("error", msg);
-                       return new JSONObject().put(RESULT, result);
-               } catch (JSONException e) {
-                       throw new ServletException(e);
-               }
-       }
-
-       //Return Success Object
-       private JSONObject success() throws ServletException {
-               try {
-                       JSONObject result = new JSONObject();
-                       result.put("success", true);
-                       result.put("error", (Object) null);
-                       return new JSONObject().put(RESULT, result);
-               } catch (JSONException e) {
-                       throw new ServletException(e);
-               }
-       }
-
-       private PolicyController getPolicyControllerInstance(){
-               return policyController != null ? getPolicyController() : new PolicyController();
-       }
-
-       public String getTestUserId() {
-               return testUserId;
-       }
-
-       public static void setTestUserId(String testUserId) {
-               PolicyManagerServlet.testUserId = testUserId;
-       }
-}
+
+            String oldPolicyCheck = orignalPolicyName;
+            if(oldPolicyCheck.contains("Config_")){
+                oldPolicyCheck = oldPolicyCheck.replace(".Config_", ":Config_");
+            }else if(oldPolicyCheck.contains("Action_")){
+                oldPolicyCheck = oldPolicyCheck.replace(".Action_", ":Action_");
+            }else if(oldPolicyCheck.contains("Decision_")){
+                oldPolicyCheck = oldPolicyCheck.replace(".Decision_", ":Decision_");
+            }
+            String[] oldPolicySplit = oldPolicyCheck.split(":");
+
+            PolicyController controller = getPolicyControllerInstance();
+
+            PolicyEntity entity = null;
+            boolean success = false;
+
+            //Check PolicyEntity table with newPolicy Name
+            String policyEntityquery = "FROM PolicyEntity where policyName = :newPolicySplit_1 and scope = :newPolicySplit_0";
+            SimpleBindings policyParams = new SimpleBindings();
+            policyParams.put("newPolicySplit_1", newPolicySplit[1]);
+            policyParams.put("newPolicySplit_0", newPolicySplit[0]);
+            List<Object> queryData = controller.getDataByQuery(policyEntityquery, policyParams);
+            if(!queryData.isEmpty()){
+                return error("Policy already exists with same name");
+            }
+
+            //Query the Policy Entity with oldPolicy Name
+            policyEntityquery = "FROM PolicyEntity where policyName = :oldPolicySplit_1 and scope = :oldPolicySplit_0";
+            SimpleBindings peParams = new SimpleBindings();
+            peParams.put("oldPolicySplit_1", oldPolicySplit[1]);
+            peParams.put("oldPolicySplit_0", oldPolicySplit[0]);
+            if(PolicyController.isjUnit()){
+                queryData = controller.getDataByQuery(policyEntityquery, null);
+            }else{
+                queryData = controller.getDataByQuery(policyEntityquery, peParams);
+            }
+            if(!queryData.isEmpty()){
+                entity = (PolicyEntity) queryData.get(0);
+            }
+            if(entity != null){
+                cloneRecord(newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1],  newPolicySplit[0], newPolicySplit[1], entity, userId);
+                success = true;
+            }
+
+            if(success){
+                PolicyVersion entityItem = new PolicyVersion();
+                entityItem.setActiveVersion(Integer.parseInt(version));
+                entityItem.setHigherVersion(Integer.parseInt(version));
+                entityItem.setPolicyName(policyName);
+                entityItem.setCreatedBy(userId);
+                entityItem.setModifiedBy(userId);
+                entityItem.setModifiedDate(new Date());
+                controller.saveData(entityItem);
+            }
+
+            LOGGER.debug("copy from: {} to: {}" + oldPath +newPath);
+
+            return success();
+        } catch (Exception e) {
+            LOGGER.error("copy", e);
+            return error(e.getMessage());
+        }
+    }
+
+    //Delete Policy or Scope Functionality
+    private JSONObject delete(JSONObject params, HttpServletRequest request) throws ServletException {
+        PolicyController controller = getPolicyControllerInstance();
+        PolicyRestController restController = new PolicyRestController();
+        PolicyEntity policyEntity = null;
+        String policyNamewithoutExtension;
+        try {
+            String userId = UserUtils.getUserSession(request).getOrgUserId();
+            String deleteVersion = "";
+            String path = params.getString("path");
+            LOGGER.debug("delete {}" +path);
+            if(params.has("deleteVersion")){
+                deleteVersion  = params.getString("deleteVersion");
+            }
+            path = path.substring(path.indexOf('/')+1);
+            String policyNamewithExtension = path.replace("/", File.separator);
+            String policyVersionName = policyNamewithExtension.replace(".xml", "");
+            String query;
+            SimpleBindings policyParams = new SimpleBindings();
+            if(path.endsWith(".xml")){
+                policyNamewithoutExtension = policyVersionName.substring(0, policyVersionName.lastIndexOf('.'));
+                policyNamewithoutExtension = policyNamewithoutExtension.replace(File.separator, ".");
+                String splitPolicyName = null;
+                if(policyNamewithoutExtension.contains("Config_")){
+                    splitPolicyName = policyNamewithoutExtension.replace(".Config_", ":Config_");
+                }else if(policyNamewithoutExtension.contains("Action_")){
+                    splitPolicyName = policyNamewithoutExtension.replace(".Action_", ":Action_");
+                }else if(policyNamewithoutExtension.contains("Decision_")){
+                    splitPolicyName = policyNamewithoutExtension.replace(".Decision_", ":Decision_");
+                }
+                String[] split = splitPolicyName.split(":");
+
+                query = "FROM PolicyEntity where policyName like :split_1 and scope = :split_0";
+                policyParams.put("split_1", split[1] + "%");
+                policyParams.put("split_0", split[0]);
+            }else{
+                policyNamewithoutExtension = path.replace(File.separator, ".");
+                query = "FROM PolicyEntity where scope like :policyNamewithoutExtension";
+                policyParams.put("policyNamewithoutExtension", policyNamewithoutExtension + "%");
+            }
+
+            List<Object> policyEntityobjects = controller.getDataByQuery(query, policyParams);
+            String activePolicyName = null;
+            boolean pdpCheck = false;
+            if(path.endsWith(".xml")){
+                policyNamewithoutExtension = policyNamewithoutExtension.replace(".", File.separator);
+                int version = Integer.parseInt(policyVersionName.substring(policyVersionName.indexOf('.')+1));
+                if("ALL".equals(deleteVersion)){
+                    if(!policyEntityobjects.isEmpty()){
+                        for(Object object : policyEntityobjects){
+                            policyEntity = (PolicyEntity) object;
+                            String groupEntityquery = "from PolicyGroupEntity where policyid ='"+policyEntity.getPolicyId()+"'";
+                            SimpleBindings pgeParams = new SimpleBindings();
+                            List<Object> groupobject = controller.getDataByQuery(groupEntityquery, pgeParams);
+                            if(!groupobject.isEmpty()){
+                                pdpCheck = true;
+                                activePolicyName = policyEntity.getScope() +"."+ policyEntity.getPolicyName();
+                            }else{
+                                //Delete the entity from Elastic Search Database
+                                String searchFileName = policyEntity.getScope() + "." + policyEntity.getPolicyName();
+                                restController.deleteElasticData(searchFileName);
+                                //Delete the entity from Policy Entity table
+                                controller.deleteData(policyEntity);
+                                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());
+                                }
+                            }
+                        }
+                    }
+                    //Policy Notification
+                    PolicyVersion versionEntity = new PolicyVersion();
+                    versionEntity.setPolicyName(policyNamewithoutExtension);
+                    versionEntity.setModifiedBy(userId);
+                    controller.watchPolicyFunction(versionEntity, policyNamewithExtension, "DeleteAll");
+                    if(pdpCheck){
+                        //Delete from policyVersion table
+                        String getActivePDPPolicyVersion = activePolicyName.replace(".xml", "");
+                        getActivePDPPolicyVersion = getActivePDPPolicyVersion.substring(getActivePDPPolicyVersion.lastIndexOf('.')+1);
+                        String policyVersionQuery = "update PolicyVersion set active_version='"+getActivePDPPolicyVersion+"' , highest_version='"+getActivePDPPolicyVersion+"'  where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0";
+                        if(policyVersionQuery != null){
+                            controller.executeQuery(policyVersionQuery);
+                        }
+                        return error("Policies with Same name has been deleted. Except the Active Policy in PDP.     PolicyName: "+activePolicyName);
+                    }else{
+                        //No Active Policy in PDP. So, deleting all entries from policyVersion table
+                        String policyVersionQuery = "delete from PolicyVersion  where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0";
+                        if(policyVersionQuery != null){
+                            controller.executeQuery(policyVersionQuery);
+                        }
+                    }
+                }else if("CURRENT".equals(deleteVersion)){
+                    String currentVersionPolicyName = policyNamewithExtension.substring(policyNamewithExtension.lastIndexOf(File.separator)+1);
+                    String currentVersionScope = policyNamewithExtension.substring(0, policyNamewithExtension.lastIndexOf(File.separator)).replace(File.separator, ".");
+                    query = "FROM PolicyEntity where policyName = :currentVersionPolicyName and scope = :currentVersionScope";
+
+                    SimpleBindings peParams = new SimpleBindings();
+                    peParams.put("currentVersionPolicyName", currentVersionPolicyName);
+                    peParams.put("currentVersionScope", currentVersionScope);
+
+                    List<Object> policyEntitys = controller.getDataByQuery(query, peParams);
+                    if(!policyEntitys.isEmpty()){
+                        policyEntity = (PolicyEntity) policyEntitys.get(0);
+                    }
+                    if(policyEntity != null){
+                        String groupEntityquery = "from PolicyGroupEntity where policyid = :policyEntityId and policyid > 0";
+                        SimpleBindings geParams = new SimpleBindings();
+                        geParams.put("policyEntityId", policyEntity.getPolicyId());
+                        List<Object> groupobject = controller.getDataByQuery(groupEntityquery, geParams);
+                        if(groupobject.isEmpty()){
+                            //Delete the entity from Elastic Search Database
+                            String searchFileName = policyEntity.getScope() + "." + policyEntity.getPolicyName();
+                            restController.deleteElasticData(searchFileName);
+                            //Delete the entity from Policy Entity table
+                            controller.deleteData(policyEntity);
+                            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){
+                                int highestVersion = 0;
+                                if(!policyEntityobjects.isEmpty()){
+                                    for(Object object : policyEntityobjects){
+                                        policyEntity = (PolicyEntity) object;
+                                        String policyEntityName = policyEntity.getPolicyName().replace(".xml", "");
+                                        int policyEntityVersion = Integer.parseInt(policyEntityName.substring(policyEntityName.lastIndexOf('.')+1));
+                                        if(policyEntityVersion > highestVersion && policyEntityVersion != version){
+                                            highestVersion = policyEntityVersion;
+                                        }
+                                    }
+                                }
+
+                                //Policy Notification
+                                PolicyVersion entity = new PolicyVersion();
+                                entity.setPolicyName(policyNamewithoutExtension);
+                                entity.setActiveVersion(highestVersion);
+                                entity.setModifiedBy(userId);
+                                controller.watchPolicyFunction(entity, policyNamewithExtension, "DeleteOne");
+
+                                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";
+                                if(policyVersionQuery != null){
+                                    controller.executeQuery(policyVersionQuery);
+                                }
+                            }
+                        }else{
+                            return error("Policy can't be deleted, it is active in PDP Groups.     PolicyName: '"+policyEntity.getScope() + "." +policyEntity.getPolicyName()+"'");
+                        }
+                    }
+                }
+            }else{
+                List<String> activePoliciesInPDP = new ArrayList<>();
+                if(!policyEntityobjects.isEmpty()){
+                    for(Object object : policyEntityobjects){
+                        policyEntity = (PolicyEntity) object;
+                        String groupEntityquery = "from PolicyGroupEntity where policyid = :policyEntityId";
+                        SimpleBindings geParams = new SimpleBindings();
+                        geParams.put("policyEntityId", policyEntity.getPolicyId());
+                        List<Object> groupobject = controller.getDataByQuery(groupEntityquery, geParams);
+                        if(!groupobject.isEmpty()){
+                            pdpCheck = true;
+                            activePoliciesInPDP.add(policyEntity.getScope()+"."+policyEntity.getPolicyName());
+                        }else{
+                            //Delete the entity from Elastic Search Database
+                            String searchFileName = policyEntity.getScope() + "." + policyEntity.getPolicyName();
+                            restController.deleteElasticData(searchFileName);
+                            //Delete the entity from Policy Entity table
+                            controller.deleteData(policyEntity);
+                            policyNamewithoutExtension = policyEntity.getPolicyName();
+                            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());
+                            }
+                        }
+                    }
+                    //Delete from policyVersion and policyEditor Scope table
+                    String policyVersionQuery = "delete PolicyVersion where POLICY_NAME like '"+path.replace("\\", "\\\\")+"%' and id >0";
+                    controller.executeQuery(policyVersionQuery);
+
+                    //Policy Notification
+                    PolicyVersion entity = new PolicyVersion();
+                    entity.setPolicyName(path);
+                    entity.setModifiedBy(userId);
+                    controller.watchPolicyFunction(entity, path, "DeleteScope");
+                    if(pdpCheck){
+                        //Add Active Policies List to PolicyVersionTable
+                        for(int i =0; i < activePoliciesInPDP.size(); i++){
+                            String activePDPPolicyName = activePoliciesInPDP.get(i).replace(".xml", "");
+                            int activePDPPolicyVersion = Integer.parseInt(activePDPPolicyName.substring(activePDPPolicyName.lastIndexOf('.')+1));
+                            activePDPPolicyName = activePDPPolicyName.substring(0, activePDPPolicyName.lastIndexOf('.')).replace(".", File.separator);
+                            PolicyVersion insertactivePDPVersion = new PolicyVersion();
+                            insertactivePDPVersion.setPolicyName(activePDPPolicyName);
+                            insertactivePDPVersion.setHigherVersion(activePDPPolicyVersion);
+                            insertactivePDPVersion.setActiveVersion(activePDPPolicyVersion);
+                            insertactivePDPVersion.setCreatedBy(userId);
+                            insertactivePDPVersion.setModifiedBy(userId);
+                            controller.saveData(insertactivePDPVersion);
+                        }
+
+                        return error("All the Policies has been deleted in Scope. Except the following list of Policies:"+activePoliciesInPDP);
+                    }else{
+                        String policyScopeQuery = "delete PolicyEditorScopes where SCOPENAME like '"+path.replace("\\", "\\\\")+"%' and id >0";
+                        controller.executeQuery(policyScopeQuery);
+                    }
+                }else{
+                    String policyScopeQuery = "delete PolicyEditorScopes where SCOPENAME like '"+path.replace("\\", "\\\\")+"%' and id >0";
+                    controller.executeQuery(policyScopeQuery);
+                }
+            }
+            return success();
+        } catch (Exception e) {
+            LOGGER.error("delete", e);
+            return error(e.getMessage());
+        }
+    }
+
+    //Edit the Policy
+    private JSONObject editFile(JSONObject params) throws ServletException {
+        // get content
+        try {
+            PolicyController controller = getPolicyControllerInstance();
+            String mode = params.getString("mode");
+            String path = params.getString("path");
+            LOGGER.debug("editFile path: {}"+ path);
+
+            String domain = path.substring(1, path.lastIndexOf('/'));
+            domain = domain.replace("/", ".");
+
+            path = path.substring(1);
+            path = path.replace("/", ".");
+            String dbCheckName = path;
+            if(dbCheckName.contains("Config_")){
+                dbCheckName = dbCheckName.replace(".Config_", ":Config_");
+            }else if(dbCheckName.contains("Action_")){
+                dbCheckName = dbCheckName.replace(".Action_", ":Action_");
+            }else if(dbCheckName.contains("Decision_")){
+                dbCheckName = dbCheckName.replace(".Decision_", ":Decision_");
+            }
+
+            String[] split = dbCheckName.split(":");
+            String query = "FROM PolicyEntity where policyName = :split_1 and scope = :split_0";
+            SimpleBindings peParams = new SimpleBindings();
+            peParams.put("split_1", split[1]);
+            peParams.put("split_0", split[0]);
+            List<Object> queryData;
+            if(PolicyController.isjUnit()){
+                queryData = controller.getDataByQuery(query, null);
+            }else{
+                queryData = controller.getDataByQuery(query, peParams);
+            }
+            PolicyEntity entity = (PolicyEntity) queryData.get(0);
+            InputStream stream = new ByteArrayInputStream(entity.getPolicyData().getBytes(StandardCharsets.UTF_8));
+
+
+            Object policy = XACMLPolicyScanner.readPolicy(stream);
+            PolicyRestAdapter policyAdapter  = new PolicyRestAdapter();
+            policyAdapter.setData(policy);
+
+            if("viewPolicy".equalsIgnoreCase(mode)){
+                policyAdapter.setReadOnly(true);
+                policyAdapter.setEditPolicy(false);
+            }else{
+                policyAdapter.setReadOnly(false);
+                policyAdapter.setEditPolicy(true);
+            }
+
+            policyAdapter.setDomainDir(domain);
+            policyAdapter.setPolicyData(policy);
+            String policyName = path.replace(".xml", "");
+            policyName = policyName.substring(0, policyName.lastIndexOf('.'));
+            policyAdapter.setPolicyName(policyName.substring(policyName.lastIndexOf('.')+1));
+
+            PolicyAdapter setpolicyAdapter = PolicyAdapter.getInstance();
+            setpolicyAdapter.configure(policyAdapter,entity);
+
+            policyAdapter.setParentPath(null);
+            ObjectMapper mapper = new ObjectMapper();
+            String json = mapper.writeValueAsString(policyAdapter);
+            JsonNode jsonNode = mapper.readTree(json);
+
+            return new JSONObject().put(RESULT, jsonNode);
+        } catch (Exception e) {
+            LOGGER.error("editFile", e);
+            return error(e.getMessage());
+        }
+    }
+
+    //Add Scopes
+    private JSONObject addFolder(JSONObject params, HttpServletRequest request) throws ServletException {
+        PolicyController controller = getPolicyControllerInstance();
+        String name = "";
+        try {
+            String userId = UserUtils.getUserSession(request).getOrgUserId();
+            String path = params.getString("path");
+            try{
+                if(params.has("subScopename")){
+                    if(! "".equals(params.getString("subScopename"))) {
+                        name = params.getString("path").replace("/", File.separator) + File.separator +params.getString("subScopename");
+                    }
+                }else{
+                    name = params.getString("name");
+                }
+            }catch(Exception e){
+                name = params.getString("name");
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While Adding Scope"+e);
+            }
+            String validateName;
+            if(name.contains(File.separator)){
+                validateName = name.substring(name.lastIndexOf(File.separator)+1);
+            }else{
+                validateName = name;
+            }
+            if(!name.isEmpty()){
+                String validate = PolicyUtils.policySpecialCharValidator(validateName);
+                if(!validate.contains("success")){
+                    return error(validate);
+                }
+            }
+            LOGGER.debug("addFolder path: {} name: {}" + path +name);
+            if(! "".equals(name)){
+                if(name.startsWith(File.separator)){
+                    name = name.substring(1);
+                }
+                PolicyEditorScopes entity = (PolicyEditorScopes) controller.getEntityItem(PolicyEditorScopes.class, "scopeName", name);
+                if(entity == null){
+                    UserInfo userInfo = new UserInfo();
+                    userInfo.setUserLoginId(userId);
+                    PolicyEditorScopes newScope = new PolicyEditorScopes();
+                    newScope.setScopeName(name);
+                    newScope.setUserCreatedBy(userInfo);
+                    newScope.setUserModifiedBy(userInfo);
+                    controller.saveData(newScope);
+                }else{
+                    return error("Scope Already Exists");
+                }
+            }
+            return success();
+        } catch (Exception e) {
+            LOGGER.error("addFolder", e);
+            return error(e.getMessage());
+        }
+    }
+
+    //Return Error Object
+    private JSONObject error(String msg) throws ServletException {
+        try {
+            JSONObject result = new JSONObject();
+            result.put("success", false);
+            result.put("error", msg);
+            return new JSONObject().put(RESULT, result);
+        } catch (JSONException e) {
+            throw new ServletException(e);
+        }
+    }
+
+    //Return Success Object
+    private JSONObject success() throws ServletException {
+        try {
+            JSONObject result = new JSONObject();
+            result.put("success", true);
+            result.put("error", (Object) null);
+            return new JSONObject().put(RESULT, result);
+        } catch (JSONException e) {
+            throw new ServletException(e);
+        }
+    }
+
+    private PolicyController getPolicyControllerInstance(){
+        return policyController != null ? getPolicyController() : new PolicyController();
+    }
+
+    public String getTestUserId() {
+        return testUserId;
+    }
+
+    public static void setTestUserId(String testUserId) {
+        PolicyManagerServlet.testUserId = testUserId;
+    }
+}
\ No newline at end of file
index 2eba697..0ece5ca 100644 (file)
@@ -289,12 +289,7 @@ public class PolicyRestController extends RestrictedBaseController{
                     connection.setRequestProperty("Content-Type",PolicyController.getContenttype());
                     ObjectMapper mapper = new ObjectMapper();
                     mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                     connection.setRequestProperty("Content-Type",PolicyController.getContenttype());
                     ObjectMapper mapper = new ObjectMapper();
                     mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-                    JsonNode root = null;
-                    try {
-                        root = mapper.readTree(request.getReader());
-                    }catch (Exception e1) {
-                        policyLogger.error("Exception Occured while calling PAP"+e1);
-                    }
+                    JsonNode root = getJsonNode(request, mapper);
 
                     ObjectMapper mapper1 = new ObjectMapper();
                     mapper1.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
 
                     ObjectMapper mapper1 = new ObjectMapper();
                     mapper1.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
@@ -330,30 +325,7 @@ public class PolicyRestController extends RestrictedBaseController{
                     }
                 }
             }
                     }
                 }
             }
-
-            connection.connect();
-
-            int responseCode = connection.getResponseCode();
-            if(responseCode == 200){
-                // get the response content into a String
-                String responseJson = null;
-                // read the inputStream into a buffer (trick found online scans entire input looking for end-of-file)
-                try(java.util.Scanner scanner = new java.util.Scanner(connection.getInputStream())) {
-                    scanner.useDelimiter("\\A");
-                    responseJson = scanner.hasNext() ? scanner.next() : "";
-                } catch (Exception e){
-                    //Reason for rethrowing the exception is if any exception occurs during reading of inputsteam
-                    //then the exception handling is done by the outer block without returning the response immediately
-                    //Also finally block is existing only in outer block and not here so all exception handling is
-                    //done in only one place
-                    policyLogger.error("Exception Occured"+e);
-                    throw e;
-                }
-
-                policyLogger.info("JSON response from PAP: " + responseJson);
-                return responseJson;
-            }
-
+            return doConnect(connection);
         } catch (Exception e) {
             policyLogger.error("Exception Occured"+e);
         }finally{
         } catch (Exception e) {
             policyLogger.error("Exception Occured"+e);
         }finally{
@@ -377,6 +349,41 @@ public class PolicyRestController extends RestrictedBaseController{
         return null;
     }
 
         return null;
     }
 
+    private JsonNode getJsonNode(HttpServletRequest request, ObjectMapper mapper) {
+        JsonNode root = null;
+        try {
+            root = mapper.readTree(request.getReader());
+        }catch (Exception e1) {
+            policyLogger.error("Exception Occured while calling PAP"+e1);
+        }
+        return root;
+    }
+
+    private String doConnect(final HttpURLConnection connection) throws IOException{
+        connection.connect();
+        int responseCode = connection.getResponseCode();
+        if(responseCode == 200){
+            // get the response content into a String
+            String responseJson = null;
+            // read the inputStream into a buffer (trick found online scans entire input looking for end-of-file)
+            try(java.util.Scanner scanner = new java.util.Scanner(connection.getInputStream())) {
+                scanner.useDelimiter("\\A");
+                responseJson = scanner.hasNext() ? scanner.next() : "";
+            } catch (Exception e){
+                //Reason for rethrowing the exception is if any exception occurs during reading of inputsteam
+                //then the exception handling is done by the outer block without returning the response immediately
+                //Also finally block is existing only in outer block and not here so all exception handling is
+                //done in only one place
+                policyLogger.error("Exception Occured"+e);
+                throw e;
+            }
+
+            policyLogger.info("JSON response from PAP: " + responseJson);
+            return responseJson;
+        }
+        return null;
+    }
+
     @RequestMapping(value={"/getDictionary/*"}, method={RequestMethod.GET})
     public void getDictionaryController(HttpServletRequest request, HttpServletResponse response){
         String uri = request.getRequestURI().replace("/getDictionary", "");
     @RequestMapping(value={"/getDictionary/*"}, method={RequestMethod.GET})
     public void getDictionaryController(HttpServletRequest request, HttpServletResponse response){
         String uri = request.getRequestURI().replace("/getDictionary", "");
index 53be099..0c87ad3 100644 (file)
@@ -405,19 +405,7 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
 
             if (contentObj != null) {
                 if (contentObj instanceof InputStream) {
 
             if (contentObj != null) {
                 if (contentObj instanceof InputStream) {
-                    try {
-                        //
-                        // Send our current policy configuration
-                        //
-                        try (OutputStream os = connection.getOutputStream()) {
-                        int count = IOUtils.copy((InputStream)contentObj, os);
-                            if (LOGGER.isDebugEnabled()) {
-                                LOGGER.debug("copied to output, bytes="+count);
-                            }
-                        }
-                    } catch (Exception e) {
-                        LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to write content in '" + method + "'", e);
-                    }
+                    sendCurrPolicyConfig(method, connection, (InputStream) contentObj);
                 } else {
                     // The contentObj is an object to be encoded in JSON
                     ObjectMapper mapper = new ObjectMapper();
                 } else {
                     // The contentObj is an object to be encoded in JSON
                     ObjectMapper mapper = new ObjectMapper();
@@ -453,16 +441,7 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
                     return successMap;
                 } else {
                     // get the response content into a String
                     return successMap;
                 } else {
                     // get the response content into a String
-                    String json = null;
-                    // read the inputStream into a buffer (trick found online scans entire input looking for end-of-file)
-                    try(java.util.Scanner scanner = new java.util.Scanner(connection.getInputStream())) {
-                        scanner.useDelimiter("\\A");
-                        json = scanner.hasNext() ? scanner.next() : "";
-                    } catch (Exception e){
-                        LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to read inputStream from connection: " + e, e);
-                        throw e;
-                    }
-                    LOGGER.info("JSON response from PAP: " + json);
+                    String json = getJsonString(connection);
 
                     // convert Object sent as JSON into local object
                     ObjectMapper mapper = new ObjectMapper();
 
                     // convert Object sent as JSON into local object
                     ObjectMapper mapper = new ObjectMapper();
@@ -517,4 +496,34 @@ public class RESTfulPAPEngine extends StdPDPItemSetChangeNotifier implements PAP
             }
         }
     }
             }
         }
     }
+
+    private void sendCurrPolicyConfig(String method, final HttpURLConnection connection, InputStream contentObj) {
+        try {
+            //
+            // Send our current policy configuration
+            //
+            try (OutputStream os = connection.getOutputStream()) {
+            int count = IOUtils.copy(contentObj, os);
+                if (LOGGER.isDebugEnabled()) {
+                    LOGGER.debug("copied to output, bytes="+count);
+                }
+            }
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to write content in '" + method + "'", e);
+        }
+    }
+
+    private String getJsonString(final HttpURLConnection connection) throws IOException {
+        String json = null;
+        // read the inputStream into a buffer (trick found online scans entire input looking for end-of-file)
+        try(java.util.Scanner scanner = new java.util.Scanner(connection.getInputStream())) {
+            scanner.useDelimiter("\\A");
+            json = scanner.hasNext() ? scanner.next() : "";
+        } catch (Exception e){
+            LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to read inputStream from connection: " + e, e);
+            throw e;
+        }
+        LOGGER.info("JSON response from PAP: " + json);
+        return json;
+    }
 }
 }