[PORTAL-7] Rebase
[portal.git] / ecomp-portal-BE-common / src / main / java / org / openecomp / portalapp / portal / service / EPLeftMenuServiceImpl.java
1 /*-\r
2  * ================================================================================\r
3  * ECOMP Portal\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
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \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
19  */\r
20 package org.openecomp.portalapp.portal.service;\r
21 \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
29 \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
36 \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
43 \r
44 @Service("leftMenuService")\r
45 @Transactional\r
46 @org.springframework.context.annotation.Configuration\r
47 @EnableAspectJAutoProxy\r
48 @EPMetricsLog\r
49 \r
50 public class EPLeftMenuServiceImpl implements EPLeftMenuService {\r
51 \r
52         private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPLeftMenuServiceImpl.class);\r
53 \r
54         @Autowired\r
55         private EPAppService appService;\r
56 \r
57         /*\r
58          * (non-Javadoc)\r
59          * \r
60          * @see\r
61          * org.openecomp.portalapp.portal.service.EPLeftMenuService#getLeftMenuItems\r
62          * (java.util.Set)\r
63          */\r
64         @Override\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
67 \r
68                 resetNavMap(defaultNavMap);\r
69 \r
70                 loadDefaultNavMap(defaultNavMap);\r
71 \r
72                 // Handle Account Administrator in a special way; soon this will\r
73                 // be revised as Account Administrator may become obsolete\r
74                 try {\r
75                         if (user != null) {\r
76                                 UserRoles uRoles = appService.getUserProfileNormalized(user);\r
77                                 if (uRoles.getRoles().contains("Account Administrator"))\r
78                                         loadAccAdminNavMap(defaultNavMap);\r
79                         }\r
80                 } catch (Exception e) {\r
81                         logger.error(EELFLoggerDelegate.errorLogger,\r
82                                         "getLeftMenuItems: failed to get roles for user " + user.getOrgUserId(), e);\r
83                 }\r
84 \r
85                 loadNavMapByRole(defaultNavMap, fullMenuSet);\r
86 \r
87                 return convertToSideBarModel(defaultNavMap);\r
88         }\r
89 \r
90         /**\r
91          * Clears the map\r
92          * \r
93          * @param defaultNavMap\r
94          */\r
95         private void resetNavMap(Map<String, JSONObject> defaultNavMap) {\r
96                 defaultNavMap.clear();\r
97         }\r
98 \r
99         /**\r
100          * \r
101          * @param defaultNavMap\r
102          * @param fullMenuSet\r
103          */\r
104         private void loadNavMapByRole(Map<String, JSONObject> defaultNavMap, Set<MenuData> fullMenuSet) {\r
105 \r
106                 class SortOrderComparator implements Comparator<MenuData> {\r
107                         @Override\r
108                         public int compare(MenuData e1, MenuData e2) {\r
109                                 return e1.getSortOrder().compareTo(e2.getSortOrder());\r
110                         }\r
111                 }\r
112 \r
113                 SortedSet<MenuData> sortMenuSet = new TreeSet<MenuData>(new SortOrderComparator());\r
114                 for (MenuData mn : fullMenuSet) {\r
115                         sortMenuSet.add(mn);\r
116                 }\r
117 \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
124                 }\r
125         }\r
126 \r
127         /**\r
128          * \r
129          * @param defaultNavMap\r
130          * @return\r
131          */\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
136 \r
137                 for (JSONObject navItemsDetail : jsonObjs)\r
138                         navItems.put(navItemsDetail);\r
139 \r
140                 sidebarModel.put("label", "ECOMP portal");\r
141                 sidebarModel.put("navItems", navItems);\r
142                 return sidebarModel.toString();\r
143         }\r
144 \r
145         /**\r
146          * Loads default entries for regular user.\r
147          * \r
148          * @param defaultNavMap\r
149          */\r
150         private void loadDefaultNavMap(Map<String, JSONObject> defaultNavMap) {\r
151 \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
157 \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
163 \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
169 \r
170         }\r
171 \r
172         /**\r
173          * Loads default entries for application administrator.\r
174          * \r
175          * @param defaultNavMap\r
176          */\r
177         private void loadAccAdminNavMap(Map<String, JSONObject> defaultNavMap) {\r
178 \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
184 \r
185                 // No more widget onboarding like this:\r
186                 //\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
192 \r
193         }\r
194 \r
195 }\r