2 * ================================================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 AT&T Intellectual Property
\r
6 * ================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ================================================================================
\r
20 package org.openecomp.portalapp.portal.service;
\r
22 import java.io.IOException;
\r
23 import java.util.ArrayList;
\r
24 import java.util.Base64;
\r
25 import java.util.HashMap;
\r
26 import java.util.HashSet;
\r
27 import java.util.List;
\r
28 import java.util.Map;
\r
29 import java.util.Set;
\r
31 import javax.annotation.PostConstruct;
\r
32 import javax.servlet.http.HttpServletResponse;
\r
34 import org.apache.commons.lang.StringUtils;
\r
35 import org.hibernate.Query;
\r
36 import org.hibernate.Session;
\r
37 import org.hibernate.SessionFactory;
\r
38 import org.hibernate.Transaction;
\r
39 import org.openecomp.portalapp.portal.domain.AdminUserApp;
\r
40 import org.openecomp.portalapp.portal.domain.AdminUserApplications;
\r
41 import org.openecomp.portalapp.portal.domain.AppIdAndNameTransportModel;
\r
42 import org.openecomp.portalapp.portal.domain.AppsResponse;
\r
43 import org.openecomp.portalapp.portal.domain.EPApp;
\r
44 import org.openecomp.portalapp.portal.domain.EPUser;
\r
45 import org.openecomp.portalapp.portal.domain.EPUserAppsManualSortPreference;
\r
46 import org.openecomp.portalapp.portal.domain.EPUserAppsSortPreference;
\r
47 import org.openecomp.portalapp.portal.domain.EPWidgetsManualSortPreference;
\r
48 import org.openecomp.portalapp.portal.domain.EcompApp;
\r
49 import org.openecomp.portalapp.portal.domain.UserRole;
\r
50 import org.openecomp.portalapp.portal.domain.UserRoles;
\r
51 import org.openecomp.portalapp.portal.ecomp.model.AppCatalogItem;
\r
52 import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;
\r
53 import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;
\r
54 import org.openecomp.portalapp.portal.transport.EPAppsManualPreference;
\r
55 import org.openecomp.portalapp.portal.transport.EPAppsSortPreference;
\r
56 import org.openecomp.portalapp.portal.transport.EPDeleteAppsManualSortPref;
\r
57 import org.openecomp.portalapp.portal.transport.EPWidgetsSortPreference;
\r
58 import org.openecomp.portalapp.portal.transport.FieldsValidator;
\r
59 import org.openecomp.portalapp.portal.transport.FunctionalMenuItem;
\r
60 import org.openecomp.portalapp.portal.transport.LocalRole;
\r
61 import org.openecomp.portalapp.portal.transport.OnboardingApp;
\r
62 import org.openecomp.portalapp.portal.ueb.EPUebHelper;
\r
63 import org.openecomp.portalapp.portal.utils.EPCommonSystemProperties;
\r
64 import org.openecomp.portalapp.portal.utils.EcompPortalUtils;
\r
65 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
\r
66 import org.openecomp.portalsdk.core.onboarding.ueb.Helper;
\r
67 import org.openecomp.portalsdk.core.onboarding.ueb.TopicManager;
\r
68 import org.openecomp.portalsdk.core.onboarding.util.CipherUtil;
\r
69 import org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants;
\r
70 import org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties;
\r
71 import org.openecomp.portalsdk.core.service.DataAccessService;
\r
72 import org.openecomp.portalsdk.core.util.SystemProperties;
\r
73 import org.springframework.beans.factory.annotation.Autowired;
\r
75 import com.att.nsa.apiClient.http.HttpException;
\r
76 import com.att.nsa.cambria.client.CambriaClient.CambriaApiException;
\r
77 import com.att.nsa.cambria.client.CambriaClientBuilders;
\r
78 import com.att.nsa.cambria.client.CambriaIdentityManager;
\r
79 import com.google.common.primitives.Ints;
\r
81 public class EPAppCommonServiceImpl implements EPAppService {
\r
83 protected String ECOMP_APP_ID = "1";
\r
84 protected String SUPER_ADMIN_ROLE_ID = "1";
\r
85 protected String ACCOUNT_ADMIN_ROLE_ID = "999";
\r
86 protected String RESTRICTED_APP_ROLE_ID = "900";
\r
88 private static final String urlField = "url";
\r
89 private static final String nameField = "name";
\r
91 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPAppCommonServiceImpl.class);
\r
94 AdminRolesService adminRolesService;
\r
96 private SessionFactory sessionFactory;
\r
98 private DataAccessService dataAccessService;
\r
100 EPUebHelper epUebHelper;
\r
103 private void init() {
\r
104 SUPER_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.SYS_ADMIN_ROLE_ID);
\r
105 ACCOUNT_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID);
\r
106 ECOMP_APP_ID = SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID);
\r
107 RESTRICTED_APP_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.RESTRICTED_APP_ROLE_ID);
\r
111 public List<EPApp> getUserAsAdminApps(EPUser user) {
\r
112 if (adminRolesService.isAccountAdmin(user)) {
\r
113 String sql = "SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID=FN_APP.APP_ID where "
\r
114 + "FN_USER_ROLE.USER_ID=" + user.getId() + " AND FN_USER_ROLE.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
\r
115 + " AND FN_APP.ENABLED = 'Y'";
\r
118 @SuppressWarnings("unchecked")
\r
119 List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
\r
121 } catch (Exception e) {
\r
122 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
\r
126 logger.error(EELFLoggerDelegate.errorLogger,
\r
127 "getUserAsAdminApps: only Account Admin may invoke this function!");
\r
128 return new ArrayList<EPApp>();
\r
133 public List<EPApp> getUserByOrgUserIdAsAdminApps(String orgUserId) {
\r
134 String format = "SELECT * FROM FN_APP app INNER JOIN FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "
\r
135 + "INNER JOIN FN_USER user on user.USER_ID = userrole.USER_ID "
\r
136 + "WHERE user.org_user_id = '%s' AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
\r
137 + " AND FN_APP.ENABLED = 'Y'";
\r
139 String sql = String.format(format, orgUserId);
\r
143 @SuppressWarnings("unchecked")
\r
144 List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
\r
146 } catch (Exception e) {
\r
147 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
\r
153 public List<EPApp> getAppsFullList() {
\r
154 @SuppressWarnings("unchecked")
\r
155 List<EPApp> apps = dataAccessService.getList(EPApp.class, null);
\r
160 public List<EcompApp> getEcompAppAppsFullList() {
\r
161 return transformAppsToEcompApps(getAppsFullList());
\r
165 public List<EcompApp> transformAppsToEcompApps(List<EPApp> appsList) {
\r
166 List<EcompApp> ecompAppList = new ArrayList<EcompApp>();
\r
167 for (EPApp app : appsList) {
\r
168 EcompApp ecompApp = new EcompApp();
\r
169 ecompApp.setId(app.getId());
\r
170 ecompApp.setName(app.getName());
\r
171 ecompApp.setImageUrl(app.getImageUrl());
\r
172 ecompApp.setDescription(app.getDescription());
\r
173 ecompApp.setNotes(app.getNotes());
\r
174 ecompApp.setUrl(app.getUrl());
\r
175 ecompApp.setAlternateUrl(app.getAlternateUrl());
\r
176 ecompApp.setUebTopicName(app.getUebTopicName());
\r
177 ecompApp.setUebKey(app.getUebKey());
\r
178 ecompApp.setUebSecret(app.getUebSecret());
\r
179 ecompApp.setEnabled(app.getEnabled());
\r
180 ecompApp.setRestrictedApp(app.isRestrictedApp());
\r
181 ecompAppList.add(ecompApp);
\r
183 return ecompAppList;
\r
187 public EPApp getApp(Long appId) {
\r
189 @SuppressWarnings("unchecked")
\r
190 List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id = " + appId, null, null);
\r
191 return (apps.size() > 0) ? apps.get(0) : null;
\r
192 } catch (Exception e) {
\r
193 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
\r
198 @SuppressWarnings("unchecked")
\r
200 public List<AppIdAndNameTransportModel> getAdminApps(EPUser user) {
\r
201 if (adminRolesService.isAccountAdmin(user)) {
\r
202 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 "
\r
203 + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
\r
204 + " AND (app.ENABLED = 'Y' OR app.APP_ID=1)";
\r
205 String sql = String.format(format, user.getId());
\r
206 // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND
\r
207 // app.APP_REST_ENDPOINT <> ''";
\r
210 return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);
\r
211 } catch (Exception e) {
\r
212 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
\r
213 logger.error(EELFLoggerDelegate.errorLogger,
\r
214 "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);
\r
217 return new ArrayList<AppIdAndNameTransportModel>();
\r
221 public EPApp getAppDetail(String appName) {
\r
222 final Map<String, String> params = new HashMap<String, String>();
\r
224 params.put("appName", appName);
\r
225 @SuppressWarnings("unchecked")
\r
226 List<EPApp> apps = (List<EPApp>) dataAccessService.executeNamedQuery("getAppDetails", params, null);
\r
227 return (apps.size() > 0) ? apps.get(0) : null;
\r
228 } catch (Exception e) {
\r
229 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
\r
234 @SuppressWarnings("unchecked")
\r
236 public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(EPUser user) {
\r
237 if (adminRolesService.isSuperAdmin(user) || adminRolesService.isAccountAdmin(user)) {
\r
238 String format = "";
\r
240 if (adminRolesService.isSuperAdmin(user)) {
\r
241 format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app "
\r
242 + "where app.ENABLED = 'Y' AND app.app_type = 1";
\r
244 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 "
\r
245 + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
\r
246 + " AND app.ENABLED = 'Y' AND app.app_type = 1";
\r
248 sql = String.format(format, user.getId());
\r
249 // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND
\r
250 // app.APP_REST_ENDPOINT <> ''";
\r
253 return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);
\r
254 } catch (Exception e) {
\r
255 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
\r
256 logger.error(EELFLoggerDelegate.errorLogger,
\r
257 "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);
\r
260 return new ArrayList<AppIdAndNameTransportModel>();
\r
263 protected void logQuery(String sql) {
\r
264 logger.debug(EELFLoggerDelegate.debugLogger, "logQuery: " + sql);
\r
267 public DataAccessService getDataAccessService() {
\r
268 return dataAccessService;
\r
271 public void setDataAccessService(DataAccessService dataAccessService) {
\r
272 this.dataAccessService = dataAccessService;
\r
276 public List<AdminUserApplications> getAppsAdmins() {
\r
277 String sql = "SELECT apps.APP_NAME, apps.APP_ID, user.USER_ID, user.FIRST_NAME, user.LAST_NAME, user.org_user_id FROM fn_user_role userrole "
\r
278 + "INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID "
\r
279 + "INNER JOIN fn_app apps ON apps.APP_ID = userrole.APP_ID " + "WHERE userrole.ROLE_ID = "
\r
280 + ACCOUNT_ADMIN_ROLE_ID + " AND (apps.ENABLED = 'Y' OR apps.APP_ID=1)";
\r
283 @SuppressWarnings("unchecked")
\r
284 List<AdminUserApp> adminApps = dataAccessService.executeSQLQuery(sql, AdminUserApp.class, null);
\r
285 // DataAccessService does not use generic types.
\r
286 return aggregateRowsResultsByUserId(adminApps);
\r
287 } catch (Exception e) {
\r
288 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
\r
293 private List<AdminUserApplications> aggregateRowsResultsByUserId(List<AdminUserApp> adminApps) {
\r
294 HashMap<Long, AdminUserApplications> adminUserApplications = new HashMap<Long, AdminUserApplications>();
\r
295 for (AdminUserApp app : adminApps) {
\r
296 Long userId = app.getUser_Id();
\r
297 if (adminUserApplications.get(userId) == null)
\r
298 adminUserApplications.put(userId, new AdminUserApplications(app));
\r
300 adminUserApplications.get(userId).addApp(app.getAppId(), app.getAppName());
\r
302 return new ArrayList<AdminUserApplications>(adminUserApplications.values());
\r
306 public List<AppsResponse> getAllApps(Boolean all) {
\r
307 // If all is true, return both active and inactive apps. Otherwise, just
\r
309 @SuppressWarnings("unchecked")
\r
310 // Sort the list by application name so the drop-down looks pretty.
\r
311 List<EPApp> apps = all
\r
312 ? (List<EPApp>) dataAccessService.getList(EPApp.class, " where id != " + ECOMP_APP_ID, "name", null)
\r
313 : (List<EPApp>) dataAccessService.getList(EPApp.class,
\r
314 " where ( enabled = 'Y' or id = " + ECOMP_APP_ID + ")", "name", null);
\r
316 List<AppsResponse> appsModified = new ArrayList<AppsResponse>();
\r
317 for (EPApp app : apps) {
\r
318 appsModified.add(new AppsResponse(app.getId(), app.getName(), app.isRestrictedApp(), app.getEnabled()));
\r
320 return appsModified;
\r
324 public UserRoles getUserProfile(String loginId) {
\r
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 "
\r
326 + "INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID "
\r
327 + "INNER JOIN fn_role role ON role.ROLE_ID = userrole.ROLE_ID "
\r
328 + "WHERE user.org_user_id = \"%s\" and (userrole.app_id = 1 or role.role_id = " + ACCOUNT_ADMIN_ROLE_ID
\r
330 String sql = String.format(format, loginId);
\r
332 @SuppressWarnings("unchecked")
\r
333 List<UserRole> userRoleList = dataAccessService.executeSQLQuery(sql, UserRole.class, null);
\r
334 ArrayList<UserRoles> usersRolesList = aggregateUserProfileRowsResultsByRole(userRoleList);
\r
335 if (usersRolesList == null || usersRolesList.size() < 1)
\r
338 return usersRolesList.get(0);
\r
342 public UserRoles getUserProfileNormalized(EPUser user) {
\r
344 UserRoles userAndRoles = getUserProfile(user.getLoginId());
\r
345 // If no roles are defined, treat this user as a guest.
\r
346 if (user.isGuest() || userAndRoles == null) {
\r
347 logger.debug(EELFLoggerDelegate.debugLogger, "getUserProfile: treating user {} as guest",
\r
348 user.getLoginId());
\r
349 UserRole userRole = new UserRole();
\r
350 userRole.setUser_Id(user.getId());
\r
351 userRole.setOrgUserId(user.getLoginId());
\r
352 userRole.setFirstName(user.getFirstName());
\r
353 userRole.setLastName(user.getLastName());
\r
354 userRole.setRoleId(-1L);
\r
355 userRole.setRoleName("Guest");
\r
356 userRole.setUser_Id(-1L);
\r
357 userAndRoles = new UserRoles(userRole);
\r
360 return userAndRoles;
\r
363 protected ArrayList<UserRoles> aggregateUserProfileRowsResultsByRole(List<UserRole> userRoleList) {
\r
364 HashMap<String, UserRoles> userRoles = new HashMap<String, UserRoles>();
\r
365 for (UserRole user : userRoleList) {
\r
366 String orgUserId = user.getOrgUserId();
\r
367 if (userRoles.get(orgUserId) == null)
\r
368 userRoles.put(orgUserId, new UserRoles(user));
\r
370 userRoles.get(orgUserId).addRole(user.getRoleName());
\r
372 return new ArrayList<UserRoles>(userRoles.values());
\r
375 private boolean isRestrictedApp(Long appId) {
\r
376 EPApp app = getApp(appId);
\r
377 return app.isRestrictedApp();
\r
380 // For the functional menu edit
\r
382 public List<LocalRole> getAppRoles(Long appId) {
\r
384 if (isRestrictedApp(appId)) {
\r
385 sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where ROLE_ID = '" + RESTRICTED_APP_ROLE_ID + "'";
\r
387 sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where APP_ID = '" + appId + "'";
\r
390 @SuppressWarnings("unchecked")
\r
391 List<LocalRole> appRoles = dataAccessService.executeSQLQuery(sql, LocalRole.class, null);
\r
395 protected String userAppsQuery(EPUser user) {
\r
396 StringBuilder query = new StringBuilder();
\r
397 if (adminRolesService.isSuperAdmin(user)) {
\r
398 query.append("SELECT * FROM FN_APP where FN_APP.ENABLED = 'Y' ORDER BY APP_NAME");
\r
400 query.append("SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID = FN_APP.APP_ID where ");
\r
402 "FN_USER_ROLE.USER_ID = " + user.getId() + " AND FN_USER_ROLE.ROLE_ID != " + SUPER_ADMIN_ROLE_ID);
\r
403 query.append(" AND FN_APP.ENABLED = 'Y'");
\r
405 return query.toString();
\r
408 protected FieldsValidator onboardingAppFieldsChecker(OnboardingApp onboardingApp) {
\r
409 FieldsValidator fieldsValidator = new FieldsValidator();
\r
410 if (onboardingApp.name == null || onboardingApp.name.length() == 0 || onboardingApp.url == null
\r
411 || onboardingApp.url.length() == 0 || onboardingApp.restrictedApp == null
\r
412 || onboardingApp.isOpen == null || onboardingApp.isEnabled == null
\r
413 || (onboardingApp.id != null && onboardingApp.id.equals(ECOMP_APP_ID))
\r
414 // For a normal app (appType==1), these fields must be filled
\r
416 // For a restricted app (appType==2), they will be empty.
\r
417 || ((!onboardingApp.restrictedApp)
\r
418 && (onboardingApp.username == null || onboardingApp.username.length() == 0
\r
419 || onboardingApp.appPassword == null || onboardingApp.appPassword.length() == 0))) {
\r
420 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
\r
422 return fieldsValidator;
\r
426 public List<EPApp> getUserApps(EPUser user) {
\r
427 List<EPApp> openApps = getOpenApps();
\r
429 if (user.isGuest()) {
\r
432 String sql = userAppsQuery(user);
\r
435 // TreeSet<EPApp> distinctApps = new TreeSet<EPApp>();
\r
436 List<EPApp> appsList = new ArrayList<>();
\r
437 @SuppressWarnings("unchecked")
\r
438 List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
\r
439 HashSet<EPApp> appSet = new HashSet<>();
\r
440 for (EPApp app : adminApps) {
\r
445 for (EPApp app : openApps) {
\r
446 if (!appSet.contains(app))
\r
455 public List<EPApp> getPersAdminApps(EPUser user) {
\r
456 final Map<String, Long> params = new HashMap<>();
\r
457 params.put("userId", user.getId());
\r
458 // Named query is stored in EP.hbm.xml, mapped to EPApp
\r
459 @SuppressWarnings("unchecked")
\r
460 List<EPApp> list = dataAccessService.executeNamedQuery("getPersAdminApps", params, null);
\r
465 public List<EPApp> getPersUserApps(EPUser user) {
\r
466 final Map<String, Long> params = new HashMap<>();
\r
467 params.put("userId", user.getId());
\r
468 // Named query is stored in EP.hbm.xml, mapped to EPApp
\r
469 @SuppressWarnings("unchecked")
\r
470 List<EPApp> list = dataAccessService.executeNamedQuery("getPersUserApps", params, null);
\r
478 * org.openecomp.portalapp.portal.service.EPAppService#getAppCatalog(com.att
\r
479 * .fusionapp.ecomp.portal.domain.EPUser)
\r
482 public List<AppCatalogItem> getUserAppCatalog(EPUser user) {
\r
483 final Map<String, Long> params = new HashMap<>();
\r
484 params.put("userId", user.getId());
\r
485 // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem
\r
486 @SuppressWarnings("unchecked")
\r
487 List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getUserAppCatalog", params, null);
\r
495 * org.openecomp.portalapp.portal.service.EPAppService#getAdminAppCatalog(
\r
496 * org.openecomp.portalapp.portal.domain.EPUser)
\r
499 public List<AppCatalogItem> getAdminAppCatalog(EPUser user) {
\r
500 final Map<String, Long> params = new HashMap<>();
\r
501 params.put("userId", user.getId());
\r
502 // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem
\r
503 @SuppressWarnings("unchecked")
\r
504 List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getAdminAppCatalog", params, null);
\r
508 private List<EPApp> getOpenApps() {
\r
509 @SuppressWarnings("unchecked")
\r
510 List<EPApp> openApps = dataAccessService.getList(EPApp.class, " where open='Y' and enabled='Y'", null, null);
\r
514 @SuppressWarnings("unchecked")
\r
516 public List<EPApp> getAppsOrderByName(EPUser user) {
\r
517 final Map<String, Long> params = new HashMap<>();
\r
518 List<EPApp> sortedAppsByName = null;
\r
520 if (adminRolesService.isSuperAdmin(user)) {
\r
521 params.put("userId", user.getId());
\r
522 sortedAppsByName = dataAccessService.executeNamedQuery("getPersAdminAppsOrderByName", params, null);
\r
524 params.put("userId", user.getId());
\r
525 sortedAppsByName = dataAccessService.executeNamedQuery("getPersUserAppsOrderByName", params, null);
\r
527 } catch (Exception e) {
\r
528 logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByName failed", e);
\r
530 return sortedAppsByName;
\r
533 @SuppressWarnings("unchecked")
\r
535 public List<EPApp> getAppsOrderByLastUsed(EPUser user) {
\r
537 final Map<String, Long> params = new HashMap<>();
\r
538 List<EPApp> sortedAppsByLastUsed = new ArrayList<EPApp>();
\r
539 List<EPApp> finalsortedAppsByLastUsed = new ArrayList<EPApp>();
\r
541 if (adminRolesService.isSuperAdmin(user)) {
\r
542 params.put("userId", user.getId());
\r
543 sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByLastUsed", params, null);
\r
545 params.put("userId", user.getId());
\r
546 sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByLastUsed", params, null);
\r
548 Set<String> epAppSet = new HashSet<String>();
\r
549 for (EPApp eapp : sortedAppsByLastUsed)
\r
550 if (!epAppSet.contains(eapp.getName())) {
\r
551 finalsortedAppsByLastUsed.add(eapp);
\r
552 epAppSet.add(eapp.getName());
\r
555 } catch (Exception e) {
\r
556 logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByLastUsed failed", e);
\r
558 return finalsortedAppsByLastUsed;
\r
561 @SuppressWarnings("unchecked")
\r
563 public List<EPApp> getAppsOrderByMostUsed(EPUser user) {
\r
564 final Map<String, Long> params = new HashMap<>();
\r
565 List<EPApp> sortedAppsByMostUsed = new ArrayList<EPApp>();
\r
566 List<EPApp> finalsortedAppsByMostUsed = new ArrayList<EPApp>();
\r
568 if (adminRolesService.isSuperAdmin(user)) {
\r
569 params.put("userId", user.getId());
\r
570 sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByMostUsed", params, null);
\r
572 params.put("userId", user.getId());
\r
573 sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByMostUsed", params, null);
\r
575 Set<String> epAppSet = new HashSet<String>();
\r
577 for (EPApp eapp : sortedAppsByMostUsed) {
\r
578 if (!epAppSet.contains(eapp.getName())) {
\r
579 finalsortedAppsByMostUsed.add(eapp);
\r
580 epAppSet.add(eapp.getName());
\r
583 } catch (Exception e) {
\r
584 logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByMostUsed failed", e);
\r
587 return finalsortedAppsByMostUsed;
\r
591 * This Method retrieves the User Apps by Sort Manual Preference
\r
593 * @param: user--contains LoggedIn User Data
\r
595 @SuppressWarnings("unchecked")
\r
597 public List<EPApp> getAppsOrderByManual(EPUser user) {
\r
598 final Map<String, Long> params = new HashMap<>();
\r
599 List<EPApp> sortedAppsByManual = new ArrayList<EPApp>();
\r
600 List<EPApp> finalsortedAppsByManual = new ArrayList<EPApp>();
\r
602 if (adminRolesService.isSuperAdmin(user)) {
\r
603 params.put("userId", user.getId());
\r
604 sortedAppsByManual = dataAccessService.executeNamedQuery("getAdminAppsOrderByManual", params, null);
\r
606 params.put("userId", user.getId());
\r
607 sortedAppsByManual = dataAccessService.executeNamedQuery("getUserAppsOrderByManual", params, null);
\r
609 Set<String> epAppSet = new HashSet<String>();
\r
611 for (EPApp eapp : sortedAppsByManual) {
\r
612 if (!epAppSet.contains(eapp.getName())) {
\r
613 finalsortedAppsByManual.add(eapp);
\r
614 epAppSet.add(eapp.getName());
\r
617 } catch (Exception e) {
\r
618 logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByManual failed", e);
\r
620 return finalsortedAppsByManual;
\r
624 public List<OnboardingApp> getOnboardingApps() {
\r
625 @SuppressWarnings("unchecked")
\r
626 List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id!=" + ECOMP_APP_ID, null, null);
\r
627 List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
\r
628 for (EPApp app : apps) {
\r
629 OnboardingApp onboardingApp = new OnboardingApp();
\r
630 createOnboardingFromApp(app, onboardingApp);
\r
631 onboardingAppsList.add(onboardingApp);
\r
633 return onboardingAppsList;
\r
637 public List<OnboardingApp> getEnabledNonOpenOnboardingApps() {
\r
638 @SuppressWarnings("unchecked")
\r
639 List<EPApp> apps = dataAccessService.getList(EPApp.class,
\r
640 " where enabled = true and open = false and id!=" + ECOMP_APP_ID, null, null);
\r
641 List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
\r
642 for (EPApp app : apps) {
\r
643 OnboardingApp onboardingApp = new OnboardingApp();
\r
644 createOnboardingFromApp(app, onboardingApp);
\r
645 onboardingAppsList.add(onboardingApp);
\r
647 return onboardingAppsList;
\r
650 @SuppressWarnings("unchecked")
\r
651 private void validateOnboardingApp(OnboardingApp onboardingApp, FieldsValidator fieldsValidator) {
\r
652 boolean duplicatedUrl = false;
\r
653 boolean duplicatedName = false;
\r
655 if (onboardingApp.id == null) {
\r
656 apps = dataAccessService.getList(EPApp.class,
\r
657 " where url = '" + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);
\r
659 apps = dataAccessService.getList(EPApp.class, " where id = " + onboardingApp.id + " or url = '"
\r
660 + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);
\r
662 for (EPApp app : apps) {
\r
663 if (onboardingApp.id != null && onboardingApp.id.equals(app.getId())) {
\r
666 if (!duplicatedUrl && app.getUrl().equalsIgnoreCase(onboardingApp.url)) {
\r
667 duplicatedUrl = true;
\r
668 if (duplicatedName) {
\r
672 if (!duplicatedName && app.getName().equalsIgnoreCase(onboardingApp.name)) {
\r
673 duplicatedName = true;
\r
674 if (duplicatedUrl) {
\r
679 if (duplicatedUrl || duplicatedName) {
\r
680 if (duplicatedUrl) {
\r
681 fieldsValidator.addProblematicFieldName(urlField);
\r
683 if (duplicatedName) {
\r
684 fieldsValidator.addProblematicFieldName(nameField);
\r
686 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
\r
687 fieldsValidator.errorCode = new Long(EPCommonSystemProperties.DUBLICATED_FIELD_VALUE_ECOMP_ERROR);
\r
692 public FieldsValidator modifyOnboardingApp(OnboardingApp modifiedOnboardingApp, EPUser user) {
\r
693 logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering modifyOnboardingApp");
\r
694 FieldsValidator fieldsValidator = onboardingAppFieldsChecker(modifiedOnboardingApp);
\r
695 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
\r
696 validateOnboardingApp(modifiedOnboardingApp, fieldsValidator);
\r
698 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
\r
699 if (modifiedOnboardingApp.id != null) {
\r
700 updateApp(modifiedOnboardingApp.id, modifiedOnboardingApp, fieldsValidator, user);
\r
702 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
\r
705 return fieldsValidator;
\r
709 public FieldsValidator addOnboardingApp(OnboardingApp newOnboardingApp, EPUser user) {
\r
710 FieldsValidator fieldsValidator = onboardingAppFieldsChecker(newOnboardingApp);
\r
711 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
\r
712 validateOnboardingApp(newOnboardingApp, fieldsValidator);
\r
714 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
\r
715 if (newOnboardingApp.id == null) {
\r
716 updateApp(null, newOnboardingApp, fieldsValidator, user);
\r
718 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
\r
721 return fieldsValidator;
\r
725 public FieldsValidator deleteOnboardingApp(EPUser user, Long appid) {
\r
726 FieldsValidator fieldsValidator = new FieldsValidator();
\r
727 if (!adminRolesService.isSuperAdmin(user)) {
\r
728 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_FORBIDDEN);
\r
729 return fieldsValidator;
\r
731 Boolean result = false;
\r
732 Session localSession = null;
\r
733 Transaction transaction = null;
\r
735 localSession = sessionFactory.openSession();
\r
736 transaction = localSession.beginTransaction();
\r
738 // 1) Remove the URL for any functional menu item associated with
\r
740 String sql = "UPDATE fn_menu_functional m, fn_menu_functional_roles mr SET m.url='' "
\r
741 + " WHERE m.menu_id=mr.menu_id " + " AND mr.app_id='" + appid + "'";
\r
743 Query query = localSession.createSQLQuery(sql);
\r
744 query.executeUpdate();
\r
746 // Remove any favorites associated with a menu item that is
\r
747 // associated with this app
\r
748 sql = "Delete from fn_menu_favorites " + " using fn_menu_favorites inner join fn_menu_functional_roles "
\r
749 + " where fn_menu_functional_roles.app_id='" + appid + "' "
\r
750 + " AND fn_menu_functional_roles.menu_id=fn_menu_favorites.menu_id";
\r
752 query = localSession.createSQLQuery(sql);
\r
753 query.executeUpdate();
\r
755 // Remove all role, appid records from fn_menu_functional_role
\r
756 // that are associated with this app
\r
757 sql = "delete from fn_menu_functional_roles where app_id='" + appid + "'";
\r
759 query = localSession.createSQLQuery(sql);
\r
760 query.executeUpdate();
\r
762 // Remove all records from fn_user_role associated with this app
\r
763 sql = "delete from fn_user_role where app_id='" + appid + "'";
\r
765 query = localSession.createSQLQuery(sql);
\r
766 query.executeUpdate();
\r
768 // Remove any widgets associated with this app
\r
769 sql = "delete from ep_widget_catalog_role where app_id='" + appid + "'";
\r
771 query = localSession.createSQLQuery(sql);
\r
772 query.executeUpdate();
\r
774 // Remove any roles associated with this app
\r
775 sql = "delete from ep_role_notification " + " using ep_role_notification inner join fn_role "
\r
776 + " where fn_role.app_id='" + appid + "' " + " and ep_role_notification.role_id= fn_role.role_id";
\r
778 query = localSession.createSQLQuery(sql);
\r
779 query.executeUpdate();
\r
781 // Remove all records from fn_role associated with this app
\r
782 sql = "delete from fn_role where app_id='" + appid + "'";
\r
784 query = localSession.createSQLQuery(sql);
\r
785 query.executeUpdate();
\r
787 // Remove app contact us entries
\r
788 sql = "delete from fn_app_contact_us where app_id='" + appid + "'";
\r
790 query = localSession.createSQLQuery(sql);
\r
791 query.executeUpdate();
\r
793 // Remove any widgets associated with this app
\r
794 sql = "delete from fn_widget where app_id='" + appid + "'";
\r
796 query = localSession.createSQLQuery(sql);
\r
797 query.executeUpdate();
\r
799 // Remove rows in the app personalization selection table
\r
800 sql = "delete from fn_pers_user_app_sel where app_id='" + appid + "'";
\r
802 query = localSession.createSQLQuery(sql);
\r
803 query.executeUpdate();
\r
805 // Remove rows in the app personalization sort table
\r
806 sql = "delete from ep_pers_user_app_man_sort where app_id='" + appid + "'";
\r
808 query = localSession.createSQLQuery(sql);
\r
809 query.executeUpdate();
\r
812 sql = "delete from fn_app where app_id='" + appid + "'";
\r
814 query = localSession.createSQLQuery(sql);
\r
815 query.executeUpdate();
\r
817 transaction.commit();
\r
819 } catch (Exception e) {
\r
820 logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);
\r
821 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError);
\r
822 EcompPortalUtils.rollbackTransaction(transaction, "deleteOnboardingApp rollback, exception = " + e);
\r
824 EcompPortalUtils.closeLocalSession(localSession, "deleteOnboardingApp");
\r
827 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
\r
829 return fieldsValidator;
\r
832 private static Object syncRests = new Object();
\r
834 // An app has been enabled/disabled. Must enable/disable all associated
\r
835 // functional menu items.
\r
836 private void setFunctionalMenuItemsEnabled(Session localSession, Boolean enabled, Long appId) {
\r
837 String active_yn = enabled ? "Y" : "N";
\r
838 String sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn "
\r
839 + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "
\r
840 + " AND r.app_id = '" + appId + "' ";
\r
842 @SuppressWarnings("unchecked")
\r
843 List<FunctionalMenuItem> menuItems = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);
\r
844 for (FunctionalMenuItem menuItem : menuItems) {
\r
845 FunctionalMenuItem myMenuItem = (FunctionalMenuItem) localSession.get(FunctionalMenuItem.class,
\r
847 myMenuItem.active_yn = active_yn;
\r
848 localSession.save(myMenuItem);
\r
852 // Attention! If (appId == null) we use this function to create application
\r
853 // otherwise we use it to modify existing application
\r
854 private void updateApp(Long appId, OnboardingApp onboardingApp, FieldsValidator fieldsValidator, EPUser user) {
\r
855 logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering updateApp");
\r
856 // Separate out the code for a restricted app, since it doesn't need any
\r
857 // of the UEB code.
\r
858 if (onboardingApp.restrictedApp) {
\r
859 boolean result = false;
\r
860 Session localSession = null;
\r
861 Transaction transaction = null;
\r
863 localSession = sessionFactory.openSession();
\r
864 transaction = localSession.beginTransaction();
\r
866 if (appId == null) {
\r
869 app = (EPApp) localSession.get(EPApp.class, appId);
\r
870 if (app == null || app.getId() == null) { // App is already
\r
872 transaction.commit();
\r
873 localSession.close();
\r
874 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);
\r
878 createAppFromOnboarding(app, onboardingApp, localSession);
\r
879 localSession.saveOrUpdate(app);
\r
880 // Enable or disable all menu items associated with this app
\r
881 setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);
\r
882 transaction.commit();
\r
884 } catch (Exception e) {
\r
885 EcompPortalUtils.rollbackTransaction(transaction,
\r
886 "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));
\r
888 EcompPortalUtils.closeLocalSession(localSession, "updateApp");
\r
891 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
\r
895 synchronized (syncRests) {
\r
896 boolean result = false;
\r
897 Session localSession = null;
\r
898 Transaction transaction = null;
\r
900 localSession = sessionFactory.openSession();
\r
901 transaction = localSession.beginTransaction();
\r
903 if (appId == null) {
\r
905 // -------------------------------------------------------------------------------------------
\r
906 // Register this App with the UEB communication server.
\r
908 // the App's unique mailbox/topic
\r
909 // name and keys to the FN_APP table. The App's mailbox
\r
911 // keys will be visible to the
\r
912 // admin on the ECOMP portal.
\r
913 // -------------------------------------------------------------------------------------------
\r
914 TopicManager topicManager = new TopicManager();
\r
915 final CambriaIdentityManager im = new CambriaClientBuilders.IdentityManagerBuilder()
\r
916 .usingHosts(Helper.uebUrlList()).build();
\r
917 com.att.nsa.apiClient.credentials.ApiCredential credential = im.createApiKey(user.getEmail(),
\r
918 "ECOMP Portal Owner");
\r
919 String appKey = credential.getApiKey();
\r
920 String appSecret = credential.getApiSecret();
\r
921 String appMailboxName = null;
\r
923 int maxNumAttemptsToCreateATopic = 3;
\r
924 boolean successfullyCreatedMailbox = false;
\r
925 for (int i = 0; i < maxNumAttemptsToCreateATopic; i++) {
\r
926 appMailboxName = "ECOMP-PORTAL-OUTBOX-" + (int) (Math.random() * 100000.0);
\r
929 topicManager.createTopic(
\r
930 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
\r
931 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),
\r
932 appMailboxName, "ECOMP outbox for app" + onboardingApp.name);
\r
933 successfullyCreatedMailbox = true;
\r
934 logger.debug(EELFLoggerDelegate.debugLogger,
\r
935 "Successfully created " + appMailboxName + " for App " + onboardingApp.name);
\r
936 logger.debug(EELFLoggerDelegate.debugLogger, " Key = " + appKey + " Secret = "
\r
937 + appSecret + " generated using = " + user.getEmail());
\r
939 } catch (HttpException e) {
\r
940 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebConnectionError, e);
\r
941 if (e.getStatusCode() == 409) {
\r
942 logger.error(EELFLoggerDelegate.errorLogger, "Topic/mailbox " + appMailboxName
\r
943 + " already exists. Will try using a different name", e);
\r
945 logger.error(EELFLoggerDelegate.errorLogger, "HttpException when onboarding App: ",
\r
951 if (successfullyCreatedMailbox) {
\r
952 onboardingApp.setUebTopicName(appMailboxName);
\r
953 onboardingApp.setUebKey(appKey);
\r
954 onboardingApp.setUebSecret(appSecret);
\r
958 * EP is a publisher to this App's new mailbox
\r
960 topicManager.addPublisher(
\r
961 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
\r
962 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),
\r
963 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
\r
967 * This App is a subscriber of its own mailbox
\r
969 topicManager.addSubscriber(
\r
970 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
\r
971 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,
\r
975 * This App is a publisher to EP
\r
977 topicManager.addPublisher(
\r
978 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
\r
979 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,
\r
980 PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME));
\r
981 } catch (HttpException | CambriaApiException | IOException e) {
\r
982 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);
\r
983 logger.error(EELFLoggerDelegate.errorLogger,
\r
984 "Error when configuring Publisher/Subscriber for App's new mailbox", e);
\r
985 transaction.commit();
\r
986 localSession.close();
\r
987 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
\r
991 transaction.commit();
\r
992 localSession.close();
\r
993 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
\r
997 app = (EPApp) localSession.get(EPApp.class, appId);
\r
998 if (app == null || app.getId() == null) {
\r
999 // App is already deleted!
\r
1000 transaction.commit();
\r
1001 localSession.close();
\r
1002 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);
\r
1006 logger.debug(EELFLoggerDelegate.debugLogger, "LR: about to call createAppFromOnboarding");
\r
1007 createAppFromOnboarding(app, onboardingApp, localSession);
\r
1008 logger.debug(EELFLoggerDelegate.debugLogger,
\r
1009 "LR: updateApp: finished calling createAppFromOnboarding");
\r
1010 localSession.saveOrUpdate(app);
\r
1011 logger.debug(EELFLoggerDelegate.debugLogger,
\r
1012 "LR: updateApp: finished calling localSession.saveOrUpdate");
\r
1013 // Enable or disable all menu items associated with this app
\r
1014 setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);
\r
1015 logger.debug(EELFLoggerDelegate.debugLogger,
\r
1016 "LR: updateApp: finished calling setFunctionalMenuItemsEnabled");
\r
1017 transaction.commit();
\r
1018 logger.debug(EELFLoggerDelegate.debugLogger, "LR: updateApp: finished calling transaction.commit");
\r
1019 epUebHelper.addPublisher(app);
\r
1020 logger.debug(EELFLoggerDelegate.debugLogger,
\r
1021 "LR: updateApp: finished calling epUebHelper.addPublisher");
\r
1023 } catch (Exception e) {
\r
1024 logger.error(EELFLoggerDelegate.errorLogger, "updateApp failed", e);
\r
1025 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);
\r
1026 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
\r
1027 EcompPortalUtils.rollbackTransaction(transaction,
\r
1028 "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));
\r
1030 EcompPortalUtils.closeLocalSession(localSession, "updateApp");
\r
1033 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
\r
1040 * Populates a transport model of the application from a database row model.
\r
1041 * Leaves out the thumbnail because the FE fetches images via a different
\r
1045 * Model of database row
\r
1046 * @param onboardingApp
\r
1047 * Model for transport as JSON
\r
1050 public void createOnboardingFromApp(EPApp app, OnboardingApp onboardingApp) {
\r
1051 onboardingApp.id = app.getId();
\r
1052 onboardingApp.name = app.getName();
\r
1053 onboardingApp.imageUrl = app.getImageUrl();
\r
1054 onboardingApp.description = app.getDescription();
\r
1055 onboardingApp.notes = app.getNotes();
\r
1056 onboardingApp.url = app.getUrl();
\r
1057 onboardingApp.alternateUrl = app.getAlternateUrl();
\r
1058 onboardingApp.restUrl = app.getAppRestEndpoint();
\r
1059 onboardingApp.isOpen = app.getOpen();
\r
1060 onboardingApp.isEnabled = app.getEnabled();
\r
1061 onboardingApp.username = app.getUsername();
\r
1062 onboardingApp.appPassword = decryptedPassword(app.getAppPassword(), app);
\r
1063 onboardingApp.uebTopicName = app.getUebTopicName();
\r
1064 onboardingApp.uebKey = app.getUebKey();
\r
1065 onboardingApp.uebSecret = app.getUebSecret();
\r
1066 onboardingApp.setRestrictedApp(app.isRestrictedApp());
\r
1067 // if (app.getThumbnail() != null)
\r
1068 // onboardingApp.thumbnail = new
\r
1069 // String(Base64.getEncoder().encode(app.getThumbnail()));
\r
1073 * Creates a database object for an application from an uploaded transport
\r
1074 * model. Must decode the thumbnail, if any.
\r
1077 * @param onboardingApp
\r
1078 * @param localSession
\r
1079 * @return The first argument.
\r
1081 protected EPApp createAppFromOnboarding(EPApp app, OnboardingApp onboardingApp, Session localSession) {
\r
1082 app.setName(onboardingApp.name);
\r
1083 app.setDescription(onboardingApp.description);
\r
1084 app.setNotes(onboardingApp.notes);
\r
1085 app.setUrl(onboardingApp.url);
\r
1086 app.setAlternateUrl(onboardingApp.alternateUrl);
\r
1087 app.setAppRestEndpoint(onboardingApp.restUrl);
\r
1088 app.setOpen(onboardingApp.isOpen);
\r
1089 app.setEnabled(onboardingApp.isEnabled);
\r
1090 app.setUsername(onboardingApp.username);
\r
1091 app.setAppPassword(this.encryptedPassword(onboardingApp.appPassword, app));
\r
1092 app.setUebTopicName(onboardingApp.uebTopicName);
\r
1093 app.setUebKey(onboardingApp.uebKey);
\r
1094 app.setUebSecret(onboardingApp.uebSecret);
\r
1095 app.setRestrictedApp(onboardingApp.restrictedApp);
\r
1096 if (!StringUtils.isEmpty(onboardingApp.thumbnail)) {
\r
1097 logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: onboarding thumbnail is NOT empty");
\r
1098 String[] splitBase64Thumbnail = onboardingApp.thumbnail.split("base64,");
\r
1099 logger.debug(EELFLoggerDelegate.debugLogger,
\r
1100 "createAppFromOnboarding: length of splitBase64Thumbnail: " + splitBase64Thumbnail.length);
\r
1101 if (splitBase64Thumbnail.length > 1) {
\r
1102 // This occurs when we have a new image, not an existing image
\r
1103 byte[] decodedImage = Base64.getDecoder().decode(splitBase64Thumbnail[1].getBytes());
\r
1104 logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: finished calling decode");
\r
1105 // This is basically a boolean indicator that an image is
\r
1107 app.setImageUrl(constructImageName(onboardingApp));
\r
1108 app.setThumbnail(decodedImage);
\r
1110 } else if (app.getThumbnail() != null) {
\r
1111 // The thumbnail that came in from the json is empty; the previous
\r
1112 // thumbnail is NOT empty. Must delete it.
\r
1113 logger.debug(EELFLoggerDelegate.debugLogger,
\r
1114 "createAppFromOnboarding: onboarding thumbnail is empty; db thumbnail is NOT null");
\r
1115 app.setImageUrl(null);
\r
1116 app.setThumbnail(null);
\r
1118 logger.debug(EELFLoggerDelegate.debugLogger,
\r
1119 "createAppFromOnboarding: onboarding thumbnail is empty; db thumbnail is null");
\r
1124 protected String constructImageName(OnboardingApp onboardingApp) {
\r
1125 return "portal_" + String.valueOf(onboardingApp.url.hashCode() + "_" + (int) (Math.random() * 100000.0))
\r
1129 // Don't encrypt or decrypt the password if it is null or the empty string
\r
1130 private String decryptedPassword(String encryptedAppPwd, EPApp app) {
\r
1131 String result = "";
\r
1132 if (encryptedAppPwd != null & encryptedAppPwd.length() > 0) {
\r
1134 result = CipherUtil.decrypt(encryptedAppPwd,
\r
1135 SystemProperties.getProperty(SystemProperties.Decryption_Key));
\r
1136 } catch (Exception e) {
\r
1137 logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed for app " + app.getName(), e);
\r
1143 protected String encryptedPassword(String decryptedAppPwd, EPApp app) {
\r
1144 String result = "";
\r
1145 if (decryptedAppPwd != null & decryptedAppPwd.length() > 0) {
\r
1147 result = CipherUtil.encrypt(decryptedAppPwd,
\r
1148 SystemProperties.getProperty(SystemProperties.Decryption_Key));
\r
1149 } catch (Exception e) {
\r
1150 logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword failed for app " + app.getName(), e);
\r
1156 @SuppressWarnings("unchecked")
\r
1158 public FieldsValidator saveWidgetsSortManual(List<EPWidgetsSortPreference> widgetsSortManual, EPUser user) {
\r
1159 FieldsValidator fieldsValidator = new FieldsValidator();
\r
1160 final Map<String, Long> params = new HashMap<>();
\r
1161 List<EPWidgetsManualSortPreference> epManualWidgets = new ArrayList<EPWidgetsManualSortPreference>();
\r
1164 params.put("userId", user.getId());
\r
1165 epManualWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);
\r
1166 Map<Long, EPWidgetsManualSortPreference> existingWidgetsIds = new HashMap<Long, EPWidgetsManualSortPreference>();
\r
1167 for (EPWidgetsManualSortPreference userWidgetManualPref : epManualWidgets) {
\r
1168 existingWidgetsIds.put(userWidgetManualPref.getWidgetId(), userWidgetManualPref);
\r
1170 for (EPWidgetsSortPreference epWidgetsManPref : widgetsSortManual) {
\r
1171 if (epWidgetsManPref.getWidgetid() != null) {
\r
1172 Long widgetid = epWidgetsManPref.getWidgetid();
\r
1173 if (existingWidgetsIds.containsKey(widgetid)) {
\r
1174 EPWidgetsManualSortPreference epWidgetsManualSort = existingWidgetsIds.get(widgetid);
\r
1175 epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());
\r
1176 epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
\r
1177 epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
\r
1178 epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
\r
1179 HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
\r
1180 additionalUpdateParam.put("userId", epWidgetsManualSort.getUserId());
\r
1181 dataAccessService.saveDomainObject(epWidgetsManualSort, additionalUpdateParam);
\r
1183 EPWidgetsManualSortPreference epWidgetsManualSort = new EPWidgetsManualSortPreference();
\r
1184 epWidgetsManualSort.setWidgetId(epWidgetsManPref.getWidgetid());
\r
1185 epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());
\r
1186 epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
\r
1187 epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
\r
1188 epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
\r
1189 epWidgetsManualSort.setUserId(Ints.checkedCast(user.getId()));
\r
1190 dataAccessService.saveDomainObject(epWidgetsManualSort, null);
\r
1192 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
\r
1195 } catch (Exception e) {
\r
1196 logger.error(EELFLoggerDelegate.errorLogger, "saveWidgetsSortManual failed", e);
\r
1197 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
\r
1199 return fieldsValidator;
\r
1202 @SuppressWarnings("unchecked")
\r
1204 public FieldsValidator deleteUserWidgetSortPref(List<EPWidgetsSortPreference> delWidgetSortPref, EPUser user) {
\r
1205 FieldsValidator fieldsValidator = new FieldsValidator();
\r
1206 final Map<String, Long> params = new HashMap<>();
\r
1207 List<EPWidgetsManualSortPreference> epWidgets = new ArrayList<EPWidgetsManualSortPreference>();
\r
1209 params.put("userId", user.getId());
\r
1210 epWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);
\r
1211 Map<Long, EPWidgetsManualSortPreference> existingWidgetIds = new HashMap<Long, EPWidgetsManualSortPreference>();
\r
1212 for (EPWidgetsManualSortPreference userWidgetSortPref : epWidgets) {
\r
1213 existingWidgetIds.put(userWidgetSortPref.getWidgetId(), userWidgetSortPref);
\r
1215 for (EPWidgetsSortPreference delEpWidgetsManPref : delWidgetSortPref) {
\r
1216 if (delEpWidgetsManPref.getWidgetid() != null) {
\r
1217 Long widgetId = delEpWidgetsManPref.getWidgetid();
\r
1218 if (existingWidgetIds.containsKey(widgetId)) {
\r
1219 dataAccessService.deleteDomainObjects(EPWidgetsManualSortPreference.class,
\r
1220 "widget_id=" + widgetId + " AND user_id=" + user.getId(), null);
\r
1222 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
\r
1225 } catch (Exception e) {
\r
1226 logger.error(EELFLoggerDelegate.errorLogger, "deleteUserWidgetSortPref failed", e);
\r
1227 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
\r
1229 return fieldsValidator;
\r
1233 * This Method Stores the Sort Order of User Apps by Sort Manual Preference
\r
1235 * @param: appsSortManual--contains User Apps Data
\r
1237 * @param: user--contains LoggedIn User Data
\r
1239 @SuppressWarnings("unchecked")
\r
1241 public FieldsValidator saveAppsSortManual(List<EPAppsManualPreference> appsSortManual, EPUser user) {
\r
1242 FieldsValidator fieldsValidator = new FieldsValidator();
\r
1243 final Map<String, Long> params = new HashMap<>();
\r
1244 List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();
\r
1247 params.put("userId", user.getId());
\r
1248 epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);
\r
1249 Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();
\r
1250 for (EPUserAppsManualSortPreference userAppManualPref : epManualApps) {
\r
1251 existingAppIds.put(userAppManualPref.getAppId(), userAppManualPref);
\r
1253 for (EPAppsManualPreference epAppsManPref : appsSortManual) {
\r
1254 if (epAppsManPref.getAppid() != null) {
\r
1255 Long appid = epAppsManPref.getAppid();
\r
1256 if (existingAppIds.containsKey(appid)) {
\r
1257 EPUserAppsManualSortPreference epAppsManualSort = existingAppIds.get(appid);
\r
1259 .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
\r
1260 HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
\r
1261 additionalUpdateParam.put("userId", epAppsManualSort.getUserId());
\r
1262 dataAccessService.saveDomainObject(epAppsManualSort, additionalUpdateParam);
\r
1264 EPUserAppsManualSortPreference epAppsManualSort = new EPUserAppsManualSortPreference();
\r
1265 epAppsManualSort.setAppId(epAppsManPref.getAppid());
\r
1267 .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
\r
1268 epAppsManualSort.setUserId(Ints.checkedCast(user.getId()));
\r
1269 dataAccessService.saveDomainObject(epAppsManualSort, null);
\r
1271 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
\r
1274 } catch (Exception e) {
\r
1275 logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortManual failed", e);
\r
1276 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
\r
1278 return fieldsValidator;
\r
1284 * @see org.openecomp.portalapp.portal.service.EPAppService#
\r
1285 * deleteUserAppSortManual(java.lang.String,
\r
1286 * org.openecomp.portalapp.portal.domain.EPUser)
\r
1288 @SuppressWarnings("unchecked")
\r
1290 public FieldsValidator deleteUserAppSortManual(EPDeleteAppsManualSortPref delAppSortManual, EPUser user) {
\r
1291 FieldsValidator fieldsValidator = new FieldsValidator();
\r
1292 final Map<String, Long> params = new HashMap<>();
\r
1293 List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();
\r
1295 params.put("userId", user.getId());
\r
1296 epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);
\r
1297 Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();
\r
1298 for (EPUserAppsManualSortPreference userAppPref : epManualApps) {
\r
1299 existingAppIds.put(userAppPref.getAppId(), userAppPref);
\r
1301 if (existingAppIds.containsKey(delAppSortManual.getAppId()) && !delAppSortManual.isSelect()) {
\r
1302 dataAccessService.deleteDomainObjects(EPUserAppsManualSortPreference.class,
\r
1303 "app_id=" + delAppSortManual.getAppId() + " AND user_id=" + user.getId(), null);
\r
1304 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
\r
1306 } catch (Exception e) {
\r
1307 logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);
\r
1308 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
\r
1310 return fieldsValidator;
\r
1313 @SuppressWarnings("unchecked")
\r
1315 public FieldsValidator saveAppsSortPreference(EPAppsSortPreference appsSortPreference, EPUser user) {
\r
1316 FieldsValidator fieldsValidator = new FieldsValidator();
\r
1317 final Map<String, Long> params = new HashMap<>();
\r
1318 List<EPUserAppsSortPreference> epSortTypes = new ArrayList<EPUserAppsSortPreference>();
\r
1319 EPUserAppsSortPreference usrSortPr = null;
\r
1321 params.put("userId", user.getId());
\r
1322 epSortTypes = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);
\r
1323 if (epSortTypes.size() == 0) {
\r
1324 usrSortPr = new EPUserAppsSortPreference();
\r
1325 usrSortPr.setUserId(Ints.checkedCast(user.getId()));
\r
1326 usrSortPr.setSortPref(appsSortPreference.getValue());
\r
1327 dataAccessService.saveDomainObject(usrSortPr, null);
\r
1328 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
\r
1330 usrSortPr = epSortTypes.get(0);
\r
1331 usrSortPr.setSortPref(appsSortPreference.getValue());
\r
1332 HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
\r
1333 additionalUpdateParam.put("userId", usrSortPr.getUserId());
\r
1334 dataAccessService.saveDomainObject(usrSortPr, additionalUpdateParam);
\r
1335 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
\r
1337 } catch (Exception e) {
\r
1338 logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortPreference failed", e);
\r
1339 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
\r
1341 return fieldsValidator;
\r
1344 @SuppressWarnings("unchecked")
\r
1346 public String getUserAppsSortTypePreference(EPUser user) {
\r
1347 final Map<String, Long> params = new HashMap<>();
\r
1348 List<EPUserAppsSortPreference> userSortPrefs = new ArrayList<EPUserAppsSortPreference>();
\r
1350 params.put("userId", user.getId());
\r
1351 userSortPrefs = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);
\r
1352 if (userSortPrefs.size() > 0)
\r
1353 return userSortPrefs.get(0).getSortPref();
\r
1356 } catch (Exception e) {
\r
1357 logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);
\r
1364 public List<EPApp> getUserRemoteApps(String id) {
\r
1365 throw new RuntimeException(" Cannot be called from parent class");
\r