a774274cb91ab152f32c3b10b0caf92a2b1e6a55
[portal/sdk.git] /
1 /*-
2  * ================================================================================
3  * ECOMP Portal SDK
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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  * ================================================================================
19  */
20 package org.openecomp.portalapp.controller.core;
21
22 import java.io.IOException;
23 import java.io.PrintWriter;
24 import java.io.UnsupportedEncodingException;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28
29 import javax.servlet.http.HttpServletRequest;
30 import javax.servlet.http.HttpServletResponse;
31
32 import org.json.JSONObject;
33 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
34 import org.openecomp.portalsdk.core.domain.Role;
35 import org.openecomp.portalsdk.core.domain.User;
36 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
37 import org.openecomp.portalsdk.core.service.RoleService;
38 import org.openecomp.portalsdk.core.service.UserProfileService;
39 import org.openecomp.portalsdk.core.web.support.AppUtils;
40 import org.openecomp.portalsdk.core.web.support.JsonMessage;
41 import org.openecomp.portalsdk.core.web.support.UserUtils;
42 import org.springframework.beans.factory.annotation.Autowired;
43 import org.springframework.stereotype.Controller;
44 import org.springframework.web.bind.annotation.RequestMapping;
45 import org.springframework.web.bind.annotation.RequestMethod;
46 import org.springframework.web.servlet.ModelAndView;
47
48 import com.fasterxml.jackson.databind.DeserializationFeature;
49 import com.fasterxml.jackson.databind.JsonNode;
50 import com.fasterxml.jackson.databind.ObjectMapper;
51
52 @Controller
53 @RequestMapping("/")
54 public class ProfileController extends RestrictedBaseController {
55
56         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ProfileController.class);
57
58         @Autowired
59         UserProfileService service;
60         
61         @Autowired
62         RoleService roleService;
63
64         private String viewName;
65         
66         @RequestMapping(value = { "/profile" }, method = RequestMethod.GET)
67         public ModelAndView profile(HttpServletRequest request) {
68                 Map<String, Object> model = new HashMap<String, Object>();
69                 ObjectMapper mapper = new ObjectMapper();
70
71                 User profile = null;
72                 Long profileId = null;
73
74                 if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
75                         profile = UserUtils.getUserSession(request);
76                         profileId = profile.getId();
77                 } else {
78                         profileId = Long.parseLong(request.getParameter("profile_id"));
79                         profile = (User) service.getUser(request.getParameter("profile_id"));
80                 }
81
82                 try {
83                         model.put("stateList", mapper.writeValueAsString(getStates()));
84                         model.put("countries", mapper.writeValueAsString(getCountries()));
85                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
86                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles()));
87                         model.put("profile", mapper.writeValueAsString(profile));
88                         model.put("profileId", mapper.writeValueAsString(profileId));
89                 } catch (Exception e) {
90                         logger.error(EELFLoggerDelegate.errorLogger, "profile: failed to write JSON", e);
91                 }
92                 return new ModelAndView("profile", "model", model);
93         }
94
95         @RequestMapping(value = { "/self_profile" }, method = RequestMethod.GET)
96         public ModelAndView self_profile(HttpServletRequest request) {
97                 Map<String, Object> model = new HashMap<String, Object>();
98                 ObjectMapper mapper = new ObjectMapper();
99
100                 User profile = null;
101                 Long profileId = null;
102
103                 profile = UserUtils.getUserSession(request);
104                 profileId = profile.getId();
105                 profile = (User) service.getUser(profileId.toString());
106
107                 try {
108                         model.put("stateList", mapper.writeValueAsString(getStates()));
109                         model.put("countries", mapper.writeValueAsString(getCountries()));
110                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
111                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles()));
112                         model.put("profile", mapper.writeValueAsString(profile));
113                         model.put("profileId", mapper.writeValueAsString(profileId));
114                 } catch (Exception e) {
115                         logger.error(EELFLoggerDelegate.errorLogger, "self_profile: failed to write JSON" + e.getMessage());
116                 }
117                 return new ModelAndView("profile", "model", model);
118         }
119
120         @RequestMapping(value = { "/get_self_profile" }, method = RequestMethod.GET)
121         public void getSelfProfile(HttpServletRequest request, HttpServletResponse response) {
122                 Map<String, Object> model = new HashMap<String, Object>();
123                 ObjectMapper mapper = new ObjectMapper();
124
125                 User profile = null;
126                 Long profileId = null;
127
128                 profile = UserUtils.getUserSession(request);
129                 profileId = profile.getId();
130                 profile = (User) service.getUser(profileId.toString());
131
132                 try {
133                         model.put("stateList", mapper.writeValueAsString(getStates()));
134                         model.put("countries", mapper.writeValueAsString(getCountries()));
135                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
136                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles()));
137                         model.put("profile", mapper.writeValueAsString(profile));
138                         model.put("profileId", mapper.writeValueAsString(profileId));
139                         JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
140                         JSONObject j = new JSONObject(msg);
141                         response.getWriter().write(j.toString());
142                 } catch (Exception e) {
143                         logger.error(EELFLoggerDelegate.errorLogger, "getSelfProfile: failed to write JSON" + e.getMessage());
144                 }
145
146         }
147
148         @RequestMapping(value = { "/get_profile" }, method = RequestMethod.GET)
149         public void GetUser(HttpServletRequest request, HttpServletResponse response) {
150                 Map<String, Object> model = new HashMap<String, Object>();
151                 ObjectMapper mapper = new ObjectMapper();
152                 try {
153                         User profile = null;
154                         Long profileId = null;
155                         if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
156                                 profile = UserUtils.getUserSession(request);
157                                 profileId = profile.getId();
158                         } else {
159                                 profileId = Long.parseLong(request.getParameter("profile_id"));
160                                 profile = (User) service.getUser(request.getParameter("profile_id"));
161                         }
162                         model.put("stateList", mapper.writeValueAsString(getStates()));
163                         model.put("countries", mapper.writeValueAsString(getCountries()));
164                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
165                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles()));
166                         model.put("profile", mapper.writeValueAsString(profile));
167                         model.put("profileId", mapper.writeValueAsString(profileId));
168                         JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
169                         JSONObject j = new JSONObject(msg);
170                         response.getWriter().write(j.toString());
171
172                 } catch (Exception e) {
173                         logger.error(EELFLoggerDelegate.errorLogger, "GetUser: failed to write JSON" + e.getMessage());
174                 }
175         }
176
177         @RequestMapping(value = { "/profile/saveProfile" }, method = RequestMethod.POST)
178         public ModelAndView saveProfile(HttpServletRequest request, HttpServletResponse response) {
179                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
180                 try {
181
182                         ObjectMapper mapper = new ObjectMapper();
183                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
184                         JsonNode root = mapper.readTree(request.getReader());
185                         User user = mapper.readValue(root.get("profile").toString(), User.class);
186
187                         String selectedCountry = mapper.readValue(root.get("selectedCountry").toString(), String.class);
188                         String selectedState = mapper.readValue(root.get("selectedState").toString(), String.class);
189                         String selectedTimeZone = mapper.readValue(root.get("selectedTimeZone").toString(), String.class);
190
191                         Long profileId = Long.parseLong(request.getParameter("profile_id"));
192
193                         User domainUser = (User) service.getUser(request.getParameter("profile_id"));
194                         // user.setRoles(domainUser.getRoles());
195                         user.setPseudoRoles(domainUser.getPseudoRoles());
196                         user.setUserApps(domainUser.getUserApps());
197                         if (!selectedCountry.equals("")) {
198                                 user.setCountry(selectedCountry);
199                         }
200                         if (!selectedState.equals("")) {
201                                 user.setState(selectedState);
202                         }
203                         if (!selectedTimeZone.equals("")) {
204                                 user.setTimeZoneId(Long.parseLong(selectedTimeZone));
205                         }
206                         service.saveUser(user);
207                         logger.info(EELFLoggerDelegate.auditLogger, "Save user's profile for user " + profileId);
208
209                         response.setCharacterEncoding("UTF-8");
210                         response.setContentType("application / json");
211                         request.setCharacterEncoding("UTF-8");
212
213                         PrintWriter out = response.getWriter();
214                         out.write("" + profileId);
215                         return null;
216                 } catch (Exception e) {
217                         response.setCharacterEncoding("UTF-8");
218                         try {
219                                 request.setCharacterEncoding("UTF-8");
220                         } catch (UnsupportedEncodingException e1) {
221
222                                 e1.printStackTrace();
223
224                         }
225                         PrintWriter out = null;
226                         try {
227                                 out = response.getWriter();
228                         } catch (IOException e1) {
229                                 logger.error(EELFLoggerDelegate.errorLogger, "saveProfile: failed to get writer" + e1.getMessage());
230                         }
231                         out.write(e.getMessage());
232                         return null;
233                 }
234         }
235
236         @RequestMapping(value = { "/profile/removeRole" }, method = RequestMethod.POST)
237         public ModelAndView removeRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
238
239                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
240                 try {
241
242                         ObjectMapper mapper = new ObjectMapper();
243                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
244                         JsonNode root = mapper.readTree(request.getReader());
245                         Role role = mapper.readValue(root.get("role").toString(), Role.class);
246
247                         // Long profileId = Long.parseLong(request.getParameter("profile_id"));
248
249                         User domainUser = (User) service.getUser(request.getParameter("profile_id"));
250
251                         domainUser.removeRole(role.getId());
252
253                         service.saveUser(domainUser);
254                         logger.info(EELFLoggerDelegate.auditLogger, "Remove role " + role.getId() + " from user " + request.getParameter("profile_id"));
255
256                         response.setCharacterEncoding("UTF-8");
257                         response.setContentType("application / json");
258                         request.setCharacterEncoding("UTF-8");
259
260                         PrintWriter out = response.getWriter();
261
262                         Map<String, Object> model = new HashMap<String, Object>();
263                         model.put("profile", mapper.writeValueAsString(domainUser));
264                         JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
265
266                         out.write(j.toString());
267
268                         return null;
269                 } catch (Exception e) {
270                         logger.error(EELFLoggerDelegate.errorLogger, "removeRole" + e.getMessage());
271                         response.setCharacterEncoding("UTF-8");
272                         request.setCharacterEncoding("UTF-8");
273                         PrintWriter out = response.getWriter();
274                         out.write(e.getMessage());
275                         return null;
276                 }
277
278         }
279
280         @RequestMapping(value = { "/profile/addNewRole" }, method = RequestMethod.POST)
281         public ModelAndView addNewRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
282
283                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save" );
284                 try {
285
286                         ObjectMapper mapper = new ObjectMapper();
287                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
288                         JsonNode root = mapper.readTree(request.getReader());
289                         Role role = mapper.readValue(root.get("role").toString(), Role.class);
290
291                         // Long profileId = Long.parseLong(request.getParameter("profile_id"));
292
293                         User domainUser = (User) service.getUser(request.getParameter("profile_id"));
294
295                         domainUser.addRole(role);
296
297                         service.saveUser(domainUser);
298                         logger.info(EELFLoggerDelegate.auditLogger, "Add new role " + role.getName() + " to user " + request.getParameter("profile_id"));
299
300                         response.setCharacterEncoding("UTF-8");
301                         response.setContentType("application / json");
302                         request.setCharacterEncoding("UTF-8");
303
304                         PrintWriter out = response.getWriter();
305
306                         Map<String, Object> model = new HashMap<String, Object>();
307                         model.put("profile", mapper.writeValueAsString(domainUser));
308                         JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
309
310                         out.write(j.toString());
311
312                         return null;
313                 } catch (Exception e) {
314                         logger.error(EELFLoggerDelegate.errorLogger, "addNewRole" + e.getMessage());
315                         response.setCharacterEncoding("UTF-8");
316                         request.setCharacterEncoding("UTF-8");
317                         PrintWriter out = response.getWriter();
318                         out.write(e.getMessage());
319                         return null;
320                 }
321
322         }
323
324         public String getViewName() {
325                 return viewName;
326         }
327
328         public void setViewName(String viewName) {
329                 this.viewName = viewName;
330         }
331
332         @SuppressWarnings("rawtypes")
333         public List getStates() {
334                 return AppUtils.getLookupList("FN_LU_STATE", "STATE_CD", "STATE", null, "STATE_CD");
335         }
336
337         @SuppressWarnings("rawtypes")
338         public List getCountries() {
339                 return AppUtils.getLookupList("FN_LU_COUNTRY", "COUNTRY_CD", "COUNTRY", null, "COUNTRY");
340         }
341
342         @SuppressWarnings("rawtypes")
343         public List getTimeZones() {
344                 return AppUtils.getLookupList("FN_LU_TIMEZONE", "TIMEZONE_ID", "TIMEZONE_NAME", null, "TIMEZONE_NAME");
345         }
346
347         @SuppressWarnings("rawtypes")
348         public List getAvailableRoles() {
349                 return roleService.getAvailableRoles();
350         }
351
352 }