Fix for NullPointerException in ecomp-portal-BE-common
[portal.git] / ecomp-portal-BE-common / src / main / java / org / onap / portalapp / portal / controller / AppsControllerExternalRequest.java
index cef5fa7..0ae5aa8 100644 (file)
@@ -39,9 +39,15 @@ package org.onap.portalapp.portal.controller;
 
 import java.util.List;
 
+import java.util.Set;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import javax.validation.ConstraintViolation;
+import javax.validation.Valid;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
 import org.onap.portalapp.portal.domain.EPApp;
 import org.onap.portalapp.portal.domain.EPUser;
 import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
@@ -88,16 +94,12 @@ import io.swagger.annotations.ApiOperation;
 @EnableAspectJAutoProxy
 @EPAuditLog
 public class AppsControllerExternalRequest implements BasicAuthenticationController {
+       private static final ValidatorFactory VALIDATOR_FACTORY = Validation.buildDefaultValidatorFactory();
 
        private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsControllerExternalRequest.class);
 
        private static final String ONBOARD_APP = "/onboardApp";
 
-       // Where is this used?
-       public boolean isAuxRESTfulCall() {
-               return true;
-       }
-
        /**
         * For testing whether a user is a superadmin.
         */
@@ -145,23 +147,37 @@ public class AppsControllerExternalRequest implements BasicAuthenticationControl
        @RequestMapping(value = "/portalAdmin", method = RequestMethod.POST, produces = "application/json")
        @ResponseBody
        public PortalRestResponse<String> postPortalAdmin(HttpServletRequest request, HttpServletResponse response,
-                       @RequestBody EPUser epUser) {
+                       @Valid @RequestBody EPUser epUser) {
                EcompPortalUtils.logAndSerializeObject(logger, "postPortalAdmin", "request", epUser);
                PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
 
-               // Check mandatory fields.
-               if (epUser.getEmail() == null || epUser.getEmail().trim().length() == 0 //
-                               || epUser.getLoginId() == null || epUser.getLoginId().trim().length() == 0 //
-                               || epUser.getLoginPwd() == null) {
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
-                       portalResponse.setMessage("Missing required field: email, loginId, or loginPwd");
-                       return portalResponse;
-               }
+        if (epUser != null) {
+            Validator validator = VALIDATOR_FACTORY.getValidator();
+            Set<ConstraintViolation<EPUser>> constraintViolations = validator.validate(epUser);
+            if (!constraintViolations.isEmpty()) {
+                portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                portalResponse.setMessage("Data is not valid");
+                return portalResponse;
+            }
+        }
+
+        // Check mandatory fields.
+        if (epUser != null && (epUser.getEmail() == null || epUser.getEmail().trim().length() == 0 //
+                || epUser.getLoginId() == null || epUser.getLoginId().trim().length() == 0 //
+                || epUser.getLoginPwd() == null)) {
+            portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+            portalResponse.setMessage("Missing required field: email, loginId, or loginPwd");
+            return portalResponse;
+        }
 
                try {
-                       // Check for existing user; create if not found.
-                       List<EPUser> userList = userService.getUserByUserId(epUser.getOrgUserId());
-                       if (userList == null || userList.size() == 0) {
+            // Check for existing user; create if not found.
+            List<EPUser> userList = null;
+            if (epUser != null) {
+                userList = userService.getUserByUserId(epUser.getOrgUserId());
+            }
+
+                       if (userList == null || userList.isEmpty()) {
                                // Create user with first, last names etc.; do check for
                                // duplicates.
                                String userCreateResult = userService.saveNewUser(epUser, "Yes");
@@ -173,17 +189,22 @@ public class AppsControllerExternalRequest implements BasicAuthenticationControl
                        }
 
                        // Check for Portal admin status; promote if not.
-                       if (adminRolesService.isSuperAdmin(epUser)) {
-                               portalResponse.setStatus(PortalRestStatusEnum.OK);
-                       } else {
-                               FieldsValidator fv = portalAdminService.createPortalAdmin(epUser.getOrgUserId());
-                               if (fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
-                                       portalResponse.setStatus(PortalRestStatusEnum.OK);
-                               } else {
-                                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
-                                       portalResponse.setMessage(fv.toString());
-                               }
-                       }
+            if (adminRolesService.isSuperAdmin(epUser)) {
+                portalResponse.setStatus(PortalRestStatusEnum.OK);
+            } else {
+                FieldsValidator fv = null;
+                if (epUser != null) {
+                    fv = portalAdminService.createPortalAdmin(epUser.getOrgUserId());
+                }
+                if (fv != null && fv.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+                    portalResponse.setStatus(PortalRestStatusEnum.OK);
+                } else {
+                    portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                    if (fv != null) {
+                        portalResponse.setMessage(fv.toString());
+                    }
+                }
+            }
                } catch (Exception ex) {
                        // Uncaught exceptions yield 404 and an empty error page
                        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
@@ -248,34 +269,50 @@ public class AppsControllerExternalRequest implements BasicAuthenticationControl
        @RequestMapping(value = { ONBOARD_APP }, method = RequestMethod.POST, produces = "application/json")
        @ResponseBody
        public PortalRestResponse<String> postOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,
-                       @RequestBody OnboardingApp newOnboardApp) {
+                       @Valid @RequestBody OnboardingApp newOnboardApp) {
                EcompPortalUtils.logAndSerializeObject(logger, "postOnboardAppExternal", "request", newOnboardApp);
                PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
-
+               if (newOnboardApp != null){
+                       Validator validator = VALIDATOR_FACTORY.getValidator();
+                       Set<ConstraintViolation<OnboardingApp>> constraintViolations = validator.validate(newOnboardApp);
+                       if (!constraintViolations.isEmpty()){
+                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                               portalResponse.setMessage("Data is not valid");
+                               return portalResponse;
+                       }
+               }
                // Validate fields
-               if (newOnboardApp.id != null) {
+               if (newOnboardApp != null && newOnboardApp.id != null) {
                        portalResponse.setStatus(PortalRestStatusEnum.ERROR);
                        portalResponse.setMessage("Unexpected field: id");
                        return portalResponse;
                }
-               if (newOnboardApp.name == null || newOnboardApp.name.trim().length() == 0 //
-                               || newOnboardApp.url == null || newOnboardApp.url.trim().length() == 0 //
-                               || newOnboardApp.restUrl == null || newOnboardApp.restUrl.trim().length() == 0
-                               || newOnboardApp.myLoginsAppOwner == null || newOnboardApp.myLoginsAppOwner.trim().length() == 0
-                               || newOnboardApp.restrictedApp == null //
-                               || newOnboardApp.isOpen == null //
-                               || newOnboardApp.isEnabled == null) {
-                       portalResponse.setStatus(PortalRestStatusEnum.ERROR);
-                       portalResponse.setMessage(
-                                       "Missing required field: name, url, restUrl, restrictedApp, isOpen, isEnabled, myLoginsAppOwner");
-                       return portalResponse;
-               }
+        if (newOnboardApp != null && (newOnboardApp.name == null || newOnboardApp.name.trim().length() == 0 //
+                || newOnboardApp.url == null || newOnboardApp.url.trim().length() == 0 //
+                || newOnboardApp.restUrl == null || newOnboardApp.restUrl.trim().length() == 0
+                || newOnboardApp.myLoginsAppOwner == null || newOnboardApp.myLoginsAppOwner.trim().length() == 0
+                || newOnboardApp.restrictedApp == null //
+                || newOnboardApp.isOpen == null //
+                || newOnboardApp.isEnabled == null)) {
+            portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+            portalResponse.setMessage(
+                    "Missing required field: name, url, restUrl, restrictedApp, isOpen, isEnabled, myLoginsAppOwner");
+            return portalResponse;
+        }
 
                try {
-                       List<EPUser> userList = userService.getUserByUserId(newOnboardApp.myLoginsAppOwner);
-                       if (userList == null || userList.size() != 1) {
-                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
-                               portalResponse.setMessage("Failed to find user: " + newOnboardApp.myLoginsAppOwner);
+                   List<EPUser> userList = null;
+            if (newOnboardApp != null) {
+                userList = userService.getUserByUserId(newOnboardApp.myLoginsAppOwner);
+            }
+            if (userList == null || userList.size() != 1) {
+                portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                if (newOnboardApp != null) {
+                    portalResponse.setMessage("Failed to find user: " + newOnboardApp.myLoginsAppOwner);
+                } else {
+                    portalResponse.setMessage("Failed to find user");
+                }
+
                                return portalResponse;
                        }
 
@@ -335,22 +372,33 @@ public class AppsControllerExternalRequest implements BasicAuthenticationControl
        @RequestMapping(value = { ONBOARD_APP + "/{appId}" }, method = RequestMethod.PUT, produces = "application/json")
        @ResponseBody
        public PortalRestResponse<String> putOnboardAppExternal(HttpServletRequest request, HttpServletResponse response,
-                       @PathVariable("appId") Long appId, @RequestBody OnboardingApp oldOnboardApp) {
+                       @PathVariable("appId") Long appId, @Valid @RequestBody OnboardingApp oldOnboardApp) {
                EcompPortalUtils.logAndSerializeObject(logger, "putOnboardAppExternal", "request", oldOnboardApp);
                PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
+
+               if (oldOnboardApp != null){
+                       Validator validator = VALIDATOR_FACTORY.getValidator();
+                       Set<ConstraintViolation<OnboardingApp>> constraintViolations = validator.validate(oldOnboardApp);
+                       if (!constraintViolations.isEmpty()){
+                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                               portalResponse.setMessage("Data is not valid");
+                               return portalResponse;
+                       }
+               }
+
                // Validate fields.
-               if (oldOnboardApp.id == null || !appId.equals(oldOnboardApp.id)) {
+               if (oldOnboardApp !=null && (oldOnboardApp.id == null || !appId.equals(oldOnboardApp.id))) {
                        portalResponse.setStatus(PortalRestStatusEnum.ERROR);
                        portalResponse.setMessage("Unexpected value for field: id");
                        return portalResponse;
                }
-               if (oldOnboardApp.name == null || oldOnboardApp.name.trim().length() == 0 //
+               if (oldOnboardApp !=null && (oldOnboardApp.name == null || oldOnboardApp.name.trim().length() == 0 //
                                || oldOnboardApp.url == null || oldOnboardApp.url.trim().length() == 0 //
                                || oldOnboardApp.restUrl == null || oldOnboardApp.restUrl.trim().length() == 0
                                || oldOnboardApp.myLoginsAppOwner == null || oldOnboardApp.myLoginsAppOwner.trim().length() == 0
                                || oldOnboardApp.restrictedApp == null //
                                || oldOnboardApp.isOpen == null //
-                               || oldOnboardApp.isEnabled == null) {
+                               || oldOnboardApp.isEnabled == null)) {
                        portalResponse.setStatus(PortalRestStatusEnum.ERROR);
                        portalResponse.setMessage(
                                        "Missing required field: name, url, restUrl, restrictedApp, isOpen, isEnabled, myLoginsAppOwner");
@@ -358,12 +406,20 @@ public class AppsControllerExternalRequest implements BasicAuthenticationControl
                }
 
                try {
-                       List<EPUser> userList = userService.getUserByUserId(oldOnboardApp.myLoginsAppOwner);
-                       if (userList == null || userList.size() != 1) {
-                               portalResponse.setStatus(PortalRestStatusEnum.ERROR);
-                               portalResponse.setMessage("Failed to find user: " + oldOnboardApp.myLoginsAppOwner);
-                               return portalResponse;
-                       }
+            List<EPUser> userList = null;
+            if (oldOnboardApp != null) {
+                userList = userService.getUserByUserId(oldOnboardApp.myLoginsAppOwner);
+            }
+            if (userList == null || userList.size() != 1) {
+                portalResponse.setStatus(PortalRestStatusEnum.ERROR);
+                if (oldOnboardApp != null) {
+                    portalResponse.setMessage("Failed to find user: " + oldOnboardApp.myLoginsAppOwner);
+                } else {
+                    portalResponse.setMessage("Failed to find user");
+                }
+
+                return portalResponse;
+            }
 
                        EPUser epUser = userList.get(0);
                        // Check for Portal admin status