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