Merge "Add multi-language APIs into BE-common"
[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.portalsdk.core.domain.MenuData;
59 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
60 import org.onap.portalsdk.core.service.DataAccessService;
61 import org.springframework.beans.factory.annotation.Autowired;
62 import org.springframework.context.annotation.EnableAspectJAutoProxy;
63 import org.springframework.stereotype.Service;
64 import org.springframework.transaction.annotation.Transactional;
65
66 @Service("leftMenuService")
67 @Transactional
68 @org.springframework.context.annotation.Configuration
69 @EnableAspectJAutoProxy
70 @EPMetricsLog
71
72 public class EPLeftMenuServiceImpl implements EPLeftMenuService {
73
74         private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPLeftMenuServiceImpl.class);
75
76         
77         @Autowired
78         private ExternalAccessRolesService externalAccessRolesService;
79         @Autowired
80         private DataAccessService dataAccessService;
81         
82         /*
83          * (non-Javadoc)
84          * 
85          * @see
86          * org.onap.portalapp.portal.service.EPLeftMenuService#getLeftMenuItems
87          * (java.util.Set)
88          */
89         @Override
90         public String getLeftMenuItems(EPUser user, Set<MenuData> fullMenuSet, Set<String> roleFunctionSet) {
91                 final Map<String, JSONObject> defaultNavMap = new LinkedHashMap<String, JSONObject>();
92                 resetNavMap(defaultNavMap);
93                 loadDefaultNavMap(defaultNavMap);
94                 loadNavMapByUserAdminRole(defaultNavMap,user);
95                 loadNavMapByRole(defaultNavMap, fullMenuSet , user);
96                 return convertToSideBarModel(defaultNavMap);
97         }
98
99         /**
100          * Clears the map
101          * 
102          * @param defaultNavMap
103          */
104         private void resetNavMap(Map<String, JSONObject> defaultNavMap) {
105                 defaultNavMap.clear();
106         }
107
108         /**
109          * 
110          * @param defaultNavMap
111          * @param fullMenuSet
112          */
113         private void loadNavMapByRole(Map<String, JSONObject> defaultNavMap, Set<MenuData> fullMenuSet , EPUser user) {
114
115                 class SortOrderComparator implements Comparator<MenuData> {
116                         @Override
117                         public int compare(MenuData e1, MenuData e2) {
118                                 return e1.getSortOrder().compareTo(e2.getSortOrder());
119                         }
120                 }
121
122                 //mulitilanguage impl
123                 String loginId = user.getLoginId();
124                 HashMap loginParams = new HashMap();
125                 loginParams.put("login_id",loginId);
126                 List<EPUser> epUsers = dataAccessService.executeNamedQuery("getEPUserByLoginId", loginParams, new HashMap());
127                 Integer languageId = 1;
128                 for (EPUser epUser : epUsers) {
129                         languageId = epUser.getLanguageId();
130                 }
131                 Iterator<MenuData> iterator = fullMenuSet.iterator();
132                 HashMap params = new HashMap();
133                 params.put("language_id",languageId);
134                 List<DisplayText> displayTexts = dataAccessService.executeNamedQuery("displayText",params,new HashMap());
135                 while (iterator.hasNext()) {
136                         MenuData menuData = iterator.next();
137                         for (int index = 0;index<displayTexts.size();index++) {
138                                 DisplayText displayText = displayTexts.get(index);
139                                 if (menuData.getId()==displayText.getTextId()) {
140                                         menuData.setLabel(displayText.getLabel());
141                                         break;
142                                 }
143                         }
144                 }
145
146                 SortedSet<MenuData> sortMenuSet = new TreeSet<MenuData>(new SortOrderComparator());
147                 for (MenuData mn : fullMenuSet) {
148                         sortMenuSet.add(mn);
149                 }
150                 
151                 // Remove Roles from left menu if user doesnt have admin access on
152                 // centralized application
153                 List<CentralizedApp> applicationsList = null;
154                 applicationsList = externalAccessRolesService.getCentralizedAppsOfUser(user.getOrgUserId());
155                 if (applicationsList.size() == 0)
156                         sortMenuSet.removeIf(x -> x.getLabel().contains("Roles"));
157
158                 for (MenuData mn : sortMenuSet) {
159                         JSONObject navItemsDetails = new JSONObject();
160                         navItemsDetails.put("name", mn.getLabel());
161                         navItemsDetails.put("state", mn.getAction());
162                         navItemsDetails.put("imageSrc", mn.getImageSrc());
163                         defaultNavMap.put(mn.getAction(), navItemsDetails);
164                 }
165         }
166
167         /**
168          * 
169          * @param defaultNavMap
170          * @return
171          */
172         private String convertToSideBarModel(Map<String, JSONObject> defaultNavMap) {
173                 JSONObject sidebarModel = new JSONObject();
174                 JSONArray navItems = new JSONArray();
175                 Collection<JSONObject> jsonObjs = defaultNavMap.values();
176
177                 for (JSONObject navItemsDetail : jsonObjs)
178                         navItems.put(navItemsDetail);
179
180                 sidebarModel.put("label", "ECOMP portal");
181                 sidebarModel.put("navItems", navItems);
182                 return sidebarModel.toString();
183         }
184
185         /**
186          * Loads default entries for regular user.
187          * 
188          * @param defaultNavMap
189          */
190         private void loadDefaultNavMap(Map<String, JSONObject> defaultNavMap) {
191
192                 JSONObject navItemsDetails1 = new JSONObject();
193                 navItemsDetails1.put("name", "Home");
194                 navItemsDetails1.put("state", "root.applicationsHome");
195                 navItemsDetails1.put("imageSrc", "icon-building-home");
196                 defaultNavMap.put("root.applicationsHome", navItemsDetails1);
197
198                 JSONObject navItemsDetails2 = new JSONObject();
199                 navItemsDetails2.put("name", "Application Catalog");
200                 navItemsDetails2.put("state", "root.appCatalog");
201                 navItemsDetails2.put("imageSrc", "icon-apps-marketplace");
202                 defaultNavMap.put("root.appCatalog", navItemsDetails2);
203
204                 JSONObject navItemsDetails3 = new JSONObject();
205                 navItemsDetails3.put("name", "Widget Catalog");
206                 navItemsDetails3.put("state", "root.widgetCatalog");
207                 navItemsDetails3.put("imageSrc", "icon-apps-marketplace");
208                 defaultNavMap.put("root.widgetCatalog", navItemsDetails3);
209
210         }
211         
212         @SuppressWarnings("unchecked")
213         private void loadNavMapByUserAdminRole(Map<String, JSONObject> defaultNavMap, EPUser user) {
214         List<String> applicationsList = new ArrayList<>();
215         final Map<String, Long> appParams = new HashMap<>();
216         appParams.put("userId", user.getId());
217         applicationsList = dataAccessService.executeNamedQuery("getAprroverRoleFunctionsOfUser", appParams, null);
218         if (applicationsList.size() > 0) {
219         JSONObject navItemsDetails = new JSONObject();
220         navItemsDetails.put("name", "Users");
221         navItemsDetails.put("state", "root.users");
222         navItemsDetails.put("imageSrc", "icon-user");
223         defaultNavMap.put("root.users", navItemsDetails);
224         }
225         }
226
227 }