f4132a9ef074ce5fd51ca357151425b2a5beb7c5
[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.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;
48
49 import com.fasterxml.jackson.databind.DeserializationFeature;
50 import com.fasterxml.jackson.databind.JsonNode;
51 import com.fasterxml.jackson.databind.ObjectMapper;
52
53 @Controller
54 @RequestMapping("/")
55 public class ProfileController extends RestrictedBaseController {
56
57         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ProfileController.class);
58
59         @Autowired
60         UserProfileService service;
61         
62         @Autowired
63         UserService userService;
64         
65         @Autowired
66         RoleService roleService;
67
68         private String viewName;
69         
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);
75
76                 User profile = null;
77                 Long profileId = null;
78
79                 if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
80                         profile = UserUtils.getUserSession(request);
81                         profileId = profile.getId();
82                 } else {
83                         profileId = Long.parseLong(request.getParameter("profile_id"));
84                         profile = (User) userService.getUser(String.valueOf(profileId));
85                 }
86
87                 try {
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);
96                 }
97                 return new ModelAndView("profile", "model", model);
98         }
99
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();
104
105                 User profile = null;
106                 Long profileId = null;
107                 User user = UserUtils.getUserSession(request);
108
109                 profile = UserUtils.getUserSession(request);
110                 try {
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());
119                 }
120                 return new ModelAndView("profile", "model", model);
121         }
122
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);
128
129                 User profile = null;
130                 Long profileId = null;
131
132                 profile = (User) UserUtils.getUserSession(request);     
133                 try {
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());
145                 }
146
147         }
148
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();
154                 try {
155                         User profile = null;
156                         Long profileId = null;
157                         if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
158                                 profile = UserUtils.getUserSession(request);
159                                 profileId = profile.getId();
160                         } else {
161                                 profileId = Long.parseLong(request.getParameter("profile_id"));
162                                 profile = (User) userService.getUser(String.valueOf(profileId));
163                                 
164                         }
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());
174
175                 } catch (Exception e) {
176                         logger.error(EELFLoggerDelegate.errorLogger, "GetUser: failed to write JSON" + e.getMessage());
177                 }
178         }
179
180         @RequestMapping(value = { "/profile/saveProfile" }, method = RequestMethod.POST)
181         public ModelAndView saveProfile(HttpServletRequest request, HttpServletResponse response) {
182                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
183                 try {
184
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);
189
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);
193
194                         Long profileId = Long.parseLong(request.getParameter("profile_id"));
195
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);
202                         }
203                         if (!selectedState.equals("")) {
204                                 user.setState(selectedState);
205                         }
206                         if (!selectedTimeZone.equals("")) {
207                                 user.setTimeZoneId(Long.parseLong(selectedTimeZone));
208                         }
209                         service.saveUser(user);
210                         logger.info(EELFLoggerDelegate.auditLogger, "Save user's profile for user " + profileId);
211
212                         response.setCharacterEncoding("UTF-8");
213                         response.setContentType("application / json");
214                         request.setCharacterEncoding("UTF-8");
215
216                         PrintWriter out = response.getWriter();
217                         out.write("" + profileId);
218                         return null;
219                 } catch (Exception e) {
220                         response.setCharacterEncoding("UTF-8");
221                         try {
222                                 request.setCharacterEncoding("UTF-8");
223                         } catch (UnsupportedEncodingException e1) {
224
225                                 e1.printStackTrace();
226
227                         }
228                         PrintWriter out = null;
229                         try {
230                                 out = response.getWriter();
231                         } catch (IOException e1) {
232                                 logger.error(EELFLoggerDelegate.errorLogger, "saveProfile: failed to get writer" + e1.getMessage());
233                         }
234                         out.write(e.getMessage());
235                         return null;
236                 }
237         }
238
239         @RequestMapping(value = { "/profile/removeRole" }, method = RequestMethod.POST)
240         public ModelAndView removeRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
241
242                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
243                 try {
244
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);
249
250                          String profileId = request.getParameter("profile_id");
251
252                         User domainUser = (User) userService.getUser(profileId);
253
254                         domainUser.removeRole(role.getId());
255
256                         service.saveUser(domainUser);
257                         logger.info(EELFLoggerDelegate.auditLogger, "Remove role " + role.getId() + " from user " + profileId);
258
259                         response.setCharacterEncoding("UTF-8");
260                         response.setContentType("application / json");
261                         request.setCharacterEncoding("UTF-8");
262
263                         PrintWriter out = response.getWriter();
264
265                         Map<String, Object> model = new HashMap<String, Object>();
266                         model.put("profile", mapper.writeValueAsString(domainUser));
267                         JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
268
269                         out.write(j.toString());
270
271                         return null;
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());
278                         return null;
279                 }
280
281         }
282
283         @RequestMapping(value = { "/profile/addNewRole" }, method = RequestMethod.POST)
284         public ModelAndView addNewRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
285
286                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save" );
287                 try {
288
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);
298
299                         response.setCharacterEncoding("UTF-8");
300                         response.setContentType("application / json");
301                         request.setCharacterEncoding("UTF-8");
302
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));
307
308                         out.write(j.toString());
309
310                         return null;
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());
317                         return null;
318                 }
319
320         }
321
322         public String getViewName() {
323                 return viewName;
324         }
325
326         public void setViewName(String viewName) {
327                 this.viewName = viewName;
328         }
329
330         @SuppressWarnings("rawtypes")
331         public List getStates() {
332                 return AppUtils.getLookupList("FN_LU_STATE", "STATE_CD", "STATE", null, "STATE_CD");
333         }
334
335         @SuppressWarnings("rawtypes")
336         public List getCountries() {
337                 return AppUtils.getLookupList("FN_LU_COUNTRY", "COUNTRY_CD", "COUNTRY", null, "COUNTRY");
338         }
339
340         @SuppressWarnings("rawtypes")
341         public List getTimeZones() {
342                 return AppUtils.getLookupList("FN_LU_TIMEZONE", "TIMEZONE_ID", "TIMEZONE_NAME", null, "TIMEZONE_NAME");
343         }
344
345         @SuppressWarnings("rawtypes")
346         public List getAvailableRoles(String requestedLoginId) throws Exception {
347                 return roleService.getAvailableRoles(requestedLoginId);
348         }
349
350 }