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.service;
22 import java.io.IOException;
23 import java.security.GeneralSecurityException;
24 import java.util.ArrayList;
25 import java.util.Base64;
26 import java.util.HashMap;
27 import java.util.HashSet;
28 import java.util.LinkedList;
29 import java.util.List;
33 import javax.annotation.PostConstruct;
34 import javax.servlet.http.HttpServletResponse;
36 import org.apache.commons.lang.StringUtils;
37 import org.hibernate.Query;
38 import org.hibernate.Session;
39 import org.hibernate.SessionFactory;
40 import org.hibernate.Transaction;
41 import org.openecomp.portalapp.portal.domain.AdminUserApp;
42 import org.openecomp.portalapp.portal.domain.AdminUserApplications;
43 import org.openecomp.portalapp.portal.domain.AppIdAndNameTransportModel;
44 import org.openecomp.portalapp.portal.domain.AppsResponse;
45 import org.openecomp.portalapp.portal.domain.EPApp;
46 import org.openecomp.portalapp.portal.domain.EPUser;
47 import org.openecomp.portalapp.portal.domain.EPUserAppsManualSortPreference;
48 import org.openecomp.portalapp.portal.domain.EPUserAppsSortPreference;
49 import org.openecomp.portalapp.portal.domain.EPWidgetsManualSortPreference;
50 import org.openecomp.portalapp.portal.domain.EcompApp;
51 import org.openecomp.portalapp.portal.domain.UserRole;
52 import org.openecomp.portalapp.portal.domain.UserRoles;
53 import org.openecomp.portalapp.portal.ecomp.model.AppCatalogItem;
54 import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;
55 import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;
56 import org.openecomp.portalapp.portal.transport.EPAppsManualPreference;
57 import org.openecomp.portalapp.portal.transport.EPAppsSortPreference;
58 import org.openecomp.portalapp.portal.transport.EPDeleteAppsManualSortPref;
59 import org.openecomp.portalapp.portal.transport.EPWidgetsSortPreference;
60 import org.openecomp.portalapp.portal.transport.FieldsValidator;
61 import org.openecomp.portalapp.portal.transport.FunctionalMenuItem;
62 import org.openecomp.portalapp.portal.transport.LocalRole;
63 import org.openecomp.portalapp.portal.transport.OnboardingApp;
64 import org.openecomp.portalapp.portal.ueb.EPUebHelper;
65 import org.openecomp.portalapp.portal.utils.EPCommonSystemProperties;
66 import org.openecomp.portalapp.portal.utils.EcompPortalUtils;
67 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
68 import org.openecomp.portalsdk.core.onboarding.ueb.Helper;
69 import org.openecomp.portalsdk.core.onboarding.ueb.TopicManager;
70 import org.openecomp.portalsdk.core.onboarding.util.CipherUtil;
71 import org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants;
72 import org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties;
73 import org.openecomp.portalsdk.core.service.DataAccessService;
74 import org.openecomp.portalsdk.core.util.SystemProperties;
75 import org.springframework.beans.factory.annotation.Autowired;
77 import com.att.nsa.apiClient.http.HttpException;
78 import com.att.nsa.cambria.client.CambriaClient.CambriaApiException;
79 import com.att.nsa.cambria.client.CambriaClientBuilders;
80 import com.att.nsa.cambria.client.CambriaIdentityManager;
81 import com.att.nsa.cambria.client.CambriaTopicManager;
82 import com.google.common.primitives.Ints;
84 public class EPAppCommonServiceImpl implements EPAppService {
86 protected String ECOMP_APP_ID = "1";
87 protected String SUPER_ADMIN_ROLE_ID = "1";
88 protected String ACCOUNT_ADMIN_ROLE_ID = "999";
89 protected String RESTRICTED_APP_ROLE_ID = "900";
91 private static final String urlField = "url";
92 private static final String nameField = "name";
94 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPAppCommonServiceImpl.class);
97 private AdminRolesService adminRolesService;
99 private SessionFactory sessionFactory;
101 private DataAccessService dataAccessService;
103 private EPUebHelper epUebHelper;
106 private void init() {
107 SUPER_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.SYS_ADMIN_ROLE_ID);
108 ACCOUNT_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID);
109 ECOMP_APP_ID = SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID);
110 RESTRICTED_APP_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.RESTRICTED_APP_ROLE_ID);
114 public List<EPApp> getUserAsAdminApps(EPUser user) {
115 if (adminRolesService.isAccountAdmin(user)) {
116 String sql = "SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID=FN_APP.APP_ID where "
117 + "FN_USER_ROLE.USER_ID=" + user.getId() + " AND FN_USER_ROLE.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
118 + " AND FN_APP.ENABLED = 'Y'";
121 @SuppressWarnings("unchecked")
122 List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
124 } catch (Exception e) {
125 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
129 logger.error(EELFLoggerDelegate.errorLogger,
130 "getUserAsAdminApps: only Account Admin may invoke this function!");
131 return new ArrayList<EPApp>();
136 public List<EPApp> getUserByOrgUserIdAsAdminApps(String orgUserId) {
137 String format = "SELECT * FROM FN_APP app INNER JOIN FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "
138 + "INNER JOIN FN_USER user on user.USER_ID = userrole.USER_ID "
139 + "WHERE user.org_user_id = '%s' AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
140 + " AND FN_APP.ENABLED = 'Y'";
142 String sql = String.format(format, orgUserId);
146 @SuppressWarnings("unchecked")
147 List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
149 } catch (Exception e) {
150 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
156 public List<EPApp> getAppsFullList() {
157 @SuppressWarnings("unchecked")
158 List<EPApp> apps = dataAccessService.getList(EPApp.class, null);
163 public List<EcompApp> getEcompAppAppsFullList() {
164 return transformAppsToEcompApps(getAppsFullList());
168 public List<EcompApp> transformAppsToEcompApps(List<EPApp> appsList) {
169 List<EcompApp> ecompAppList = new ArrayList<EcompApp>();
170 for (EPApp app : appsList) {
171 EcompApp ecompApp = new EcompApp();
172 ecompApp.setId(app.getId());
173 ecompApp.setName(app.getName());
174 ecompApp.setImageUrl(app.getImageUrl());
175 ecompApp.setDescription(app.getDescription());
176 ecompApp.setNotes(app.getNotes());
177 ecompApp.setUrl(app.getUrl());
178 ecompApp.setAlternateUrl(app.getAlternateUrl());
179 ecompApp.setUebTopicName(app.getUebTopicName());
180 ecompApp.setUebKey(app.getUebKey());
181 ecompApp.setUebSecret(app.getUebSecret());
182 ecompApp.setEnabled(app.getEnabled());
183 ecompApp.setRestrictedApp(app.isRestrictedApp());
184 ecompAppList.add(ecompApp);
190 public EPApp getApp(Long appId) {
192 @SuppressWarnings("unchecked")
193 List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id = " + appId, null, null);
194 return (apps.size() > 0) ? apps.get(0) : null;
195 } catch (Exception e) {
196 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
201 @SuppressWarnings("unchecked")
203 public List<AppIdAndNameTransportModel> getAdminApps(EPUser user) {
204 if (adminRolesService.isAccountAdmin(user)) {
205 String format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app inner join FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "
206 + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
207 + " AND (app.ENABLED = 'Y' OR app.APP_ID=1)";
208 String sql = String.format(format, user.getId());
209 // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND
210 // app.APP_REST_ENDPOINT <> ''";
213 return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);
214 } catch (Exception e) {
215 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
216 logger.error(EELFLoggerDelegate.errorLogger,
217 "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);
220 return new ArrayList<AppIdAndNameTransportModel>();
224 public EPApp getAppDetail(String appName) {
225 final Map<String, String> params = new HashMap<String, String>();
227 params.put("appName", appName);
228 @SuppressWarnings("unchecked")
229 List<EPApp> apps = (List<EPApp>) dataAccessService.executeNamedQuery("getMyloginAppDetails", params, null);
230 return (apps.size() > 0) ? apps.get(0) : null;
231 } catch (Exception e) {
232 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
237 @SuppressWarnings("unchecked")
239 public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(EPUser user) {
240 if (adminRolesService.isSuperAdmin(user) || adminRolesService.isAccountAdmin(user)) {
243 if (adminRolesService.isSuperAdmin(user)) {
244 format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app "
245 + "where app.ENABLED = 'Y' AND app.app_type = 1";
247 format = "SELECT app.APP_ID, app.APP_NAME, APP_TYPE FROM FN_APP app inner join FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "
248 + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
249 + " AND app.ENABLED = 'Y' AND app.app_type = 1";
251 sql = String.format(format, user.getId());
252 // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND
253 // app.APP_REST_ENDPOINT <> ''";
256 return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);
257 } catch (Exception e) {
258 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
259 logger.error(EELFLoggerDelegate.errorLogger,
260 "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);
263 return new ArrayList<AppIdAndNameTransportModel>();
266 protected void logQuery(String sql) {
267 logger.debug(EELFLoggerDelegate.debugLogger, "logQuery: " + sql);
270 public DataAccessService getDataAccessService() {
271 return dataAccessService;
274 public void setDataAccessService(DataAccessService dataAccessService) {
275 this.dataAccessService = dataAccessService;
278 @SuppressWarnings("unchecked")
280 public List<AdminUserApplications> getAppsAdmins() {
282 Map<String, String> params = new HashMap<>();
283 params.put("accountAdminRoleId", ACCOUNT_ADMIN_ROLE_ID);
284 List<AdminUserApp> adminApps = (List<AdminUserApp>) dataAccessService.executeNamedQuery("getAppsAdmins",
286 return aggregateRowsResultsByUserId(adminApps);
287 } catch (Exception e) {
288 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
293 private List<AdminUserApplications> aggregateRowsResultsByUserId(List<AdminUserApp> adminApps) {
294 HashMap<Long, AdminUserApplications> adminUserApplications = new HashMap<Long, AdminUserApplications>();
295 for (AdminUserApp app : adminApps) {
296 Long userId = app.getUser_Id();
297 if (adminUserApplications.get(userId) == null)
298 adminUserApplications.put(userId, new AdminUserApplications(app));
300 adminUserApplications.get(userId).addApp(app.getAppId(), app.getAppName());
302 return new ArrayList<AdminUserApplications>(adminUserApplications.values());
306 public List<AppsResponse> getAllApps(Boolean all) {
307 // If all is true, return both active and inactive apps. Otherwise, just
309 @SuppressWarnings("unchecked")
310 // Sort the list by application name so the drop-down looks pretty.
311 List<EPApp> apps = all
312 ? (List<EPApp>) dataAccessService.getList(EPApp.class, " where id != " + ECOMP_APP_ID, "name", null)
313 : (List<EPApp>) dataAccessService.getList(EPApp.class,
314 " where ( enabled = 'Y' or id = " + ECOMP_APP_ID + ")", "name", null);
316 List<AppsResponse> appsModified = new ArrayList<AppsResponse>();
317 for (EPApp app : apps) {
318 appsModified.add(new AppsResponse(app.getId(), app.getName(), app.isRestrictedApp(), app.getEnabled()));
324 public UserRoles getUserProfile(String loginId) {
325 String format = "SELECT DISTINCT user.USER_ID, role.ROLE_ID, user.org_user_id, user.FIRST_NAME, user.LAST_NAME, role.ROLE_NAME FROM fn_user_role userrole "
326 + "INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID "
327 + "INNER JOIN fn_role role ON role.ROLE_ID = userrole.ROLE_ID "
328 + "WHERE user.org_user_id = \"%s\" and (userrole.app_id = 1 or role.role_id = " + ACCOUNT_ADMIN_ROLE_ID
330 String sql = String.format(format, loginId);
332 @SuppressWarnings("unchecked")
333 List<UserRole> userRoleList = dataAccessService.executeSQLQuery(sql, UserRole.class, null);
334 ArrayList<UserRoles> usersRolesList = aggregateUserProfileRowsResultsByRole(userRoleList);
335 if (usersRolesList == null || usersRolesList.size() < 1)
338 return usersRolesList.get(0);
342 public UserRoles getUserProfileNormalized(EPUser user) {
344 UserRoles userAndRoles = getUserProfile(user.getLoginId());
345 // If no roles are defined, treat this user as a guest.
346 if (user.isGuest() || userAndRoles == null) {
347 logger.debug(EELFLoggerDelegate.debugLogger, "getUserProfile: treating user {} as guest",
349 UserRole userRole = new UserRole();
350 userRole.setUser_Id(user.getId());
351 userRole.setOrgUserId(user.getLoginId());
352 userRole.setFirstName(user.getFirstName());
353 userRole.setLastName(user.getLastName());
354 userRole.setRoleId(-1L);
355 userRole.setRoleName("Guest");
356 userRole.setUser_Id(-1L);
357 userAndRoles = new UserRoles(userRole);
363 protected ArrayList<UserRoles> aggregateUserProfileRowsResultsByRole(List<UserRole> userRoleList) {
364 HashMap<String, UserRoles> userRoles = new HashMap<String, UserRoles>();
365 for (UserRole user : userRoleList) {
366 String orgUserId = user.getOrgUserId();
367 if (userRoles.get(orgUserId) == null)
368 userRoles.put(orgUserId, new UserRoles(user));
370 userRoles.get(orgUserId).addRole(user.getRoleName());
372 return new ArrayList<UserRoles>(userRoles.values());
375 private boolean isRestrictedApp(Long appId) {
376 EPApp app = getApp(appId);
377 return app.isRestrictedApp();
380 // For the functional menu edit
382 public List<LocalRole> getAppRoles(Long appId) {
384 if (isRestrictedApp(appId)) {
385 sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where ROLE_ID = '" + RESTRICTED_APP_ROLE_ID + "'";
387 sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where APP_ID = '" + appId + "'";
390 @SuppressWarnings("unchecked")
391 List<LocalRole> appRoles = dataAccessService.executeSQLQuery(sql, LocalRole.class, null);
395 protected String userAppsQuery(EPUser user) {
396 StringBuilder query = new StringBuilder();
397 if (adminRolesService.isSuperAdmin(user)) {
398 query.append("SELECT * FROM FN_APP where FN_APP.ENABLED = 'Y' ORDER BY APP_NAME");
400 query.append("SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID = FN_APP.APP_ID where ");
402 "FN_USER_ROLE.USER_ID = " + user.getId() + " AND FN_USER_ROLE.ROLE_ID != " + SUPER_ADMIN_ROLE_ID);
403 query.append(" AND FN_APP.ENABLED = 'Y'");
405 return query.toString();
408 protected FieldsValidator onboardingAppFieldsChecker(OnboardingApp onboardingApp) {
409 FieldsValidator fieldsValidator = new FieldsValidator();
410 if (onboardingApp.name == null || onboardingApp.name.length() == 0 || onboardingApp.url == null
411 || onboardingApp.url.length() == 0 || onboardingApp.restrictedApp == null
412 || onboardingApp.isOpen == null || onboardingApp.isEnabled == null
413 || (onboardingApp.id != null && onboardingApp.id.equals(ECOMP_APP_ID))
414 // For a normal app (appType==1), these fields must be filled
416 // For a restricted app (appType==2), they will be empty.
417 || ((!onboardingApp.restrictedApp)
418 && (onboardingApp.username == null || onboardingApp.username.length() == 0
419 || onboardingApp.appPassword == null || onboardingApp.appPassword.length() == 0))) {
420 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
422 return fieldsValidator;
426 public List<EPApp> getUserApps(EPUser user) {
427 List<EPApp> openApps = getOpenApps();
429 if (user.isGuest()) {
432 String sql = userAppsQuery(user);
435 // TreeSet<EPApp> distinctApps = new TreeSet<EPApp>();
436 List<EPApp> appsList = new ArrayList<>();
437 @SuppressWarnings("unchecked")
438 List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
439 HashSet<EPApp> appSet = new HashSet<>();
440 for (EPApp app : adminApps) {
445 for (EPApp app : openApps) {
446 if (!appSet.contains(app))
455 public List<EPApp> getPersAdminApps(EPUser user) {
456 final Map<String, Long> params = new HashMap<>();
457 params.put("userId", user.getId());
458 // Named query is stored in EP.hbm.xml, mapped to EPApp
459 @SuppressWarnings("unchecked")
460 List<EPApp> list = dataAccessService.executeNamedQuery("getPersAdminApps", params, null);
465 public List<EPApp> getPersUserApps(EPUser user) {
466 final Map<String, Long> params = new HashMap<>();
467 params.put("userId", user.getId());
468 // Named query is stored in EP.hbm.xml, mapped to EPApp
469 @SuppressWarnings("unchecked")
470 List<EPApp> list = dataAccessService.executeNamedQuery("getPersUserApps", params, null);
478 * org.openecomp.portalapp.portal.service.EPAppService#getAppCatalog(com.att
479 * .fusionapp.ecomp.portal.domain.EPUser)
482 public List<AppCatalogItem> getUserAppCatalog(EPUser user) {
483 final Map<String, Long> params = new HashMap<>();
484 params.put("userId", user.getId());
485 // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem
486 @SuppressWarnings("unchecked")
487 List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getUserAppCatalog", params, null);
495 * org.openecomp.portalapp.portal.service.EPAppService#getAdminAppCatalog(
496 * org.openecomp.portalapp.portal.domain.EPUser)
499 public List<AppCatalogItem> getAdminAppCatalog(EPUser user) {
500 final Map<String, Long> params = new HashMap<>();
501 params.put("userId", user.getId());
502 // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem
503 @SuppressWarnings("unchecked")
504 List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getAdminAppCatalog", params, null);
508 private List<EPApp> getOpenApps() {
509 @SuppressWarnings("unchecked")
510 List<EPApp> openApps = dataAccessService.getList(EPApp.class, " where open='Y' and enabled='Y'", null, null);
514 @SuppressWarnings("unchecked")
516 public List<EPApp> getAppsOrderByName(EPUser user) {
517 final Map<String, Long> params = new HashMap<>();
518 List<EPApp> sortedAppsByName = null;
520 if (adminRolesService.isSuperAdmin(user)) {
521 params.put("userId", user.getId());
522 sortedAppsByName = dataAccessService.executeNamedQuery("getPersAdminAppsOrderByName", params, null);
524 params.put("userId", user.getId());
525 sortedAppsByName = dataAccessService.executeNamedQuery("getPersUserAppsOrderByName", params, null);
527 } catch (Exception e) {
528 logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByName failed", e);
530 return sortedAppsByName;
533 @SuppressWarnings("unchecked")
535 public List<EPApp> getAppsOrderByLastUsed(EPUser user) {
537 final Map<String, Long> params = new HashMap<>();
538 List<EPApp> sortedAppsByLastUsed = new ArrayList<EPApp>();
539 List<EPApp> finalsortedAppsByLastUsed = new ArrayList<EPApp>();
541 if (adminRolesService.isSuperAdmin(user)) {
542 params.put("userId", user.getId());
543 sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByLastUsed", params, null);
545 params.put("userId", user.getId());
546 sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByLastUsed", params, null);
548 Set<String> epAppSet = new HashSet<String>();
549 for (EPApp eapp : sortedAppsByLastUsed)
550 if (!epAppSet.contains(eapp.getName())) {
551 finalsortedAppsByLastUsed.add(eapp);
552 epAppSet.add(eapp.getName());
555 } catch (Exception e) {
556 logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByLastUsed failed", e);
558 return finalsortedAppsByLastUsed;
561 @SuppressWarnings("unchecked")
563 public List<EPApp> getAppsOrderByMostUsed(EPUser user) {
564 final Map<String, Long> params = new HashMap<>();
565 List<EPApp> sortedAppsByMostUsed = new ArrayList<EPApp>();
566 List<EPApp> finalsortedAppsByMostUsed = new ArrayList<EPApp>();
568 if (adminRolesService.isSuperAdmin(user)) {
569 params.put("userId", user.getId());
570 sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByMostUsed", params, null);
572 params.put("userId", user.getId());
573 sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByMostUsed", params, null);
575 Set<String> epAppSet = new HashSet<String>();
577 for (EPApp eapp : sortedAppsByMostUsed) {
578 if (!epAppSet.contains(eapp.getName())) {
579 finalsortedAppsByMostUsed.add(eapp);
580 epAppSet.add(eapp.getName());
583 } catch (Exception e) {
584 logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByMostUsed failed", e);
587 return finalsortedAppsByMostUsed;
591 * This Method retrieves the User Apps by Sort Manual Preference
593 * @param: user--contains LoggedIn User Data
595 @SuppressWarnings("unchecked")
597 public List<EPApp> getAppsOrderByManual(EPUser user) {
598 final Map<String, Long> params = new HashMap<>();
599 List<EPApp> sortedAppsByManual = new ArrayList<EPApp>();
600 List<EPApp> finalsortedAppsByManual = new ArrayList<EPApp>();
602 if (adminRolesService.isSuperAdmin(user)) {
603 params.put("userId", user.getId());
604 sortedAppsByManual = dataAccessService.executeNamedQuery("getAdminAppsOrderByManual", params, null);
606 params.put("userId", user.getId());
607 sortedAppsByManual = dataAccessService.executeNamedQuery("getUserAppsOrderByManual", params, null);
609 Set<String> epAppSet = new HashSet<String>();
611 for (EPApp eapp : sortedAppsByManual) {
612 if (!epAppSet.contains(eapp.getName())) {
613 finalsortedAppsByManual.add(eapp);
614 epAppSet.add(eapp.getName());
617 } catch (Exception e) {
618 logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByManual failed", e);
620 return finalsortedAppsByManual;
624 public List<OnboardingApp> getOnboardingApps() {
625 @SuppressWarnings("unchecked")
626 List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id!=" + ECOMP_APP_ID, null, null);
627 List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
628 for (EPApp app : apps) {
629 OnboardingApp onboardingApp = new OnboardingApp();
630 createOnboardingFromApp(app, onboardingApp);
631 onboardingAppsList.add(onboardingApp);
633 return onboardingAppsList;
637 public List<OnboardingApp> getEnabledNonOpenOnboardingApps() {
638 @SuppressWarnings("unchecked")
639 List<EPApp> apps = dataAccessService.getList(EPApp.class,
640 " where enabled = true and open = false and id!=" + ECOMP_APP_ID, null, null);
641 List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
642 for (EPApp app : apps) {
643 OnboardingApp onboardingApp = new OnboardingApp();
644 createOnboardingFromApp(app, onboardingApp);
645 onboardingAppsList.add(onboardingApp);
647 return onboardingAppsList;
650 @SuppressWarnings("unchecked")
651 private void validateOnboardingApp(OnboardingApp onboardingApp, FieldsValidator fieldsValidator) {
652 boolean duplicatedUrl = false;
653 boolean duplicatedName = false;
655 if (onboardingApp.id == null) {
656 apps = dataAccessService.getList(EPApp.class,
657 " where url = '" + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);
659 apps = dataAccessService.getList(EPApp.class, " where id = " + onboardingApp.id + " or url = '"
660 + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);
662 for (EPApp app : apps) {
663 if (onboardingApp.id != null && onboardingApp.id.equals(app.getId())) {
666 if (!duplicatedUrl && app.getUrl().equalsIgnoreCase(onboardingApp.url)) {
667 duplicatedUrl = true;
668 if (duplicatedName) {
672 if (!duplicatedName && app.getName().equalsIgnoreCase(onboardingApp.name)) {
673 duplicatedName = true;
679 if (duplicatedUrl || duplicatedName) {
681 fieldsValidator.addProblematicFieldName(urlField);
683 if (duplicatedName) {
684 fieldsValidator.addProblematicFieldName(nameField);
686 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
687 fieldsValidator.errorCode = new Long(EPCommonSystemProperties.DUBLICATED_FIELD_VALUE_ECOMP_ERROR);
692 public FieldsValidator modifyOnboardingApp(OnboardingApp modifiedOnboardingApp, EPUser user) {
693 logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering modifyOnboardingApp");
694 FieldsValidator fieldsValidator = onboardingAppFieldsChecker(modifiedOnboardingApp);
695 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
696 validateOnboardingApp(modifiedOnboardingApp, fieldsValidator);
698 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
699 if (modifiedOnboardingApp.id != null) {
700 updateApp(modifiedOnboardingApp.id, modifiedOnboardingApp, fieldsValidator, user);
702 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
705 return fieldsValidator;
709 public FieldsValidator addOnboardingApp(OnboardingApp newOnboardingApp, EPUser user) {
710 FieldsValidator fieldsValidator = onboardingAppFieldsChecker(newOnboardingApp);
711 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
712 validateOnboardingApp(newOnboardingApp, fieldsValidator);
714 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
715 if (newOnboardingApp.id == null) {
716 updateApp(null, newOnboardingApp, fieldsValidator, user);
718 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
721 return fieldsValidator;
725 public FieldsValidator deleteOnboardingApp(EPUser user, Long appid) {
726 FieldsValidator fieldsValidator = new FieldsValidator();
727 if (!adminRolesService.isSuperAdmin(user)) {
728 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_FORBIDDEN);
729 return fieldsValidator;
731 Boolean result = false;
732 Session localSession = null;
733 Transaction transaction = null;
735 localSession = sessionFactory.openSession();
736 transaction = localSession.beginTransaction();
738 // 1) Remove the URL for any functional menu item associated with
740 String sql = "UPDATE fn_menu_functional m, fn_menu_functional_roles mr SET m.url='' "
741 + " WHERE m.menu_id=mr.menu_id " + " AND mr.app_id='" + appid + "'";
743 Query query = localSession.createSQLQuery(sql);
744 query.executeUpdate();
746 // Remove any favorites associated with a menu item that is
747 // associated with this app
748 sql = "Delete from fn_menu_favorites " + " using fn_menu_favorites inner join fn_menu_functional_roles "
749 + " where fn_menu_functional_roles.app_id='" + appid + "' "
750 + " AND fn_menu_functional_roles.menu_id=fn_menu_favorites.menu_id";
752 query = localSession.createSQLQuery(sql);
753 query.executeUpdate();
755 // Remove all role, appid records from fn_menu_functional_role
756 // that are associated with this app
757 sql = "delete from fn_menu_functional_roles where app_id='" + appid + "'";
759 query = localSession.createSQLQuery(sql);
760 query.executeUpdate();
762 // Remove all records from fn_user_role associated with this app
763 sql = "delete from fn_user_role where app_id='" + appid + "'";
765 query = localSession.createSQLQuery(sql);
766 query.executeUpdate();
768 // Remove any widgets associated with this app
769 sql = "delete from ep_widget_catalog_role where app_id='" + appid + "'";
771 query = localSession.createSQLQuery(sql);
772 query.executeUpdate();
774 // Remove any roles associated with this app
775 sql = "delete from ep_role_notification " + " using ep_role_notification inner join fn_role "
776 + " where fn_role.app_id='" + appid + "' " + " and ep_role_notification.role_id= fn_role.role_id";
778 query = localSession.createSQLQuery(sql);
779 query.executeUpdate();
781 // Remove all records from fn_role associated with this app
782 sql = "delete from fn_role where app_id='" + appid + "'";
784 query = localSession.createSQLQuery(sql);
785 query.executeUpdate();
787 // Remove app contact us entries
788 sql = "delete from fn_app_contact_us where app_id='" + appid + "'";
790 query = localSession.createSQLQuery(sql);
791 query.executeUpdate();
793 // Remove rows in the app personalization selection table
794 sql = "delete from fn_pers_user_app_sel where app_id='" + appid + "'";
796 query = localSession.createSQLQuery(sql);
797 query.executeUpdate();
799 // Remove rows in the app personalization sort table
800 sql = "delete from ep_pers_user_app_man_sort where app_id='" + appid + "'";
802 query = localSession.createSQLQuery(sql);
803 query.executeUpdate();
805 // Remove rows in the app personalization sort table
806 sql = "delete from ep_user_roles_request where app_id='" + appid + "'";
808 query = localSession.createSQLQuery(sql);
809 query.executeUpdate();
811 // Remove rows in the app personalization sort table
812 sql = "delete from ep_web_analytics_source where app_id='" + appid + "'";
814 query = localSession.createSQLQuery(sql);
815 query.executeUpdate();
818 sql = "delete from fn_app where app_id='" + appid + "'";
820 query = localSession.createSQLQuery(sql);
821 query.executeUpdate();
823 transaction.commit();
825 } catch (Exception e) {
826 logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);
827 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError);
828 EcompPortalUtils.rollbackTransaction(transaction, "deleteOnboardingApp rollback, exception = " + e);
830 EcompPortalUtils.closeLocalSession(localSession, "deleteOnboardingApp");
833 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
835 return fieldsValidator;
838 private static Object syncRests = new Object();
840 // An app has been enabled/disabled. Must enable/disable all associated
841 // functional menu items.
842 private void setFunctionalMenuItemsEnabled(Session localSession, Boolean enabled, Long appId) {
843 String active_yn = enabled ? "Y" : "N";
844 String sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn "
845 + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "
846 + " AND r.app_id = '" + appId + "' ";
848 @SuppressWarnings("unchecked")
849 List<FunctionalMenuItem> menuItems = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);
850 for (FunctionalMenuItem menuItem : menuItems) {
851 FunctionalMenuItem myMenuItem = (FunctionalMenuItem) localSession.get(FunctionalMenuItem.class,
853 myMenuItem.active_yn = active_yn;
854 localSession.save(myMenuItem);
858 // Attention! If (appId == null) we use this function to create application
859 // otherwise we use it to modify existing application
860 private void updateApp(Long appId, OnboardingApp onboardingApp, FieldsValidator fieldsValidator, EPUser user) {
861 logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering updateApp");
862 // Separate out the code for a restricted app, since it doesn't need any
864 if (onboardingApp.restrictedApp) {
865 boolean result = false;
866 Session localSession = null;
867 Transaction transaction = null;
869 localSession = sessionFactory.openSession();
870 transaction = localSession.beginTransaction();
875 app = (EPApp) localSession.get(EPApp.class, appId);
876 if (app == null || app.getId() == null) { // App is already
878 transaction.commit();
879 localSession.close();
880 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);
884 createAppFromOnboarding(app, onboardingApp, localSession);
885 localSession.saveOrUpdate(app);
886 // Enable or disable all menu items associated with this app
887 setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);
888 transaction.commit();
890 } catch (Exception e) {
891 EcompPortalUtils.rollbackTransaction(transaction,
892 "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));
894 EcompPortalUtils.closeLocalSession(localSession, "updateApp");
897 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
901 synchronized (syncRests) {
902 boolean result = false;
903 Session localSession = null;
904 Transaction transaction = null;
906 localSession = sessionFactory.openSession();
907 transaction = localSession.beginTransaction();
911 // -------------------------------------------------------------------------------------------
912 // Register this App with the UEB communication server.
914 // the App's unique mailbox/topic
915 // name and keys to the FN_APP table. The App's mailbox
917 // keys will be visible to the
918 // admin on the ECOMP portal.
919 // -------------------------------------------------------------------------------------------
920 TopicManager topicManager = new TopicManager() {
922 EPAppCommonServiceImpl service;
924 public void init(EPAppCommonServiceImpl _service) {
928 public void createTopic(String key, String secret, String topicName,
929 String topicDescription) throws HttpException, CambriaApiException, IOException {
931 init(EPAppCommonServiceImpl.this);
932 final LinkedList<String> urlList = Helper.uebUrlList();
933 if (logger.isInfoEnabled()) {
934 logger.info("==> createTopic");
935 logger.info("topicName: " + topicName);
936 logger.info("topicDescription: " + topicDescription);
938 CambriaTopicManager tm = null;
940 tm = service.getTopicManager(urlList, key, secret);
941 } catch (Exception e) {
942 logger.error("pub.build Exception ", e);
943 throw new CambriaApiException(topicName);
945 tm.createTopic(topicName, topicDescription, 1, 1);
948 public void addPublisher(String topicOwnerKey, String topicOwnerSecret, String publisherKey,
949 String topicName) throws HttpException, CambriaApiException, IOException {
950 logger.info("==> addPublisher to topic " + topicName);
951 final LinkedList<String> urlList = Helper.uebUrlList();
952 CambriaTopicManager tm = null;
954 tm = service.getTopicManager(urlList, topicOwnerKey, topicOwnerSecret);
955 } catch (Exception e) {
956 logger.error("pub.build Exception ", e);
957 throw new CambriaApiException(topicName);
959 tm.allowProducer(topicName, publisherKey);
963 final CambriaIdentityManager im = new CambriaClientBuilders.IdentityManagerBuilder()
964 .usingHosts(Helper.uebUrlList()).build();
965 com.att.nsa.apiClient.credentials.ApiCredential credential = im.createApiKey(user.getEmail(),
966 "ECOMP Portal Owner");
967 String appKey = credential.getApiKey();
968 String appSecret = credential.getApiSecret();
969 String appMailboxName = null;
971 int maxNumAttemptsToCreateATopic = 3;
972 boolean successfullyCreatedMailbox = false;
973 for (int i = 0; i < maxNumAttemptsToCreateATopic; i++) {
974 appMailboxName = "ECOMP-PORTAL-OUTBOX-" + (int) (Math.random() * 100000.0);
977 topicManager.createTopic(
978 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
979 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),
980 appMailboxName, "ECOMP outbox for app" + onboardingApp.name);
981 successfullyCreatedMailbox = true;
982 logger.debug(EELFLoggerDelegate.debugLogger,
983 "Successfully created " + appMailboxName + " for App " + onboardingApp.name);
984 logger.debug(EELFLoggerDelegate.debugLogger, " Key = " + appKey + " Secret = "
985 + appSecret + " generated using = " + user.getEmail());
987 } catch (HttpException e) {
988 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebConnectionError, e);
989 if (e.getStatusCode() == 409) {
990 logger.error(EELFLoggerDelegate.errorLogger, "Topic/mailbox " + appMailboxName
991 + " already exists. Will try using a different name", e);
993 logger.error(EELFLoggerDelegate.errorLogger, "HttpException when onboarding App: ",
999 if (successfullyCreatedMailbox) {
1000 onboardingApp.setUebTopicName(appMailboxName);
1001 onboardingApp.setUebKey(appKey);
1002 onboardingApp.setUebSecret(appSecret);
1006 * EP is a publisher to this App's new mailbox
1008 topicManager.addPublisher(
1009 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
1010 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),
1011 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
1015 * This App is a subscriber of its own mailbox
1017 topicManager.addSubscriber(
1018 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
1019 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,
1023 * This App is a publisher to EP
1025 topicManager.addPublisher(
1026 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
1027 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,
1028 PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME));
1029 } catch (HttpException | CambriaApiException | IOException e) {
1030 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);
1031 logger.error(EELFLoggerDelegate.errorLogger,
1032 "Error when configuring Publisher/Subscriber for App's new mailbox", e);
1033 transaction.commit();
1034 localSession.close();
1035 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
1039 transaction.commit();
1040 localSession.close();
1041 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
1045 app = (EPApp) localSession.get(EPApp.class, appId);
1046 if (app == null || app.getId() == null) {
1047 // App is already deleted!
1048 transaction.commit();
1049 localSession.close();
1050 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);
1054 logger.debug(EELFLoggerDelegate.debugLogger, "LR: about to call createAppFromOnboarding");
1055 createAppFromOnboarding(app, onboardingApp, localSession);
1056 logger.debug(EELFLoggerDelegate.debugLogger,
1057 "LR: updateApp: finished calling createAppFromOnboarding");
1058 localSession.saveOrUpdate(app);
1059 logger.debug(EELFLoggerDelegate.debugLogger,
1060 "LR: updateApp: finished calling localSession.saveOrUpdate");
1061 // Enable or disable all menu items associated with this app
1062 setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);
1063 logger.debug(EELFLoggerDelegate.debugLogger,
1064 "LR: updateApp: finished calling setFunctionalMenuItemsEnabled");
1065 transaction.commit();
1066 logger.debug(EELFLoggerDelegate.debugLogger, "LR: updateApp: finished calling transaction.commit");
1067 epUebHelper.addPublisher(app);
1068 logger.debug(EELFLoggerDelegate.debugLogger,
1069 "LR: updateApp: finished calling epUebHelper.addPublisher");
1071 } catch (Exception e) {
1072 logger.error(EELFLoggerDelegate.errorLogger, "updateApp failed", e);
1073 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);
1074 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
1075 EcompPortalUtils.rollbackTransaction(transaction,
1076 "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));
1078 EcompPortalUtils.closeLocalSession(localSession, "updateApp");
1081 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
1087 public CambriaTopicManager getTopicManager(LinkedList<String> urlList, String key, String secret)
1088 throws GeneralSecurityException, Exception {
1089 throw new Exception("This method can only be invoked from child class");
1093 * Populates a transport model of the application from a database row model.
1094 * Leaves out the thumbnail because the FE fetches images via a different
1098 * Model of database row
1099 * @param onboardingApp
1100 * Model for transport as JSON
1103 public void createOnboardingFromApp(EPApp app, OnboardingApp onboardingApp) {
1104 onboardingApp.id = app.getId();
1105 onboardingApp.name = app.getName();
1106 onboardingApp.imageUrl = app.getImageUrl();
1107 onboardingApp.description = app.getDescription();
1108 onboardingApp.notes = app.getNotes();
1109 onboardingApp.url = app.getUrl();
1110 onboardingApp.alternateUrl = app.getAlternateUrl();
1111 onboardingApp.restUrl = app.getAppRestEndpoint();
1112 onboardingApp.isOpen = app.getOpen();
1113 onboardingApp.isEnabled = app.getEnabled();
1114 onboardingApp.username = app.getUsername();
1115 onboardingApp.appPassword = decryptedPassword(app.getAppPassword(), app);
1116 onboardingApp.uebTopicName = app.getUebTopicName();
1117 onboardingApp.uebKey = app.getUebKey();
1118 onboardingApp.uebSecret = app.getUebSecret();
1119 onboardingApp.setRestrictedApp(app.isRestrictedApp());
1120 // if (app.getThumbnail() != null)
1121 // onboardingApp.thumbnail = new
1122 // String(Base64.getEncoder().encode(app.getThumbnail()));
1126 * Creates a database object for an application from an uploaded transport
1127 * model. Must decode the thumbnail, if any.
1130 * @param onboardingApp
1131 * @param localSession
1132 * @return The first argument.
1134 protected EPApp createAppFromOnboarding(EPApp app, OnboardingApp onboardingApp, Session localSession) {
1135 app.setName(onboardingApp.name);
1136 app.setDescription(onboardingApp.description);
1137 app.setNotes(onboardingApp.notes);
1138 app.setUrl(onboardingApp.url);
1139 app.setAlternateUrl(onboardingApp.alternateUrl);
1140 app.setAppRestEndpoint(onboardingApp.restUrl);
1141 app.setOpen(onboardingApp.isOpen);
1142 app.setEnabled(onboardingApp.isEnabled);
1143 app.setUsername(onboardingApp.username);
1144 app.setAppPassword(this.encryptedPassword(onboardingApp.appPassword, app));
1145 app.setUebTopicName(onboardingApp.uebTopicName);
1146 app.setUebKey(onboardingApp.uebKey);
1147 app.setUebSecret(onboardingApp.uebSecret);
1148 app.setRestrictedApp(onboardingApp.restrictedApp);
1149 if (!StringUtils.isEmpty(onboardingApp.thumbnail)) {
1150 logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: onboarding thumbnail is NOT empty");
1151 String[] splitBase64Thumbnail = onboardingApp.thumbnail.split("base64,");
1152 logger.debug(EELFLoggerDelegate.debugLogger,
1153 "createAppFromOnboarding: length of splitBase64Thumbnail: " + splitBase64Thumbnail.length);
1154 if (splitBase64Thumbnail.length > 1) {
1155 // This occurs when we have a new image, not an existing image
1156 byte[] decodedImage = Base64.getDecoder().decode(splitBase64Thumbnail[1].getBytes());
1157 logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: finished calling decode");
1158 // This is basically a boolean indicator that an image is
1160 app.setImageUrl(constructImageName(onboardingApp));
1161 app.setThumbnail(decodedImage);
1163 } else if (app.getThumbnail() != null && onboardingApp.imageLink == null) {
1164 // The thumbnail that came in from the json is empty; the previous
1165 // thumbnail is NOT empty. Must delete it.
1166 logger.debug(EELFLoggerDelegate.debugLogger,
1167 "createAppFromOnboarding: onboarding thumbnail is empty; db thumbnail is NOT null");
1168 app.setImageUrl(null);
1169 app.setThumbnail(null);
1171 logger.debug(EELFLoggerDelegate.debugLogger,
1172 "createAppFromOnboarding: making no changes to thumbnail as imageLink is not null");
1177 protected String constructImageName(OnboardingApp onboardingApp) {
1178 return "portal_" + String.valueOf(onboardingApp.url.hashCode() + "_" + (int) (Math.random() * 100000.0))
1182 // Don't encrypt or decrypt the password if it is null or the empty string
1183 private String decryptedPassword(String encryptedAppPwd, EPApp app) {
1185 if (encryptedAppPwd != null & encryptedAppPwd.length() > 0) {
1187 result = CipherUtil.decrypt(encryptedAppPwd,
1188 SystemProperties.getProperty(SystemProperties.Decryption_Key));
1189 } catch (Exception e) {
1190 logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed for app " + app.getName(), e);
1196 protected String encryptedPassword(String decryptedAppPwd, EPApp app) {
1198 if (decryptedAppPwd != null & decryptedAppPwd.length() > 0) {
1200 result = CipherUtil.encrypt(decryptedAppPwd,
1201 SystemProperties.getProperty(SystemProperties.Decryption_Key));
1202 } catch (Exception e) {
1203 logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword failed for app " + app.getName(), e);
1209 @SuppressWarnings("unchecked")
1211 public FieldsValidator saveWidgetsSortManual(List<EPWidgetsSortPreference> widgetsSortManual, EPUser user) {
1212 FieldsValidator fieldsValidator = new FieldsValidator();
1213 final Map<String, Long> params = new HashMap<>();
1214 List<EPWidgetsManualSortPreference> epManualWidgets = new ArrayList<EPWidgetsManualSortPreference>();
1217 params.put("userId", user.getId());
1218 epManualWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);
1219 Map<Long, EPWidgetsManualSortPreference> existingWidgetsIds = new HashMap<Long, EPWidgetsManualSortPreference>();
1220 for (EPWidgetsManualSortPreference userWidgetManualPref : epManualWidgets) {
1221 existingWidgetsIds.put(userWidgetManualPref.getWidgetId(), userWidgetManualPref);
1223 for (EPWidgetsSortPreference epWidgetsManPref : widgetsSortManual) {
1224 if (epWidgetsManPref.getWidgetid() != null) {
1225 Long widgetid = epWidgetsManPref.getWidgetid();
1226 if (existingWidgetsIds.containsKey(widgetid)) {
1227 EPWidgetsManualSortPreference epWidgetsManualSort = existingWidgetsIds.get(widgetid);
1228 epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());
1229 epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
1230 epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
1231 epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
1232 HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
1233 additionalUpdateParam.put("userId", epWidgetsManualSort.getUserId());
1234 dataAccessService.saveDomainObject(epWidgetsManualSort, additionalUpdateParam);
1236 EPWidgetsManualSortPreference epWidgetsManualSort = new EPWidgetsManualSortPreference();
1237 epWidgetsManualSort.setWidgetId(epWidgetsManPref.getWidgetid());
1238 epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());
1239 epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
1240 epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
1241 epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
1242 epWidgetsManualSort.setUserId(Ints.checkedCast(user.getId()));
1243 dataAccessService.saveDomainObject(epWidgetsManualSort, null);
1245 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
1248 } catch (Exception e) {
1249 logger.error(EELFLoggerDelegate.errorLogger, "saveWidgetsSortManual failed", e);
1250 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
1252 return fieldsValidator;
1255 @SuppressWarnings("unchecked")
1257 public FieldsValidator deleteUserWidgetSortPref(List<EPWidgetsSortPreference> delWidgetSortPref, EPUser user) {
1258 FieldsValidator fieldsValidator = new FieldsValidator();
1259 final Map<String, Long> params = new HashMap<>();
1260 List<EPWidgetsManualSortPreference> epWidgets = new ArrayList<EPWidgetsManualSortPreference>();
1262 params.put("userId", user.getId());
1263 epWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);
1264 Map<Long, EPWidgetsManualSortPreference> existingWidgetIds = new HashMap<Long, EPWidgetsManualSortPreference>();
1265 for (EPWidgetsManualSortPreference userWidgetSortPref : epWidgets) {
1266 existingWidgetIds.put(userWidgetSortPref.getWidgetId(), userWidgetSortPref);
1268 for (EPWidgetsSortPreference delEpWidgetsManPref : delWidgetSortPref) {
1269 if (delEpWidgetsManPref.getWidgetid() != null) {
1270 Long widgetId = delEpWidgetsManPref.getWidgetid();
1271 if (existingWidgetIds.containsKey(widgetId)) {
1272 dataAccessService.deleteDomainObjects(EPWidgetsManualSortPreference.class,
1273 "widget_id=" + widgetId + " AND user_id=" + user.getId(), null);
1275 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
1278 } catch (Exception e) {
1279 logger.error(EELFLoggerDelegate.errorLogger, "deleteUserWidgetSortPref failed", e);
1280 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
1282 return fieldsValidator;
1286 * This Method Stores the Sort Order of User Apps by Sort Manual Preference
1288 * @param: appsSortManual--contains User Apps Data
1290 * @param: user--contains LoggedIn User Data
1292 @SuppressWarnings("unchecked")
1294 public FieldsValidator saveAppsSortManual(List<EPAppsManualPreference> appsSortManual, EPUser user) {
1295 FieldsValidator fieldsValidator = new FieldsValidator();
1296 final Map<String, Long> params = new HashMap<>();
1297 List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();
1300 params.put("userId", user.getId());
1301 epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);
1302 Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();
1303 for (EPUserAppsManualSortPreference userAppManualPref : epManualApps) {
1304 existingAppIds.put(userAppManualPref.getAppId(), userAppManualPref);
1306 for (EPAppsManualPreference epAppsManPref : appsSortManual) {
1307 if (epAppsManPref.getAppid() != null) {
1308 Long appid = epAppsManPref.getAppid();
1309 if (existingAppIds.containsKey(appid)) {
1310 EPUserAppsManualSortPreference epAppsManualSort = existingAppIds.get(appid);
1312 .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
1313 HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
1314 additionalUpdateParam.put("userId", epAppsManualSort.getUserId());
1315 dataAccessService.saveDomainObject(epAppsManualSort, additionalUpdateParam);
1317 EPUserAppsManualSortPreference epAppsManualSort = new EPUserAppsManualSortPreference();
1318 epAppsManualSort.setAppId(epAppsManPref.getAppid());
1320 .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
1321 epAppsManualSort.setUserId(Ints.checkedCast(user.getId()));
1322 dataAccessService.saveDomainObject(epAppsManualSort, null);
1324 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
1327 } catch (Exception e) {
1328 logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortManual failed", e);
1329 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
1331 return fieldsValidator;
1337 * @see org.openecomp.portalapp.portal.service.EPAppService#
1338 * deleteUserAppSortManual(java.lang.String,
1339 * org.openecomp.portalapp.portal.domain.EPUser)
1341 @SuppressWarnings("unchecked")
1343 public FieldsValidator deleteUserAppSortManual(EPDeleteAppsManualSortPref delAppSortManual, EPUser user) {
1344 FieldsValidator fieldsValidator = new FieldsValidator();
1345 final Map<String, Long> params = new HashMap<>();
1346 List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();
1348 params.put("userId", user.getId());
1349 epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);
1350 Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();
1351 for (EPUserAppsManualSortPreference userAppPref : epManualApps) {
1352 existingAppIds.put(userAppPref.getAppId(), userAppPref);
1354 if (existingAppIds.containsKey(delAppSortManual.getAppId()) && !delAppSortManual.isSelect()) {
1355 dataAccessService.deleteDomainObjects(EPUserAppsManualSortPreference.class,
1356 "app_id=" + delAppSortManual.getAppId() + " AND user_id=" + user.getId(), null);
1357 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
1359 } catch (Exception e) {
1360 logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);
1361 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
1363 return fieldsValidator;
1366 @SuppressWarnings("unchecked")
1368 public FieldsValidator saveAppsSortPreference(EPAppsSortPreference appsSortPreference, EPUser user) {
1369 FieldsValidator fieldsValidator = new FieldsValidator();
1370 final Map<String, Long> params = new HashMap<>();
1371 List<EPUserAppsSortPreference> epSortTypes = new ArrayList<EPUserAppsSortPreference>();
1372 EPUserAppsSortPreference usrSortPr = null;
1374 params.put("userId", user.getId());
1375 epSortTypes = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);
1376 if (epSortTypes.size() == 0) {
1377 usrSortPr = new EPUserAppsSortPreference();
1378 usrSortPr.setUserId(Ints.checkedCast(user.getId()));
1379 usrSortPr.setSortPref(appsSortPreference.getValue());
1380 dataAccessService.saveDomainObject(usrSortPr, null);
1381 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
1383 usrSortPr = epSortTypes.get(0);
1384 usrSortPr.setSortPref(appsSortPreference.getValue());
1385 HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
1386 additionalUpdateParam.put("userId", usrSortPr.getUserId());
1387 dataAccessService.saveDomainObject(usrSortPr, additionalUpdateParam);
1388 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
1390 } catch (Exception e) {
1391 logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortPreference failed", e);
1392 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
1394 return fieldsValidator;
1397 @SuppressWarnings("unchecked")
1399 public String getUserAppsSortTypePreference(EPUser user) {
1400 final Map<String, Long> params = new HashMap<>();
1401 List<EPUserAppsSortPreference> userSortPrefs = new ArrayList<EPUserAppsSortPreference>();
1403 params.put("userId", user.getId());
1404 userSortPrefs = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);
1405 if (userSortPrefs.size() > 0)
1406 return userSortPrefs.get(0).getSortPref();
1409 } catch (Exception e) {
1410 logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);
1417 public List<EPApp> getUserRemoteApps(String id) {
1418 throw new RuntimeException(" Cannot be called from parent class");