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;
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.service.UserService;
40 import org.openecomp.portalsdk.core.web.support.AppUtils;
41 import org.openecomp.portalsdk.core.web.support.JsonMessage;
42 import org.openecomp.portalsdk.core.web.support.UserUtils;
43 import org.springframework.beans.factory.annotation.Autowired;
44 import org.springframework.stereotype.Controller;
45 import org.springframework.web.bind.annotation.RequestMapping;
46 import org.springframework.web.bind.annotation.RequestMethod;
47 import org.springframework.web.servlet.ModelAndView;
49 import com.fasterxml.jackson.databind.DeserializationFeature;
50 import com.fasterxml.jackson.databind.JsonNode;
51 import com.fasterxml.jackson.databind.ObjectMapper;
55 public class ProfileController extends RestrictedBaseController {
57 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ProfileController.class);
60 UserProfileService service;
63 UserService userService;
66 RoleService roleService;
68 private String viewName;
70 @RequestMapping(value = { "/profile" }, method = RequestMethod.GET)
71 public ModelAndView profile(HttpServletRequest request, HttpServletResponse response) throws Exception{
72 Map<String, Object> model = new HashMap<String, Object>();
73 ObjectMapper mapper = new ObjectMapper();
74 User user = UserUtils.getUserSession(request);
77 Long profileId = null;
79 if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
80 profile = UserUtils.getUserSession(request);
81 profileId = profile.getId();
83 profileId = Long.parseLong(request.getParameter("profile_id"));
84 profile = (User) userService.getUser(String.valueOf(profileId));
88 model.put("stateList", mapper.writeValueAsString(getStates()));
89 model.put("countries", mapper.writeValueAsString(getCountries()));
90 model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
91 model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
92 model.put("profile", mapper.writeValueAsString(profile));
93 model.put("profileId", mapper.writeValueAsString(profileId));
94 } catch (Exception e) {
95 logger.error(EELFLoggerDelegate.errorLogger, "profile: failed to write JSON", e);
97 return new ModelAndView("profile", "model", model);
100 @RequestMapping(value = { "/self_profile" }, method = RequestMethod.GET)
101 public ModelAndView self_profile(HttpServletRequest request) throws Exception{
102 Map<String, Object> model = new HashMap<String, Object>();
103 ObjectMapper mapper = new ObjectMapper();
106 Long profileId = null;
107 User user = UserUtils.getUserSession(request);
109 profile = UserUtils.getUserSession(request);
111 model.put("stateList", mapper.writeValueAsString(getStates()));
112 model.put("countries", mapper.writeValueAsString(getCountries()));
113 model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
114 model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
115 model.put("profile", mapper.writeValueAsString(profile));
116 model.put("profileId", mapper.writeValueAsString(profileId));
117 } catch (Exception e) {
118 logger.error(EELFLoggerDelegate.errorLogger, "self_profile: failed to write JSON" + e.getMessage());
120 return new ModelAndView("profile", "model", model);
123 @RequestMapping(value = { "/get_self_profile" }, method = RequestMethod.GET)
124 public void getSelfProfile(HttpServletRequest request, HttpServletResponse response) throws Exception{
125 Map<String, Object> model = new HashMap<String, Object>();
126 ObjectMapper mapper = new ObjectMapper();
127 User user = UserUtils.getUserSession(request);
130 Long profileId = null;
132 profile = (User) UserUtils.getUserSession(request);
134 model.put("stateList", mapper.writeValueAsString(getStates()));
135 model.put("countries", mapper.writeValueAsString(getCountries()));
136 model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
137 model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
138 model.put("profile", mapper.writeValueAsString(profile));
139 model.put("profileId", mapper.writeValueAsString(profileId));
140 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
141 JSONObject j = new JSONObject(msg);
142 response.getWriter().write(j.toString());
143 } catch (Exception e) {
144 logger.error(EELFLoggerDelegate.errorLogger, "getSelfProfile: failed to write JSON" + e.getMessage());
149 @RequestMapping(value = { "/get_profile" }, method = RequestMethod.GET)
150 public void GetUser(HttpServletRequest request, HttpServletResponse response) {
151 Map<String, Object> model = new HashMap<String, Object>();
152 User user = UserUtils.getUserSession(request);
153 ObjectMapper mapper = new ObjectMapper();
156 Long profileId = null;
157 if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
158 profile = UserUtils.getUserSession(request);
159 profileId = profile.getId();
161 profileId = Long.parseLong(request.getParameter("profile_id"));
162 profile = (User) userService.getUser(String.valueOf(profileId));
165 model.put("stateList", mapper.writeValueAsString(getStates()));
166 model.put("countries", mapper.writeValueAsString(getCountries()));
167 model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
168 model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
169 model.put("profile", mapper.writeValueAsString(profile));
170 model.put("profileId", mapper.writeValueAsString(profileId));
171 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
172 JSONObject j = new JSONObject(msg);
173 response.getWriter().write(j.toString());
175 } catch (Exception e) {
176 logger.error(EELFLoggerDelegate.errorLogger, "GetUser: failed to write JSON" + e.getMessage());
180 @RequestMapping(value = { "/profile/saveProfile" }, method = RequestMethod.POST)
181 public ModelAndView saveProfile(HttpServletRequest request, HttpServletResponse response) {
182 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
185 ObjectMapper mapper = new ObjectMapper();
186 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
187 JsonNode root = mapper.readTree(request.getReader());
188 User user = mapper.readValue(root.get("profile").toString(), User.class);
190 String selectedCountry = mapper.readValue(root.get("selectedCountry").toString(), String.class);
191 String selectedState = mapper.readValue(root.get("selectedState").toString(), String.class);
192 String selectedTimeZone = mapper.readValue(root.get("selectedTimeZone").toString(), String.class);
194 Long profileId = Long.parseLong(request.getParameter("profile_id"));
196 User domainUser = (User) userService.getUser(String.valueOf(profileId));
197 // user.setRoles(domainUser.getRoles());
198 user.setPseudoRoles(domainUser.getPseudoRoles());
199 user.setUserApps(domainUser.getUserApps());
200 if (!selectedCountry.equals("")) {
201 user.setCountry(selectedCountry);
203 if (!selectedState.equals("")) {
204 user.setState(selectedState);
206 if (!selectedTimeZone.equals("")) {
207 user.setTimeZoneId(Long.parseLong(selectedTimeZone));
209 service.saveUser(user);
210 logger.info(EELFLoggerDelegate.auditLogger, "Save user's profile for user " + profileId);
212 response.setCharacterEncoding("UTF-8");
213 response.setContentType("application / json");
214 request.setCharacterEncoding("UTF-8");
216 PrintWriter out = response.getWriter();
217 out.write("" + profileId);
219 } catch (Exception e) {
220 response.setCharacterEncoding("UTF-8");
222 request.setCharacterEncoding("UTF-8");
223 } catch (UnsupportedEncodingException e1) {
225 e1.printStackTrace();
228 PrintWriter out = null;
230 out = response.getWriter();
231 } catch (IOException e1) {
232 logger.error(EELFLoggerDelegate.errorLogger, "saveProfile: failed to get writer" + e1.getMessage());
234 out.write(e.getMessage());
239 @RequestMapping(value = { "/profile/removeRole" }, method = RequestMethod.POST)
240 public ModelAndView removeRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
242 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
245 ObjectMapper mapper = new ObjectMapper();
246 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
247 JsonNode root = mapper.readTree(request.getReader());
248 Role role = mapper.readValue(root.get("role").toString(), Role.class);
250 String profileId = request.getParameter("profile_id");
252 User domainUser = (User) userService.getUser(profileId);
254 domainUser.removeRole(role.getId());
256 service.saveUser(domainUser);
257 logger.info(EELFLoggerDelegate.auditLogger, "Remove role " + role.getId() + " from user " + profileId);
259 response.setCharacterEncoding("UTF-8");
260 response.setContentType("application / json");
261 request.setCharacterEncoding("UTF-8");
263 PrintWriter out = response.getWriter();
265 Map<String, Object> model = new HashMap<String, Object>();
266 model.put("profile", mapper.writeValueAsString(domainUser));
267 JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
269 out.write(j.toString());
272 } catch (Exception e) {
273 logger.error(EELFLoggerDelegate.errorLogger, "removeRole" + e.getMessage());
274 response.setCharacterEncoding("UTF-8");
275 request.setCharacterEncoding("UTF-8");
276 PrintWriter out = response.getWriter();
277 out.write(e.getMessage());
283 @RequestMapping(value = { "/profile/addNewRole" }, method = RequestMethod.POST)
284 public ModelAndView addNewRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
286 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save" );
289 ObjectMapper mapper = new ObjectMapper();
290 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
291 JsonNode root = mapper.readTree(request.getReader());
292 Role role = mapper.readValue(root.get("role").toString(), Role.class);
293 String profileId = request.getParameter("profile_id");
294 User domainUser = (User) userService.getUser(profileId);
295 domainUser.addRole(role);
296 service.saveUser(domainUser);
297 logger.info(EELFLoggerDelegate.auditLogger, "Add new role " + role.getName() + " to user " + profileId);
299 response.setCharacterEncoding("UTF-8");
300 response.setContentType("application / json");
301 request.setCharacterEncoding("UTF-8");
303 PrintWriter out = response.getWriter();
304 Map<String, Object> model = new HashMap<String, Object>();
305 model.put("profile", mapper.writeValueAsString(domainUser));
306 JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
308 out.write(j.toString());
311 } catch (Exception e) {
312 logger.error(EELFLoggerDelegate.errorLogger, "addNewRole" + e.getMessage());
313 response.setCharacterEncoding("UTF-8");
314 request.setCharacterEncoding("UTF-8");
315 PrintWriter out = response.getWriter();
316 out.write(e.getMessage());
322 public String getViewName() {
326 public void setViewName(String viewName) {
327 this.viewName = viewName;
330 @SuppressWarnings("rawtypes")
331 public List getStates() {
332 return AppUtils.getLookupList("FN_LU_STATE", "STATE_CD", "STATE", null, "STATE_CD");
335 @SuppressWarnings("rawtypes")
336 public List getCountries() {
337 return AppUtils.getLookupList("FN_LU_COUNTRY", "COUNTRY_CD", "COUNTRY", null, "COUNTRY");
340 @SuppressWarnings("rawtypes")
341 public List getTimeZones() {
342 return AppUtils.getLookupList("FN_LU_TIMEZONE", "TIMEZONE_ID", "TIMEZONE_NAME", null, "TIMEZONE_NAME");
345 @SuppressWarnings("rawtypes")
346 public List getAvailableRoles(String requestedLoginId) throws Exception {
347 return roleService.getAvailableRoles(requestedLoginId);