Initial OpenECOMP Portal commit
[portal.git] / ecomp-portal-BE / src / main / java / org / openecomp / portalapp / portal / controller / AppsController.java
diff --git a/ecomp-portal-BE/src/main/java/org/openecomp/portalapp/portal/controller/AppsController.java b/ecomp-portal-BE/src/main/java/org/openecomp/portalapp/portal/controller/AppsController.java
new file mode 100644 (file)
index 0000000..f460ce4
--- /dev/null
@@ -0,0 +1,470 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalapp.portal.controller;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.json.JSONObject;
+import org.openecomp.portalapp.controller.EPRestrictedBaseController;
+import org.openecomp.portalapp.portal.domain.AdminUserApplications;
+import org.openecomp.portalapp.portal.domain.AppIdAndNameTransportModel;
+import org.openecomp.portalapp.portal.domain.AppsResponse;
+import org.openecomp.portalapp.portal.domain.EPApp;
+import org.openecomp.portalapp.portal.domain.EPUser;
+import org.openecomp.portalapp.portal.domain.EcompApp;
+import org.openecomp.portalapp.portal.domain.UserRole;
+import org.openecomp.portalapp.portal.domain.UserRoles;
+import org.openecomp.portalapp.portal.ecomp.model.PortalRestResponse;
+import org.openecomp.portalapp.portal.ecomp.model.PortalRestStatusEnum;
+import org.openecomp.portalapp.portal.logging.aop.EPAuditLog;
+import org.openecomp.portalapp.portal.service.AdminRolesService;
+import org.openecomp.portalapp.portal.service.EPAppService;
+import org.openecomp.portalapp.portal.service.PersUserAppService;
+import org.openecomp.portalapp.portal.service.UserService;
+import org.openecomp.portalapp.portal.transport.FieldsValidator;
+import org.openecomp.portalapp.portal.transport.LocalRole;
+import org.openecomp.portalapp.portal.transport.OnboardingApp;
+import org.openecomp.portalapp.portal.utils.EcompPortalUtils;
+import org.openecomp.portalapp.util.EPUserUtils;
+
+@RestController
+@org.springframework.context.annotation.Configuration
+@EnableAspectJAutoProxy
+@EPAuditLog
+public class AppsController extends EPRestrictedBaseController {
+       
+       static final String FAILURE = "failure";
+       EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsController.class);
+
+       @Autowired
+       AdminRolesService adminRolesService;
+       @Autowired
+       EPAppService appService;
+       @Autowired
+       PersUserAppService persUserAppService;
+       @Autowired
+       UserService userService;
+
+       /**
+        * RESTful service method to fetch all Applications available to watch for
+        * current user
+        * 
+        * @return
+        */
+       @RequestMapping(value = { "/portalApi/userApps" }, method = RequestMethod.GET, produces = "application/json")
+       public List<EcompApp> getUserApps(HttpServletRequest request, HttpServletResponse response) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               List<EcompApp> ecompApps = null;
+
+               try {
+                       if (user == null) {
+                               EcompPortalUtils.setBadPermissions(user, response, "getUserApps");
+                       } else {
+                               ecompApps = appService.transformAppsToEcompApps(appService.getUserApps(user));
+                               EcompPortalUtils.logAndSerializeObject("/portalApi/userApps", "GET result =", ecompApps);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred while performing getUserApps operation, Details: "
+                                                       + EcompPortalUtils.getStackTrace(e));
+               }
+
+               return ecompApps;
+       }
+       
+       /**
+        * Create new application's contact us details.
+        * 
+        * @param contactUs
+        * @return
+        */
+       @RequestMapping(value = "/portalApi/saveNewUser", method = RequestMethod.POST, produces = "application/json")
+       public PortalRestResponse<String> saveNewUser(HttpServletRequest request,@RequestBody EPUser newUser) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               if (newUser == null)
+                       return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, FAILURE,
+                                       "New User cannot be null or empty");
+               
+               if (!(adminRolesService.isSuperAdmin(user) || adminRolesService.isAccountAdmin(user))){
+                       if(!user.getLoginId().equalsIgnoreCase(newUser.getLoginId()))
+                               return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, FAILURE,
+                                               "UnAuthorized");
+               }
+                       
+        String checkDuplicate = request.getParameter("isCheck");
+               String saveNewUser = FAILURE;
+               try {
+                       saveNewUser = userService.saveNewUser(newUser,checkDuplicate);
+               } catch (Exception e) {
+                       return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, saveNewUser, e.getMessage());
+               }
+               return new PortalRestResponse<String>(PortalRestStatusEnum.OK, saveNewUser, "");
+       }
+
+       /**
+        * RESTful service method to fetch all applications accessible to the
+        * current user, with personalizations.
+        * 
+        * @return
+        */
+       @RequestMapping(value = { "/portalApi/persUserApps" }, method = RequestMethod.GET, produces = "application/json")
+       public List<EcompApp> getPersUserApps(HttpServletRequest request, HttpServletResponse response) throws IOException {
+               EPUser user = EPUserUtils.getUserSession(request);
+               List<EcompApp> ecompApps = null;
+               try {
+                       if (user == null) {
+                               EcompPortalUtils.setBadPermissions(user, response, "getPersUserApps");
+                       } else {
+                               List<EPApp> apps = null;
+                               if (adminRolesService.isSuperAdmin(user))
+                                       apps = appService.getPersAdminApps(user);
+                               else
+                                       apps = appService.getPersUserApps(user);
+                               ecompApps = appService.transformAppsToEcompApps(apps);
+                               EcompPortalUtils.logAndSerializeObject("/portalApi/userPersApps", "GET result =", ecompApps);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "Failed in getPersUserApps", e);
+                       response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
+               }
+               return ecompApps;
+       }
+
+       /**
+        * RESTful service method to fetch applications for which the current user
+        * is an Administrator
+        * 
+        * @return
+        */
+       @RequestMapping(value = { "/portalApi/adminApps" }, method = RequestMethod.GET, produces = "application/json")
+       public List<AppIdAndNameTransportModel> getAdminApps(HttpServletRequest request, HttpServletResponse response) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               List<AppIdAndNameTransportModel> adminApps = null;
+
+               try {
+                       if (!adminRolesService.isAccountAdmin(user)) {
+                               EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
+                       } else {
+                               adminApps = appService.getAdminApps(user);
+                               EcompPortalUtils.logAndSerializeObject("/portalApi/adminApps", "GET result =", adminApps);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred while performing getAdminApps operation, Details: "
+                                                       + EcompPortalUtils.getStackTrace(e));
+               }
+
+               return adminApps;
+       }
+
+       /**
+        * RESTful service method to fetch Applications in which the logged in user
+        * is an Administrator
+        * 
+        * @return
+        */
+       @RequestMapping(value = {
+                       "/portalApi/appsForSuperAdminAndAccountAdmin" }, method = RequestMethod.GET, produces = "application/json")
+       public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(HttpServletRequest request,
+                       HttpServletResponse response) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               List<AppIdAndNameTransportModel> adminApps = null;
+
+               try {
+                       if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdmin(user)) {
+                               EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
+                       } else {
+                               adminApps = appService.getAppsForSuperAdminAndAccountAdmin(user);
+                               EcompPortalUtils.logAndSerializeObject("/portalApi/appsForSuperAdminAndAccountAdmin", "GET result =",
+                                               adminApps);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred while performing getAppsForSuperAdminAndAccountAdmin operation, Details: "
+                                                       + EcompPortalUtils.getStackTrace(e));
+               }
+
+               return adminApps;
+       }
+
+       /**
+        * RESTful service method to fetch Application Administrators to Super
+        * Administrator user. Attention: Users which have Super Administrator roles
+        * only are not included!
+        * 
+        * @return
+        */
+       @RequestMapping(value = { "/portalApi/accountAdmins" }, method = RequestMethod.GET, produces = "application/json")
+       public List<AdminUserApplications> getAppsAdministrators(HttpServletRequest request, HttpServletResponse response) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               List<AdminUserApplications> admins = null;
+
+               try {
+                       if (!adminRolesService.isSuperAdmin(user)) {
+                               EcompPortalUtils.setBadPermissions(user, response, "getAppsAdministrators");
+                       } else {
+                               admins = appService.getAppsAdmins();
+                               EcompPortalUtils.logAndSerializeObject("/portalApi/accountAdmins", "GET result =", admins);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred while performing getAppsAdministrators operation, Details: "
+                                                       + EcompPortalUtils.getStackTrace(e));
+               }
+
+               return admins;
+       }
+
+       @RequestMapping(value = { "/portalApi/availableApps" }, method = RequestMethod.GET, produces = "application/json")
+       public List<AppsResponse> getApps(HttpServletRequest request, HttpServletResponse response) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               List<AppsResponse> apps = null;
+               try {
+                       if (!adminRolesService.isSuperAdmin(user)) {
+                               EcompPortalUtils.setBadPermissions(user, response, "getApps");
+                       } else {
+                               apps = appService.getAllApps(false);
+                               EcompPortalUtils.logAndSerializeObject("/portalApi/availableApps", "GET result =", apps);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred while performing getApps operation, Details: "
+                                                       + EcompPortalUtils.getStackTrace(e));
+               }
+
+               return apps;
+       }
+
+       /**
+        * Gets all apps, both active and inactive; i.e., all on-boarded apps,
+        * regardless of enabled status.
+        * 
+        * @param request
+        * @param response
+        * @return List of applications
+        */
+       // This API returns
+       @RequestMapping(value = {
+                       "/portalApi/allAvailableApps" }, method = RequestMethod.GET, produces = "application/json")
+       public List<AppsResponse> getAllApps(HttpServletRequest request, HttpServletResponse response) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               List<AppsResponse> apps = null;
+               try {
+                       if (!adminRolesService.isSuperAdmin(user)) {
+                               EcompPortalUtils.setBadPermissions(user, response, "getApps");
+                       } else {
+                               apps = appService.getAllApps(true);
+                               EcompPortalUtils.logAndSerializeObject("/portalApi/availableApps", "GET result =", apps);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "Failed in getAllApps", e);
+               }
+
+               return apps;
+       }
+
+       @RequestMapping(value = { "/portalApi/appsFullList" }, method = RequestMethod.GET, produces = "application/json")
+       public List<EcompApp> getAppsFullList(HttpServletRequest request, HttpServletResponse response) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               List<EcompApp> ecompApps = null;
+               if (user == null) {
+                       EcompPortalUtils.setBadPermissions(user, response, "getAppsFullList");
+               } else {
+                       ecompApps = appService.getEcompAppAppsFullList();
+                       EcompPortalUtils.logAndSerializeObject("/portalApi/appsFullList", "GET result =", ecompApps);
+               }
+
+               return ecompApps;
+       }
+
+       @RequestMapping(value = { "/portalApi/userProfile" }, method = RequestMethod.GET, produces = "application/json")
+       public UserRoles getUserProfile(HttpServletRequest request, HttpServletResponse response) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               UserRoles userAndRoles = null;
+               try {
+                       if (user == null) {
+                               EcompPortalUtils.setBadPermissions(user, response, "getUserProfile");
+                       } else {
+                               // Check database.
+                               userAndRoles = appService.getUserProfile(user.getLoginId());
+                               // If no roles are defined, treat this user as a guest.
+                               if (user.isGuest() || userAndRoles == null) {
+                                       logger.debug(EELFLoggerDelegate.debugLogger, "getUserProfile: treating user {} as guest",
+                                                       user.getLoginId());
+                                       UserRole userRole = new UserRole();
+                                       userRole.setOrgUserId(user.getLoginId());
+                                       userRole.setFirstName(user.getFirstName());
+                                       userRole.setLastName(user.getLastName());
+                                       userRole.setRoleId(-1L);
+                                       userRole.setRoleName("Guest");
+                                       userRole.setUser_Id(-1L);
+                                       userAndRoles = new UserRoles(userRole);
+                               }
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "Failed to get user names and roles", e);
+               }
+
+               EcompPortalUtils.logAndSerializeObject("/portalApi/userProfile", "getUserProfile result =", userAndRoles);
+               return userAndRoles;
+       }
+       
+       @RequestMapping(value = { "/portalApi/currentUserProfile/{loginId}" }, method = RequestMethod.GET, produces = "application/json")
+       public String getCurrentUserProfile(HttpServletRequest request, @PathVariable("loginId") String loginId) {
+               
+               Map<String,String> map = new HashMap<String,String>();
+               EPUser user = null;
+               try {
+                        user = (EPUser) userService.getUserByUserId(loginId).get(0);
+                        map.put("firstName", user.getFirstName());
+                    map.put("lastName", user.getLastName());
+                    map.put("email", user.getEmail());
+                        map.put("loginId", user.getLoginId());
+                        map.put("loginPwd",user.getLoginPwd());
+                        map.put("middleInitial",user.getMiddleInitial());
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "Failed to get user info", e);
+               }
+
+               JSONObject j = new JSONObject(map);;
+               return j.toString();
+       }
+
+       @RequestMapping(value = { "/portalApi/appRoles/{appId}" }, method = {
+                       RequestMethod.GET }, produces = "application/json")
+       public List<LocalRole> getAppRoles(HttpServletRequest request, @PathVariable("appId") Long appId) {
+               List<LocalRole> roleList = null;
+               try {
+                       roleList = appService.getAppRoles(appId);
+                       EcompPortalUtils.logAndSerializeObject("/portalApi/appRoles/" + appId, "GET result =", roleList);
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred while performing getAppRoles operation, Details: "
+                                                       + EcompPortalUtils.getStackTrace(e));
+               }
+
+               return roleList;
+       }
+
+       @RequestMapping(value = { "/portalApi/onboardingApps" }, method = RequestMethod.GET, produces = "application/json")
+       public List<OnboardingApp> getOnboardingApps(HttpServletRequest request, HttpServletResponse response) {
+               EPUser user = EPUserUtils.getUserSession(request);
+               List<OnboardingApp> onboardingApps = null;
+               try {
+                       if (!adminRolesService.isSuperAdmin(user)) {
+                               EcompPortalUtils.setBadPermissions(user, response, "getOnboardingApps");
+                       } else {
+                               onboardingApps = appService.getOnboardingApps();
+                               EcompPortalUtils.logAndSerializeObject("/portalApi/onboardingApps", "GET result =",
+                                               "onboardingApps of size " + onboardingApps.size());
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred while performing getOnboardingApps operation, Details: "
+                                                       + EcompPortalUtils.getStackTrace(e));
+               }
+
+               return onboardingApps;
+       }
+
+       @RequestMapping(value = { "/portalApi/onboardingApps" }, method = RequestMethod.PUT, produces = "application/json")
+       public FieldsValidator putOnboardingApp(HttpServletRequest request,
+                       @RequestBody OnboardingApp modifiedOnboardingApp, HttpServletResponse response) {
+               FieldsValidator fieldsValidator = null;
+               try {
+                       EPUser user = EPUserUtils.getUserSession(request);
+                       if (!adminRolesService.isSuperAdmin(user)) {
+                               EcompPortalUtils.setBadPermissions(user, response, "putOnboardingApp");
+                       } else {
+                               modifiedOnboardingApp.normalize();
+                               fieldsValidator = appService.modifyOnboardingApp(modifiedOnboardingApp, user);
+                               response.setStatus(fieldsValidator.httpStatusCode.intValue());
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred while performing putOnboardingApps operation, Details: "
+                                                       + EcompPortalUtils.getStackTrace(e));
+               }
+
+               EcompPortalUtils.logAndSerializeObject("/portalApi/onboardingApps", "PUT result =", response.getStatus());
+               return fieldsValidator;
+       }
+
+       @RequestMapping(value = { "/portalApi/onboardingApps" }, method = RequestMethod.POST, produces = "application/json")
+       public FieldsValidator postOnboardingApp(HttpServletRequest request, @RequestBody OnboardingApp newOnboardingApp,
+                       HttpServletResponse response) {
+               FieldsValidator fieldsValidator = null;
+               try {
+                       EPUser user = EPUserUtils.getUserSession(request);
+                       if (!adminRolesService.isSuperAdmin(user)) {
+                               EcompPortalUtils.setBadPermissions(user, response, "postOnboardingApps");
+                       } else {
+                               newOnboardingApp.normalize();
+                               fieldsValidator = appService.addOnboardingApp(newOnboardingApp, user);
+                               response.setStatus(fieldsValidator.httpStatusCode.intValue());
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "Exception occurred while performing postOnboardingApps operation, Details: "
+                                                       + EcompPortalUtils.getStackTrace(e));
+               }
+
+               EcompPortalUtils.logAndSerializeObject("/portalApi/onboardingApps", "POST result =", response.getStatus());
+               return fieldsValidator;
+       }
+
+       @RequestMapping(value = { "/portalApi/onboardingApps/{appId}" }, method = {
+                       RequestMethod.DELETE }, produces = "application/json")
+       public FieldsValidator deleteOnboardingApp(HttpServletRequest request, @PathVariable("appId") Long appId,
+                       HttpServletResponse response) {
+               FieldsValidator fieldsValidator = null;
+               ;
+               try {
+                       EPUser user = EPUserUtils.getUserSession(request);
+                       if (!adminRolesService.isSuperAdmin(user)) {
+                               EcompPortalUtils.setBadPermissions(user, response, "deleteOnboardingApps");
+                       } else {
+                               fieldsValidator = appService.deleteOnboardingApp(user, appId);
+                               response.setStatus(fieldsValidator.httpStatusCode.intValue());
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, EcompPortalUtils.getStackTrace(e));
+               }
+
+               EcompPortalUtils.logAndSerializeObject("/portalApi/onboardingApps" + appId, "DELETE result =",
+                               response.getStatus());
+               return fieldsValidator;
+       }
+}
\ No newline at end of file