Merge "Migrate portal docs"
[portal.git] / ecomp-portal-BE-common / src / main / java / org / onap / portalapp / portal / service / EPLeftMenuServiceImpl.java
1 /*-
2  * ============LICENSE_START==========================================
3  * ONAP Portal
4  * ===================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ===================================================================
7  *
8  * Unless otherwise specified, all software contained herein is licensed
9  * under the Apache License, Version 2.0 (the "License");
10  * you may not use this software except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *             http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  * Unless otherwise specified, all documentation contained herein is licensed
22  * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
23  * you may not use this documentation except in compliance with the License.
24  * You may obtain a copy of the License at
25  *
26  *             https://creativecommons.org/licenses/by/4.0/
27  *
28  * Unless required by applicable law or agreed to in writing, documentation
29  * distributed under the License is distributed on an "AS IS" BASIS,
30  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31  * See the License for the specific language governing permissions and
32  * limitations under the License.
33  *
34  * ============LICENSE_END============================================
35  *
36  * 
37  */
38 package org.onap.portalapp.portal.service;
39
40 import java.util.ArrayList;
41 import java.util.Collection;
42 import java.util.Comparator;
43 import java.util.HashMap;
44 import java.util.Iterator;
45 import java.util.LinkedHashMap;
46 import java.util.List;
47 import java.util.Map;
48 import java.util.Set;
49 import java.util.SortedSet;
50 import java.util.TreeSet;
51
52 import org.json.JSONArray;
53 import org.json.JSONObject;
54 import org.onap.portalapp.portal.domain.CentralizedApp;
55 import org.onap.portalapp.portal.domain.DisplayText;
56 import org.onap.portalapp.portal.domain.EPUser;
57 import org.onap.portalapp.portal.logging.aop.EPMetricsLog;
58 import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
59 import org.onap.portalsdk.core.domain.MenuData;
60 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
61 import org.onap.portalsdk.core.service.DataAccessService;
62 import org.springframework.beans.factory.annotation.Autowired;
63 import org.springframework.context.annotation.EnableAspectJAutoProxy;
64 import org.springframework.stereotype.Service;
65 import org.springframework.transaction.annotation.Transactional;
66
67 @Service("leftMenuService")
68 @Transactional
69 @org.springframework.context.annotation.Configuration
70 @EnableAspectJAutoProxy
71 @EPMetricsLog
72
73 public class EPLeftMenuServiceImpl implements EPLeftMenuService {
74
75         private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPLeftMenuServiceImpl.class);
76
77         @Autowired
78         private ExternalAccessRolesService externalAccessRolesService;
79         @Autowired
80         private DataAccessService dataAccessService;
81
82         /*
83          * (non-Javadoc)
84          * 
85          * @see org.onap.portalapp.portal.service.EPLeftMenuService#getLeftMenuItems
86          * (java.util.Set)
87          */
88         @Override
89         public String getLeftMenuItems(EPUser user, Set<MenuData> fullMenuSet, Set<String> roleFunctionSet) {
90                 final Map<String, JSONObject> defaultNavMap = new LinkedHashMap<String, JSONObject>();
91                 resetNavMap(defaultNavMap);
92                 loadDefaultNavMap(defaultNavMap);
93                 loadNavMapByUserAdminRole(defaultNavMap, user);
94                 loadNavMapByRole(defaultNavMap, fullMenuSet, user);
95                 return convertToSideBarModel(defaultNavMap);
96         }
97
98         /**
99          * Clears the map
100          * 
101          * @param defaultNavMap
102          */
103         private void resetNavMap(Map<String, JSONObject> defaultNavMap) {
104                 defaultNavMap.clear();
105         }
106
107         /**
108          * 
109          * @param defaultNavMap
110          * @param fullMenuSet
111          */
112         private void loadNavMapByRole(Map<String, JSONObject> defaultNavMap, Set<MenuData> fullMenuSet, EPUser user) {
113
114                 class SortOrderComparator implements Comparator<MenuData> {
115                         @Override
116                         public int compare(MenuData e1, MenuData e2) {
117                                 return e1.getSortOrder().compareTo(e2.getSortOrder());
118                         }
119                 }
120
121                 // mulitilanguage impl
122                 String loginId = user.getLoginId();
123                 HashMap loginParams = new HashMap();
124                 loginParams.put("login_id", loginId);
125                 List<EPUser> epUsers = dataAccessService.executeNamedQuery("getEPUserByLoginId", loginParams, new HashMap());
126                 Integer languageId = 1;
127                 for (EPUser epUser : epUsers) {
128                         languageId = epUser.getLanguageId();
129                 }
130                 Iterator<MenuData> iterator = fullMenuSet.iterator();
131                 HashMap params = new HashMap();
132                 params.put("language_id", languageId);
133                 List<DisplayText> displayTexts = dataAccessService.executeNamedQuery("displayText", params, new HashMap());
134                 while (iterator.hasNext()) {
135                         MenuData menuData = iterator.next();
136                         for (int index = 0; index < displayTexts.size(); index++) {
137                                 DisplayText displayText = displayTexts.get(index);
138                                 if (menuData.getId() == displayText.getTextId()) {
139                                         menuData.setLabel(displayText.getLabel());
140                                         break;
141                                 }
142                         }
143                 }
144
145                 SortedSet<MenuData> sortMenuSet = new TreeSet<MenuData>(new SortOrderComparator());
146                 for (MenuData mn : fullMenuSet) {
147                         sortMenuSet.add(mn);
148                 }
149
150                 // Remove Roles from left menu if user doesnt have admin access on
151                 // centralized application
152                 List<CentralizedApp> applicationsList = null;
153                 applicationsList = externalAccessRolesService.getCentralizedAppsOfUser(user.getOrgUserId());
154                 if (applicationsList.size() == 0)
155                         sortMenuSet.removeIf(x -> x.getLabel().contains("Roles"));
156
157                 for (MenuData mn : sortMenuSet) {
158                         JSONObject navItemsDetails = new JSONObject();
159                         navItemsDetails.put("name", mn.getLabel());
160                         navItemsDetails.put("state", mn.getAction());
161                         navItemsDetails.put("imageSrc", mn.getImageSrc());
162                         defaultNavMap.put(mn.getAction(), navItemsDetails);
163                 }
164         }
165
166         /**
167          * 
168          * @param defaultNavMap
169          * @return
170          */
171         private String convertToSideBarModel(Map<String, JSONObject> defaultNavMap) {
172                 JSONObject sidebarModel = new JSONObject();
173                 JSONArray navItems = new JSONArray();
174                 Collection<JSONObject> jsonObjs = defaultNavMap.values();
175
176                 for (JSONObject navItemsDetail : jsonObjs)
177                         navItems.put(navItemsDetail);
178
179                 sidebarModel.put("label", "ECOMP portal");
180                 sidebarModel.put("navItems", navItems);
181                 return sidebarModel.toString();
182         }
183
184         /**
185          * Loads default entries for regular user.
186          * 
187          * @param defaultNavMap
188          */
189         private void loadDefaultNavMap(Map<String, JSONObject> defaultNavMap) {
190                 String leftMenuRootValue = getLeftMenuPrefixValue();
191                 JSONObject navItemsDetails1 = new JSONObject();
192                 navItemsDetails1.put("name", "Home");
193                 navItemsDetails1.put("state",
194                                 (isLeftMenuHasRoot(leftMenuRootValue))
195                                                 ? leftMenuRootValue+".applicationsHome"
196                                                 : "applicationsHome");
197                 navItemsDetails1.put("imageSrc", isLeftMenuHasRoot(leftMenuRootValue) ? "icon-building-home" : "home");
198                 defaultNavMap.put("applicationsHome", navItemsDetails1);
199
200                 JSONObject navItemsDetails2 = new JSONObject();
201                 navItemsDetails2.put("name", "Application Catalog");
202                 navItemsDetails2.put("state",
203                                 (isLeftMenuHasRoot(leftMenuRootValue))
204                                                 ? leftMenuRootValue+".appCatalog"
205                                                 : "appCatalog");
206                 navItemsDetails2.put("imageSrc", isLeftMenuHasRoot(leftMenuRootValue) ? "icon-apps-marketplace" : "apps");
207                 defaultNavMap.put("appCatalog", navItemsDetails2);
208
209                 JSONObject navItemsDetails3 = new JSONObject();
210                 navItemsDetails3.put("name", "Widget Catalog");
211                 navItemsDetails3.put("state",
212                                 isLeftMenuHasRoot(leftMenuRootValue)
213                                                 ? leftMenuRootValue+".widgetCatalog"
214                                                 : "widgetCatalog");
215                 navItemsDetails3.put("imageSrc", isLeftMenuHasRoot(leftMenuRootValue) ? "icon-apps-marketplace" : "apps");
216                 defaultNavMap.put("widgetCatalog", navItemsDetails3);
217
218         }
219
220         private boolean isLeftMenuHasRoot(String leftMenuRootValue) {
221                 return (leftMenuRootValue != "" || leftMenuRootValue.isEmpty()) && leftMenuRootValue.equals("root");
222         }
223
224         @SuppressWarnings("unchecked")
225         private void loadNavMapByUserAdminRole(Map<String, JSONObject> defaultNavMap, EPUser user) {
226                 String leftMenuRootValue = getLeftMenuPrefixValue();
227                 List<String> applicationsList = new ArrayList<>();
228                 final Map<String, Long> appParams = new HashMap<>();
229                 appParams.put("userId", user.getId());
230                 applicationsList = dataAccessService.executeNamedQuery("getAprroverRoleFunctionsOfUser", appParams, null);
231                 if (applicationsList.size() > 0) {
232                         JSONObject navItemsDetails = new JSONObject();
233                         navItemsDetails.put("name", "Users");
234                         navItemsDetails.put("state",
235                                         ((leftMenuRootValue != "" || !leftMenuRootValue.isEmpty()) && leftMenuRootValue.equals("root")) ? leftMenuRootValue+".users"
236                                                         : "users");
237                         navItemsDetails.put("imageSrc", isLeftMenuHasRoot(leftMenuRootValue) ? "person" : "icon-user");
238                         defaultNavMap.put("users", navItemsDetails);
239                 }
240         }
241
242         private String getLeftMenuPrefixValue() {
243                 return EPCommonSystemProperties.getProperty(EPCommonSystemProperties.PORTAL_LEFT_MENU);
244         }
245
246 }