2 * ================================================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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 * ================================================================================
20 package org.openecomp.portalapp.controller.core;
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;
29 import javax.servlet.http.HttpServletRequest;
30 import javax.servlet.http.HttpServletResponse;
31 import javax.servlet.http.HttpSession;
33 import org.json.JSONObject;
34 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
35 import org.openecomp.portalsdk.core.domain.Role;
36 import org.openecomp.portalsdk.core.domain.User;
37 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
38 import org.openecomp.portalsdk.core.service.RoleService;
39 import org.openecomp.portalsdk.core.service.UserProfileService;
40 import org.openecomp.portalsdk.core.service.UserService;
41 import org.openecomp.portalsdk.core.util.SystemProperties;
42 import org.openecomp.portalsdk.core.web.support.AppUtils;
43 import org.openecomp.portalsdk.core.web.support.JsonMessage;
44 import org.openecomp.portalsdk.core.web.support.UserUtils;
45 import org.springframework.beans.factory.annotation.Autowired;
46 import org.springframework.stereotype.Controller;
47 import org.springframework.web.bind.annotation.RequestMapping;
48 import org.springframework.web.bind.annotation.RequestMethod;
49 import org.springframework.web.servlet.ModelAndView;
51 import com.fasterxml.jackson.databind.DeserializationFeature;
52 import com.fasterxml.jackson.databind.JsonNode;
53 import com.fasterxml.jackson.databind.ObjectMapper;
57 public class ProfileController extends RestrictedBaseController {
59 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ProfileController.class);
62 UserProfileService service;
65 UserService userService;
68 RoleService roleService;
70 private String viewName;
72 @RequestMapping(value = { "/profile" }, method = RequestMethod.GET)
73 public ModelAndView profile(HttpServletRequest request, HttpServletResponse response) throws Exception{
74 Map<String, Object> model = new HashMap<String, Object>();
75 ObjectMapper mapper = new ObjectMapper();
76 User user = UserUtils.getUserSession(request);
79 Long profileId = null;
81 if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
82 profile = UserUtils.getUserSession(request);
83 profileId = profile.getId();
85 profileId = Long.parseLong(request.getParameter("profile_id"));
86 profile = (User) userService.getUser(String.valueOf(profileId));
90 model.put("stateList", mapper.writeValueAsString(getStates()));
91 model.put("countries", mapper.writeValueAsString(getCountries()));
92 model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
93 model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
94 model.put("profile", mapper.writeValueAsString(profile));
95 model.put("profileId", mapper.writeValueAsString(profileId));
96 } catch (Exception e) {
97 logger.error(EELFLoggerDelegate.errorLogger, "profile: failed to write JSON", e);
99 return new ModelAndView("profile", "model", model);
102 @RequestMapping(value = { "/self_profile" }, method = RequestMethod.GET)
103 public ModelAndView self_profile(HttpServletRequest request) throws Exception{
104 Map<String, Object> model = new HashMap<String, Object>();
105 ObjectMapper mapper = new ObjectMapper();
108 Long profileId = null;
109 User user = UserUtils.getUserSession(request);
111 profile = UserUtils.getUserSession(request);
113 model.put("stateList", mapper.writeValueAsString(getStates()));
114 model.put("countries", mapper.writeValueAsString(getCountries()));
115 model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
116 model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
117 model.put("profile", mapper.writeValueAsString(profile));
118 model.put("profileId", mapper.writeValueAsString(profileId));
119 } catch (Exception e) {
120 logger.error(EELFLoggerDelegate.errorLogger, "self_profile: failed to write JSON" + e.getMessage());
122 return new ModelAndView("profile", "model", model);
125 @RequestMapping(value = { "/get_self_profile" }, method = RequestMethod.GET)
126 public void getSelfProfile(HttpServletRequest request, HttpServletResponse response) throws Exception{
127 Map<String, Object> model = new HashMap<String, Object>();
128 ObjectMapper mapper = new ObjectMapper();
129 User user = UserUtils.getUserSession(request);
132 Long profileId = null;
134 profile = (User) UserUtils.getUserSession(request);
136 model.put("stateList", mapper.writeValueAsString(getStates()));
137 model.put("countries", mapper.writeValueAsString(getCountries()));
138 model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
139 model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
140 model.put("profile", mapper.writeValueAsString(profile));
141 model.put("profileId", mapper.writeValueAsString(profileId));
142 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
143 JSONObject j = new JSONObject(msg);
144 response.getWriter().write(j.toString());
145 } catch (Exception e) {
146 logger.error(EELFLoggerDelegate.errorLogger, "getSelfProfile: failed to write JSON" + e.getMessage());
151 @RequestMapping(value = { "/get_profile" }, method = RequestMethod.GET)
152 public void GetUser(HttpServletRequest request, HttpServletResponse response) {
153 Map<String, Object> model = new HashMap<String, Object>();
154 User user = UserUtils.getUserSession(request);
155 ObjectMapper mapper = new ObjectMapper();
158 Long profileId = null;
159 if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
160 profile = UserUtils.getUserSession(request);
161 profileId = profile.getId();
163 profileId = Long.parseLong(request.getParameter("profile_id"));
164 profile = (User) userService.getUser(String.valueOf(profileId));
167 model.put("stateList", mapper.writeValueAsString(getStates()));
168 model.put("countries", mapper.writeValueAsString(getCountries()));
169 model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
170 model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
171 model.put("profile", mapper.writeValueAsString(profile));
172 model.put("profileId", mapper.writeValueAsString(profileId));
173 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
174 JSONObject j = new JSONObject(msg);
175 response.getWriter().write(j.toString());
177 } catch (Exception e) {
178 logger.error(EELFLoggerDelegate.errorLogger, "GetUser: failed to write JSON" + e.getMessage());
182 @RequestMapping(value = { "/profile/saveProfile" }, method = RequestMethod.POST)
183 public ModelAndView saveProfile(HttpServletRequest request, HttpServletResponse response) {
184 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
187 ObjectMapper mapper = new ObjectMapper();
188 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
189 JsonNode root = mapper.readTree(request.getReader());
190 User user = mapper.readValue(root.get("profile").toString(), User.class);
192 String selectedCountry = mapper.readValue(root.get("selectedCountry").toString(), String.class);
193 String selectedState = mapper.readValue(root.get("selectedState").toString(), String.class);
194 String selectedTimeZone = mapper.readValue(root.get("selectedTimeZone").toString(), String.class);
196 Long profileId = Long.parseLong(request.getParameter("profile_id"));
198 User domainUser = (User) userService.getUser(String.valueOf(profileId));
199 // user.setRoles(domainUser.getRoles());
200 user.setPseudoRoles(domainUser.getPseudoRoles());
201 user.setUserApps(domainUser.getUserApps());
202 if (!selectedCountry.equals("")) {
203 user.setCountry(selectedCountry);
205 if (!selectedState.equals("")) {
206 user.setState(selectedState);
208 if (!selectedTimeZone.equals("")) {
209 user.setTimeZoneId(Long.parseLong(selectedTimeZone));
211 service.saveUser(user);
212 logger.info(EELFLoggerDelegate.auditLogger, "Save user's profile for user " + profileId);
214 response.setCharacterEncoding("UTF-8");
215 response.setContentType("application / json");
216 request.setCharacterEncoding("UTF-8");
218 PrintWriter out = response.getWriter();
219 out.write("" + profileId);
221 } catch (Exception e) {
222 response.setCharacterEncoding("UTF-8");
224 request.setCharacterEncoding("UTF-8");
225 } catch (UnsupportedEncodingException e1) {
227 e1.printStackTrace();
230 PrintWriter out = null;
232 out = response.getWriter();
233 } catch (IOException e1) {
234 logger.error(EELFLoggerDelegate.errorLogger, "saveProfile: failed to get writer" + e1.getMessage());
236 out.write(e.getMessage());
241 @RequestMapping(value = { "/profile/removeRole" }, method = RequestMethod.POST)
242 public ModelAndView removeRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
244 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
247 ObjectMapper mapper = new ObjectMapper();
248 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
249 JsonNode root = mapper.readTree(request.getReader());
250 Role role = mapper.readValue(root.get("role").toString(), Role.class);
252 String profileId = request.getParameter("profile_id");
254 User domainUser = (User) userService.getUser(profileId);
256 domainUser.removeRole(role.getId());
258 service.saveUser(domainUser);
259 /*If adding new roles on the current logged in user, we need to update the user value in session*/
260 if(UserUtils.getUserId(request)==Integer.valueOf(profileId)){
261 HttpSession session = request.getSession(true);
262 session.setAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME), domainUser);
264 logger.info(EELFLoggerDelegate.auditLogger, "Remove role " + role.getId() + " from user " + profileId);
266 response.setCharacterEncoding("UTF-8");
267 response.setContentType("application / json");
268 request.setCharacterEncoding("UTF-8");
270 PrintWriter out = response.getWriter();
272 Map<String, Object> model = new HashMap<String, Object>();
273 model.put("profile", mapper.writeValueAsString(domainUser));
274 JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
276 out.write(j.toString());
279 } catch (Exception e) {
280 logger.error(EELFLoggerDelegate.errorLogger, "removeRole" + e.getMessage());
281 response.setCharacterEncoding("UTF-8");
282 request.setCharacterEncoding("UTF-8");
283 PrintWriter out = response.getWriter();
284 out.write(e.getMessage());
290 @RequestMapping(value = { "/profile/addNewRole" }, method = RequestMethod.POST)
291 public ModelAndView addNewRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
293 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save" );
296 ObjectMapper mapper = new ObjectMapper();
297 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
298 JsonNode root = mapper.readTree(request.getReader());
299 Role role = mapper.readValue(root.get("role").toString(), Role.class);
300 String profileId = request.getParameter("profile_id");
301 User domainUser = (User) userService.getUser(profileId);
302 domainUser.addRole(role);
303 service.saveUser(domainUser);
304 /*If removing roles on the current logged in user, we need to update the user value in session*/
305 if(UserUtils.getUserId(request)==Integer.valueOf(profileId)){
306 HttpSession session = request.getSession(true);
307 session.setAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME), domainUser);
309 logger.info(EELFLoggerDelegate.auditLogger, "Add new role " + role.getName() + " to user " + profileId);
311 response.setCharacterEncoding("UTF-8");
312 response.setContentType("application / json");
313 request.setCharacterEncoding("UTF-8");
315 PrintWriter out = response.getWriter();
316 Map<String, Object> model = new HashMap<String, Object>();
317 model.put("profile", mapper.writeValueAsString(domainUser));
318 JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
320 out.write(j.toString());
323 } catch (Exception e) {
324 logger.error(EELFLoggerDelegate.errorLogger, "addNewRole" + e.getMessage());
325 response.setCharacterEncoding("UTF-8");
326 request.setCharacterEncoding("UTF-8");
327 PrintWriter out = response.getWriter();
328 out.write(e.getMessage());
334 public String getViewName() {
338 public void setViewName(String viewName) {
339 this.viewName = viewName;
342 @SuppressWarnings("rawtypes")
343 public List getStates() {
344 return AppUtils.getLookupList("FN_LU_STATE", "STATE_CD", "STATE", null, "STATE_CD");
347 @SuppressWarnings("rawtypes")
348 public List getCountries() {
349 return AppUtils.getLookupList("FN_LU_COUNTRY", "COUNTRY_CD", "COUNTRY", null, "COUNTRY");
352 @SuppressWarnings("rawtypes")
353 public List getTimeZones() {
354 return AppUtils.getLookupList("FN_LU_TIMEZONE", "TIMEZONE_ID", "TIMEZONE_NAME", null, "TIMEZONE_NAME");
357 @SuppressWarnings("rawtypes")
358 public List getAvailableRoles(String requestedLoginId) throws Exception {
359 return roleService.getAvailableRoles(requestedLoginId);