2  * ================================================================================
\r 
   4  * ================================================================================
\r 
   5  * Copyright (C) 2017 AT&T Intellectual Property
\r 
   6  * ================================================================================
\r 
   7  * Licensed under the Apache License, Version 2.0 (the "License");
\r 
   8  * you may not use this file except in compliance with the License.
\r 
   9  * You may obtain a copy of the License at
\r 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
\r 
  13  * Unless required by applicable law or agreed to in writing, software
\r 
  14  * distributed under the License is distributed on an "AS IS" BASIS,
\r 
  15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r 
  16  * See the License for the specific language governing permissions and
\r 
  17  * limitations under the License.
\r 
  18  * ================================================================================
\r 
  20 package org.openecomp.portalapp.portal.controller;
\r 
  22 import java.io.IOException;
\r 
  23 import java.text.SimpleDateFormat;
\r 
  24 import java.util.ArrayList;
\r 
  25 import java.util.Collections;
\r 
  26 import java.util.Comparator;
\r 
  27 import java.util.Date;
\r 
  28 import java.util.HashMap;
\r 
  29 import java.util.List;
\r 
  30 import java.util.Map;
\r 
  32 import javax.servlet.http.HttpServletRequest;
\r 
  33 import javax.servlet.http.HttpServletResponse;
\r 
  35 import org.apache.cxf.transport.http.HTTPException;
\r 
  36 import org.json.JSONObject;
\r 
  37 import org.springframework.beans.factory.annotation.Autowired;
\r 
  38 import org.springframework.context.annotation.EnableAspectJAutoProxy;
\r 
  39 import org.springframework.web.bind.annotation.PathVariable;
\r 
  40 import org.springframework.web.bind.annotation.RequestBody;
\r 
  41 import org.springframework.web.bind.annotation.RequestMapping;
\r 
  42 import org.springframework.web.bind.annotation.RequestMethod;
\r 
  43 import org.springframework.web.bind.annotation.RequestParam;
\r 
  44 import org.springframework.web.bind.annotation.RestController;
\r 
  46 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
\r 
  47 import org.openecomp.portalsdk.core.service.UserProfileService;
\r 
  48 import org.openecomp.portalapp.controller.EPRestrictedBaseController;
\r 
  49 import org.openecomp.portalapp.portal.domain.EPUser;
\r 
  50 import org.openecomp.portalapp.portal.domain.SharedContext;
\r 
  51 import org.openecomp.portalapp.portal.logging.aop.EPAuditLog;
\r 
  52 import org.openecomp.portalapp.portal.service.AdminRolesService;
\r 
  53 import org.openecomp.portalapp.portal.service.EPAuditService;
\r 
  54 import org.openecomp.portalapp.portal.service.FunctionalMenuService;
\r 
  55 import org.openecomp.portalapp.portal.service.SearchService;
\r 
  56 import org.openecomp.portalapp.portal.service.SharedContextService;
\r 
  57 import org.openecomp.portalapp.portal.transport.BusinessCardApplicationRole;
\r 
  58 import org.openecomp.portalapp.portal.transport.BusinessCardApplicationRolesList;
\r 
  59 import org.openecomp.portalapp.portal.transport.FavoritesFunctionalMenuItem;
\r 
  60 import org.openecomp.portalapp.portal.transport.FavoritesFunctionalMenuItemJson;
\r 
  61 import org.openecomp.portalapp.portal.transport.FieldsValidator;
\r 
  62 import org.openecomp.portalapp.portal.transport.FunctionalMenuItem;
\r 
  63 import org.openecomp.portalapp.portal.transport.FunctionalMenuItemWithRoles;
\r 
  64 import org.openecomp.portalapp.portal.utils.EPCommonSystemProperties;
\r 
  65 import org.openecomp.portalapp.portal.utils.EcompPortalUtils;
\r 
  66 import org.openecomp.portalapp.util.EPUserUtils;
\r 
  69  * Supports menus at the top of the Portal app landing page.
\r 
  72 @org.springframework.context.annotation.Configuration
\r 
  73 @EnableAspectJAutoProxy
\r 
  75 public class FunctionalMenuController extends EPRestrictedBaseController {
\r 
  76         EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FunctionalMenuController.class);
\r 
  79         AdminRolesService adminRolesService;
\r 
  81         FunctionalMenuService functionalMenuService;
\r 
  83         SharedContextService sharedContextService;
\r 
  85         UserProfileService service;
\r 
  87         SearchService searchService;
\r 
  89         EPAuditService epAuditService;
\r 
  92          * RESTful service method to fetch all the FunctionalMenuItems.
\r 
  94          * @return List of FunctionalMenuItem objects
\r 
  96         @RequestMapping(value = { "/portalApi/functionalMenu" }, method = RequestMethod.GET, produces = "application/json")
\r 
  97         public List<FunctionalMenuItem> getMenuItems(HttpServletRequest request, HttpServletResponse response) {
\r 
  98                 // TODO: should only the superuser be allowed to use this API?
\r 
  99                 List<FunctionalMenuItem> menuItems = null;
\r 
 101                         menuItems = functionalMenuService.getFunctionalMenuItems();
\r 
 102                         functionalMenuService.assignHelpURLs(menuItems);
\r 
 103                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenu", "result =", menuItems);
\r 
 104                 } catch (Exception e) {
\r 
 105                         logger.error(EELFLoggerDelegate.errorLogger,
\r 
 106                                         "Exception occurred while calling functionalMenu. Details: " + EcompPortalUtils.getStackTrace(e));
\r 
 112          * RESTful service method to fetch all the FunctionalMenuItems, both active
\r 
 113          * and inactive, for the EditFunctionalMenu feature. Can only be accessed by
\r 
 114          * the portal admin.
\r 
 116          * @return List of FunctionalMenuItem objects
\r 
 118         @RequestMapping(value = {
\r 
 119                         "/portalApi/functionalMenuForEditing" }, method = RequestMethod.GET, produces = "application/json")
\r 
 120         public List<FunctionalMenuItem> getMenuItemsForEditing(HttpServletRequest request, HttpServletResponse response) {
\r 
 121                 // TODO: should only the superuser be allowed to use this API?
\r 
 122                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 123                 List<FunctionalMenuItem> menuItems = null;
\r 
 125                         if (!adminRolesService.isSuperAdmin(user)) {
\r 
 126                                 EcompPortalUtils.setBadPermissions(user, response, "getFunctionalMenuItemDetails");
\r 
 128                                 menuItems = functionalMenuService.getFunctionalMenuItems(true);
\r 
 130                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForEditing", "result =", menuItems);
\r 
 131                 } catch (Exception e) {
\r 
 132                         logger.error(EELFLoggerDelegate.errorLogger,
\r 
 133                                         "Exception occurred while calling functionalMenuForEditing. Details: "
\r 
 134                                                         + EcompPortalUtils.getStackTrace(e));
\r 
 140          * RESTful service method to fetch all the FunctionalMenuItems,  active
\r 
 141          *, for the Functional menu in notification Tree feature.
\r 
 143          * @return List of FunctionalMenuItem objects
\r 
 145         @RequestMapping(value = {
\r 
 146                         "/portalApi/functionalMenuForNotificationTree" }, method = RequestMethod.GET, produces = "application/json")
\r 
 147         public List<FunctionalMenuItem> getMenuItemsForNotifications(HttpServletRequest request, HttpServletResponse response) {
\r 
 148                 // TODO: should only the superuser be allowed to use this API?
\r 
 149                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 150                 List<FunctionalMenuItem> menuItems = null;
\r 
 152                         menuItems = functionalMenuService.getFunctionalMenuItemsForNotificationTree(true);
\r 
 153                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForNotificationTree", "result =", menuItems);
\r 
 154                 } catch (Exception e) {
\r 
 155                         logger.error(EELFLoggerDelegate.errorLogger,
\r 
 156                                         "Exception occurred while calling functionalMenuForNotifications. Details: "
\r 
 157                                                         + EcompPortalUtils.getStackTrace(e));
\r 
 163          * RESTful service method to fetch all FunctionalMenuItems associated with
\r 
 166          * @return List of FunctionalMenuItem objects
\r 
 168         @RequestMapping(value = {
\r 
 169                         "/portalApi/functionalMenuForApp/{appId}" }, method = RequestMethod.GET, produces = "application/json")
\r 
 170         public List<FunctionalMenuItem> getMenuItemsForApp(HttpServletRequest request, @PathVariable("appId") Integer appId)
\r 
 171                         throws HTTPException {
\r 
 172                 // TODO: should only the superuser be allowed to use this API?
\r 
 173                 List<FunctionalMenuItem> menuItems = null;
\r 
 175                         menuItems = functionalMenuService.getFunctionalMenuItemsForApp(appId);
\r 
 176                         functionalMenuService.assignHelpURLs(menuItems);
\r 
 177                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForApp/" + appId, "result =", menuItems);
\r 
 178                 } catch (Exception e) {
\r 
 179                         logger.error(EELFLoggerDelegate.errorLogger,
\r 
 180                                         "Exception occurred while calling functionalMenuForApp. Details: "
\r 
 181                                                         + EcompPortalUtils.getStackTrace(e));
\r 
 187          * RESTful service method to fetch all FunctionalMenuItems associated with
\r 
 188          * the applications and roles that a user has access to.
\r 
 190          * @return List of FunctionalMenuItem objects
\r 
 192         @RequestMapping(value = {
\r 
 193                         "/portalApi/functionalMenuForUser/{orgUserId}" }, method = RequestMethod.GET, produces = "application/json")
\r 
 194         public List<FunctionalMenuItem> getMenuItemsForUser(HttpServletRequest request,
\r 
 195                         @PathVariable("orgUserId") String orgUserId) throws HTTPException {
\r 
 196                 // TODO: should only the superuser be allowed to use this API?
\r 
 197                 List<FunctionalMenuItem> menuItems = null;
\r 
 199                         menuItems = functionalMenuService.getFunctionalMenuItemsForUser(orgUserId);
\r 
 200                         functionalMenuService.assignHelpURLs(menuItems);
\r 
 201                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForUser/" + orgUserId, "result =", menuItems);
\r 
 202                 } catch (Exception e) {
\r 
 203                         logger.error(EELFLoggerDelegate.errorLogger,
\r 
 204                                         "Exception occurred while calling functionalMenuForUser. Details: "
\r 
 205                                                         + EcompPortalUtils.getStackTrace(e));
\r 
 212          * RESTful service method to fetch all FunctionalMenuItems associated with
\r 
 213          * the applications and roles that the authenticated user has access to.
\r 
 215          * @return List of FunctionalMenuItem objects
\r 
 217         @RequestMapping(value = {
\r 
 218                         "/portalApi/functionalMenuForAuthUser" }, method = RequestMethod.GET, produces = "application/json")
\r 
 219         public List<FunctionalMenuItem> getMenuItemsForAuthUser(HttpServletRequest request, HttpServletResponse response) {
\r 
 220                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 221                 List<FunctionalMenuItem> menuItems = null;
\r 
 223                         if (user == null) {
\r 
 224                                 EcompPortalUtils.setBadPermissions(user, response, "getMenuItemsForAuthUser");
\r 
 225                         } else if (adminRolesService.isSuperAdmin(user)) {
\r 
 226                                 menuItems = functionalMenuService.getFunctionalMenuItems();
\r 
 228                                 // calculate the menu items
\r 
 229                                 String orgUserId = user.getOrgUserId();
\r 
 230                                 menuItems = functionalMenuService.getFunctionalMenuItemsForUser(orgUserId);
\r 
 231                                 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuForUser/" + orgUserId, "result =",
\r 
 234                         functionalMenuService.assignHelpURLs(menuItems);
\r 
 235                 } catch (Exception e) {
\r 
 236                         logger.error(EELFLoggerDelegate.errorLogger,
\r 
 237                                         "Exception occurred while calling getMenuItemsForAuthUser. Details: "
\r 
 238                                                         + EcompPortalUtils.getStackTrace(e));
\r 
 244          * RESTful service method to fetch the details for a functional menu item.
\r 
 245          * Requirement: you must be the Ecomp portal super admin user.
\r 
 247          * @return FunctionalMenuItem object
\r 
 249         @RequestMapping(value = {
\r 
 250                         "/portalApi/functionalMenuItemDetails/{menuId}" }, method = RequestMethod.GET, produces = "application/json")
\r 
 251         public FunctionalMenuItem getFunctionalMenuItemDetails(HttpServletRequest request,
\r 
 252                         @PathVariable("menuId") Integer menuId, HttpServletResponse response) throws HTTPException {
\r 
 253                 // TODO: return FunctionalMenuItemJson
\r 
 254                 // TODO: modify FunctionalMenuItem to not include the transient fields
\r 
 255                 FunctionalMenuItem menuItem = null;
\r 
 257                         EPUser user = EPUserUtils.getUserSession(request);
\r 
 258                         if (!adminRolesService.isSuperAdmin(user)) {
\r 
 259                                 EcompPortalUtils.setBadPermissions(user, response, "getFunctionalMenuItemDetails");
\r 
 261                                 menuItem = functionalMenuService.getFunctionalMenuItemDetails(menuId);
\r 
 262                                 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuItemDetails/" + menuId, "result =",
\r 
 265                 } catch (Exception e) {
\r 
 266                         logger.error(EELFLoggerDelegate.errorLogger,
\r 
 267                                         "Exception occurred while calling functionalMenuItemDetails. Details: "
\r 
 268                                                         + EcompPortalUtils.getStackTrace(e));
\r 
 275          * RESTful service method to create a new menu item.
\r 
 277          * Requirement: you must be the Ecomp portal super admin user.
\r 
 279         @RequestMapping(value = { "/portalApi/functionalMenuItem" }, method = RequestMethod.POST)
\r 
 280         public FieldsValidator createFunctionalMenuItem(HttpServletRequest request,
\r 
 281                         @RequestBody FunctionalMenuItemWithRoles menuItemJson, HttpServletResponse response) {
\r 
 282                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 283                 FieldsValidator fieldsValidator = null;
\r 
 284                 if (!adminRolesService.isSuperAdmin(user)) {
\r 
 285                         logger.debug(EELFLoggerDelegate.debugLogger,
\r 
 286                                         "FunctionalMenuController.createFunctionalMenuItem bad permissions");
\r 
 287                         EcompPortalUtils.setBadPermissions(user, response, "createFunctionalMenuItem");
\r 
 289                         fieldsValidator = functionalMenuService.createFunctionalMenuItem(menuItemJson);
\r 
 290                         response.setStatus(fieldsValidator.httpStatusCode.intValue());
\r 
 291                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuItem", "POST result =",
\r 
 292                                         response.getStatus());
\r 
 295                 return fieldsValidator;
\r 
 299          * RESTful service method to update an existing menu item
\r 
 301          * Requirement: you must be the Ecomp portal super admin user.
\r 
 303          * @return FieldsValidator
\r 
 305         @RequestMapping(value = { "/portalApi/functionalMenuItem" }, method = RequestMethod.PUT)
\r 
 306         public FieldsValidator editFunctionalMenuItem(HttpServletRequest request,
\r 
 307                         @RequestBody FunctionalMenuItemWithRoles menuItemJson, HttpServletResponse response) {
\r 
 308                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 309                 FieldsValidator fieldsValidator = null;
\r 
 310                 if (!adminRolesService.isSuperAdmin(user)) {
\r 
 311                         EcompPortalUtils.setBadPermissions(user, response, "editFunctionalMenuItem");
\r 
 313                         fieldsValidator = functionalMenuService.editFunctionalMenuItem(menuItemJson);
\r 
 314                         response.setStatus(fieldsValidator.httpStatusCode.intValue());
\r 
 315                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuItem", "PUT result =",
\r 
 316                                         response.getStatus());
\r 
 319                 return fieldsValidator;
\r 
 323          * RESTful service method to delete a menu item
\r 
 325          * @return FieldsValidator
\r 
 327         @RequestMapping(value = { "/portalApi/functionalMenuItem/{menuId}" }, method = RequestMethod.DELETE)
\r 
 328         public FieldsValidator deleteFunctionalMenuItem(HttpServletRequest request, @PathVariable("menuId") Long menuId,
\r 
 329                         HttpServletResponse response) {
\r 
 330                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 331                 FieldsValidator fieldsValidator = null;
\r 
 332                 if (!adminRolesService.isSuperAdmin(user)) {
\r 
 333                         EcompPortalUtils.setBadPermissions(user, response, "deleteFunctionalMenuItem");
\r 
 335                         fieldsValidator = functionalMenuService.deleteFunctionalMenuItem(menuId);
\r 
 336                         response.setStatus(fieldsValidator.httpStatusCode.intValue());
\r 
 337                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuItem", "DELETE result =",
\r 
 338                                         response.getStatus());
\r 
 341                 return fieldsValidator;
\r 
 345          * RESTful service to regenerate table
\r 
 350          * @return FieldsValidator
\r 
 352         @RequestMapping(value = { "/portalApi/regenerateFunctionalMenuAncestors" }, method = RequestMethod.GET)
\r 
 353         public FieldsValidator regenerateAncestorTable(HttpServletRequest request, HttpServletResponse response) {
\r 
 354                 // TODO: should only the superuser be allowed to use this API?
\r 
 355                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 356                 FieldsValidator fieldsValidator = null;
\r 
 358                 if (!adminRolesService.isSuperAdmin(user)) {
\r 
 359                         EcompPortalUtils.setBadPermissions(user, response, "deleteFunctionalMenuItem");
\r 
 361                         fieldsValidator = functionalMenuService.regenerateAncestorTable();
\r 
 362                         response.setStatus(fieldsValidator.httpStatusCode.intValue());
\r 
 363                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/regenerateAncestorTable", "GET result =",
\r 
 364                                         response.getStatus());
\r 
 367                 return fieldsValidator;
\r 
 371          * RESful service to set a favorite item.
\r 
 373          * @return FieldsValidator
\r 
 375         @RequestMapping(value = { "/portalApi/setFavoriteItem" }, method = RequestMethod.POST)
\r 
 376         public FieldsValidator addFavoriteItem(HttpServletRequest request,
\r 
 377                         @RequestBody FavoritesFunctionalMenuItem menuItemJson, HttpServletResponse response) {
\r 
 378                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 379                 FieldsValidator fieldsValidator = null;
\r 
 380                 menuItemJson.userId = user.getId();
\r 
 381                 fieldsValidator = functionalMenuService.setFavoriteItem(menuItemJson);
\r 
 382                 response.setStatus(fieldsValidator.httpStatusCode.intValue());
\r 
 383                 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/setFavoriteItem", "Post result =", response.getStatus());
\r 
 385                 return fieldsValidator;
\r 
 389          * RESTful service to get favorites for the current user as identified in
\r 
 392          * @return List of FavoritesFunctionalMenuItemJson
\r 
 394         @RequestMapping(value = {
\r 
 395                         "/portalApi/getFavoriteItems" }, method = RequestMethod.GET, produces = "application/json")
\r 
 396         public List<FavoritesFunctionalMenuItemJson> getFavoritesForUser(HttpServletRequest request,
\r 
 397                         HttpServletResponse response) {
\r 
 398                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 399                 List<FavoritesFunctionalMenuItemJson> favorites = functionalMenuService.getFavoriteItems(user.getId());
\r 
 400                 FieldsValidator fieldsValidator = new FieldsValidator();
\r 
 401                 response.setStatus(fieldsValidator.httpStatusCode.intValue());
\r 
 402                 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/getFavoriteItems", "GET result =", response.getStatus());
\r 
 407          * RESTful service to delete a favorite menu item for the current user as
\r 
 408          * identified in the session.
\r 
 410          * @return FieldsValidator
\r 
 412         @RequestMapping(value = { "/portalApi/removeFavoriteItem/{menuId}" }, method = RequestMethod.DELETE)
\r 
 413         public FieldsValidator deleteFavoriteItem(HttpServletRequest request, @PathVariable("menuId") Long menuId,
\r 
 414                         HttpServletResponse response) {
\r 
 415                 EPUser user = EPUserUtils.getUserSession(request);
\r 
 416                 FieldsValidator fieldsValidator = null;
\r 
 417                 Long userId = user.getId();
\r 
 418                 fieldsValidator = functionalMenuService.removeFavoriteItem(userId, menuId);
\r 
 419                 response.setStatus(fieldsValidator.httpStatusCode.intValue());
\r 
 420                 EcompPortalUtils.logAndSerializeObject(logger, "/deleteFavoriteItem", "DELETE result =", response.getStatus());
\r 
 422                 return fieldsValidator;
\r 
 426          * RESTful service to get user information: user's first and last names, ATT
\r 
 427          * UID, email and last-login. (Actually has nothing to do with the real
\r 
 428          * functional menu.) First attempts to get the information from the Tomcat
\r 
 429          * session (i.e., the CSP cookie); if that fails, calls the shared context
\r 
 430          * service to read the information from the database. Gives back what it
\r 
 431          * found, any of which may be null, as a JSON collection.
\r 
 433          * @return JSON collection of key-value pairs shown below.
\r 
 435         @RequestMapping(value = {
\r 
 436                         "/portalApi/functionalMenuStaticInfo" }, method = RequestMethod.GET, produces = "application/json")
\r 
 437         public String getFunctionalMenuStaticInfo(HttpServletRequest request, HttpServletResponse response) {
\r 
 439                 // Get user details from session
\r 
 440                 logger.debug(EELFLoggerDelegate.debugLogger, "getFunctionalMenuStaticInfo: getting user info");
\r 
 441                 String fnMenuStaticResponse = null;
\r 
 443                         String orgUserIdStr = null, firstNameStr = null, lastNameStr = null, emailStr = null, lastLogin = null;
\r 
 444                         EPUser user = EPUserUtils.getUserSession(request);
\r 
 445                         firstNameStr = user.getFirstName();
\r 
 446                         lastNameStr = user.getLastName();
\r 
 447                         orgUserIdStr = user.getOrgUserId();
\r 
 448                         emailStr = user.getEmail();
\r 
 449                         if (emailStr == null || emailStr.equals("")) {
\r 
 450                                 EPUser userResult = searchService.searchUserByUserId(orgUserIdStr);
\r 
 451                                 emailStr = userResult.getEmail();
\r 
 453                         SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ssZ");
\r 
 454                         Date lastLoginDate = user.getLastLoginDate();
\r 
 455                         if (lastLoginDate == null) {
\r 
 456                                 // should never happen
\r 
 457                                 logger.error(EELFLoggerDelegate.errorLogger, "getFunctionalMenuStaticInfo: no last login in session");
\r 
 458                                 lastLogin = "no last login available";
\r 
 461                                 lastLogin = sdf.format(lastLoginDate);
\r 
 464                         // If any item is missing from session, try the Shared Context
\r 
 466                         SharedContext orgUserIdSC = null, firstNameSC = null, lastNameSC = null, emailSC = null;
\r 
 467                         String sessionId = request.getSession().getId();
\r 
 468                         if (firstNameStr == null)
\r 
 469                                 firstNameSC = sharedContextService.getSharedContext(sessionId, EPCommonSystemProperties.USER_FIRST_NAME);
\r 
 470                         if (lastNameStr == null)
\r 
 471                                 lastNameSC = sharedContextService.getSharedContext(sessionId, EPCommonSystemProperties.USER_LAST_NAME);
\r 
 472                         if (emailStr == null)
\r 
 473                                 emailSC = sharedContextService.getSharedContext(sessionId, EPCommonSystemProperties.USER_EMAIL);
\r 
 474                         if (orgUserIdStr == null)
\r 
 475                                 orgUserIdSC = sharedContextService.getSharedContext(sessionId, EPCommonSystemProperties.USER_ORG_USERID);
\r 
 477                         // Build the response
\r 
 478                         Map<String, String> map = new HashMap<String, String>();
\r 
 479                         map.put("firstName",
\r 
 480                                         firstNameStr != null ? firstNameStr : (firstNameSC != null ? firstNameSC.getCvalue() : null));
\r 
 481                         map.put("lastName",
\r 
 482                                         lastNameStr != null ? lastNameStr : (lastNameSC != null ? lastNameSC.getCvalue() : null));
\r 
 483                         map.put("email", emailStr != null ? emailStr : (emailSC != null ? emailSC.getCvalue() : null));
\r 
 484                         map.put("userId", orgUserIdStr != null ? orgUserIdStr : (orgUserIdSC != null ? orgUserIdSC.getCvalue() : null));
\r 
 485                         map.put("last_login", lastLogin);
\r 
 486                         JSONObject j = new JSONObject(map);
\r 
 487                         fnMenuStaticResponse = j.toString();
\r 
 488                         // Be chatty in the log
\r 
 489                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/functionalMenuStaticInfo", "GET result =",
\r 
 490                                         fnMenuStaticResponse);
\r 
 491                 } catch (Exception e) {
\r 
 492                         // Should never happen.
\r 
 493                         logger.error(EELFLoggerDelegate.errorLogger, "getFunctionalMenuStaticInfo failed", e);
\r 
 494                         // Return a real error?
\r 
 495                         // fnMenuStaticResponse = "{ \"status\": \"error\", \"message\": \""
\r 
 496                         // + e.toString() + "\" }";
\r 
 497                         // But the angular controller expects null on error.
\r 
 499                 return fnMenuStaticResponse;
\r 
 502         private Comparator<BusinessCardApplicationRole> getUserAppRolesComparator = new Comparator<BusinessCardApplicationRole>() {
\r 
 503                 public int compare(BusinessCardApplicationRole o1, BusinessCardApplicationRole o2) {
\r 
 504                         return o1.getAppName().compareTo(o2.getAppName());
\r 
 508         @RequestMapping(value = {
\r 
 509                         "/portalApi/userApplicationRoles" }, method = RequestMethod.GET, produces = "application/json")
\r 
 510         public List<BusinessCardApplicationRolesList> getAppList(HttpServletRequest request,@RequestParam("userId") String userId) throws IOException {
\r 
 513                 List<BusinessCardApplicationRolesList> AppRoles = null;
\r 
 515                         List<BusinessCardApplicationRole> userAppRoleList = functionalMenuService.getUserAppRolesList(userId);
\r 
 517                         Collections.sort(userAppRoleList, getUserAppRolesComparator);
\r 
 518                         EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userApplicationRoles", "result =", userAppRoleList);
\r 
 520                          AppRoles = new ArrayList<BusinessCardApplicationRolesList>();     
\r 
 521                         for(BusinessCardApplicationRole userAppRole: userAppRoleList)
\r 
 523                                   boolean found = false;
\r 
 524                               List<String> roles = null;
\r 
 526                                 for(BusinessCardApplicationRolesList app :AppRoles)
\r 
 528                                         if(app.getAppName().equals(userAppRole.getAppName()))
\r 
 530                                                 roles= app.getRoleNames();
\r 
 531                                                 roles.add(userAppRole.getRoleName());
\r 
 532                                                 app.setRoleNames(roles);
\r 
 540                                 roles = new ArrayList<String>();        
\r 
 541                                 roles.add(userAppRole.getRoleName());
\r 
 542                                 AppRoles.add(new BusinessCardApplicationRolesList(userAppRole.getAppName(), roles));
\r 
 545                                 Collections.sort(roles);
\r 
 547                 } catch (Exception e) {
\r 
 548                         // TODO Auto-generated catch block
\r 
 549                         logger.error(EELFLoggerDelegate.errorLogger, "getAppList failed", e);
\r