2  * ================================================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 AT&T Intellectual Property
 
   6  * ================================================================================
 
   7  * Licensed under the Apache License, Version 2.0 (the "License");
 
   8  * you may not use this file except in compliance with the License.
 
   9  * You may obtain a copy of the License at
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  13  * Unless required by applicable law or agreed to in writing, software
 
  14  * distributed under the License is distributed on an "AS IS" BASIS,
 
  15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  16  * See the License for the specific language governing permissions and
 
  17  * limitations under the License.
 
  18  * ================================================================================
 
  20 package org.openecomp.portalapp.portal.service;
 
  22 import java.util.Collection;
 
  23 import java.util.Comparator;
 
  24 import java.util.LinkedHashMap;
 
  27 import java.util.SortedSet;
 
  28 import java.util.TreeSet;
 
  30 import org.json.JSONArray;
 
  31 import org.json.JSONObject;
 
  32 import org.springframework.beans.factory.annotation.Autowired;
 
  33 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 
  34 import org.springframework.stereotype.Service;
 
  35 import org.springframework.transaction.annotation.Transactional;
 
  37 import org.openecomp.portalsdk.core.domain.MenuData;
 
  38 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
 
  39 import org.openecomp.portalapp.portal.domain.EPUser;
 
  40 import org.openecomp.portalapp.portal.domain.UserRoles;
 
  41 //import org.openecomp.portalapp.portal.domain.Menu;
 
  42 import org.openecomp.portalapp.portal.logging.aop.EPMetricsLog;
 
  44 @Service("leftMenuService")
 
  46 @org.springframework.context.annotation.Configuration
 
  47 @EnableAspectJAutoProxy
 
  50 public class EPLeftMenuServiceImpl implements EPLeftMenuService {
 
  52         private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPLeftMenuServiceImpl.class);
 
  55         private EPAppService appService;
 
  61          * org.openecomp.portalapp.portal.service.EPLeftMenuService#getLeftMenuItems
 
  65         public String getLeftMenuItems(EPUser user, Set<MenuData> fullMenuSet, Set<String> roleFunctionSet) {
 
  66                 final Map<String, JSONObject> defaultNavMap = new LinkedHashMap<String, JSONObject>();
 
  68                 resetNavMap(defaultNavMap);
 
  70                 loadDefaultNavMap(defaultNavMap);
 
  72                 // Handle Account Administrator in a special way; soon this will
 
  73                 // be revised as Account Administrator may become obsolete
 
  76                                 UserRoles uRoles = appService.getUserProfileNormalized(user);
 
  77                                 if (uRoles.getRoles().contains("Account Administrator"))
 
  78                                         loadAccAdminNavMap(defaultNavMap);
 
  80                 } catch (Exception e) {
 
  81                         logger.error(EELFLoggerDelegate.errorLogger,
 
  82                                         "getLeftMenuItems: failed to get roles for user " + user.getOrgUserId(), e);
 
  85                 loadNavMapByRole(defaultNavMap, fullMenuSet);
 
  87                 return convertToSideBarModel(defaultNavMap);
 
  93          * @param defaultNavMap
 
  95         private void resetNavMap(Map<String, JSONObject> defaultNavMap) {
 
  96                 defaultNavMap.clear();
 
 101          * @param defaultNavMap
 
 104         private void loadNavMapByRole(Map<String, JSONObject> defaultNavMap, Set<MenuData> fullMenuSet) {
 
 106                 class SortOrderComparator implements Comparator<MenuData> {
 
 108                         public int compare(MenuData e1, MenuData e2) {
 
 109                                 return e1.getSortOrder().compareTo(e2.getSortOrder());
 
 113                 SortedSet<MenuData> sortMenuSet = new TreeSet<MenuData>(new SortOrderComparator());
 
 114                 for (MenuData mn : fullMenuSet) {
 
 118                 for (MenuData mn : sortMenuSet) {
 
 119                         JSONObject navItemsDetails = new JSONObject();
 
 120                         navItemsDetails.put("name", mn.getLabel());
 
 121                         navItemsDetails.put("state", mn.getAction());
 
 122                         navItemsDetails.put("imageSrc", mn.getImageSrc());
 
 123                         defaultNavMap.put(mn.getAction(), navItemsDetails);
 
 129          * @param defaultNavMap
 
 132         private String convertToSideBarModel(Map<String, JSONObject> defaultNavMap) {
 
 133                 JSONObject sidebarModel = new JSONObject();
 
 134                 JSONArray navItems = new JSONArray();
 
 135                 Collection<JSONObject> jsonObjs = defaultNavMap.values();
 
 137                 for (JSONObject navItemsDetail : jsonObjs)
 
 138                         navItems.put(navItemsDetail);
 
 140                 sidebarModel.put("label", "ECOMP portal");
 
 141                 sidebarModel.put("navItems", navItems);
 
 142                 return sidebarModel.toString();
 
 146          * Loads default entries for regular user.
 
 148          * @param defaultNavMap
 
 150         private void loadDefaultNavMap(Map<String, JSONObject> defaultNavMap) {
 
 152                 JSONObject navItemsDetails1 = new JSONObject();
 
 153                 navItemsDetails1.put("name", "Home");
 
 154                 navItemsDetails1.put("state", "root.applicationsHome");
 
 155                 navItemsDetails1.put("imageSrc", "icon-building-home");
 
 156                 defaultNavMap.put("root.applicationsHome", navItemsDetails1);
 
 158                 JSONObject navItemsDetails2 = new JSONObject();
 
 159                 navItemsDetails2.put("name", "Application Catalog");
 
 160                 navItemsDetails2.put("state", "root.appCatalog");
 
 161                 navItemsDetails2.put("imageSrc", "icon-apps-marketplace");
 
 162                 defaultNavMap.put("root.appCatalog", navItemsDetails2);
 
 164                 JSONObject navItemsDetails3 = new JSONObject();
 
 165                 navItemsDetails3.put("name", "Widget Catalog");
 
 166                 navItemsDetails3.put("state", "root.widgetCatalog");
 
 167                 navItemsDetails3.put("imageSrc", "icon-apps-marketplace");
 
 168                 defaultNavMap.put("root.widgetCatalog", navItemsDetails3);
 
 173          * Loads default entries for application administrator.
 
 175          * @param defaultNavMap
 
 177         private void loadAccAdminNavMap(Map<String, JSONObject> defaultNavMap) {
 
 179                 JSONObject navItemsDetails1 = new JSONObject();
 
 180                 navItemsDetails1.put("name", "Users");
 
 181                 navItemsDetails1.put("state", "root.users");
 
 182                 navItemsDetails1.put("imageSrc", "icon-user");
 
 183                 defaultNavMap.put("root.users", navItemsDetails1);
 
 185                 // No more widget onboarding like this:
 
 187                 // JSONObject navItemsDetails2 = new JSONObject();
 
 188                 // navItemsDetails2.put("name", "Widget Onboarding");
 
 189                 // navItemsDetails2.put("state", "root.widgetOnboarding");
 
 190                 // navItemsDetails2.put("imageSrc", "icon-add-widget");
 
 191                 // defaultNavMap.put("root.widgetOnboarding", navItemsDetails2);