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.getUserProfileNormalizedForLeftMenu(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);