Sonar cleanup in controllers etc
[policy/engine.git] / POLICY-SDK-APP / src / main / java / org / onap / policy / controller / AutoPushController.java
index 018668f..b5e17f2 100644 (file)
@@ -3,13 +3,14 @@
  * ONAP Policy Engine
  * ================================================================================
  * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019 Bell Canada
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
 package org.onap.policy.controller;
 
+import com.att.research.xacml.api.pap.PAPException;
+import com.att.research.xacml.api.pap.PDPPolicy;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -36,6 +41,9 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
 
 import javax.script.SimpleBindings;
 import javax.servlet.http.HttpServletRequest;
@@ -63,16 +71,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.att.research.xacml.api.pap.PAPException;
-import com.att.research.xacml.api.pap.PDPPolicy;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 @Controller
-@RequestMapping({ "/" })
+@RequestMapping({"/"})
 public class AutoPushController extends RestrictedBaseController {
 
     private static final Logger logger = FlexLogger.getLogger(AutoPushController.class);
@@ -82,11 +85,9 @@ public class AutoPushController extends RestrictedBaseController {
     CommonClassDao commonClassDao;
 
     private PDPGroupContainer container;
-    protected List<OnapPDPGroup> groups = Collections.synchronizedList(new ArrayList<OnapPDPGroup>());
-
     private PDPPolicyContainer policyContainer;
-
     private PolicyController policyController;
+    protected List<OnapPDPGroup> groups = Collections.synchronizedList(new ArrayList<>());
 
     public PolicyController getPolicyController() {
         return policyController;
@@ -96,8 +97,9 @@ public class AutoPushController extends RestrictedBaseController {
         this.policyController = policyController;
     }
 
-    private List<Object> data;
-
+    /**
+     * refreshGroups.
+     */
     public synchronized void refreshGroups() {
         synchronized (this.groups) {
             this.groups.clear();
@@ -116,36 +118,40 @@ public class AutoPushController extends RestrictedBaseController {
         return policyController != null ? getPolicyController() : new PolicyController();
     }
 
-    @RequestMapping(value = { "/get_AutoPushPoliciesContainerData" }, method = {
-            org.springframework.web.bind.annotation.RequestMethod.GET }, produces = MediaType.APPLICATION_JSON_VALUE)
+    private Set<String> addAllScopes(Roles userRole, Set<String> scopes) {
+        if (userRole.getScope() != null) {
+            scopes.addAll(Stream.of(userRole.getScope().split(",")).collect(Collectors.toSet()));
+        }
+        return scopes;
+    }
+
+    /**
+     * getPolicyGroupContainerData.
+     *
+     * @param request HttpServletRequest
+     * @param response HttpServletResponse
+     */
+    @RequestMapping(
+            value = {"/get_AutoPushPoliciesContainerData"},
+            method = {RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
     public void getPolicyGroupContainerData(HttpServletRequest request, HttpServletResponse response) {
         try {
-            Set<String> scopes;
-            List<String> roles;
-            data = new ArrayList<>();
-            String userId = UserUtils.getUserSession(request).getOrgUserId();
+            Set<String> scopes = new HashSet<>();
+            List<String> roles = new ArrayList<>();
+            List<Object> data = new ArrayList<>();
             Map<String, Object> model = new HashMap<>();
-            ObjectMapper mapper = new ObjectMapper();
+
+            String userId = UserUtils.getUserSession(request).getOrgUserId();
+
             PolicyController controller = policyController != null ? getPolicyController() : new PolicyController();
             List<Object> userRoles = controller.getRoles(userId);
-            roles = new ArrayList<>();
-            scopes = new HashSet<>();
             for (Object role : userRoles) {
                 Roles userRole = (Roles) role;
                 roles.add(userRole.getRole());
-                if (userRole.getScope() != null) {
-                    if (userRole.getScope().contains(",")) {
-                        String[] multipleScopes = userRole.getScope().split(",");
-                        for (int i = 0; i < multipleScopes.length; i++) {
-                            scopes.add(multipleScopes[i].replace("[", "").replace("]", "").replace("\"", "").trim());
-                        }
-                    } else {
-                        if (!"".equals(userRole.getScope())) {
-                            scopes.add(userRole.getScope().replace("[", "").replace("]", "").replace("\"", "").trim());
-                        }
-                    }
-                }
+                addAllScopes(userRole, scopes);
             }
+
             if (roles.contains("super-admin") || roles.contains("super-editor") || roles.contains("super-guest")) {
                 data = commonClassDao.getData(PolicyVersion.class);
             } else {
@@ -157,9 +163,7 @@ public class AutoPushController extends RestrictedBaseController {
                         params.put("scope", scope);
                         List<Object> filterdatas = commonClassDao.getDataByQuery(query, params);
                         if (filterdatas != null) {
-                            for (int i = 0; i < filterdatas.size(); i++) {
-                                data.add(filterdatas.get(i));
-                            }
+                            data.addAll(filterdatas);
                         }
                     }
                 } else {
@@ -169,21 +173,28 @@ public class AutoPushController extends RestrictedBaseController {
                     data.add(emptyPolicyName);
                 }
             }
+            ObjectMapper mapper = new ObjectMapper();
             model.put("policydatas", mapper.writeValueAsString(data));
             JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
-            JSONObject j = new JSONObject(msg);
-            response.getWriter().write(j.toString());
+            response.getWriter().write(new JSONObject(msg).toString());
         } catch (Exception e) {
-            logger.error("Exception Occured" + e);
+            logger.error("Exception Occurred" + e);
         }
     }
 
-    @RequestMapping(value = { "/auto_Push/PushPolicyToPDP.htm" }, method = {
-            org.springframework.web.bind.annotation.RequestMethod.POST })
+    /**
+     * pushPolicyToPDPGroup.
+     *
+     * @param request HttpServletRequest
+     * @param response HttpServletResponse
+     * @return ModelAndView
+     * @throws IOException IOException
+     */
+    @RequestMapping(value = {"/auto_Push/PushPolicyToPDP.htm"}, method = {RequestMethod.POST})
     public ModelAndView pushPolicyToPDPGroup(HttpServletRequest request, HttpServletResponse response)
             throws IOException {
         try {
-            ArrayList<Object> selectedPDPS = new ArrayList<>();
+            ArrayList<Object> selectedPdps = new ArrayList<>();
             ArrayList<String> selectedPoliciesInUI = new ArrayList<>();
             PolicyController controller = getPolicyControllerInstance();
             this.groups.addAll(controller.getPapEngine().getOnapPDPGroups());
@@ -194,29 +205,29 @@ public class AutoPushController extends RestrictedBaseController {
 
             String userId = UserUtils.getUserSession(request).getOrgUserId();
             logger.info(
-                    "****************************************Logging UserID while Pushing  Policy to PDP Group*****************************************");
+                    "**********************Logging UserID while Pushing  Policy to PDP Group***********************");
             logger.info("UserId:  " + userId + "Push Policy Data:  " + root.get("pushTabData").toString());
             logger.info(
-                    "***********************************************************************************************************************************");
+                    "**********************************************************************************************");
 
             AutoPushTabAdapter adapter = mapper.readValue(root.get("pushTabData").toString(), AutoPushTabAdapter.class);
             for (Object pdpGroupId : adapter.getPdpDatas()) {
-                LinkedHashMap<?, ?> selectedPDP = (LinkedHashMap<?, ?>) pdpGroupId;
+                LinkedHashMap<?, ?> selectedPdp = (LinkedHashMap<?, ?>) pdpGroupId;
                 for (OnapPDPGroup pdpGroup : this.groups) {
-                    if (pdpGroup.getId().equals(selectedPDP.get("id"))) {
-                        selectedPDPS.add(pdpGroup);
+                    if (pdpGroup.getId().equals(selectedPdp.get("id"))) {
+                        selectedPdps.add(pdpGroup);
                     }
                 }
             }
 
             for (Object policyId : adapter.getPolicyDatas()) {
                 LinkedHashMap<?, ?> selected = (LinkedHashMap<?, ?>) policyId;
-                String policyName = selected.get("policyName").toString() + "."
-                        + selected.get("activeVersion").toString() + ".xml";
+                String policyName =
+                        selected.get("policyName").toString() + "." + selected.get("activeVersion").toString() + ".xml";
                 selectedPoliciesInUI.add(policyName);
             }
 
-            for (Object pdpDestinationGroupId : selectedPDPS) {
+            for (Object pdpDestinationGroupId : selectedPdps) {
                 Set<PDPPolicy> currentPoliciesInGroup = new HashSet<>();
                 Set<PDPPolicy> selectedPolicies = new HashSet<>();
                 for (String policyId : selectedPoliciesInUI) {
@@ -224,16 +235,15 @@ public class AutoPushController extends RestrictedBaseController {
 
                     //
                     // Get the current selection
-                    String selectedItem = policyId;
                     //
-                    assert selectedItem != null;
+                    assert policyId != null;
                     // create the id of the target file
                     // Our standard for file naming is:
                     // <domain>.<filename>.<version>.xml
                     // since the file name usually has a ".xml", we need to strip
                     // that
                     // before adding the other parts
-                    String name = selectedItem.replace(File.separator, ".");
+                    String name = policyId.replace(File.separator, ".");
                     String id = name;
                     if (id.endsWith(".xml")) {
                         id = id.replace(".xml", "");
@@ -263,11 +273,9 @@ public class AutoPushController extends RestrictedBaseController {
                     BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
                     bw.write(policyEntity.getPolicyData());
                     bw.close();
-                    URI selectedURI = temp.toURI();
                     try {
-                        //
                         // Create the policy
-                        selectedPolicy = new StdPDPPolicy(name, true, id, selectedURI);
+                        selectedPolicy = new StdPDPPolicy(name, true, id, temp.toURI());
                     } catch (IOException e) {
                         logger.error("Unable to create policy '" + name + "': " + e.getMessage(), e);
                     }
@@ -324,36 +332,30 @@ public class AutoPushController extends RestrictedBaseController {
 
                 currentPoliciesInGroup.addAll(selectedPolicies);
                 updatedGroupObject.setPolicies(currentPoliciesInGroup);
-                this.container.updateGroup(updatedGroupObject);
+                this.container.updateGroup(updatedGroupObject, userId);
 
                 response.setCharacterEncoding(UTF8);
                 response.setContentType("application / json");
                 request.setCharacterEncoding(UTF8);
 
-                PrintWriter out = response.getWriter();
                 refreshGroups();
-                JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups));
-                JSONObject j = new JSONObject(msg);
-                out.write(j.toString());
-                //
-                // Why is this here? This defeats the purpose of the loop??
-                // Sonar says to remove it or make it conditional
-                //
-                return null;
+                response.getWriter().write(new JSONObject(
+                        new JsonMessage(mapper.writeValueAsString(groups))).toString());
             }
         } catch (Exception e) {
             response.setCharacterEncoding(UTF8);
             request.setCharacterEncoding(UTF8);
-            PrintWriter out = response.getWriter();
             logger.error(e);
-            out.write(PolicyUtils.CATCH_EXCEPTION);
+            response.getWriter().write(PolicyUtils.CATCH_EXCEPTION);
         }
         return null;
     }
 
+    /**
+     * removePDPGroup.
+     */
     @SuppressWarnings("unchecked")
-    @RequestMapping(value = { "/auto_Push/remove_GroupPolicies.htm" }, method = {
-            org.springframework.web.bind.annotation.RequestMethod.POST })
+    @RequestMapping(value = {"/auto_Push/remove_GroupPolicies.htm"}, method = {RequestMethod.POST})
     public ModelAndView removePDPGroup(HttpServletRequest request, HttpServletResponse response) throws IOException {
         try {
             PolicyController controller = getPolicyControllerInstance();
@@ -361,25 +363,23 @@ public class AutoPushController extends RestrictedBaseController {
             ObjectMapper mapper = new ObjectMapper();
             mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
             JsonNode root = mapper.readTree(request.getReader());
-            StdPDPGroup group = mapper.readValue(root.get("activePdpGroup").toString(), StdPDPGroup.class);
-            JsonNode removePolicyData = root.get("data");
+            final StdPDPGroup group = mapper.readValue(root.get("activePdpGroup").toString(), StdPDPGroup.class);
+            final JsonNode removePolicyData = root.get("data");
 
             String userId = UserUtils.getUserSession(request).getOrgUserId();
             logger.info(
-                    "****************************************Logging UserID while Removing Policy from PDP Group*****************************************");
+                    "**********************Logging UserID while Removing Policy from PDP Group*********************");
             logger.info("UserId:  " + userId + "PDP Group Data:  " + root.get("activePdpGroup").toString()
                     + "Remove Policy Data: " + root.get("data"));
             logger.info(
-                    "***********************************************************************************************************************************");
+                    "**********************************************************************************************");
 
             policyContainer = new PDPPolicyContainer(group);
             if (removePolicyData.size() > 0) {
-                for (int i = 0; i < removePolicyData.size(); i++) {
-                    String polData = removePolicyData.get(i).toString();
-                    this.policyContainer.removeItem(polData);
-                }
-                Set<PDPPolicy> changedPolicies = new HashSet<>();
-                changedPolicies.addAll((Collection<PDPPolicy>) this.policyContainer.getItemIds());
+                IntStream.range(0, removePolicyData.size()).mapToObj(i -> removePolicyData.get(i).toString())
+                        .forEach(polData -> this.policyContainer.removeItem(polData));
+                Set<PDPPolicy> changedPolicies =
+                        new HashSet<>((Collection<PDPPolicy>) this.policyContainer.getItemIds());
                 StdPDPGroup updatedGroupObject = new StdPDPGroup(group.getId(), group.isDefaultGroup(), group.getName(),
                         group.getDescription(), null);
                 updatedGroupObject.setPolicies(changedPolicies);
@@ -394,22 +394,14 @@ public class AutoPushController extends RestrictedBaseController {
             response.setContentType("application / json");
             request.setCharacterEncoding(UTF8);
 
-            PrintWriter out = response.getWriter();
             refreshGroups();
-            JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups));
-            JSONObject j = new JSONObject(msg);
-
-            out.write(j.toString());
-
-            return null;
+            response.getWriter().write(new JSONObject(new JsonMessage(mapper.writeValueAsString(groups))).toString());
         } catch (Exception e) {
             response.setCharacterEncoding(UTF8);
             request.setCharacterEncoding(UTF8);
-            PrintWriter out = response.getWriter();
             logger.error(e);
-            out.write(PolicyUtils.CATCH_EXCEPTION);
+            response.getWriter().write(PolicyUtils.CATCH_EXCEPTION);
         }
         return null;
     }
-
 }