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.service;
\r 
  22 import java.util.Collection;
\r 
  23 import java.util.Comparator;
\r 
  24 import java.util.LinkedHashMap;
\r 
  25 import java.util.Map;
\r 
  26 import java.util.Set;
\r 
  27 import java.util.SortedSet;
\r 
  28 import java.util.TreeSet;
\r 
  30 import org.json.JSONArray;
\r 
  31 import org.json.JSONObject;
\r 
  32 import org.springframework.beans.factory.annotation.Autowired;
\r 
  33 import org.springframework.context.annotation.EnableAspectJAutoProxy;
\r 
  34 import org.springframework.stereotype.Service;
\r 
  35 import org.springframework.transaction.annotation.Transactional;
\r 
  37 import org.openecomp.portalsdk.core.domain.MenuData;
\r 
  38 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
\r 
  39 import org.openecomp.portalapp.portal.domain.EPUser;
\r 
  40 import org.openecomp.portalapp.portal.domain.UserRoles;
\r 
  41 //import org.openecomp.portalapp.portal.domain.Menu;
\r 
  42 import org.openecomp.portalapp.portal.logging.aop.EPMetricsLog;
\r 
  44 @Service("leftMenuService")
\r 
  46 @org.springframework.context.annotation.Configuration
\r 
  47 @EnableAspectJAutoProxy
\r 
  50 public class EPLeftMenuServiceImpl implements EPLeftMenuService {
\r 
  52         private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPLeftMenuServiceImpl.class);
\r 
  55         private EPAppService appService;
\r 
  61          * org.openecomp.portalapp.portal.service.EPLeftMenuService#getLeftMenuItems
\r 
  65         public String getLeftMenuItems(EPUser user, Set<MenuData> fullMenuSet, Set<String> roleFunctionSet) {
\r 
  66                 final Map<String, JSONObject> defaultNavMap = new LinkedHashMap<String, JSONObject>();
\r 
  68                 resetNavMap(defaultNavMap);
\r 
  70                 loadDefaultNavMap(defaultNavMap);
\r 
  72                 // Handle Account Administrator in a special way; soon this will
\r 
  73                 // be revised as Account Administrator may become obsolete
\r 
  76                                 UserRoles uRoles = appService.getUserProfileNormalized(user);
\r 
  77                                 if (uRoles.getRoles().contains("Account Administrator"))
\r 
  78                                         loadAccAdminNavMap(defaultNavMap);
\r 
  80                 } catch (Exception e) {
\r 
  81                         logger.error(EELFLoggerDelegate.errorLogger,
\r 
  82                                         "getLeftMenuItems: failed to get roles for user " + user.getOrgUserId(), e);
\r 
  85                 loadNavMapByRole(defaultNavMap, fullMenuSet);
\r 
  87                 return convertToSideBarModel(defaultNavMap);
\r 
  93          * @param defaultNavMap
\r 
  95         private void resetNavMap(Map<String, JSONObject> defaultNavMap) {
\r 
  96                 defaultNavMap.clear();
\r 
 101          * @param defaultNavMap
\r 
 102          * @param fullMenuSet
\r 
 104         private void loadNavMapByRole(Map<String, JSONObject> defaultNavMap, Set<MenuData> fullMenuSet) {
\r 
 106                 class SortOrderComparator implements Comparator<MenuData> {
\r 
 108                         public int compare(MenuData e1, MenuData e2) {
\r 
 109                                 return e1.getSortOrder().compareTo(e2.getSortOrder());
\r 
 113                 SortedSet<MenuData> sortMenuSet = new TreeSet<MenuData>(new SortOrderComparator());
\r 
 114                 for (MenuData mn : fullMenuSet) {
\r 
 115                         sortMenuSet.add(mn);
\r 
 118                 for (MenuData mn : sortMenuSet) {
\r 
 119                         JSONObject navItemsDetails = new JSONObject();
\r 
 120                         navItemsDetails.put("name", mn.getLabel());
\r 
 121                         navItemsDetails.put("state", mn.getAction());
\r 
 122                         navItemsDetails.put("imageSrc", mn.getImageSrc());
\r 
 123                         defaultNavMap.put(mn.getAction(), navItemsDetails);
\r 
 129          * @param defaultNavMap
\r 
 132         private String convertToSideBarModel(Map<String, JSONObject> defaultNavMap) {
\r 
 133                 JSONObject sidebarModel = new JSONObject();
\r 
 134                 JSONArray navItems = new JSONArray();
\r 
 135                 Collection<JSONObject> jsonObjs = defaultNavMap.values();
\r 
 137                 for (JSONObject navItemsDetail : jsonObjs)
\r 
 138                         navItems.put(navItemsDetail);
\r 
 140                 sidebarModel.put("label", "ECOMP portal");
\r 
 141                 sidebarModel.put("navItems", navItems);
\r 
 142                 return sidebarModel.toString();
\r 
 146          * Loads default entries for regular user.
\r 
 148          * @param defaultNavMap
\r 
 150         private void loadDefaultNavMap(Map<String, JSONObject> defaultNavMap) {
\r 
 152                 JSONObject navItemsDetails1 = new JSONObject();
\r 
 153                 navItemsDetails1.put("name", "Home");
\r 
 154                 navItemsDetails1.put("state", "root.applicationsHome");
\r 
 155                 navItemsDetails1.put("imageSrc", "icon-building-home");
\r 
 156                 defaultNavMap.put("root.applicationsHome", navItemsDetails1);
\r 
 158                 JSONObject navItemsDetails2 = new JSONObject();
\r 
 159                 navItemsDetails2.put("name", "Application Catalog");
\r 
 160                 navItemsDetails2.put("state", "root.appCatalog");
\r 
 161                 navItemsDetails2.put("imageSrc", "icon-apps-marketplace");
\r 
 162                 defaultNavMap.put("root.appCatalog", navItemsDetails2);
\r 
 164                 JSONObject navItemsDetails3 = new JSONObject();
\r 
 165                 navItemsDetails3.put("name", "Widget Catalog");
\r 
 166                 navItemsDetails3.put("state", "root.widgetCatalog");
\r 
 167                 navItemsDetails3.put("imageSrc", "icon-apps-marketplace");
\r 
 168                 defaultNavMap.put("root.widgetCatalog", navItemsDetails3);
\r 
 173          * Loads default entries for application administrator.
\r 
 175          * @param defaultNavMap
\r 
 177         private void loadAccAdminNavMap(Map<String, JSONObject> defaultNavMap) {
\r 
 179                 JSONObject navItemsDetails1 = new JSONObject();
\r 
 180                 navItemsDetails1.put("name", "Users");
\r 
 181                 navItemsDetails1.put("state", "root.users");
\r 
 182                 navItemsDetails1.put("imageSrc", "icon-user");
\r 
 183                 defaultNavMap.put("root.users", navItemsDetails1);
\r 
 185                 // No more widget onboarding like this:
\r 
 187                 // JSONObject navItemsDetails2 = new JSONObject();
\r 
 188                 // navItemsDetails2.put("name", "Widget Onboarding");
\r 
 189                 // navItemsDetails2.put("state", "root.widgetOnboarding");
\r 
 190                 // navItemsDetails2.put("imageSrc", "icon-add-widget");
\r 
 191                 // defaultNavMap.put("root.widgetOnboarding", navItemsDetails2);
\r