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.portal.controller;
22 import java.io.IOException;
23 import java.util.List;
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
29 import org.openecomp.portalapp.controller.EPRestrictedBaseController;
30 import org.openecomp.portalapp.portal.domain.AdminUserApplications;
31 import org.openecomp.portalapp.portal.domain.AppIdAndNameTransportModel;
32 import org.openecomp.portalapp.portal.domain.AppsResponse;
33 import org.openecomp.portalapp.portal.domain.EPApp;
34 import org.openecomp.portalapp.portal.domain.EPUser;
35 import org.openecomp.portalapp.portal.domain.EcompApp;
36 import org.openecomp.portalapp.portal.domain.UserRoles;
37 import org.openecomp.portalapp.portal.logging.aop.EPAuditLog;
38 import org.openecomp.portalapp.portal.service.AdminRolesService;
39 import org.openecomp.portalapp.portal.service.EPAppService;
40 import org.openecomp.portalapp.portal.service.EPLeftMenuService;
41 import org.openecomp.portalapp.portal.transport.EPAppsManualPreference;
42 import org.openecomp.portalapp.portal.transport.EPAppsSortPreference;
43 import org.openecomp.portalapp.portal.transport.EPDeleteAppsManualSortPref;
44 import org.openecomp.portalapp.portal.transport.EPWidgetsSortPreference;
45 import org.openecomp.portalapp.portal.transport.FieldsValidator;
46 import org.openecomp.portalapp.portal.transport.LocalRole;
47 import org.openecomp.portalapp.portal.transport.OnboardingApp;
48 import org.openecomp.portalapp.portal.utils.EcompPortalUtils;
49 import org.openecomp.portalapp.util.EPUserUtils;
50 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
51 import org.openecomp.portalsdk.core.util.SystemProperties;
52 import org.openecomp.portalsdk.core.web.support.AppUtils;
53 import org.springframework.beans.factory.annotation.Autowired;
54 import org.springframework.context.annotation.EnableAspectJAutoProxy;
55 import org.springframework.http.HttpEntity;
56 import org.springframework.http.HttpHeaders;
57 import org.springframework.http.MediaType;
58 import org.springframework.web.bind.annotation.PathVariable;
59 import org.springframework.web.bind.annotation.RequestBody;
60 import org.springframework.web.bind.annotation.RequestMapping;
61 import org.springframework.web.bind.annotation.RequestMethod;
62 import org.springframework.web.bind.annotation.RestController;
65 @EnableAspectJAutoProxy
67 public class AppsController extends EPRestrictedBaseController {
68 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsController.class);
71 private AdminRolesService adminRolesService;
74 private EPAppService appService;
77 private EPLeftMenuService leftMenuService;
80 * RESTful service method to fetch all Applications available to current
85 @RequestMapping(value = { "/portalApi/userApps" }, method = RequestMethod.GET, produces = "application/json")
86 public List<EcompApp> getUserApps(HttpServletRequest request, HttpServletResponse response) {
87 EPUser user = EPUserUtils.getUserSession(request);
88 List<EcompApp> ecompApps = null;
92 EcompPortalUtils.setBadPermissions(user, response, "getUserApps");
94 ecompApps = appService.transformAppsToEcompApps(appService.getUserApps(user));
95 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userApps", "GET result =", ecompApps);
97 } catch (Exception e) {
98 logger.error(EELFLoggerDelegate.errorLogger, "getUserApps failed", e);
105 * RESTful service method to fetch all applications accessible to the
106 * current user, with personalizations.
110 @RequestMapping(value = { "/portalApi/persUserApps" }, method = RequestMethod.GET, produces = "application/json")
111 public List<EcompApp> getPersUserApps(HttpServletRequest request, HttpServletResponse response) throws IOException {
112 EPUser user = EPUserUtils.getUserSession(request);
113 List<EcompApp> ecompApps = null;
116 EcompPortalUtils.setBadPermissions(user, response, "getPersUserApps");
118 List<EPApp> apps = null;
119 if (adminRolesService.isSuperAdmin(user))
120 apps = appService.getPersAdminApps(user);
122 apps = appService.getPersUserApps(user);
123 ecompApps = appService.transformAppsToEcompApps(apps);
124 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userPersApps", "GET result =", ecompApps);
126 } catch (Exception e) {
127 logger.error(EELFLoggerDelegate.errorLogger, "getPersUserApps failed", e);
128 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
134 * RESTful service method to fetch applications for which the current user
135 * is an Administrator
139 @RequestMapping(value = { "/portalApi/adminApps" }, method = RequestMethod.GET, produces = "application/json")
140 public List<AppIdAndNameTransportModel> getAdminApps(HttpServletRequest request, HttpServletResponse response) {
141 EPUser user = EPUserUtils.getUserSession(request);
142 List<AppIdAndNameTransportModel> adminApps = null;
145 if (!adminRolesService.isAccountAdmin(user)) {
146 EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
148 adminApps = appService.getAdminApps(user);
149 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/adminApps", "GET result =", adminApps);
151 } catch (Exception e) {
152 logger.error(EELFLoggerDelegate.errorLogger, "getAdminApps failed", e);
159 * RESTful service method to fetch Applications for user who is super admin
164 @RequestMapping(value = {
165 "/portalApi/appsForSuperAdminAndAccountAdmin" }, method = RequestMethod.GET, produces = "application/json")
166 public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(HttpServletRequest request,
167 HttpServletResponse response) {
168 EPUser user = EPUserUtils.getUserSession(request);
169 List<AppIdAndNameTransportModel> adminApps = null;
172 if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdmin(user)) {
173 EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
175 adminApps = appService.getAppsForSuperAdminAndAccountAdmin(user);
176 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appsForSuperAdminAndAccountAdmin",
177 "GET result =", adminApps);
179 } catch (Exception e) {
180 logger.error(EELFLoggerDelegate.errorLogger, "getAppsForSuperAdminAndAccountAdmin failed", e);
187 * RESTful service method to fetch left menu items from the user's session.
189 * @return JSON with left menu
191 @SuppressWarnings({ "rawtypes", "unchecked" })
192 @RequestMapping(value = { "/portalApi/leftmenuItems" }, method = RequestMethod.GET, produces = "application/json")
193 public String getLeftMenuItems(HttpServletRequest request, HttpServletResponse response) {
194 String menuList = null;
195 Set menuSet = (Set) AppUtils.getSession(request)
196 .getAttribute(SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_ATTRIBUTE_NAME));
198 Set roleFunctionSet = (Set) AppUtils.getSession(request)
199 .getAttribute(SystemProperties.getProperty(SystemProperties.ROLE_FUNCTIONS_ATTRIBUTE_NAME));
201 EPUser user = EPUserUtils.getUserSession(request);
204 menuList = leftMenuService.getLeftMenuItems(user, menuSet, roleFunctionSet);
205 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/leftmenuItems", "GET result =", menuList);
206 } catch (Exception e) {
207 logger.error(EELFLoggerDelegate.errorLogger, "getLeftMenuItems failed", e);
212 @RequestMapping(value = {
213 "/portalApi/userAppsOrderBySortPref" }, method = RequestMethod.GET, produces = "application/json")
214 public List<EcompApp> getUserAppsOrderBySortPref(HttpServletRequest request, HttpServletResponse response) {
215 EPUser user = EPUserUtils.getUserSession(request);
216 List<EcompApp> ecompApps = null;
219 EcompPortalUtils.setBadPermissions(user, response, "getUserAppsOrderBySortPref");
221 String usrSortPref = request.getParameter("mparams");
222 if (usrSortPref.equals("")) {
225 switch (usrSortPref) {
227 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByName(user));
228 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsOrderBySortPref", "GET result =",
232 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByLastUsed(user));
233 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsOrderBySortPref", "GET result =",
237 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByMostUsed(user));
238 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsOrderBySortPref", "GET result =",
242 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByManual(user));
243 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsOrderBySortPref", "GET result =",
247 logger.error(EELFLoggerDelegate.errorLogger,
248 "getUserAppsOrderBySortPref failed: no match for " + usrSortPref);
251 } catch (Exception e) {
252 logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsOrderBySortPref failed", e);
258 * This method sends the user apps manual sort preference Data to service
260 * @request: HTTP servlet request
262 * @response: HTTP servlet response
264 @RequestMapping(value = {
265 "/portalApi/saveUserAppsSortingManual" }, method = RequestMethod.PUT, produces = "application/json")
266 public FieldsValidator putUserAppsSortingManual(HttpServletRequest request,
267 @RequestBody List<EPAppsManualPreference> epAppsManualPref, HttpServletResponse response)
269 FieldsValidator fieldsValidator = null;
271 EPUser user = EPUserUtils.getUserSession(request);
272 fieldsValidator = appService.saveAppsSortManual(epAppsManualPref, user);
273 response.setStatus(fieldsValidator.httpStatusCode.intValue());
274 } catch (Exception e) {
275 logger.error(EELFLoggerDelegate.errorLogger, "putUserAppsSortingManual failed", e);
277 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/saveUserAppsSortingManual", "PUT result =",
278 response.getStatus());
279 return fieldsValidator;
282 @RequestMapping(value = {
283 "/portalApi/saveUserWidgetsSortManual" }, method = RequestMethod.PUT, produces = "application/json")
284 public FieldsValidator putUserWidgetsSortManual(HttpServletRequest request,
285 @RequestBody List<EPWidgetsSortPreference> saveManualWidgetSData, HttpServletResponse response) {
286 FieldsValidator fieldsValidator = null;
288 EPUser user = EPUserUtils.getUserSession(request);
289 fieldsValidator = appService.saveWidgetsSortManual(saveManualWidgetSData, user);
290 response.setStatus(fieldsValidator.httpStatusCode.intValue());
291 } catch (Exception e) {
292 logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortManual failed", e);
294 // return fieldsValidator;
295 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserWidgetsSortManual", "PUT result =",
296 response.getStatus());
297 return fieldsValidator;
300 @RequestMapping(value = {
301 "/portalApi/updateWidgetsSortPref" }, method = RequestMethod.PUT, produces = "application/json")
302 public FieldsValidator putUserWidgetsSortPref(HttpServletRequest request,
303 @RequestBody List<EPWidgetsSortPreference> delManualWidgetData, HttpServletResponse response) {
304 FieldsValidator fieldsValidator = null;
306 EPUser user = EPUserUtils.getUserSession(request);
307 fieldsValidator = appService.deleteUserWidgetSortPref(delManualWidgetData, user);
308 response.setStatus(fieldsValidator.httpStatusCode.intValue());
309 } catch (Exception e) {
310 logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortPref failed", e);
313 // return fieldsValidator;
314 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserWidgetsSortPref", "PUT result =",
315 response.getStatus());
316 return fieldsValidator;
320 * This method is being called to delete the user app manual sort preference
323 * @request: HTTP servlet request
325 * @response: HTTP servlet response
327 @RequestMapping(value = {
328 "/portalApi/UpdateUserAppsSortManual" }, method = RequestMethod.PUT, produces = "application/json")
329 public FieldsValidator deleteUserAppSortManual(HttpServletRequest request,
330 @RequestBody EPDeleteAppsManualSortPref delManualAppData, HttpServletResponse response) {
331 FieldsValidator fieldsValidator = null;
333 EPUser user = EPUserUtils.getUserSession(request);
334 fieldsValidator = appService.deleteUserAppSortManual(delManualAppData, user);
335 response.setStatus(fieldsValidator.httpStatusCode.intValue());
336 } catch (Exception e) {
337 logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);
340 // return fieldsValidator;
341 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/deleteUserAppSortManual", "PUT result =",
342 response.getStatus());
343 return fieldsValidator;
346 @RequestMapping(value = {
347 "/portalApi/saveUserAppsSortingPreference" }, method = RequestMethod.PUT, produces = "application/json")
348 public FieldsValidator putUserAppsSortingPreference(HttpServletRequest request,
349 @RequestBody EPAppsSortPreference userAppsValue, HttpServletResponse response) {
350 FieldsValidator fieldsValidator = null;
352 EPUser user = EPUserUtils.getUserSession(request);
353 fieldsValidator = appService.saveAppsSortPreference(userAppsValue, user);
354 response.setStatus(fieldsValidator.httpStatusCode.intValue());
355 } catch (Exception e) {
356 logger.error(EELFLoggerDelegate.errorLogger, "putUserAppsSortingPreference failed", e);
360 // return fieldsValidator;
361 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserAppsSortingPreference", "PUT result =",
362 response.getStatus());
363 return fieldsValidator;
366 @RequestMapping(value = {
367 "/portalApi/userAppsSortTypePreference" }, method = RequestMethod.GET, produces = "application/String")
368 public String getUserAppsSortTypePreference(HttpServletRequest request, HttpServletResponse response) {
369 EPUser user = EPUserUtils.getUserSession(request);
370 String userSortPreference = null;
374 EcompPortalUtils.setBadPermissions(user, response, "userAppsSortTypePreference");
376 userSortPreference = appService.getUserAppsSortTypePreference(user);
377 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsSortTypePreference", "GET result =",
380 } catch (Exception e) {
381 logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);
384 return userSortPreference;
388 * RESTful service method to fetch Application Administrators to Super
389 * Administrator user. Attention: Users which have Super Administrator roles
390 * only are not included!
394 @RequestMapping(value = { "/portalApi/accountAdmins" }, method = RequestMethod.GET, produces = "application/json")
395 public List<AdminUserApplications> getAppsAdministrators(HttpServletRequest request, HttpServletResponse response) {
396 EPUser user = EPUserUtils.getUserSession(request);
397 List<AdminUserApplications> admins = null;
399 if (!adminRolesService.isSuperAdmin(user)) {
400 EcompPortalUtils.setBadPermissions(user, response, "getAppsAdministrators");
402 admins = appService.getAppsAdmins();
403 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/accountAdmins", "GET result =", admins);
405 } catch (Exception e) {
406 logger.error(EELFLoggerDelegate.errorLogger, "getAppsAdministrators failed", e);
412 @RequestMapping(value = { "/portalApi/availableApps" }, method = RequestMethod.GET, produces = "application/json")
413 public List<AppsResponse> getApps(HttpServletRequest request, HttpServletResponse response) {
414 EPUser user = EPUserUtils.getUserSession(request);
415 List<AppsResponse> apps = null;
417 if (!adminRolesService.isSuperAdmin(user)) {
418 EcompPortalUtils.setBadPermissions(user, response, "getApps");
420 apps = appService.getAllApps(false);
421 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/availableApps", "GET result =", apps);
423 } catch (Exception e) {
424 logger.error(EELFLoggerDelegate.errorLogger, "getApps failed", e);
431 * Gets all apps, both active and inactive; i.e., all on-boarded apps,
432 * regardless of enabled status.
436 * @return List of applications
439 @RequestMapping(value = {
440 "/portalApi/allAvailableApps" }, method = RequestMethod.GET, produces = "application/json")
441 public List<AppsResponse> getAllApps(HttpServletRequest request, HttpServletResponse response) {
442 EPUser user = EPUserUtils.getUserSession(request);
443 List<AppsResponse> apps = null;
445 if (!adminRolesService.isSuperAdmin(user)) {
446 EcompPortalUtils.setBadPermissions(user, response, "getApps");
448 apps = appService.getAllApps(true);
449 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/availableApps", "GET result =", apps);
451 } catch (Exception e) {
452 logger.error(EELFLoggerDelegate.errorLogger, "getAllApps failed", e);
464 @RequestMapping(value = { "/portalApi/appsFullList" }, method = RequestMethod.GET, produces = "application/json")
465 public List<EcompApp> getAppsFullList(HttpServletRequest request, HttpServletResponse response) {
466 EPUser user = EPUserUtils.getUserSession(request);
467 List<EcompApp> ecompApps = null;
469 EcompPortalUtils.setBadPermissions(user, response, "getAppsFullList");
471 ecompApps = appService.getEcompAppAppsFullList();
472 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appsFullList", "GET result =", ecompApps);
483 @RequestMapping(value = { "/portalApi/userProfile" }, method = RequestMethod.GET, produces = "application/json")
484 public UserRoles getUserProfile(HttpServletRequest request, HttpServletResponse response) {
485 EPUser user = EPUserUtils.getUserSession(request);
486 UserRoles userAndRoles = null;
489 EcompPortalUtils.setBadPermissions(user, response, "getUserProfile");
491 userAndRoles = appService.getUserProfileNormalized(user);
493 } catch (Exception e) {
494 logger.error(EELFLoggerDelegate.errorLogger, "getUserProfile failed", e);
497 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userProfile", "getUserProfile result =",
508 @RequestMapping(value = { "/portalApi/appRoles/{appId}" }, method = {
509 RequestMethod.GET }, produces = "application/json")
510 public List<LocalRole> getAppRoles(HttpServletRequest request, @PathVariable("appId") Long appId) {
511 List<LocalRole> roleList = null;
513 roleList = appService.getAppRoles(appId);
514 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appRoles/" + appId, "GET result =", roleList);
515 } catch (Exception e) {
516 logger.error(EELFLoggerDelegate.errorLogger, "getAppRoles failed", e);
528 @RequestMapping(value = { "/portalApi/onboardingApps" }, method = RequestMethod.GET, produces = "application/json")
529 public List<OnboardingApp> getOnboardingApps(HttpServletRequest request, HttpServletResponse response) {
530 EPUser user = EPUserUtils.getUserSession(request);
531 List<OnboardingApp> onboardingApps = null;
533 if (!adminRolesService.isSuperAdmin(user)) {
534 EcompPortalUtils.setBadPermissions(user, response, "getOnboardingApps");
536 onboardingApps = appService.getOnboardingApps();
537 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/onboardingApps", "GET result =",
538 "onboardingApps of size " + onboardingApps.size());
540 } catch (Exception e) {
541 logger.error(EELFLoggerDelegate.errorLogger, "getOnboardingApps failed", e);
544 return onboardingApps;
550 * @param modifiedOnboardingApp
554 @RequestMapping(value = { "/portalApi/onboardingApps" }, method = RequestMethod.PUT, produces = "application/json")
555 public FieldsValidator putOnboardingApp(HttpServletRequest request,
556 @RequestBody OnboardingApp modifiedOnboardingApp, HttpServletResponse response) {
557 FieldsValidator fieldsValidator = null;
559 EPUser user = EPUserUtils.getUserSession(request);
560 if (!adminRolesService.isSuperAdmin(user)) {
561 EcompPortalUtils.setBadPermissions(user, response, "putOnboardingApp");
563 modifiedOnboardingApp.normalize();
564 fieldsValidator = appService.modifyOnboardingApp(modifiedOnboardingApp, user);
565 response.setStatus(fieldsValidator.httpStatusCode.intValue());
567 } catch (Exception e) {
568 logger.error(EELFLoggerDelegate.errorLogger, "putOnboardingApps failed", e);
571 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/onboardingApps", "PUT result =",
572 response.getStatus());
573 return fieldsValidator;
579 * @param newOnboardingApp
583 @RequestMapping(value = { "/portalApi/onboardingApps" }, method = RequestMethod.POST, produces = "application/json")
584 public FieldsValidator postOnboardingApp(HttpServletRequest request, @RequestBody OnboardingApp newOnboardingApp,
585 HttpServletResponse response) {
586 FieldsValidator fieldsValidator = null;
588 EPUser user = EPUserUtils.getUserSession(request);
589 if (!adminRolesService.isSuperAdmin(user)) {
590 EcompPortalUtils.setBadPermissions(user, response, "postOnboardingApps");
592 newOnboardingApp.normalize();
593 fieldsValidator = appService.addOnboardingApp(newOnboardingApp, user);
594 response.setStatus(fieldsValidator.httpStatusCode.intValue());
596 } catch (Exception e) {
597 logger.error(EELFLoggerDelegate.errorLogger, "postOnboardingApp failed", e);
600 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/onboardingApps", "POST result =",
601 response.getStatus());
602 return fieldsValidator;
606 * REST endpoint to process a request to delete an on-boarded application.
613 @RequestMapping(value = { "/portalApi/onboardingApps/{appId}" }, method = {
614 RequestMethod.DELETE }, produces = "application/json")
615 public FieldsValidator deleteOnboardingApp(HttpServletRequest request, @PathVariable("appId") Long appId,
616 HttpServletResponse response) {
617 FieldsValidator fieldsValidator = null;
619 EPUser user = EPUserUtils.getUserSession(request);
620 if (!adminRolesService.isSuperAdmin(user)) {
621 EcompPortalUtils.setBadPermissions(user, response, "deleteOnboardingApps");
623 fieldsValidator = appService.deleteOnboardingApp(user, appId);
624 response.setStatus(fieldsValidator.httpStatusCode.intValue());
626 } catch (Exception e) {
627 logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);
628 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
631 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/onboardingApps" + appId, "DELETE result =",
632 response.getStatus());
633 return fieldsValidator;
637 * Gets the application thumbnail image; sets status 404 if none exists.
643 * @return Bytes with the app thumbnail image; null if not available.
645 @RequestMapping(value = { "/portalApi/appThumbnail/{appId}" }, method = { RequestMethod.GET })
646 public HttpEntity<byte[]> getAppThumbnail(HttpServletRequest request, @PathVariable("appId") Long appId,
647 HttpServletResponse response) {
648 EPApp app = appService.getApp(appId);
649 if (app == null || app.getImageUrl() == null || app.getThumbnail() == null || app.getThumbnail().length == 0) {
650 logger.debug(EELFLoggerDelegate.debugLogger,
651 "getAppThumbnail: no app and/or no thumbnail for app " + appId);
652 response.setStatus(HttpServletResponse.SC_NOT_FOUND);
655 String url = app.getImageUrl();
656 int indexOfDot = url.lastIndexOf('.');
657 String urlSuffix = indexOfDot > 0 ? url.substring(indexOfDot + 1).toLowerCase() : "UNK";
658 // Default to JPG if no usable suffix.
659 MediaType mediaType = MediaType.IMAGE_JPEG;
660 if ("png".equals(urlSuffix))
661 mediaType = MediaType.IMAGE_PNG;
662 else if ("gif".equals(urlSuffix))
663 mediaType = MediaType.IMAGE_GIF;
664 HttpHeaders header = new HttpHeaders();
665 header.setContentType(mediaType);
666 header.setContentLength(app.getThumbnail().length);
667 return new HttpEntity<byte[]>(app.getThumbnail(), header);