a40b20ace45d3c45f5324b5bafc4400fa209c201
[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, HttpServletResponse response) {
68                 Map<String, Object> model = new HashMap<String, Object>();
69                 ObjectMapper mapper = new ObjectMapper();
70                 User user = UserUtils.getUserSession(request);
71
72                 User profile = null;
73                 Long profileId = null;
74
75                 if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
76                         profile = UserUtils.getUserSession(request);
77                         profileId = profile.getId();
78                 } else {
79                         profileId = Long.parseLong(request.getParameter("profile_id"));
80                         profile = (User) service.getUser(request.getParameter("profile_id"));
81                 }
82
83                 try {
84                         model.put("stateList", mapper.writeValueAsString(getStates()));
85                         model.put("countries", mapper.writeValueAsString(getCountries()));
86                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
87                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
88                         model.put("profile", mapper.writeValueAsString(profile));
89                         model.put("profileId", mapper.writeValueAsString(profileId));
90                 } catch (Exception e) {
91                         logger.error(EELFLoggerDelegate.errorLogger, "profile: failed to write JSON", e);
92                 }
93                 return new ModelAndView("profile", "model", model);
94         }
95
96         @RequestMapping(value = { "/self_profile" }, method = RequestMethod.GET)
97         public ModelAndView self_profile(HttpServletRequest request) {
98                 Map<String, Object> model = new HashMap<String, Object>();
99                 ObjectMapper mapper = new ObjectMapper();
100
101                 User profile = null;
102                 Long profileId = null;
103                 User user = UserUtils.getUserSession(request);
104
105                 profile = UserUtils.getUserSession(request);
106                 profileId = profile.getId();
107                 profile = (User) service.getUser(profileId.toString());
108
109                 try {
110                         model.put("stateList", mapper.writeValueAsString(getStates()));
111                         model.put("countries", mapper.writeValueAsString(getCountries()));
112                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
113                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
114                         model.put("profile", mapper.writeValueAsString(profile));
115                         model.put("profileId", mapper.writeValueAsString(profileId));
116                 } catch (Exception e) {
117                         logger.error(EELFLoggerDelegate.errorLogger, "self_profile: failed to write JSON" + e.getMessage());
118                 }
119                 return new ModelAndView("profile", "model", model);
120         }
121
122         @RequestMapping(value = { "/get_self_profile" }, method = RequestMethod.GET)
123         public void getSelfProfile(HttpServletRequest request, HttpServletResponse response) {
124                 Map<String, Object> model = new HashMap<String, Object>();
125                 ObjectMapper mapper = new ObjectMapper();
126                 User user = UserUtils.getUserSession(request);
127
128                 User profile = null;
129                 Long profileId = null;
130
131                 profile = UserUtils.getUserSession(request);
132                 profileId = profile.getId();
133                 profile = (User) service.getUser(profileId.toString());
134
135                 try {
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());
147                 }
148
149         }
150
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();
156                 try {
157                         User profile = null;
158                         Long profileId = null;
159                         if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
160                                 profile = UserUtils.getUserSession(request);
161                                 profileId = profile.getId();
162                         } else {
163                                 profileId = Long.parseLong(request.getParameter("profile_id"));
164                                 profile = (User) service.getUser(request.getParameter("profile_id"));
165                         }
166                         model.put("stateList", mapper.writeValueAsString(getStates()));
167                         model.put("countries", mapper.writeValueAsString(getCountries()));
168                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
169                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
170                         model.put("profile", mapper.writeValueAsString(profile));
171                         model.put("profileId", mapper.writeValueAsString(profileId));
172                         JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
173                         JSONObject j = new JSONObject(msg);
174                         response.getWriter().write(j.toString());
175
176                 } catch (Exception e) {
177                         logger.error(EELFLoggerDelegate.errorLogger, "GetUser: failed to write JSON" + e.getMessage());
178                 }
179         }
180
181         @RequestMapping(value = { "/profile/saveProfile" }, method = RequestMethod.POST)
182         public ModelAndView saveProfile(HttpServletRequest request, HttpServletResponse response) {
183                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
184                 try {
185
186                         ObjectMapper mapper = new ObjectMapper();
187                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
188                         JsonNode root = mapper.readTree(request.getReader());
189                         User user = mapper.readValue(root.get("profile").toString(), User.class);
190
191                         String selectedCountry = mapper.readValue(root.get("selectedCountry").toString(), String.class);
192                         String selectedState = mapper.readValue(root.get("selectedState").toString(), String.class);
193                         String selectedTimeZone = mapper.readValue(root.get("selectedTimeZone").toString(), String.class);
194
195                         Long profileId = Long.parseLong(request.getParameter("profile_id"));
196
197                         User domainUser = (User) service.getUser(request.getParameter("profile_id"));
198                         // user.setRoles(domainUser.getRoles());
199                         user.setPseudoRoles(domainUser.getPseudoRoles());
200                         user.setUserApps(domainUser.getUserApps());
201                         if (!selectedCountry.equals("")) {
202                                 user.setCountry(selectedCountry);
203                         }
204                         if (!selectedState.equals("")) {
205                                 user.setState(selectedState);
206                         }
207                         if (!selectedTimeZone.equals("")) {
208                                 user.setTimeZoneId(Long.parseLong(selectedTimeZone));
209                         }
210                         service.saveUser(user);
211                         logger.info(EELFLoggerDelegate.auditLogger, "Save user's profile for user " + profileId);
212
213                         response.setCharacterEncoding("UTF-8");
214                         response.setContentType("application / json");
215                         request.setCharacterEncoding("UTF-8");
216
217                         PrintWriter out = response.getWriter();
218                         out.write("" + profileId);
219                         return null;
220                 } catch (Exception e) {
221                         response.setCharacterEncoding("UTF-8");
222                         try {
223                                 request.setCharacterEncoding("UTF-8");
224                         } catch (UnsupportedEncodingException e1) {
225
226                                 e1.printStackTrace();
227
228                         }
229                         PrintWriter out = null;
230                         try {
231                                 out = response.getWriter();
232                         } catch (IOException e1) {
233                                 logger.error(EELFLoggerDelegate.errorLogger, "saveProfile: failed to get writer" + e1.getMessage());
234                         }
235                         out.write(e.getMessage());
236                         return null;
237                 }
238         }
239
240         @RequestMapping(value = { "/profile/removeRole" }, method = RequestMethod.POST)
241         public ModelAndView removeRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
242
243                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
244                 try {
245
246                         ObjectMapper mapper = new ObjectMapper();
247                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
248                         JsonNode root = mapper.readTree(request.getReader());
249                         Role role = mapper.readValue(root.get("role").toString(), Role.class);
250
251                         // Long profileId = Long.parseLong(request.getParameter("profile_id"));
252
253                         User domainUser = (User) service.getUser(request.getParameter("profile_id"));
254
255                         domainUser.removeRole(role.getId());
256
257                         service.saveUser(domainUser);
258                         logger.info(EELFLoggerDelegate.auditLogger, "Remove role " + role.getId() + " from user " + request.getParameter("profile_id"));
259
260                         response.setCharacterEncoding("UTF-8");
261                         response.setContentType("application / json");
262                         request.setCharacterEncoding("UTF-8");
263
264                         PrintWriter out = response.getWriter();
265
266                         Map<String, Object> model = new HashMap<String, Object>();
267                         model.put("profile", mapper.writeValueAsString(domainUser));
268                         JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
269
270                         out.write(j.toString());
271
272                         return null;
273                 } catch (Exception e) {
274                         logger.error(EELFLoggerDelegate.errorLogger, "removeRole" + e.getMessage());
275                         response.setCharacterEncoding("UTF-8");
276                         request.setCharacterEncoding("UTF-8");
277                         PrintWriter out = response.getWriter();
278                         out.write(e.getMessage());
279                         return null;
280                 }
281
282         }
283
284         @RequestMapping(value = { "/profile/addNewRole" }, method = RequestMethod.POST)
285         public ModelAndView addNewRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
286
287                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save" );
288                 try {
289
290                         ObjectMapper mapper = new ObjectMapper();
291                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
292                         JsonNode root = mapper.readTree(request.getReader());
293                         Role role = mapper.readValue(root.get("role").toString(), Role.class);
294
295                         // Long profileId = Long.parseLong(request.getParameter("profile_id"));
296
297                         User domainUser = (User) service.getUser(request.getParameter("profile_id"));
298
299                         domainUser.addRole(role);
300
301                         service.saveUser(domainUser);
302                         logger.info(EELFLoggerDelegate.auditLogger, "Add new role " + role.getName() + " to user " + request.getParameter("profile_id"));
303
304                         response.setCharacterEncoding("UTF-8");
305                         response.setContentType("application / json");
306                         request.setCharacterEncoding("UTF-8");
307
308                         PrintWriter out = response.getWriter();
309
310                         Map<String, Object> model = new HashMap<String, Object>();
311                         model.put("profile", mapper.writeValueAsString(domainUser));
312                         JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
313
314                         out.write(j.toString());
315
316                         return null;
317                 } catch (Exception e) {
318                         logger.error(EELFLoggerDelegate.errorLogger, "addNewRole" + e.getMessage());
319                         response.setCharacterEncoding("UTF-8");
320                         request.setCharacterEncoding("UTF-8");
321                         PrintWriter out = response.getWriter();
322                         out.write(e.getMessage());
323                         return null;
324                 }
325
326         }
327
328         public String getViewName() {
329                 return viewName;
330         }
331
332         public void setViewName(String viewName) {
333                 this.viewName = viewName;
334         }
335
336         @SuppressWarnings("rawtypes")
337         public List getStates() {
338                 return AppUtils.getLookupList("FN_LU_STATE", "STATE_CD", "STATE", null, "STATE_CD");
339         }
340
341         @SuppressWarnings("rawtypes")
342         public List getCountries() {
343                 return AppUtils.getLookupList("FN_LU_COUNTRY", "COUNTRY_CD", "COUNTRY", null, "COUNTRY");
344         }
345
346         @SuppressWarnings("rawtypes")
347         public List getTimeZones() {
348                 return AppUtils.getLookupList("FN_LU_TIMEZONE", "TIMEZONE_ID", "TIMEZONE_NAME", null, "TIMEZONE_NAME");
349         }
350
351         @SuppressWarnings("rawtypes")
352         public List getAvailableRoles(String requestedLoginId) throws Exception {
353                 return roleService.getAvailableRoles(requestedLoginId);
354         }
355
356 }