[PORTAL-16 PORTAL-18] Widget ms; staging
[portal.git] / ecomp-portal-BE-common / src / main / java / org / openecomp / portalapp / portal / service / EPAppCommonServiceImpl.java
index a5b15e2..4ef6e89 100644 (file)
-/*-\r
- * ================================================================================\r
- * ECOMP Portal\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ================================================================================\r
- */\r
-package org.openecomp.portalapp.portal.service;\r
-\r
-import java.io.IOException;\r
-import java.util.ArrayList;\r
-import java.util.Base64;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import javax.annotation.PostConstruct;\r
-import javax.servlet.http.HttpServletResponse;\r
-\r
-import org.apache.commons.lang.StringUtils;\r
-import org.hibernate.Query;\r
-import org.hibernate.Session;\r
-import org.hibernate.SessionFactory;\r
-import org.hibernate.Transaction;\r
-import org.openecomp.portalapp.portal.domain.AdminUserApp;\r
-import org.openecomp.portalapp.portal.domain.AdminUserApplications;\r
-import org.openecomp.portalapp.portal.domain.AppIdAndNameTransportModel;\r
-import org.openecomp.portalapp.portal.domain.AppsResponse;\r
-import org.openecomp.portalapp.portal.domain.EPApp;\r
-import org.openecomp.portalapp.portal.domain.EPUser;\r
-import org.openecomp.portalapp.portal.domain.EPUserAppsManualSortPreference;\r
-import org.openecomp.portalapp.portal.domain.EPUserAppsSortPreference;\r
-import org.openecomp.portalapp.portal.domain.EPWidgetsManualSortPreference;\r
-import org.openecomp.portalapp.portal.domain.EcompApp;\r
-import org.openecomp.portalapp.portal.domain.UserRole;\r
-import org.openecomp.portalapp.portal.domain.UserRoles;\r
-import org.openecomp.portalapp.portal.ecomp.model.AppCatalogItem;\r
-import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;\r
-import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;\r
-import org.openecomp.portalapp.portal.transport.EPAppsManualPreference;\r
-import org.openecomp.portalapp.portal.transport.EPAppsSortPreference;\r
-import org.openecomp.portalapp.portal.transport.EPDeleteAppsManualSortPref;\r
-import org.openecomp.portalapp.portal.transport.EPWidgetsSortPreference;\r
-import org.openecomp.portalapp.portal.transport.FieldsValidator;\r
-import org.openecomp.portalapp.portal.transport.FunctionalMenuItem;\r
-import org.openecomp.portalapp.portal.transport.LocalRole;\r
-import org.openecomp.portalapp.portal.transport.OnboardingApp;\r
-import org.openecomp.portalapp.portal.ueb.EPUebHelper;\r
-import org.openecomp.portalapp.portal.utils.EPCommonSystemProperties;\r
-import org.openecomp.portalapp.portal.utils.EcompPortalUtils;\r
-import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
-import org.openecomp.portalsdk.core.onboarding.ueb.Helper;\r
-import org.openecomp.portalsdk.core.onboarding.ueb.TopicManager;\r
-import org.openecomp.portalsdk.core.onboarding.util.CipherUtil;\r
-import org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants;\r
-import org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties;\r
-import org.openecomp.portalsdk.core.service.DataAccessService;\r
-import org.openecomp.portalsdk.core.util.SystemProperties;\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-\r
-import com.att.nsa.apiClient.http.HttpException;\r
-import com.att.nsa.cambria.client.CambriaClient.CambriaApiException;\r
-import com.att.nsa.cambria.client.CambriaClientBuilders;\r
-import com.att.nsa.cambria.client.CambriaIdentityManager;\r
-import com.google.common.primitives.Ints;\r
-\r
-public class EPAppCommonServiceImpl implements EPAppService {\r
-\r
-       protected String ECOMP_APP_ID = "1";\r
-       protected String SUPER_ADMIN_ROLE_ID = "1";\r
-       protected String ACCOUNT_ADMIN_ROLE_ID = "999";\r
-       protected String RESTRICTED_APP_ROLE_ID = "900";\r
-\r
-       private static final String urlField = "url";\r
-       private static final String nameField = "name";\r
-\r
-       private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPAppCommonServiceImpl.class);\r
-\r
-       @Autowired\r
-       AdminRolesService adminRolesService;\r
-       @Autowired\r
-       private SessionFactory sessionFactory;\r
-       @Autowired\r
-       private DataAccessService dataAccessService;\r
-       @Autowired\r
-       EPUebHelper epUebHelper;\r
-\r
-       @PostConstruct\r
-       private void init() {\r
-               SUPER_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.SYS_ADMIN_ROLE_ID);\r
-               ACCOUNT_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID);\r
-               ECOMP_APP_ID = SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID);\r
-               RESTRICTED_APP_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.RESTRICTED_APP_ROLE_ID);\r
-       }\r
-\r
-       @Override\r
-       public List<EPApp> getUserAsAdminApps(EPUser user) {\r
-               if (adminRolesService.isAccountAdmin(user)) {\r
-                       String sql = "SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID=FN_APP.APP_ID where "\r
-                                       + "FN_USER_ROLE.USER_ID=" + user.getId() + " AND FN_USER_ROLE.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID\r
-                                       + " AND FN_APP.ENABLED = 'Y'";\r
-                       logQuery(sql);\r
-                       try {\r
-                               @SuppressWarnings("unchecked")\r
-                               List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);\r
-                               return adminApps;\r
-                       } catch (Exception e) {\r
-                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
-                               return null;\r
-                       }\r
-               } else {\r
-                       logger.error(EELFLoggerDelegate.errorLogger,\r
-                                       "getUserAsAdminApps: only Account Admin may invoke this function!");\r
-                       return new ArrayList<EPApp>();\r
-               }\r
-       }\r
-\r
-       @Override\r
-       public List<EPApp> getUserByOrgUserIdAsAdminApps(String orgUserId) {\r
-               String format = "SELECT * FROM FN_APP app INNER JOIN FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "\r
-                               + "INNER JOIN FN_USER user on user.USER_ID = userrole.USER_ID "\r
-                               + "WHERE user.org_user_id = '%s' AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID\r
-                               + " AND FN_APP.ENABLED = 'Y'";\r
-\r
-               String sql = String.format(format, orgUserId);\r
-               logQuery(sql);\r
-\r
-               try {\r
-                       @SuppressWarnings("unchecked")\r
-                       List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);\r
-                       return adminApps;\r
-               } catch (Exception e) {\r
-                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
-                       return null;\r
-               }\r
-       }\r
-\r
-       @Override\r
-       public List<EPApp> getAppsFullList() {\r
-               @SuppressWarnings("unchecked")\r
-               List<EPApp> apps = dataAccessService.getList(EPApp.class, null);\r
-               return apps;\r
-       }\r
-\r
-       @Override\r
-       public List<EcompApp> getEcompAppAppsFullList() {\r
-               return transformAppsToEcompApps(getAppsFullList());\r
-       }\r
-\r
-       @Override\r
-       public List<EcompApp> transformAppsToEcompApps(List<EPApp> appsList) {\r
-               List<EcompApp> ecompAppList = new ArrayList<EcompApp>();\r
-               for (EPApp app : appsList) {\r
-                       EcompApp ecompApp = new EcompApp();\r
-                       ecompApp.setId(app.getId());\r
-                       ecompApp.setName(app.getName());\r
-                       ecompApp.setImageUrl(app.getImageUrl());\r
-                       ecompApp.setDescription(app.getDescription());\r
-                       ecompApp.setNotes(app.getNotes());\r
-                       ecompApp.setUrl(app.getUrl());\r
-                       ecompApp.setAlternateUrl(app.getAlternateUrl());\r
-                       ecompApp.setUebTopicName(app.getUebTopicName());\r
-                       ecompApp.setUebKey(app.getUebKey());\r
-                       ecompApp.setUebSecret(app.getUebSecret());\r
-                       ecompApp.setEnabled(app.getEnabled());\r
-                       ecompApp.setRestrictedApp(app.isRestrictedApp());\r
-                       ecompAppList.add(ecompApp);\r
-               }\r
-               return ecompAppList;\r
-       }\r
-\r
-       @Override\r
-       public EPApp getApp(Long appId) {\r
-               try {\r
-                       @SuppressWarnings("unchecked")\r
-                       List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id = " + appId, null, null);\r
-                       return (apps.size() > 0) ? apps.get(0) : null;\r
-               } catch (Exception e) {\r
-                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
-                       return null;\r
-               }\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public List<AppIdAndNameTransportModel> getAdminApps(EPUser user) {\r
-               if (adminRolesService.isAccountAdmin(user)) {\r
-                       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
-                                       + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID\r
-                                       + " AND (app.ENABLED = 'Y' OR app.APP_ID=1)";\r
-                       String sql = String.format(format, user.getId());\r
-                       // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND\r
-                       // app.APP_REST_ENDPOINT <> ''";\r
-                       logQuery(sql);\r
-                       try {\r
-                               return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);\r
-                       } catch (Exception e) {\r
-                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
-                               logger.error(EELFLoggerDelegate.errorLogger,\r
-                                               "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);\r
-                       }\r
-               }\r
-               return new ArrayList<AppIdAndNameTransportModel>();\r
-       }\r
-\r
-       @Override\r
-       public EPApp getAppDetail(String appName) {\r
-               final Map<String, String> params = new HashMap<String, String>();\r
-               try {\r
-                       params.put("appName", appName);\r
-                       @SuppressWarnings("unchecked")\r
-                       List<EPApp> apps = (List<EPApp>) dataAccessService.executeNamedQuery("getAppDetails", params, null);\r
-                       return (apps.size() > 0) ? apps.get(0) : null;\r
-               } catch (Exception e) {\r
-                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
-                       return null;\r
-               }\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(EPUser user) {\r
-               if (adminRolesService.isSuperAdmin(user) || adminRolesService.isAccountAdmin(user)) {\r
-                       String format = "";\r
-                       String sql = "";\r
-                       if (adminRolesService.isSuperAdmin(user)) {\r
-                               format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app "\r
-                                               + "where app.ENABLED = 'Y' AND app.app_type = 1";\r
-                       } else {\r
-                               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
-                                               + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID\r
-                                               + " AND app.ENABLED = 'Y' AND app.app_type = 1";\r
-                       }\r
-                       sql = String.format(format, user.getId());\r
-                       // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND\r
-                       // app.APP_REST_ENDPOINT <> ''";\r
-                       logQuery(sql);\r
-                       try {\r
-                               return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);\r
-                       } catch (Exception e) {\r
-                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
-                               logger.error(EELFLoggerDelegate.errorLogger,\r
-                                               "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);\r
-                       }\r
-               }\r
-               return new ArrayList<AppIdAndNameTransportModel>();\r
-       }\r
-\r
-       protected void logQuery(String sql) {\r
-               logger.debug(EELFLoggerDelegate.debugLogger, "logQuery: " + sql);\r
-       }\r
-\r
-       public DataAccessService getDataAccessService() {\r
-               return dataAccessService;\r
-       }\r
-\r
-       public void setDataAccessService(DataAccessService dataAccessService) {\r
-               this.dataAccessService = dataAccessService;\r
-       }\r
-\r
-       @Override\r
-       public List<AdminUserApplications> getAppsAdmins() {\r
-               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
-                               + "INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID "\r
-                               + "INNER JOIN fn_app apps ON apps.APP_ID = userrole.APP_ID " + "WHERE userrole.ROLE_ID = "\r
-                               + ACCOUNT_ADMIN_ROLE_ID + " AND (apps.ENABLED = 'Y' OR apps.APP_ID=1)";\r
-               logQuery(sql);\r
-               try {\r
-                       @SuppressWarnings("unchecked")\r
-                       List<AdminUserApp> adminApps = dataAccessService.executeSQLQuery(sql, AdminUserApp.class, null);\r
-                       // DataAccessService does not use generic types.\r
-                       return aggregateRowsResultsByUserId(adminApps);\r
-               } catch (Exception e) {\r
-                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
-                       return null;\r
-               }\r
-       }\r
-\r
-       private List<AdminUserApplications> aggregateRowsResultsByUserId(List<AdminUserApp> adminApps) {\r
-               HashMap<Long, AdminUserApplications> adminUserApplications = new HashMap<Long, AdminUserApplications>();\r
-               for (AdminUserApp app : adminApps) {\r
-                       Long userId = app.getUser_Id();\r
-                       if (adminUserApplications.get(userId) == null)\r
-                               adminUserApplications.put(userId, new AdminUserApplications(app));\r
-                       else\r
-                               adminUserApplications.get(userId).addApp(app.getAppId(), app.getAppName());\r
-               }\r
-               return new ArrayList<AdminUserApplications>(adminUserApplications.values());\r
-       }\r
-\r
-       @Override\r
-       public List<AppsResponse> getAllApps(Boolean all) {\r
-               // If all is true, return both active and inactive apps. Otherwise, just\r
-               // active apps.\r
-               @SuppressWarnings("unchecked")\r
-               // Sort the list by application name so the drop-down looks pretty.\r
-               List<EPApp> apps = all\r
-                               ? (List<EPApp>) dataAccessService.getList(EPApp.class, " where id != " + ECOMP_APP_ID, "name", null)\r
-                               : (List<EPApp>) dataAccessService.getList(EPApp.class,\r
-                                               " where ( enabled = 'Y' or id = " + ECOMP_APP_ID + ")", "name", null);\r
-\r
-               List<AppsResponse> appsModified = new ArrayList<AppsResponse>();\r
-               for (EPApp app : apps) {\r
-                       appsModified.add(new AppsResponse(app.getId(), app.getName(), app.isRestrictedApp(), app.getEnabled()));\r
-               }\r
-               return appsModified;\r
-       }\r
-\r
-       @Override\r
-       public UserRoles getUserProfile(String loginId) {\r
-               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
-                               + "INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID "\r
-                               + "INNER JOIN fn_role role ON role.ROLE_ID = userrole.ROLE_ID "\r
-                               + "WHERE user.org_user_id = \"%s\" and (userrole.app_id = 1 or role.role_id = " + ACCOUNT_ADMIN_ROLE_ID\r
-                               + ") ";\r
-               String sql = String.format(format, loginId);\r
-               logQuery(sql);\r
-               @SuppressWarnings("unchecked")\r
-               List<UserRole> userRoleList = dataAccessService.executeSQLQuery(sql, UserRole.class, null);\r
-               ArrayList<UserRoles> usersRolesList = aggregateUserProfileRowsResultsByRole(userRoleList);\r
-               if (usersRolesList == null || usersRolesList.size() < 1)\r
-                       return null;\r
-\r
-               return usersRolesList.get(0);\r
-       }\r
-\r
-       @Override\r
-       public UserRoles getUserProfileNormalized(EPUser user) {\r
-               // Check database.\r
-               UserRoles userAndRoles = getUserProfile(user.getLoginId());\r
-               // If no roles are defined, treat this user as a guest.\r
-               if (user.isGuest() || userAndRoles == null) {\r
-                       logger.debug(EELFLoggerDelegate.debugLogger, "getUserProfile: treating user {} as guest",\r
-                                       user.getLoginId());\r
-                       UserRole userRole = new UserRole();\r
-                       userRole.setUser_Id(user.getId());\r
-                       userRole.setOrgUserId(user.getLoginId());\r
-                       userRole.setFirstName(user.getFirstName());\r
-                       userRole.setLastName(user.getLastName());\r
-                       userRole.setRoleId(-1L);\r
-                       userRole.setRoleName("Guest");\r
-                       userRole.setUser_Id(-1L);\r
-                       userAndRoles = new UserRoles(userRole);\r
-               }\r
-\r
-               return userAndRoles;\r
-       }\r
-\r
-       protected ArrayList<UserRoles> aggregateUserProfileRowsResultsByRole(List<UserRole> userRoleList) {\r
-               HashMap<String, UserRoles> userRoles = new HashMap<String, UserRoles>();\r
-               for (UserRole user : userRoleList) {\r
-                       String orgUserId = user.getOrgUserId();\r
-                       if (userRoles.get(orgUserId) == null)\r
-                               userRoles.put(orgUserId, new UserRoles(user));\r
-                       else\r
-                               userRoles.get(orgUserId).addRole(user.getRoleName());\r
-               }\r
-               return new ArrayList<UserRoles>(userRoles.values());\r
-       }\r
-\r
-       private boolean isRestrictedApp(Long appId) {\r
-               EPApp app = getApp(appId);\r
-               return app.isRestrictedApp();\r
-       }\r
-\r
-       // For the functional menu edit\r
-       @Override\r
-       public List<LocalRole> getAppRoles(Long appId) {\r
-               String sql = "";\r
-               if (isRestrictedApp(appId)) {\r
-                       sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where ROLE_ID = '" + RESTRICTED_APP_ROLE_ID + "'";\r
-               } else {\r
-                       sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where APP_ID = '" + appId + "'";\r
-               }\r
-               logQuery(sql);\r
-               @SuppressWarnings("unchecked")\r
-               List<LocalRole> appRoles = dataAccessService.executeSQLQuery(sql, LocalRole.class, null);\r
-               return appRoles;\r
-       }\r
-\r
-       protected String userAppsQuery(EPUser user) {\r
-               StringBuilder query = new StringBuilder();\r
-               if (adminRolesService.isSuperAdmin(user)) {\r
-                       query.append("SELECT * FROM FN_APP where FN_APP.ENABLED = 'Y' ORDER BY APP_NAME");\r
-               } else {\r
-                       query.append("SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID = FN_APP.APP_ID where ");\r
-                       query.append(\r
-                                       "FN_USER_ROLE.USER_ID = " + user.getId() + " AND FN_USER_ROLE.ROLE_ID != " + SUPER_ADMIN_ROLE_ID);\r
-                       query.append(" AND FN_APP.ENABLED = 'Y'");\r
-               }\r
-               return query.toString();\r
-       }\r
-\r
-       protected FieldsValidator onboardingAppFieldsChecker(OnboardingApp onboardingApp) {\r
-               FieldsValidator fieldsValidator = new FieldsValidator();\r
-               if (onboardingApp.name == null || onboardingApp.name.length() == 0 || onboardingApp.url == null\r
-                               || onboardingApp.url.length() == 0 || onboardingApp.restrictedApp == null\r
-                               || onboardingApp.isOpen == null || onboardingApp.isEnabled == null\r
-                               || (onboardingApp.id != null && onboardingApp.id.equals(ECOMP_APP_ID))\r
-                               // For a normal app (appType==1), these fields must be filled\r
-                               // in.\r
-                               // For a restricted app (appType==2), they will be empty.\r
-                               || ((!onboardingApp.restrictedApp)\r
-                                               && (onboardingApp.username == null || onboardingApp.username.length() == 0\r
-                                                               || onboardingApp.appPassword == null || onboardingApp.appPassword.length() == 0))) {\r
-                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);\r
-               }\r
-               return fieldsValidator;\r
-       }\r
-\r
-       @Override\r
-       public List<EPApp> getUserApps(EPUser user) {\r
-               List<EPApp> openApps = getOpenApps();\r
-\r
-               if (user.isGuest()) {\r
-                       return openApps;\r
-               } else {\r
-                       String sql = userAppsQuery(user);\r
-                       logQuery(sql);\r
-\r
-                       // TreeSet<EPApp> distinctApps = new TreeSet<EPApp>();\r
-                       List<EPApp> appsList = new ArrayList<>();\r
-                       @SuppressWarnings("unchecked")\r
-                       List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);\r
-                       HashSet<EPApp> appSet = new HashSet<>();\r
-                       for (EPApp app : adminApps) {\r
-                               appSet.add(app);\r
-                               appsList.add(app);\r
-                       }\r
-\r
-                       for (EPApp app : openApps) {\r
-                               if (!appSet.contains(app))\r
-                                       appsList.add(app);\r
-                       }\r
-\r
-                       return appsList;\r
-               }\r
-       }\r
-\r
-       @Override\r
-       public List<EPApp> getPersAdminApps(EPUser user) {\r
-               final Map<String, Long> params = new HashMap<>();\r
-               params.put("userId", user.getId());\r
-               // Named query is stored in EP.hbm.xml, mapped to EPApp\r
-               @SuppressWarnings("unchecked")\r
-               List<EPApp> list = dataAccessService.executeNamedQuery("getPersAdminApps", params, null);\r
-               return list;\r
-       }\r
-\r
-       @Override\r
-       public List<EPApp> getPersUserApps(EPUser user) {\r
-               final Map<String, Long> params = new HashMap<>();\r
-               params.put("userId", user.getId());\r
-               // Named query is stored in EP.hbm.xml, mapped to EPApp\r
-               @SuppressWarnings("unchecked")\r
-               List<EPApp> list = dataAccessService.executeNamedQuery("getPersUserApps", params, null);\r
-               return list;\r
-       }\r
-\r
-       /*\r
-        * (non-Javadoc)\r
-        *\r
-        * @see\r
-        * org.openecomp.portalapp.portal.service.EPAppService#getAppCatalog(com.att\r
-        * .fusionapp.ecomp.portal.domain.EPUser)\r
-        */\r
-       @Override\r
-       public List<AppCatalogItem> getUserAppCatalog(EPUser user) {\r
-               final Map<String, Long> params = new HashMap<>();\r
-               params.put("userId", user.getId());\r
-               // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem\r
-               @SuppressWarnings("unchecked")\r
-               List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getUserAppCatalog", params, null);\r
-               return list;\r
-       }\r
-\r
-       /*\r
-        * (non-Javadoc)\r
-        *\r
-        * @see\r
-        * org.openecomp.portalapp.portal.service.EPAppService#getAdminAppCatalog(\r
-        * org.openecomp.portalapp.portal.domain.EPUser)\r
-        */\r
-       @Override\r
-       public List<AppCatalogItem> getAdminAppCatalog(EPUser user) {\r
-               final Map<String, Long> params = new HashMap<>();\r
-               params.put("userId", user.getId());\r
-               // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem\r
-               @SuppressWarnings("unchecked")\r
-               List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getAdminAppCatalog", params, null);\r
-               return list;\r
-       }\r
-\r
-       private List<EPApp> getOpenApps() {\r
-               @SuppressWarnings("unchecked")\r
-               List<EPApp> openApps = dataAccessService.getList(EPApp.class, " where open='Y' and enabled='Y'", null, null);\r
-               return openApps;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public List<EPApp> getAppsOrderByName(EPUser user) {\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPApp> sortedAppsByName = null;\r
-               try {\r
-                       if (adminRolesService.isSuperAdmin(user)) {\r
-                               params.put("userId", user.getId());\r
-                               sortedAppsByName = dataAccessService.executeNamedQuery("getPersAdminAppsOrderByName", params, null);\r
-                       } else {\r
-                               params.put("userId", user.getId());\r
-                               sortedAppsByName = dataAccessService.executeNamedQuery("getPersUserAppsOrderByName", params, null);\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByName failed", e);\r
-               }\r
-               return sortedAppsByName;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public List<EPApp> getAppsOrderByLastUsed(EPUser user) {\r
-\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPApp> sortedAppsByLastUsed = new ArrayList<EPApp>();\r
-               List<EPApp> finalsortedAppsByLastUsed = new ArrayList<EPApp>();\r
-               try {\r
-                       if (adminRolesService.isSuperAdmin(user)) {\r
-                               params.put("userId", user.getId());\r
-                               sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByLastUsed", params, null);\r
-                       } else {\r
-                               params.put("userId", user.getId());\r
-                               sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByLastUsed", params, null);\r
-                       }\r
-                       Set<String> epAppSet = new HashSet<String>();\r
-                       for (EPApp eapp : sortedAppsByLastUsed)\r
-                               if (!epAppSet.contains(eapp.getName())) {\r
-                                       finalsortedAppsByLastUsed.add(eapp);\r
-                                       epAppSet.add(eapp.getName());\r
-                               }\r
-\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByLastUsed failed", e);\r
-               }\r
-               return finalsortedAppsByLastUsed;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public List<EPApp> getAppsOrderByMostUsed(EPUser user) {\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPApp> sortedAppsByMostUsed = new ArrayList<EPApp>();\r
-               List<EPApp> finalsortedAppsByMostUsed = new ArrayList<EPApp>();\r
-               try {\r
-                       if (adminRolesService.isSuperAdmin(user)) {\r
-                               params.put("userId", user.getId());\r
-                               sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByMostUsed", params, null);\r
-                       } else {\r
-                               params.put("userId", user.getId());\r
-                               sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByMostUsed", params, null);\r
-                       }\r
-                       Set<String> epAppSet = new HashSet<String>();\r
-\r
-                       for (EPApp eapp : sortedAppsByMostUsed) {\r
-                               if (!epAppSet.contains(eapp.getName())) {\r
-                                       finalsortedAppsByMostUsed.add(eapp);\r
-                                       epAppSet.add(eapp.getName());\r
-                               }\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByMostUsed failed", e);\r
-               }\r
-\r
-               return finalsortedAppsByMostUsed;\r
-       }\r
-\r
-       /*\r
-        * This Method retrieves the User Apps by Sort Manual Preference\r
-        *\r
-        * @param: user--contains LoggedIn User Data\r
-        */\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public List<EPApp> getAppsOrderByManual(EPUser user) {\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPApp> sortedAppsByManual = new ArrayList<EPApp>();\r
-               List<EPApp> finalsortedAppsByManual = new ArrayList<EPApp>();\r
-               try {\r
-                       if (adminRolesService.isSuperAdmin(user)) {\r
-                               params.put("userId", user.getId());\r
-                               sortedAppsByManual = dataAccessService.executeNamedQuery("getAdminAppsOrderByManual", params, null);\r
-                       } else {\r
-                               params.put("userId", user.getId());\r
-                               sortedAppsByManual = dataAccessService.executeNamedQuery("getUserAppsOrderByManual", params, null);\r
-                       }\r
-                       Set<String> epAppSet = new HashSet<String>();\r
-\r
-                       for (EPApp eapp : sortedAppsByManual) {\r
-                               if (!epAppSet.contains(eapp.getName())) {\r
-                                       finalsortedAppsByManual.add(eapp);\r
-                                       epAppSet.add(eapp.getName());\r
-                               }\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByManual failed", e);\r
-               }\r
-               return finalsortedAppsByManual;\r
-       }\r
-\r
-       @Override\r
-       public List<OnboardingApp> getOnboardingApps() {\r
-               @SuppressWarnings("unchecked")\r
-               List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id!=" + ECOMP_APP_ID, null, null);\r
-               List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();\r
-               for (EPApp app : apps) {\r
-                       OnboardingApp onboardingApp = new OnboardingApp();\r
-                       createOnboardingFromApp(app, onboardingApp);\r
-                       onboardingAppsList.add(onboardingApp);\r
-               }\r
-               return onboardingAppsList;\r
-       }\r
-\r
-       @Override\r
-       public List<OnboardingApp> getEnabledNonOpenOnboardingApps() {\r
-               @SuppressWarnings("unchecked")\r
-               List<EPApp> apps = dataAccessService.getList(EPApp.class,\r
-                               " where enabled = true and open = false and id!=" + ECOMP_APP_ID, null, null);\r
-               List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();\r
-               for (EPApp app : apps) {\r
-                       OnboardingApp onboardingApp = new OnboardingApp();\r
-                       createOnboardingFromApp(app, onboardingApp);\r
-                       onboardingAppsList.add(onboardingApp);\r
-               }\r
-               return onboardingAppsList;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       private void validateOnboardingApp(OnboardingApp onboardingApp, FieldsValidator fieldsValidator) {\r
-               boolean duplicatedUrl = false;\r
-               boolean duplicatedName = false;\r
-               List<EPApp> apps;\r
-               if (onboardingApp.id == null) {\r
-                       apps = dataAccessService.getList(EPApp.class,\r
-                                       " where url = '" + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);\r
-               } else {\r
-                       apps = dataAccessService.getList(EPApp.class, " where id = " + onboardingApp.id + " or url = '"\r
-                                       + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);\r
-               }\r
-               for (EPApp app : apps) {\r
-                       if (onboardingApp.id != null && onboardingApp.id.equals(app.getId())) {\r
-                               continue;\r
-                       }\r
-                       if (!duplicatedUrl && app.getUrl().equalsIgnoreCase(onboardingApp.url)) {\r
-                               duplicatedUrl = true;\r
-                               if (duplicatedName) {\r
-                                       break;\r
-                               }\r
-                       }\r
-                       if (!duplicatedName && app.getName().equalsIgnoreCase(onboardingApp.name)) {\r
-                               duplicatedName = true;\r
-                               if (duplicatedUrl) {\r
-                                       break;\r
-                               }\r
-                       }\r
-               }\r
-               if (duplicatedUrl || duplicatedName) {\r
-                       if (duplicatedUrl) {\r
-                               fieldsValidator.addProblematicFieldName(urlField);\r
-                       }\r
-                       if (duplicatedName) {\r
-                               fieldsValidator.addProblematicFieldName(nameField);\r
-                       }\r
-                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);\r
-                       fieldsValidator.errorCode = new Long(EPCommonSystemProperties.DUBLICATED_FIELD_VALUE_ECOMP_ERROR);\r
-               }\r
-       }\r
-\r
-       @Override\r
-       public FieldsValidator modifyOnboardingApp(OnboardingApp modifiedOnboardingApp, EPUser user) {\r
-               logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering modifyOnboardingApp");\r
-               FieldsValidator fieldsValidator = onboardingAppFieldsChecker(modifiedOnboardingApp);\r
-               if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
-                       validateOnboardingApp(modifiedOnboardingApp, fieldsValidator);\r
-               }\r
-               if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
-                       if (modifiedOnboardingApp.id != null) {\r
-                               updateApp(modifiedOnboardingApp.id, modifiedOnboardingApp, fieldsValidator, user);\r
-                       } else {\r
-                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);\r
-                       }\r
-               }\r
-               return fieldsValidator;\r
-       }\r
-\r
-       @Override\r
-       public FieldsValidator addOnboardingApp(OnboardingApp newOnboardingApp, EPUser user) {\r
-               FieldsValidator fieldsValidator = onboardingAppFieldsChecker(newOnboardingApp);\r
-               if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
-                       validateOnboardingApp(newOnboardingApp, fieldsValidator);\r
-               }\r
-               if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
-                       if (newOnboardingApp.id == null) {\r
-                               updateApp(null, newOnboardingApp, fieldsValidator, user);\r
-                       } else {\r
-                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);\r
-                       }\r
-               }\r
-               return fieldsValidator;\r
-       }\r
-\r
-       @Override\r
-       public FieldsValidator deleteOnboardingApp(EPUser user, Long appid) {\r
-               FieldsValidator fieldsValidator = new FieldsValidator();\r
-               if (!adminRolesService.isSuperAdmin(user)) {\r
-                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_FORBIDDEN);\r
-                       return fieldsValidator;\r
-               }\r
-               Boolean result = false;\r
-               Session localSession = null;\r
-               Transaction transaction = null;\r
-               try {\r
-                       localSession = sessionFactory.openSession();\r
-                       transaction = localSession.beginTransaction();\r
-\r
-                       // 1) Remove the URL for any functional menu item associated with\r
-                       // this app\r
-                       String sql = "UPDATE fn_menu_functional m, fn_menu_functional_roles mr SET m.url='' "\r
-                                       + " WHERE m.menu_id=mr.menu_id " + " AND mr.app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       Query query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove any favorites associated with a menu item that is\r
-                       // associated with this app\r
-                       sql = "Delete from fn_menu_favorites " + " using fn_menu_favorites inner join fn_menu_functional_roles "\r
-                                       + " where fn_menu_functional_roles.app_id='" + appid + "' "\r
-                                       + " AND fn_menu_functional_roles.menu_id=fn_menu_favorites.menu_id";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove all role, appid records from fn_menu_functional_role\r
-                       // that are associated with this app\r
-                       sql = "delete from fn_menu_functional_roles where app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove all records from fn_user_role associated with this app\r
-                       sql = "delete from fn_user_role where app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove any widgets associated with this app\r
-                       sql = "delete from ep_widget_catalog_role where app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove any roles associated with this app\r
-                       sql = "delete from ep_role_notification " + " using ep_role_notification inner join fn_role "\r
-                                       + " where fn_role.app_id='" + appid + "' " + " and ep_role_notification.role_id= fn_role.role_id";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove all records from fn_role associated with this app\r
-                       sql = "delete from fn_role where app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove app contact us entries\r
-                       sql = "delete from fn_app_contact_us where app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove any widgets associated with this app\r
-                       sql = "delete from fn_widget where app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove rows in the app personalization selection table\r
-                       sql = "delete from fn_pers_user_app_sel where app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Remove rows in the app personalization sort table\r
-                       sql = "delete from ep_pers_user_app_man_sort where app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       // Delete the app\r
-                       sql = "delete from fn_app where app_id='" + appid + "'";\r
-                       logQuery(sql);\r
-                       query = localSession.createSQLQuery(sql);\r
-                       query.executeUpdate();\r
-\r
-                       transaction.commit();\r
-                       result = true;\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);\r
-                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError);\r
-                       EcompPortalUtils.rollbackTransaction(transaction, "deleteOnboardingApp rollback, exception = " + e);\r
-               } finally {\r
-                       EcompPortalUtils.closeLocalSession(localSession, "deleteOnboardingApp");\r
-               }\r
-               if (!result) {\r
-                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-               }\r
-               return fieldsValidator;\r
-       }\r
-\r
-       private static Object syncRests = new Object();\r
-\r
-       // An app has been enabled/disabled. Must enable/disable all associated\r
-       // functional menu items.\r
-       private void setFunctionalMenuItemsEnabled(Session localSession, Boolean enabled, Long appId) {\r
-               String active_yn = enabled ? "Y" : "N";\r
-               String sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn "\r
-                               + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "\r
-                               + " AND r.app_id = '" + appId + "' ";\r
-               logQuery(sql);\r
-               @SuppressWarnings("unchecked")\r
-               List<FunctionalMenuItem> menuItems = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);\r
-               for (FunctionalMenuItem menuItem : menuItems) {\r
-                       FunctionalMenuItem myMenuItem = (FunctionalMenuItem) localSession.get(FunctionalMenuItem.class,\r
-                                       menuItem.menuId);\r
-                       myMenuItem.active_yn = active_yn;\r
-                       localSession.save(myMenuItem);\r
-               }\r
-       }\r
-\r
-       // Attention! If (appId == null) we use this function to create application\r
-       // otherwise we use it to modify existing application\r
-       private void updateApp(Long appId, OnboardingApp onboardingApp, FieldsValidator fieldsValidator, EPUser user) {\r
-               logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering updateApp");\r
-               // Separate out the code for a restricted app, since it doesn't need any\r
-               // of the UEB code.\r
-               if (onboardingApp.restrictedApp) {\r
-                       boolean result = false;\r
-                       Session localSession = null;\r
-                       Transaction transaction = null;\r
-                       try {\r
-                               localSession = sessionFactory.openSession();\r
-                               transaction = localSession.beginTransaction();\r
-                               EPApp app;\r
-                               if (appId == null) {\r
-                                       app = new EPApp();\r
-                               } else {\r
-                                       app = (EPApp) localSession.get(EPApp.class, appId);\r
-                                       if (app == null || app.getId() == null) { // App is already\r
-                                               // deleted!\r
-                                               transaction.commit();\r
-                                               localSession.close();\r
-                                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);\r
-                                               return;\r
-                                       }\r
-                               }\r
-                               createAppFromOnboarding(app, onboardingApp, localSession);\r
-                               localSession.saveOrUpdate(app);\r
-                               // Enable or disable all menu items associated with this app\r
-                               setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);\r
-                               transaction.commit();\r
-                               result = true;\r
-                       } catch (Exception e) {\r
-                               EcompPortalUtils.rollbackTransaction(transaction,\r
-                                               "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));\r
-                       } finally {\r
-                               EcompPortalUtils.closeLocalSession(localSession, "updateApp");\r
-                       }\r
-                       if (!result) {\r
-                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-                       }\r
-\r
-               } else {\r
-                       synchronized (syncRests) {\r
-                               boolean result = false;\r
-                               Session localSession = null;\r
-                               Transaction transaction = null;\r
-                               try {\r
-                                       localSession = sessionFactory.openSession();\r
-                                       transaction = localSession.beginTransaction();\r
-                                       EPApp app;\r
-                                       if (appId == null) {\r
-                                               app = new EPApp();\r
-                                               // -------------------------------------------------------------------------------------------\r
-                                               // Register this App with the UEB communication server.\r
-                                               // Save\r
-                                               // the App's unique mailbox/topic\r
-                                               // name and keys to the FN_APP table. The App's mailbox\r
-                                               // and\r
-                                               // keys will be visible to the\r
-                                               // admin on the ECOMP portal.\r
-                                               // -------------------------------------------------------------------------------------------\r
-                                               TopicManager topicManager = new TopicManager();\r
-                                               final CambriaIdentityManager im = new CambriaClientBuilders.IdentityManagerBuilder()\r
-                                                               .usingHosts(Helper.uebUrlList()).build();\r
-                                               com.att.nsa.apiClient.credentials.ApiCredential credential = im.createApiKey(user.getEmail(),\r
-                                                               "ECOMP Portal Owner");\r
-                                               String appKey = credential.getApiKey();\r
-                                               String appSecret = credential.getApiSecret();\r
-                                               String appMailboxName = null;\r
-\r
-                                               int maxNumAttemptsToCreateATopic = 3;\r
-                                               boolean successfullyCreatedMailbox = false;\r
-                                               for (int i = 0; i < maxNumAttemptsToCreateATopic; i++) {\r
-                                                       appMailboxName = "ECOMP-PORTAL-OUTBOX-" + (int) (Math.random() * 100000.0);\r
-\r
-                                                       try {\r
-                                                               topicManager.createTopic(\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),\r
-                                                                               appMailboxName, "ECOMP outbox for app" + onboardingApp.name);\r
-                                                               successfullyCreatedMailbox = true;\r
-                                                               logger.debug(EELFLoggerDelegate.debugLogger,\r
-                                                                               "Successfully created " + appMailboxName + " for App " + onboardingApp.name);\r
-                                                               logger.debug(EELFLoggerDelegate.debugLogger, "    Key = " + appKey + " Secret = "\r
-                                                                               + appSecret + " generated using = " + user.getEmail());\r
-                                                               break;\r
-                                                       } catch (HttpException e) {\r
-                                                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebConnectionError, e);\r
-                                                               if (e.getStatusCode() == 409) {\r
-                                                                       logger.error(EELFLoggerDelegate.errorLogger, "Topic/mailbox " + appMailboxName\r
-                                                                                       + " already exists. Will try using a different name", e);\r
-                                                               } else {\r
-                                                                       logger.error(EELFLoggerDelegate.errorLogger, "HttpException when onboarding App: ",\r
-                                                                                       e);\r
-                                                               }\r
-                                                       }\r
-                                               }\r
-\r
-                                               if (successfullyCreatedMailbox) {\r
-                                                       onboardingApp.setUebTopicName(appMailboxName);\r
-                                                       onboardingApp.setUebKey(appKey);\r
-                                                       onboardingApp.setUebSecret(appSecret);\r
-\r
-                                                       try {\r
-                                                               /*\r
-                                                                * EP is a publisher to this App's new mailbox\r
-                                                                */\r
-                                                               topicManager.addPublisher(\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
-                                                                               appMailboxName);\r
-\r
-                                                               /*\r
-                                                                * This App is a subscriber of its own mailbox\r
-                                                                */\r
-                                                               topicManager.addSubscriber(\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,\r
-                                                                               appMailboxName);\r
-\r
-                                                               /*\r
-                                                                * This App is a publisher to EP\r
-                                                                */\r
-                                                               topicManager.addPublisher(\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,\r
-                                                                               PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME));\r
-                                                       } catch (HttpException | CambriaApiException | IOException e) {\r
-                                                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);\r
-                                                               logger.error(EELFLoggerDelegate.errorLogger,\r
-                                                                               "Error when configuring Publisher/Subscriber for App's new mailbox", e);\r
-                                                               transaction.commit();\r
-                                                               localSession.close();\r
-                                                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);\r
-                                                               return;\r
-                                                       }\r
-                                               } else {\r
-                                                       transaction.commit();\r
-                                                       localSession.close();\r
-                                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);\r
-                                                       return;\r
-                                               }\r
-                                       } else {\r
-                                               app = (EPApp) localSession.get(EPApp.class, appId);\r
-                                               if (app == null || app.getId() == null) {\r
-                                                       // App is already deleted!\r
-                                                       transaction.commit();\r
-                                                       localSession.close();\r
-                                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);\r
-                                                       return;\r
-                                               }\r
-                                       }\r
-                                       logger.debug(EELFLoggerDelegate.debugLogger, "LR: about to call createAppFromOnboarding");\r
-                                       createAppFromOnboarding(app, onboardingApp, localSession);\r
-                                       logger.debug(EELFLoggerDelegate.debugLogger,\r
-                                                       "LR: updateApp: finished calling createAppFromOnboarding");\r
-                                       localSession.saveOrUpdate(app);\r
-                                       logger.debug(EELFLoggerDelegate.debugLogger,\r
-                                                       "LR: updateApp: finished calling localSession.saveOrUpdate");\r
-                                       // Enable or disable all menu items associated with this app\r
-                                       setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);\r
-                                       logger.debug(EELFLoggerDelegate.debugLogger,\r
-                                                       "LR: updateApp: finished calling setFunctionalMenuItemsEnabled");\r
-                                       transaction.commit();\r
-                                       logger.debug(EELFLoggerDelegate.debugLogger, "LR: updateApp: finished calling transaction.commit");\r
-                                       epUebHelper.addPublisher(app);\r
-                                       logger.debug(EELFLoggerDelegate.debugLogger,\r
-                                                       "LR: updateApp: finished calling epUebHelper.addPublisher");\r
-                                       result = true;\r
-                               } catch (Exception e) {\r
-                                       logger.error(EELFLoggerDelegate.errorLogger, "updateApp failed", e);\r
-                                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);\r
-                                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
-                                       EcompPortalUtils.rollbackTransaction(transaction,\r
-                                                       "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));\r
-                               } finally {\r
-                                       EcompPortalUtils.closeLocalSession(localSession, "updateApp");\r
-                               }\r
-                               if (!result) {\r
-                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       /**\r
-        * Populates a transport model of the application from a database row model.\r
-        * Leaves out the thumbnail because the FE fetches images via a different\r
-        * API.\r
-        * \r
-        * @param app\r
-        *            Model of database row\r
-        * @param onboardingApp\r
-        *            Model for transport as JSON\r
-        */\r
-       @Override\r
-       public void createOnboardingFromApp(EPApp app, OnboardingApp onboardingApp) {\r
-               onboardingApp.id = app.getId();\r
-               onboardingApp.name = app.getName();\r
-               onboardingApp.imageUrl = app.getImageUrl();\r
-               onboardingApp.description = app.getDescription();\r
-               onboardingApp.notes = app.getNotes();\r
-               onboardingApp.url = app.getUrl();\r
-               onboardingApp.alternateUrl = app.getAlternateUrl();\r
-               onboardingApp.restUrl = app.getAppRestEndpoint();\r
-               onboardingApp.isOpen = app.getOpen();\r
-               onboardingApp.isEnabled = app.getEnabled();\r
-               onboardingApp.username = app.getUsername();\r
-               onboardingApp.appPassword = decryptedPassword(app.getAppPassword(), app);\r
-               onboardingApp.uebTopicName = app.getUebTopicName();\r
-               onboardingApp.uebKey = app.getUebKey();\r
-               onboardingApp.uebSecret = app.getUebSecret();\r
-               onboardingApp.setRestrictedApp(app.isRestrictedApp());\r
-               // if (app.getThumbnail() != null)\r
-               // onboardingApp.thumbnail = new\r
-               // String(Base64.getEncoder().encode(app.getThumbnail()));\r
-       }\r
-\r
-       /**\r
-        * Creates a database object for an application from an uploaded transport\r
-        * model. Must decode the thumbnail, if any.\r
-        * \r
-        * @param app\r
-        * @param onboardingApp\r
-        * @param localSession\r
-        * @return The first argument.\r
-        */\r
-       protected EPApp createAppFromOnboarding(EPApp app, OnboardingApp onboardingApp, Session localSession) {\r
-               app.setName(onboardingApp.name);\r
-               app.setDescription(onboardingApp.description);\r
-               app.setNotes(onboardingApp.notes);\r
-               app.setUrl(onboardingApp.url);\r
-               app.setAlternateUrl(onboardingApp.alternateUrl);\r
-               app.setAppRestEndpoint(onboardingApp.restUrl);\r
-               app.setOpen(onboardingApp.isOpen);\r
-               app.setEnabled(onboardingApp.isEnabled);\r
-               app.setUsername(onboardingApp.username);\r
-               app.setAppPassword(this.encryptedPassword(onboardingApp.appPassword, app));\r
-               app.setUebTopicName(onboardingApp.uebTopicName);\r
-               app.setUebKey(onboardingApp.uebKey);\r
-               app.setUebSecret(onboardingApp.uebSecret);\r
-               app.setRestrictedApp(onboardingApp.restrictedApp);\r
-               if (!StringUtils.isEmpty(onboardingApp.thumbnail)) {\r
-                       logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: onboarding thumbnail is NOT empty");\r
-                       String[] splitBase64Thumbnail = onboardingApp.thumbnail.split("base64,");\r
-                       logger.debug(EELFLoggerDelegate.debugLogger,\r
-                                       "createAppFromOnboarding: length of splitBase64Thumbnail: " + splitBase64Thumbnail.length);\r
-                       if (splitBase64Thumbnail.length > 1) {\r
-                               // This occurs when we have a new image, not an existing image\r
-                               byte[] decodedImage = Base64.getDecoder().decode(splitBase64Thumbnail[1].getBytes());\r
-                               logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: finished calling decode");\r
-                               // This is basically a boolean indicator that an image is\r
-                               // present.\r
-                               app.setImageUrl(constructImageName(onboardingApp));\r
-                               app.setThumbnail(decodedImage);\r
-                       }\r
-               } else if (app.getThumbnail() != null) {\r
-                       // The thumbnail that came in from the json is empty; the previous\r
-                       // thumbnail is NOT empty. Must delete it.\r
-                       logger.debug(EELFLoggerDelegate.debugLogger,\r
-                                       "createAppFromOnboarding: onboarding thumbnail is empty; db thumbnail is NOT null");\r
-                       app.setImageUrl(null);\r
-                       app.setThumbnail(null);\r
-               } else {\r
-                       logger.debug(EELFLoggerDelegate.debugLogger,\r
-                                       "createAppFromOnboarding: onboarding thumbnail is empty; db thumbnail is null");\r
-               }\r
-               return app;\r
-       }\r
-\r
-       protected String constructImageName(OnboardingApp onboardingApp) {\r
-               return "portal_" + String.valueOf(onboardingApp.url.hashCode() + "_" + (int) (Math.random() * 100000.0))\r
-                               + ".png";\r
-       }\r
-\r
-       // Don't encrypt or decrypt the password if it is null or the empty string\r
-       private String decryptedPassword(String encryptedAppPwd, EPApp app) {\r
-               String result = "";\r
-               if (encryptedAppPwd != null & encryptedAppPwd.length() > 0) {\r
-                       try {\r
-                               result = CipherUtil.decrypt(encryptedAppPwd,\r
-                                               SystemProperties.getProperty(SystemProperties.Decryption_Key));\r
-                       } catch (Exception e) {\r
-                               logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed for app " + app.getName(), e);\r
-                       }\r
-               }\r
-               return result;\r
-       }\r
-\r
-       protected String encryptedPassword(String decryptedAppPwd, EPApp app) {\r
-               String result = "";\r
-               if (decryptedAppPwd != null & decryptedAppPwd.length() > 0) {\r
-                       try {\r
-                               result = CipherUtil.encrypt(decryptedAppPwd,\r
-                                               SystemProperties.getProperty(SystemProperties.Decryption_Key));\r
-                       } catch (Exception e) {\r
-                               logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword failed for app " + app.getName(), e);\r
-                       }\r
-               }\r
-               return result;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public FieldsValidator saveWidgetsSortManual(List<EPWidgetsSortPreference> widgetsSortManual, EPUser user) {\r
-               FieldsValidator fieldsValidator = new FieldsValidator();\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPWidgetsManualSortPreference> epManualWidgets = new ArrayList<EPWidgetsManualSortPreference>();\r
-\r
-               try {\r
-                       params.put("userId", user.getId());\r
-                       epManualWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);\r
-                       Map<Long, EPWidgetsManualSortPreference> existingWidgetsIds = new HashMap<Long, EPWidgetsManualSortPreference>();\r
-                       for (EPWidgetsManualSortPreference userWidgetManualPref : epManualWidgets) {\r
-                               existingWidgetsIds.put(userWidgetManualPref.getWidgetId(), userWidgetManualPref);\r
-                       }\r
-                       for (EPWidgetsSortPreference epWidgetsManPref : widgetsSortManual) {\r
-                               if (epWidgetsManPref.getWidgetid() != null) {\r
-                                       Long widgetid = epWidgetsManPref.getWidgetid();\r
-                                       if (existingWidgetsIds.containsKey(widgetid)) {\r
-                                               EPWidgetsManualSortPreference epWidgetsManualSort = existingWidgetsIds.get(widgetid);\r
-                                               epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());\r
-                                               epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());\r
-                                               epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());\r
-                                               epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());\r
-                                               HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();\r
-                                               additionalUpdateParam.put("userId", epWidgetsManualSort.getUserId());\r
-                                               dataAccessService.saveDomainObject(epWidgetsManualSort, additionalUpdateParam);\r
-                                       } else {\r
-                                               EPWidgetsManualSortPreference epWidgetsManualSort = new EPWidgetsManualSortPreference();\r
-                                               epWidgetsManualSort.setWidgetId(epWidgetsManPref.getWidgetid());\r
-                                               epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());\r
-                                               epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());\r
-                                               epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());\r
-                                               epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());\r
-                                               epWidgetsManualSort.setUserId(Ints.checkedCast(user.getId()));\r
-                                               dataAccessService.saveDomainObject(epWidgetsManualSort, null);\r
-                                       }\r
-                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
-                               }\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "saveWidgetsSortManual failed", e);\r
-                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-               }\r
-               return fieldsValidator;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public FieldsValidator deleteUserWidgetSortPref(List<EPWidgetsSortPreference> delWidgetSortPref, EPUser user) {\r
-               FieldsValidator fieldsValidator = new FieldsValidator();\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPWidgetsManualSortPreference> epWidgets = new ArrayList<EPWidgetsManualSortPreference>();\r
-               try {\r
-                       params.put("userId", user.getId());\r
-                       epWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);\r
-                       Map<Long, EPWidgetsManualSortPreference> existingWidgetIds = new HashMap<Long, EPWidgetsManualSortPreference>();\r
-                       for (EPWidgetsManualSortPreference userWidgetSortPref : epWidgets) {\r
-                               existingWidgetIds.put(userWidgetSortPref.getWidgetId(), userWidgetSortPref);\r
-                       }\r
-                       for (EPWidgetsSortPreference delEpWidgetsManPref : delWidgetSortPref) {\r
-                               if (delEpWidgetsManPref.getWidgetid() != null) {\r
-                                       Long widgetId = delEpWidgetsManPref.getWidgetid();\r
-                                       if (existingWidgetIds.containsKey(widgetId)) {\r
-                                               dataAccessService.deleteDomainObjects(EPWidgetsManualSortPreference.class,\r
-                                                               "widget_id=" + widgetId + " AND user_id=" + user.getId(), null);\r
-                                       }\r
-                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
-                               }\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "deleteUserWidgetSortPref failed", e);\r
-                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-               }\r
-               return fieldsValidator;\r
-       }\r
-\r
-       /*\r
-        * This Method Stores the Sort Order of User Apps by Sort Manual Preference\r
-        *\r
-        * @param: appsSortManual--contains User Apps Data\r
-        *\r
-        * @param: user--contains LoggedIn User Data\r
-        */\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public FieldsValidator saveAppsSortManual(List<EPAppsManualPreference> appsSortManual, EPUser user) {\r
-               FieldsValidator fieldsValidator = new FieldsValidator();\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();\r
-\r
-               try {\r
-                       params.put("userId", user.getId());\r
-                       epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);\r
-                       Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();\r
-                       for (EPUserAppsManualSortPreference userAppManualPref : epManualApps) {\r
-                               existingAppIds.put(userAppManualPref.getAppId(), userAppManualPref);\r
-                       }\r
-                       for (EPAppsManualPreference epAppsManPref : appsSortManual) {\r
-                               if (epAppsManPref.getAppid() != null) {\r
-                                       Long appid = epAppsManPref.getAppid();\r
-                                       if (existingAppIds.containsKey(appid)) {\r
-                                               EPUserAppsManualSortPreference epAppsManualSort = existingAppIds.get(appid);\r
-                                               epAppsManualSort\r
-                                                               .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);\r
-                                               HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();\r
-                                               additionalUpdateParam.put("userId", epAppsManualSort.getUserId());\r
-                                               dataAccessService.saveDomainObject(epAppsManualSort, additionalUpdateParam);\r
-                                       } else {\r
-                                               EPUserAppsManualSortPreference epAppsManualSort = new EPUserAppsManualSortPreference();\r
-                                               epAppsManualSort.setAppId(epAppsManPref.getAppid());\r
-                                               epAppsManualSort\r
-                                                               .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);\r
-                                               epAppsManualSort.setUserId(Ints.checkedCast(user.getId()));\r
-                                               dataAccessService.saveDomainObject(epAppsManualSort, null);\r
-                                       }\r
-                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
-                               }\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortManual failed", e);\r
-                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-               }\r
-               return fieldsValidator;\r
-       }\r
-\r
-       /*\r
-        * (non-Javadoc)\r
-        *\r
-        * @see org.openecomp.portalapp.portal.service.EPAppService#\r
-        * deleteUserAppSortManual(java.lang.String,\r
-        * org.openecomp.portalapp.portal.domain.EPUser)\r
-        */\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public FieldsValidator deleteUserAppSortManual(EPDeleteAppsManualSortPref delAppSortManual, EPUser user) {\r
-               FieldsValidator fieldsValidator = new FieldsValidator();\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();\r
-               try {\r
-                       params.put("userId", user.getId());\r
-                       epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);\r
-                       Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();\r
-                       for (EPUserAppsManualSortPreference userAppPref : epManualApps) {\r
-                               existingAppIds.put(userAppPref.getAppId(), userAppPref);\r
-                       }\r
-                       if (existingAppIds.containsKey(delAppSortManual.getAppId()) && !delAppSortManual.isSelect()) {\r
-                               dataAccessService.deleteDomainObjects(EPUserAppsManualSortPreference.class,\r
-                                               "app_id=" + delAppSortManual.getAppId() + " AND user_id=" + user.getId(), null);\r
-                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);\r
-                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-               }\r
-               return fieldsValidator;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public FieldsValidator saveAppsSortPreference(EPAppsSortPreference appsSortPreference, EPUser user) {\r
-               FieldsValidator fieldsValidator = new FieldsValidator();\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPUserAppsSortPreference> epSortTypes = new ArrayList<EPUserAppsSortPreference>();\r
-               EPUserAppsSortPreference usrSortPr = null;\r
-               try {\r
-                       params.put("userId", user.getId());\r
-                       epSortTypes = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);\r
-                       if (epSortTypes.size() == 0) {\r
-                               usrSortPr = new EPUserAppsSortPreference();\r
-                               usrSortPr.setUserId(Ints.checkedCast(user.getId()));\r
-                               usrSortPr.setSortPref(appsSortPreference.getValue());\r
-                               dataAccessService.saveDomainObject(usrSortPr, null);\r
-                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
-                       } else {\r
-                               usrSortPr = epSortTypes.get(0);\r
-                               usrSortPr.setSortPref(appsSortPreference.getValue());\r
-                               HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();\r
-                               additionalUpdateParam.put("userId", usrSortPr.getUserId());\r
-                               dataAccessService.saveDomainObject(usrSortPr, additionalUpdateParam);\r
-                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
-                       }\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortPreference failed", e);\r
-                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
-               }\r
-               return fieldsValidator;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public String getUserAppsSortTypePreference(EPUser user) {\r
-               final Map<String, Long> params = new HashMap<>();\r
-               List<EPUserAppsSortPreference> userSortPrefs = new ArrayList<EPUserAppsSortPreference>();\r
-               try {\r
-                       params.put("userId", user.getId());\r
-                       userSortPrefs = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);\r
-                       if (userSortPrefs.size() > 0)\r
-                               return userSortPrefs.get(0).getSortPref();\r
-                       else\r
-                               return null;\r
-               } catch (Exception e) {\r
-                       logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);\r
-               }\r
-               return null;\r
-\r
-       }\r
-\r
-       @Override\r
-       public List<EPApp> getUserRemoteApps(String id) {\r
-               throw new RuntimeException(" Cannot be called from parent class");\r
-       }\r
-\r
-}\r
+/*-
+ * ================================================================================
+ * ECOMP Portal
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalapp.portal.service;
+
+import java.io.IOException;
+import java.security.GeneralSecurityException;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.openecomp.portalapp.portal.domain.AdminUserApp;
+import org.openecomp.portalapp.portal.domain.AdminUserApplications;
+import org.openecomp.portalapp.portal.domain.AppIdAndNameTransportModel;
+import org.openecomp.portalapp.portal.domain.AppsResponse;
+import org.openecomp.portalapp.portal.domain.EPApp;
+import org.openecomp.portalapp.portal.domain.EPUser;
+import org.openecomp.portalapp.portal.domain.EPUserAppsManualSortPreference;
+import org.openecomp.portalapp.portal.domain.EPUserAppsSortPreference;
+import org.openecomp.portalapp.portal.domain.EPWidgetsManualSortPreference;
+import org.openecomp.portalapp.portal.domain.EcompApp;
+import org.openecomp.portalapp.portal.domain.UserRole;
+import org.openecomp.portalapp.portal.domain.UserRoles;
+import org.openecomp.portalapp.portal.ecomp.model.AppCatalogItem;
+import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;
+import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;
+import org.openecomp.portalapp.portal.transport.EPAppsManualPreference;
+import org.openecomp.portalapp.portal.transport.EPAppsSortPreference;
+import org.openecomp.portalapp.portal.transport.EPDeleteAppsManualSortPref;
+import org.openecomp.portalapp.portal.transport.EPWidgetsSortPreference;
+import org.openecomp.portalapp.portal.transport.FieldsValidator;
+import org.openecomp.portalapp.portal.transport.FunctionalMenuItem;
+import org.openecomp.portalapp.portal.transport.LocalRole;
+import org.openecomp.portalapp.portal.transport.OnboardingApp;
+import org.openecomp.portalapp.portal.ueb.EPUebHelper;
+import org.openecomp.portalapp.portal.utils.EPCommonSystemProperties;
+import org.openecomp.portalapp.portal.utils.EcompPortalUtils;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.onboarding.ueb.Helper;
+import org.openecomp.portalsdk.core.onboarding.ueb.TopicManager;
+import org.openecomp.portalsdk.core.onboarding.util.CipherUtil;
+import org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants;
+import org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties;
+import org.openecomp.portalsdk.core.service.DataAccessService;
+import org.openecomp.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.att.nsa.apiClient.http.HttpException;
+import com.att.nsa.cambria.client.CambriaClient.CambriaApiException;
+import com.att.nsa.cambria.client.CambriaClientBuilders;
+import com.att.nsa.cambria.client.CambriaIdentityManager;
+import com.att.nsa.cambria.client.CambriaTopicManager;
+import com.google.common.primitives.Ints;
+
+public class EPAppCommonServiceImpl implements EPAppService {
+
+       protected String ECOMP_APP_ID = "1";
+       protected String SUPER_ADMIN_ROLE_ID = "1";
+       protected String ACCOUNT_ADMIN_ROLE_ID = "999";
+       protected String RESTRICTED_APP_ROLE_ID = "900";
+
+       private static final String urlField = "url";
+       private static final String nameField = "name";
+
+       private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPAppCommonServiceImpl.class);
+
+       @Autowired
+       private AdminRolesService adminRolesService;
+       @Autowired
+       private SessionFactory sessionFactory;
+       @Autowired
+       private DataAccessService dataAccessService;
+       @Autowired
+       private EPUebHelper epUebHelper;
+
+       @PostConstruct
+       private void init() {
+               SUPER_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.SYS_ADMIN_ROLE_ID);
+               ACCOUNT_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID);
+               ECOMP_APP_ID = SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID);
+               RESTRICTED_APP_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.RESTRICTED_APP_ROLE_ID);
+       }
+
+       @Override
+       public List<EPApp> getUserAsAdminApps(EPUser user) {
+               if (adminRolesService.isAccountAdmin(user)) {
+                       String sql = "SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID=FN_APP.APP_ID where "
+                                       + "FN_USER_ROLE.USER_ID=" + user.getId() + " AND FN_USER_ROLE.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
+                                       + " AND FN_APP.ENABLED = 'Y'";
+                       logQuery(sql);
+                       try {
+                               @SuppressWarnings("unchecked")
+                               List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
+                               return adminApps;
+                       } catch (Exception e) {
+                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                               return null;
+                       }
+               } else {
+                       logger.error(EELFLoggerDelegate.errorLogger,
+                                       "getUserAsAdminApps: only Account Admin may invoke this function!");
+                       return new ArrayList<EPApp>();
+               }
+       }
+
+       @Override
+       public List<EPApp> getUserByOrgUserIdAsAdminApps(String orgUserId) {
+               String format = "SELECT * FROM FN_APP app INNER JOIN FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "
+                               + "INNER JOIN FN_USER user on user.USER_ID = userrole.USER_ID "
+                               + "WHERE user.org_user_id = '%s' AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
+                               + " AND FN_APP.ENABLED = 'Y'";
+
+               String sql = String.format(format, orgUserId);
+               logQuery(sql);
+
+               try {
+                       @SuppressWarnings("unchecked")
+                       List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
+                       return adminApps;
+               } catch (Exception e) {
+                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                       return null;
+               }
+       }
+
+       @Override
+       public List<EPApp> getAppsFullList() {
+               @SuppressWarnings("unchecked")
+               List<EPApp> apps = dataAccessService.getList(EPApp.class, null);
+               return apps;
+       }
+
+       @Override
+       public List<EcompApp> getEcompAppAppsFullList() {
+               return transformAppsToEcompApps(getAppsFullList());
+       }
+
+       @Override
+       public List<EcompApp> transformAppsToEcompApps(List<EPApp> appsList) {
+               List<EcompApp> ecompAppList = new ArrayList<EcompApp>();
+               for (EPApp app : appsList) {
+                       EcompApp ecompApp = new EcompApp();
+                       ecompApp.setId(app.getId());
+                       ecompApp.setName(app.getName());
+                       ecompApp.setImageUrl(app.getImageUrl());
+                       ecompApp.setDescription(app.getDescription());
+                       ecompApp.setNotes(app.getNotes());
+                       ecompApp.setUrl(app.getUrl());
+                       ecompApp.setAlternateUrl(app.getAlternateUrl());
+                       ecompApp.setUebTopicName(app.getUebTopicName());
+                       ecompApp.setUebKey(app.getUebKey());
+                       ecompApp.setUebSecret(app.getUebSecret());
+                       ecompApp.setEnabled(app.getEnabled());
+                       ecompApp.setRestrictedApp(app.isRestrictedApp());
+                       ecompAppList.add(ecompApp);
+               }
+               return ecompAppList;
+       }
+
+       @Override
+       public EPApp getApp(Long appId) {
+               try {
+                       @SuppressWarnings("unchecked")
+                       List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id = " + appId, null, null);
+                       return (apps.size() > 0) ? apps.get(0) : null;
+               } catch (Exception e) {
+                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                       return null;
+               }
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public List<AppIdAndNameTransportModel> getAdminApps(EPUser user) {
+               if (adminRolesService.isAccountAdmin(user)) {
+                       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 "
+                                       + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
+                                       + " AND (app.ENABLED = 'Y' OR app.APP_ID=1)";
+                       String sql = String.format(format, user.getId());
+                       // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND
+                       // app.APP_REST_ENDPOINT <> ''";
+                       logQuery(sql);
+                       try {
+                               return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);
+                       } catch (Exception e) {
+                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                               logger.error(EELFLoggerDelegate.errorLogger,
+                                               "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);
+                       }
+               }
+               return new ArrayList<AppIdAndNameTransportModel>();
+       }
+
+       @Override
+       public EPApp getAppDetail(String appName) {
+               final Map<String, String> params = new HashMap<String, String>();
+               try {
+                       params.put("appName", appName);
+                       @SuppressWarnings("unchecked")
+                       List<EPApp> apps = (List<EPApp>) dataAccessService.executeNamedQuery("getMyloginAppDetails", params, null);
+                       return (apps.size() > 0) ? apps.get(0) : null;
+               } catch (Exception e) {
+                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                       return null;
+               }
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(EPUser user) {
+               if (adminRolesService.isSuperAdmin(user) || adminRolesService.isAccountAdmin(user)) {
+                       String format = "";
+                       String sql = "";
+                       if (adminRolesService.isSuperAdmin(user)) {
+                               format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app "
+                                               + "where app.ENABLED = 'Y' AND app.app_type = 1";
+                       } else {
+                               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 "
+                                               + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID
+                                               + " AND app.ENABLED = 'Y' AND app.app_type = 1";
+                       }
+                       sql = String.format(format, user.getId());
+                       // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND
+                       // app.APP_REST_ENDPOINT <> ''";
+                       logQuery(sql);
+                       try {
+                               return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);
+                       } catch (Exception e) {
+                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                               logger.error(EELFLoggerDelegate.errorLogger,
+                                               "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);
+                       }
+               }
+               return new ArrayList<AppIdAndNameTransportModel>();
+       }
+
+       protected void logQuery(String sql) {
+               logger.debug(EELFLoggerDelegate.debugLogger, "logQuery: " + sql);
+       }
+
+       public DataAccessService getDataAccessService() {
+               return dataAccessService;
+       }
+
+       public void setDataAccessService(DataAccessService dataAccessService) {
+               this.dataAccessService = dataAccessService;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public List<AdminUserApplications> getAppsAdmins() {
+               try {
+                       Map<String, String> params = new HashMap<>();
+                       params.put("accountAdminRoleId", ACCOUNT_ADMIN_ROLE_ID);
+                       List<AdminUserApp> adminApps = (List<AdminUserApp>) dataAccessService.executeNamedQuery("getAppsAdmins",
+                                       params, null);
+                       return aggregateRowsResultsByUserId(adminApps);
+               } catch (Exception e) {
+                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                       return null;
+               }
+       }
+
+       private List<AdminUserApplications> aggregateRowsResultsByUserId(List<AdminUserApp> adminApps) {
+               HashMap<Long, AdminUserApplications> adminUserApplications = new HashMap<Long, AdminUserApplications>();
+               for (AdminUserApp app : adminApps) {
+                       Long userId = app.getUser_Id();
+                       if (adminUserApplications.get(userId) == null)
+                               adminUserApplications.put(userId, new AdminUserApplications(app));
+                       else
+                               adminUserApplications.get(userId).addApp(app.getAppId(), app.getAppName());
+               }
+               return new ArrayList<AdminUserApplications>(adminUserApplications.values());
+       }
+
+       @Override
+       public List<AppsResponse> getAllApps(Boolean all) {
+               // If all is true, return both active and inactive apps. Otherwise, just
+               // active apps.
+               @SuppressWarnings("unchecked")
+               // Sort the list by application name so the drop-down looks pretty.
+               List<EPApp> apps = all
+                               ? (List<EPApp>) dataAccessService.getList(EPApp.class, " where id != " + ECOMP_APP_ID, "name", null)
+                               : (List<EPApp>) dataAccessService.getList(EPApp.class,
+                                               " where ( enabled = 'Y' or id = " + ECOMP_APP_ID + ")", "name", null);
+
+               List<AppsResponse> appsModified = new ArrayList<AppsResponse>();
+               for (EPApp app : apps) {
+                       appsModified.add(new AppsResponse(app.getId(), app.getName(), app.isRestrictedApp(), app.getEnabled()));
+               }
+               return appsModified;
+       }
+
+       @Override
+       public UserRoles getUserProfile(String loginId) {
+               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 "
+                               + "INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID "
+                               + "INNER JOIN fn_role role ON role.ROLE_ID = userrole.ROLE_ID "
+                               + "WHERE user.org_user_id = \"%s\" and (userrole.app_id = 1 or role.role_id = " + ACCOUNT_ADMIN_ROLE_ID
+                               + ") ";
+               String sql = String.format(format, loginId);
+               logQuery(sql);
+               @SuppressWarnings("unchecked")
+               List<UserRole> userRoleList = dataAccessService.executeSQLQuery(sql, UserRole.class, null);
+               ArrayList<UserRoles> usersRolesList = aggregateUserProfileRowsResultsByRole(userRoleList);
+               if (usersRolesList == null || usersRolesList.size() < 1)
+                       return null;
+
+               return usersRolesList.get(0);
+       }
+
+       @Override
+       public UserRoles getUserProfileNormalized(EPUser user) {
+               // Check database.
+               UserRoles userAndRoles = getUserProfile(user.getLoginId());
+               // If no roles are defined, treat this user as a guest.
+               if (user.isGuest() || userAndRoles == null) {
+                       logger.debug(EELFLoggerDelegate.debugLogger, "getUserProfile: treating user {} as guest",
+                                       user.getLoginId());
+                       UserRole userRole = new UserRole();
+                       userRole.setUser_Id(user.getId());
+                       userRole.setOrgUserId(user.getLoginId());
+                       userRole.setFirstName(user.getFirstName());
+                       userRole.setLastName(user.getLastName());
+                       userRole.setRoleId(-1L);
+                       userRole.setRoleName("Guest");
+                       userRole.setUser_Id(-1L);
+                       userAndRoles = new UserRoles(userRole);
+               }
+
+               return userAndRoles;
+       }
+
+       protected ArrayList<UserRoles> aggregateUserProfileRowsResultsByRole(List<UserRole> userRoleList) {
+               HashMap<String, UserRoles> userRoles = new HashMap<String, UserRoles>();
+               for (UserRole user : userRoleList) {
+                       String orgUserId = user.getOrgUserId();
+                       if (userRoles.get(orgUserId) == null)
+                               userRoles.put(orgUserId, new UserRoles(user));
+                       else
+                               userRoles.get(orgUserId).addRole(user.getRoleName());
+               }
+               return new ArrayList<UserRoles>(userRoles.values());
+       }
+
+       private boolean isRestrictedApp(Long appId) {
+               EPApp app = getApp(appId);
+               return app.isRestrictedApp();
+       }
+
+       // For the functional menu edit
+       @Override
+       public List<LocalRole> getAppRoles(Long appId) {
+               String sql = "";
+               if (isRestrictedApp(appId)) {
+                       sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where ROLE_ID = '" + RESTRICTED_APP_ROLE_ID + "'";
+               } else {
+                       sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where APP_ID = '" + appId + "'";
+               }
+               logQuery(sql);
+               @SuppressWarnings("unchecked")
+               List<LocalRole> appRoles = dataAccessService.executeSQLQuery(sql, LocalRole.class, null);
+               return appRoles;
+       }
+
+       protected String userAppsQuery(EPUser user) {
+               StringBuilder query = new StringBuilder();
+               if (adminRolesService.isSuperAdmin(user)) {
+                       query.append("SELECT * FROM FN_APP where FN_APP.ENABLED = 'Y' ORDER BY APP_NAME");
+               } else {
+                       query.append("SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID = FN_APP.APP_ID where ");
+                       query.append(
+                                       "FN_USER_ROLE.USER_ID = " + user.getId() + " AND FN_USER_ROLE.ROLE_ID != " + SUPER_ADMIN_ROLE_ID);
+                       query.append(" AND FN_APP.ENABLED = 'Y'");
+               }
+               return query.toString();
+       }
+
+       protected FieldsValidator onboardingAppFieldsChecker(OnboardingApp onboardingApp) {
+               FieldsValidator fieldsValidator = new FieldsValidator();
+               if (onboardingApp.name == null || onboardingApp.name.length() == 0 || onboardingApp.url == null
+                               || onboardingApp.url.length() == 0 || onboardingApp.restrictedApp == null
+                               || onboardingApp.isOpen == null || onboardingApp.isEnabled == null
+                               || (onboardingApp.id != null && onboardingApp.id.equals(ECOMP_APP_ID))
+                               // For a normal app (appType==1), these fields must be filled
+                               // in.
+                               // For a restricted app (appType==2), they will be empty.
+                               || ((!onboardingApp.restrictedApp)
+                                               && (onboardingApp.username == null || onboardingApp.username.length() == 0
+                                                               || onboardingApp.appPassword == null || onboardingApp.appPassword.length() == 0))) {
+                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+               }
+               return fieldsValidator;
+       }
+
+       @Override
+       public List<EPApp> getUserApps(EPUser user) {
+               List<EPApp> openApps = getOpenApps();
+
+               if (user.isGuest()) {
+                       return openApps;
+               } else {
+                       String sql = userAppsQuery(user);
+                       logQuery(sql);
+
+                       // TreeSet<EPApp> distinctApps = new TreeSet<EPApp>();
+                       List<EPApp> appsList = new ArrayList<>();
+                       @SuppressWarnings("unchecked")
+                       List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);
+                       HashSet<EPApp> appSet = new HashSet<>();
+                       for (EPApp app : adminApps) {
+                               appSet.add(app);
+                               appsList.add(app);
+                       }
+
+                       for (EPApp app : openApps) {
+                               if (!appSet.contains(app))
+                                       appsList.add(app);
+                       }
+
+                       return appsList;
+               }
+       }
+
+       @Override
+       public List<EPApp> getPersAdminApps(EPUser user) {
+               final Map<String, Long> params = new HashMap<>();
+               params.put("userId", user.getId());
+               // Named query is stored in EP.hbm.xml, mapped to EPApp
+               @SuppressWarnings("unchecked")
+               List<EPApp> list = dataAccessService.executeNamedQuery("getPersAdminApps", params, null);
+               return list;
+       }
+
+       @Override
+       public List<EPApp> getPersUserApps(EPUser user) {
+               final Map<String, Long> params = new HashMap<>();
+               params.put("userId", user.getId());
+               // Named query is stored in EP.hbm.xml, mapped to EPApp
+               @SuppressWarnings("unchecked")
+               List<EPApp> list = dataAccessService.executeNamedQuery("getPersUserApps", params, null);
+               return list;
+       }
+
+       /*
+        * (non-Javadoc)
+        *
+        * @see
+        * org.openecomp.portalapp.portal.service.EPAppService#getAppCatalog(com.att
+        * .fusionapp.ecomp.portal.domain.EPUser)
+        */
+       @Override
+       public List<AppCatalogItem> getUserAppCatalog(EPUser user) {
+               final Map<String, Long> params = new HashMap<>();
+               params.put("userId", user.getId());
+               // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem
+               @SuppressWarnings("unchecked")
+               List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getUserAppCatalog", params, null);
+               return list;
+       }
+
+       /*
+        * (non-Javadoc)
+        *
+        * @see
+        * org.openecomp.portalapp.portal.service.EPAppService#getAdminAppCatalog(
+        * org.openecomp.portalapp.portal.domain.EPUser)
+        */
+       @Override
+       public List<AppCatalogItem> getAdminAppCatalog(EPUser user) {
+               final Map<String, Long> params = new HashMap<>();
+               params.put("userId", user.getId());
+               // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem
+               @SuppressWarnings("unchecked")
+               List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getAdminAppCatalog", params, null);
+               return list;
+       }
+
+       private List<EPApp> getOpenApps() {
+               @SuppressWarnings("unchecked")
+               List<EPApp> openApps = dataAccessService.getList(EPApp.class, " where open='Y' and enabled='Y'", null, null);
+               return openApps;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public List<EPApp> getAppsOrderByName(EPUser user) {
+               final Map<String, Long> params = new HashMap<>();
+               List<EPApp> sortedAppsByName = null;
+               try {
+                       if (adminRolesService.isSuperAdmin(user)) {
+                               params.put("userId", user.getId());
+                               sortedAppsByName = dataAccessService.executeNamedQuery("getPersAdminAppsOrderByName", params, null);
+                       } else {
+                               params.put("userId", user.getId());
+                               sortedAppsByName = dataAccessService.executeNamedQuery("getPersUserAppsOrderByName", params, null);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByName failed", e);
+               }
+               return sortedAppsByName;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public List<EPApp> getAppsOrderByLastUsed(EPUser user) {
+
+               final Map<String, Long> params = new HashMap<>();
+               List<EPApp> sortedAppsByLastUsed = new ArrayList<EPApp>();
+               List<EPApp> finalsortedAppsByLastUsed = new ArrayList<EPApp>();
+               try {
+                       if (adminRolesService.isSuperAdmin(user)) {
+                               params.put("userId", user.getId());
+                               sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByLastUsed", params, null);
+                       } else {
+                               params.put("userId", user.getId());
+                               sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByLastUsed", params, null);
+                       }
+                       Set<String> epAppSet = new HashSet<String>();
+                       for (EPApp eapp : sortedAppsByLastUsed)
+                               if (!epAppSet.contains(eapp.getName())) {
+                                       finalsortedAppsByLastUsed.add(eapp);
+                                       epAppSet.add(eapp.getName());
+                               }
+
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByLastUsed failed", e);
+               }
+               return finalsortedAppsByLastUsed;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public List<EPApp> getAppsOrderByMostUsed(EPUser user) {
+               final Map<String, Long> params = new HashMap<>();
+               List<EPApp> sortedAppsByMostUsed = new ArrayList<EPApp>();
+               List<EPApp> finalsortedAppsByMostUsed = new ArrayList<EPApp>();
+               try {
+                       if (adminRolesService.isSuperAdmin(user)) {
+                               params.put("userId", user.getId());
+                               sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByMostUsed", params, null);
+                       } else {
+                               params.put("userId", user.getId());
+                               sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByMostUsed", params, null);
+                       }
+                       Set<String> epAppSet = new HashSet<String>();
+
+                       for (EPApp eapp : sortedAppsByMostUsed) {
+                               if (!epAppSet.contains(eapp.getName())) {
+                                       finalsortedAppsByMostUsed.add(eapp);
+                                       epAppSet.add(eapp.getName());
+                               }
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByMostUsed failed", e);
+               }
+
+               return finalsortedAppsByMostUsed;
+       }
+
+       /*
+        * This Method retrieves the User Apps by Sort Manual Preference
+        *
+        * @param: user--contains LoggedIn User Data
+        */
+       @SuppressWarnings("unchecked")
+       @Override
+       public List<EPApp> getAppsOrderByManual(EPUser user) {
+               final Map<String, Long> params = new HashMap<>();
+               List<EPApp> sortedAppsByManual = new ArrayList<EPApp>();
+               List<EPApp> finalsortedAppsByManual = new ArrayList<EPApp>();
+               try {
+                       if (adminRolesService.isSuperAdmin(user)) {
+                               params.put("userId", user.getId());
+                               sortedAppsByManual = dataAccessService.executeNamedQuery("getAdminAppsOrderByManual", params, null);
+                       } else {
+                               params.put("userId", user.getId());
+                               sortedAppsByManual = dataAccessService.executeNamedQuery("getUserAppsOrderByManual", params, null);
+                       }
+                       Set<String> epAppSet = new HashSet<String>();
+
+                       for (EPApp eapp : sortedAppsByManual) {
+                               if (!epAppSet.contains(eapp.getName())) {
+                                       finalsortedAppsByManual.add(eapp);
+                                       epAppSet.add(eapp.getName());
+                               }
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByManual failed", e);
+               }
+               return finalsortedAppsByManual;
+       }
+
+       @Override
+       public List<OnboardingApp> getOnboardingApps() {
+               @SuppressWarnings("unchecked")
+               List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id!=" + ECOMP_APP_ID, null, null);
+               List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
+               for (EPApp app : apps) {
+                       OnboardingApp onboardingApp = new OnboardingApp();
+                       createOnboardingFromApp(app, onboardingApp);
+                       onboardingAppsList.add(onboardingApp);
+               }
+               return onboardingAppsList;
+       }
+
+       @Override
+       public List<OnboardingApp> getEnabledNonOpenOnboardingApps() {
+               @SuppressWarnings("unchecked")
+               List<EPApp> apps = dataAccessService.getList(EPApp.class,
+                               " where enabled = true and open = false and id!=" + ECOMP_APP_ID, null, null);
+               List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();
+               for (EPApp app : apps) {
+                       OnboardingApp onboardingApp = new OnboardingApp();
+                       createOnboardingFromApp(app, onboardingApp);
+                       onboardingAppsList.add(onboardingApp);
+               }
+               return onboardingAppsList;
+       }
+
+       @SuppressWarnings("unchecked")
+       private void validateOnboardingApp(OnboardingApp onboardingApp, FieldsValidator fieldsValidator) {
+               boolean duplicatedUrl = false;
+               boolean duplicatedName = false;
+               List<EPApp> apps;
+               if (onboardingApp.id == null) {
+                       apps = dataAccessService.getList(EPApp.class,
+                                       " where url = '" + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);
+               } else {
+                       apps = dataAccessService.getList(EPApp.class, " where id = " + onboardingApp.id + " or url = '"
+                                       + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);
+               }
+               for (EPApp app : apps) {
+                       if (onboardingApp.id != null && onboardingApp.id.equals(app.getId())) {
+                               continue;
+                       }
+                       if (!duplicatedUrl && app.getUrl().equalsIgnoreCase(onboardingApp.url)) {
+                               duplicatedUrl = true;
+                               if (duplicatedName) {
+                                       break;
+                               }
+                       }
+                       if (!duplicatedName && app.getName().equalsIgnoreCase(onboardingApp.name)) {
+                               duplicatedName = true;
+                               if (duplicatedUrl) {
+                                       break;
+                               }
+                       }
+               }
+               if (duplicatedUrl || duplicatedName) {
+                       if (duplicatedUrl) {
+                               fieldsValidator.addProblematicFieldName(urlField);
+                       }
+                       if (duplicatedName) {
+                               fieldsValidator.addProblematicFieldName(nameField);
+                       }
+                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
+                       fieldsValidator.errorCode = new Long(EPCommonSystemProperties.DUBLICATED_FIELD_VALUE_ECOMP_ERROR);
+               }
+       }
+
+       @Override
+       public FieldsValidator modifyOnboardingApp(OnboardingApp modifiedOnboardingApp, EPUser user) {
+               logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering modifyOnboardingApp");
+               FieldsValidator fieldsValidator = onboardingAppFieldsChecker(modifiedOnboardingApp);
+               if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+                       validateOnboardingApp(modifiedOnboardingApp, fieldsValidator);
+               }
+               if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+                       if (modifiedOnboardingApp.id != null) {
+                               updateApp(modifiedOnboardingApp.id, modifiedOnboardingApp, fieldsValidator, user);
+                       } else {
+                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+                       }
+               }
+               return fieldsValidator;
+       }
+
+       @Override
+       public FieldsValidator addOnboardingApp(OnboardingApp newOnboardingApp, EPUser user) {
+               FieldsValidator fieldsValidator = onboardingAppFieldsChecker(newOnboardingApp);
+               if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+                       validateOnboardingApp(newOnboardingApp, fieldsValidator);
+               }
+               if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {
+                       if (newOnboardingApp.id == null) {
+                               updateApp(null, newOnboardingApp, fieldsValidator, user);
+                       } else {
+                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);
+                       }
+               }
+               return fieldsValidator;
+       }
+
+       @Override
+       public FieldsValidator deleteOnboardingApp(EPUser user, Long appid) {
+               FieldsValidator fieldsValidator = new FieldsValidator();
+               if (!adminRolesService.isSuperAdmin(user)) {
+                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_FORBIDDEN);
+                       return fieldsValidator;
+               }
+               Boolean result = false;
+               Session localSession = null;
+               Transaction transaction = null;
+               try {
+                       localSession = sessionFactory.openSession();
+                       transaction = localSession.beginTransaction();
+
+                       // 1) Remove the URL for any functional menu item associated with
+                       // this app
+                       String sql = "UPDATE fn_menu_functional m, fn_menu_functional_roles mr SET m.url='' "
+                                       + " WHERE m.menu_id=mr.menu_id " + " AND mr.app_id='" + appid + "'";
+                       logQuery(sql);
+                       Query query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove any favorites associated with a menu item that is
+                       // associated with this app
+                       sql = "Delete from fn_menu_favorites " + " using fn_menu_favorites inner join fn_menu_functional_roles "
+                                       + " where fn_menu_functional_roles.app_id='" + appid + "' "
+                                       + " AND fn_menu_functional_roles.menu_id=fn_menu_favorites.menu_id";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove all role, appid records from fn_menu_functional_role
+                       // that are associated with this app
+                       sql = "delete from fn_menu_functional_roles where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove all records from fn_user_role associated with this app
+                       sql = "delete from fn_user_role where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove any widgets associated with this app
+                       sql = "delete from ep_widget_catalog_role where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove any roles associated with this app
+                       sql = "delete from ep_role_notification " + " using ep_role_notification inner join fn_role "
+                                       + " where fn_role.app_id='" + appid + "' " + " and ep_role_notification.role_id= fn_role.role_id";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove all records from fn_role associated with this app
+                       sql = "delete from fn_role where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove app contact us entries
+                       sql = "delete from fn_app_contact_us where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove rows in the app personalization selection table
+                       sql = "delete from fn_pers_user_app_sel where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove rows in the app personalization sort table
+                       sql = "delete from ep_pers_user_app_man_sort where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove rows in the app personalization sort table
+                       sql = "delete from ep_user_roles_request where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Remove rows in the app personalization sort table
+                       sql = "delete from ep_web_analytics_source where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       // Delete the app
+                       sql = "delete from fn_app where app_id='" + appid + "'";
+                       logQuery(sql);
+                       query = localSession.createSQLQuery(sql);
+                       query.executeUpdate();
+
+                       transaction.commit();
+                       result = true;
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);
+                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError);
+                       EcompPortalUtils.rollbackTransaction(transaction, "deleteOnboardingApp rollback, exception = " + e);
+               } finally {
+                       EcompPortalUtils.closeLocalSession(localSession, "deleteOnboardingApp");
+               }
+               if (!result) {
+                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+               }
+               return fieldsValidator;
+       }
+
+       private static Object syncRests = new Object();
+
+       // An app has been enabled/disabled. Must enable/disable all associated
+       // functional menu items.
+       private void setFunctionalMenuItemsEnabled(Session localSession, Boolean enabled, Long appId) {
+               String active_yn = enabled ? "Y" : "N";
+               String sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn "
+                               + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "
+                               + " AND r.app_id = '" + appId + "' ";
+               logQuery(sql);
+               @SuppressWarnings("unchecked")
+               List<FunctionalMenuItem> menuItems = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);
+               for (FunctionalMenuItem menuItem : menuItems) {
+                       FunctionalMenuItem myMenuItem = (FunctionalMenuItem) localSession.get(FunctionalMenuItem.class,
+                                       menuItem.menuId);
+                       myMenuItem.active_yn = active_yn;
+                       localSession.save(myMenuItem);
+               }
+       }
+
+       // Attention! If (appId == null) we use this function to create application
+       // otherwise we use it to modify existing application
+       private void updateApp(Long appId, OnboardingApp onboardingApp, FieldsValidator fieldsValidator, EPUser user) {
+               logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering updateApp");
+               // Separate out the code for a restricted app, since it doesn't need any
+               // of the UEB code.
+               if (onboardingApp.restrictedApp) {
+                       boolean result = false;
+                       Session localSession = null;
+                       Transaction transaction = null;
+                       try {
+                               localSession = sessionFactory.openSession();
+                               transaction = localSession.beginTransaction();
+                               EPApp app;
+                               if (appId == null) {
+                                       app = new EPApp();
+                               } else {
+                                       app = (EPApp) localSession.get(EPApp.class, appId);
+                                       if (app == null || app.getId() == null) { // App is already
+                                               // deleted!
+                                               transaction.commit();
+                                               localSession.close();
+                                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);
+                                               return;
+                                       }
+                               }
+                               createAppFromOnboarding(app, onboardingApp, localSession);
+                               localSession.saveOrUpdate(app);
+                               // Enable or disable all menu items associated with this app
+                               setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);
+                               transaction.commit();
+                               result = true;
+                       } catch (Exception e) {
+                               EcompPortalUtils.rollbackTransaction(transaction,
+                                               "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));
+                       } finally {
+                               EcompPortalUtils.closeLocalSession(localSession, "updateApp");
+                       }
+                       if (!result) {
+                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                       }
+
+               } else {
+                       synchronized (syncRests) {
+                               boolean result = false;
+                               Session localSession = null;
+                               Transaction transaction = null;
+                               try {
+                                       localSession = sessionFactory.openSession();
+                                       transaction = localSession.beginTransaction();
+                                       EPApp app;
+                                       if (appId == null) {
+                                               app = new EPApp();
+                                               // -------------------------------------------------------------------------------------------
+                                               // Register this App with the UEB communication server.
+                                               // Save
+                                               // the App's unique mailbox/topic
+                                               // name and keys to the FN_APP table. The App's mailbox
+                                               // and
+                                               // keys will be visible to the
+                                               // admin on the ECOMP portal.
+                                               // -------------------------------------------------------------------------------------------
+                                               TopicManager topicManager = new TopicManager() {
+
+                                                       EPAppCommonServiceImpl service;
+
+                                                       public void init(EPAppCommonServiceImpl _service) {
+                                                               service = _service;
+                                                       }
+
+                                                       public void createTopic(String key, String secret, String topicName,
+                                                                       String topicDescription) throws HttpException, CambriaApiException, IOException {
+
+                                                               init(EPAppCommonServiceImpl.this);
+                                                               final LinkedList<String> urlList = Helper.uebUrlList();
+                                                               if (logger.isInfoEnabled()) {
+                                                                       logger.info("==> createTopic");
+                                                                       logger.info("topicName: " + topicName);
+                                                                       logger.info("topicDescription: " + topicDescription);
+                                                               }
+                                                               CambriaTopicManager tm = null;
+                                                               try {
+                                                                       tm = service.getTopicManager(urlList, key, secret);
+                                                               } catch (Exception e) {
+                                                                       logger.error("pub.build Exception ", e);
+                                                                       throw new CambriaApiException(topicName);
+                                                               }
+                                                               tm.createTopic(topicName, topicDescription, 1, 1);
+                                                       }
+
+                                                       public void addPublisher(String topicOwnerKey, String topicOwnerSecret, String publisherKey,
+                                                                       String topicName) throws HttpException, CambriaApiException, IOException {
+                                                               logger.info("==> addPublisher to topic " + topicName);
+                                                               final LinkedList<String> urlList = Helper.uebUrlList();
+                                                               CambriaTopicManager tm = null;
+                                                               try {
+                                                                       tm = service.getTopicManager(urlList, topicOwnerKey, topicOwnerSecret);
+                                                               } catch (Exception e) {
+                                                                       logger.error("pub.build Exception ", e);
+                                                                       throw new CambriaApiException(topicName);
+                                                               }
+                                                               tm.allowProducer(topicName, publisherKey);
+                                                       }
+
+                                               };
+                                               final CambriaIdentityManager im = new CambriaClientBuilders.IdentityManagerBuilder()
+                                                               .usingHosts(Helper.uebUrlList()).build();
+                                               com.att.nsa.apiClient.credentials.ApiCredential credential = im.createApiKey(user.getEmail(),
+                                                               "ECOMP Portal Owner");
+                                               String appKey = credential.getApiKey();
+                                               String appSecret = credential.getApiSecret();
+                                               String appMailboxName = null;
+
+                                               int maxNumAttemptsToCreateATopic = 3;
+                                               boolean successfullyCreatedMailbox = false;
+                                               for (int i = 0; i < maxNumAttemptsToCreateATopic; i++) {
+                                                       appMailboxName = "ECOMP-PORTAL-OUTBOX-" + (int) (Math.random() * 100000.0);
+
+                                                       try {
+                                                               topicManager.createTopic(
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),
+                                                                               appMailboxName, "ECOMP outbox for app" + onboardingApp.name);
+                                                               successfullyCreatedMailbox = true;
+                                                               logger.debug(EELFLoggerDelegate.debugLogger,
+                                                                               "Successfully created " + appMailboxName + " for App " + onboardingApp.name);
+                                                               logger.debug(EELFLoggerDelegate.debugLogger, "    Key = " + appKey + " Secret = "
+                                                                               + appSecret + " generated using = " + user.getEmail());
+                                                               break;
+                                                       } catch (HttpException e) {
+                                                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebConnectionError, e);
+                                                               if (e.getStatusCode() == 409) {
+                                                                       logger.error(EELFLoggerDelegate.errorLogger, "Topic/mailbox " + appMailboxName
+                                                                                       + " already exists. Will try using a different name", e);
+                                                               } else {
+                                                                       logger.error(EELFLoggerDelegate.errorLogger, "HttpException when onboarding App: ",
+                                                                                       e);
+                                                               }
+                                                       }
+                                               }
+
+                                               if (successfullyCreatedMailbox) {
+                                                       onboardingApp.setUebTopicName(appMailboxName);
+                                                       onboardingApp.setUebKey(appKey);
+                                                       onboardingApp.setUebSecret(appSecret);
+
+                                                       try {
+                                                               /*
+                                                                * EP is a publisher to this App's new mailbox
+                                                                */
+                                                               topicManager.addPublisher(
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+                                                                               appMailboxName);
+
+                                                               /*
+                                                                * This App is a subscriber of its own mailbox
+                                                                */
+                                                               topicManager.addSubscriber(
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,
+                                                                               appMailboxName);
+
+                                                               /*
+                                                                * This App is a publisher to EP
+                                                                */
+                                                               topicManager.addPublisher(
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,
+                                                                               PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME));
+                                                       } catch (HttpException | CambriaApiException | IOException e) {
+                                                               EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);
+                                                               logger.error(EELFLoggerDelegate.errorLogger,
+                                                                               "Error when configuring Publisher/Subscriber for App's new mailbox", e);
+                                                               transaction.commit();
+                                                               localSession.close();
+                                                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
+                                                               return;
+                                                       }
+                                               } else {
+                                                       transaction.commit();
+                                                       localSession.close();
+                                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);
+                                                       return;
+                                               }
+                                       } else {
+                                               app = (EPApp) localSession.get(EPApp.class, appId);
+                                               if (app == null || app.getId() == null) {
+                                                       // App is already deleted!
+                                                       transaction.commit();
+                                                       localSession.close();
+                                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);
+                                                       return;
+                                               }
+                                       }
+                                       logger.debug(EELFLoggerDelegate.debugLogger, "LR: about to call createAppFromOnboarding");
+                                       createAppFromOnboarding(app, onboardingApp, localSession);
+                                       logger.debug(EELFLoggerDelegate.debugLogger,
+                                                       "LR: updateApp: finished calling createAppFromOnboarding");
+                                       localSession.saveOrUpdate(app);
+                                       logger.debug(EELFLoggerDelegate.debugLogger,
+                                                       "LR: updateApp: finished calling localSession.saveOrUpdate");
+                                       // Enable or disable all menu items associated with this app
+                                       setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);
+                                       logger.debug(EELFLoggerDelegate.debugLogger,
+                                                       "LR: updateApp: finished calling setFunctionalMenuItemsEnabled");
+                                       transaction.commit();
+                                       logger.debug(EELFLoggerDelegate.debugLogger, "LR: updateApp: finished calling transaction.commit");
+                                       epUebHelper.addPublisher(app);
+                                       logger.debug(EELFLoggerDelegate.debugLogger,
+                                                       "LR: updateApp: finished calling epUebHelper.addPublisher");
+                                       result = true;
+                               } catch (Exception e) {
+                                       logger.error(EELFLoggerDelegate.errorLogger, "updateApp failed", e);
+                                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);
+                                       EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+                                       EcompPortalUtils.rollbackTransaction(transaction,
+                                                       "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));
+                               } finally {
+                                       EcompPortalUtils.closeLocalSession(localSession, "updateApp");
+                               }
+                               if (!result) {
+                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                               }
+                       }
+               }
+       }
+
+       public CambriaTopicManager getTopicManager(LinkedList<String> urlList, String key, String secret)
+                       throws GeneralSecurityException, Exception {
+               throw new Exception("This method can only be invoked from child class");
+       }
+
+       /**
+        * Populates a transport model of the application from a database row model.
+        * Leaves out the thumbnail because the FE fetches images via a different
+        * API.
+        * 
+        * @param app
+        *            Model of database row
+        * @param onboardingApp
+        *            Model for transport as JSON
+        */
+       @Override
+       public void createOnboardingFromApp(EPApp app, OnboardingApp onboardingApp) {
+               onboardingApp.id = app.getId();
+               onboardingApp.name = app.getName();
+               onboardingApp.imageUrl = app.getImageUrl();
+               onboardingApp.description = app.getDescription();
+               onboardingApp.notes = app.getNotes();
+               onboardingApp.url = app.getUrl();
+               onboardingApp.alternateUrl = app.getAlternateUrl();
+               onboardingApp.restUrl = app.getAppRestEndpoint();
+               onboardingApp.isOpen = app.getOpen();
+               onboardingApp.isEnabled = app.getEnabled();
+               onboardingApp.username = app.getUsername();
+               onboardingApp.appPassword = decryptedPassword(app.getAppPassword(), app);
+               onboardingApp.uebTopicName = app.getUebTopicName();
+               onboardingApp.uebKey = app.getUebKey();
+               onboardingApp.uebSecret = app.getUebSecret();
+               onboardingApp.setRestrictedApp(app.isRestrictedApp());
+               // if (app.getThumbnail() != null)
+               // onboardingApp.thumbnail = new
+               // String(Base64.getEncoder().encode(app.getThumbnail()));
+       }
+
+       /**
+        * Creates a database object for an application from an uploaded transport
+        * model. Must decode the thumbnail, if any.
+        * 
+        * @param app
+        * @param onboardingApp
+        * @param localSession
+        * @return The first argument.
+        */
+       protected EPApp createAppFromOnboarding(EPApp app, OnboardingApp onboardingApp, Session localSession) {
+               app.setName(onboardingApp.name);
+               app.setDescription(onboardingApp.description);
+               app.setNotes(onboardingApp.notes);
+               app.setUrl(onboardingApp.url);
+               app.setAlternateUrl(onboardingApp.alternateUrl);
+               app.setAppRestEndpoint(onboardingApp.restUrl);
+               app.setOpen(onboardingApp.isOpen);
+               app.setEnabled(onboardingApp.isEnabled);
+               app.setUsername(onboardingApp.username);
+               app.setAppPassword(this.encryptedPassword(onboardingApp.appPassword, app));
+               app.setUebTopicName(onboardingApp.uebTopicName);
+               app.setUebKey(onboardingApp.uebKey);
+               app.setUebSecret(onboardingApp.uebSecret);
+               app.setRestrictedApp(onboardingApp.restrictedApp);
+               if (!StringUtils.isEmpty(onboardingApp.thumbnail)) {
+                       logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: onboarding thumbnail is NOT empty");
+                       String[] splitBase64Thumbnail = onboardingApp.thumbnail.split("base64,");
+                       logger.debug(EELFLoggerDelegate.debugLogger,
+                                       "createAppFromOnboarding: length of splitBase64Thumbnail: " + splitBase64Thumbnail.length);
+                       if (splitBase64Thumbnail.length > 1) {
+                               // This occurs when we have a new image, not an existing image
+                               byte[] decodedImage = Base64.getDecoder().decode(splitBase64Thumbnail[1].getBytes());
+                               logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: finished calling decode");
+                               // This is basically a boolean indicator that an image is
+                               // present.
+                               app.setImageUrl(constructImageName(onboardingApp));
+                               app.setThumbnail(decodedImage);
+                       }
+               } else if (app.getThumbnail() != null && onboardingApp.imageLink == null) {
+                       // The thumbnail that came in from the json is empty; the previous
+                       // thumbnail is NOT empty. Must delete it.
+                       logger.debug(EELFLoggerDelegate.debugLogger,
+                                       "createAppFromOnboarding: onboarding thumbnail is empty; db thumbnail is NOT null");
+                       app.setImageUrl(null);
+                       app.setThumbnail(null);
+               } else {
+                       logger.debug(EELFLoggerDelegate.debugLogger,
+                                       "createAppFromOnboarding: making no changes to thumbnail as imageLink is not null");
+               }
+               return app;
+       }
+
+       protected String constructImageName(OnboardingApp onboardingApp) {
+               return "portal_" + String.valueOf(onboardingApp.url.hashCode() + "_" + (int) (Math.random() * 100000.0))
+                               + ".png";
+       }
+
+       // Don't encrypt or decrypt the password if it is null or the empty string
+       private String decryptedPassword(String encryptedAppPwd, EPApp app) {
+               String result = "";
+               if (encryptedAppPwd != null & encryptedAppPwd.length() > 0) {
+                       try {
+                               result = CipherUtil.decrypt(encryptedAppPwd,
+                                               SystemProperties.getProperty(SystemProperties.Decryption_Key));
+                       } catch (Exception e) {
+                               logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed for app " + app.getName(), e);
+                       }
+               }
+               return result;
+       }
+
+       protected String encryptedPassword(String decryptedAppPwd, EPApp app) {
+               String result = "";
+               if (decryptedAppPwd != null & decryptedAppPwd.length() > 0) {
+                       try {
+                               result = CipherUtil.encrypt(decryptedAppPwd,
+                                               SystemProperties.getProperty(SystemProperties.Decryption_Key));
+                       } catch (Exception e) {
+                               logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword failed for app " + app.getName(), e);
+                       }
+               }
+               return result;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public FieldsValidator saveWidgetsSortManual(List<EPWidgetsSortPreference> widgetsSortManual, EPUser user) {
+               FieldsValidator fieldsValidator = new FieldsValidator();
+               final Map<String, Long> params = new HashMap<>();
+               List<EPWidgetsManualSortPreference> epManualWidgets = new ArrayList<EPWidgetsManualSortPreference>();
+
+               try {
+                       params.put("userId", user.getId());
+                       epManualWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);
+                       Map<Long, EPWidgetsManualSortPreference> existingWidgetsIds = new HashMap<Long, EPWidgetsManualSortPreference>();
+                       for (EPWidgetsManualSortPreference userWidgetManualPref : epManualWidgets) {
+                               existingWidgetsIds.put(userWidgetManualPref.getWidgetId(), userWidgetManualPref);
+                       }
+                       for (EPWidgetsSortPreference epWidgetsManPref : widgetsSortManual) {
+                               if (epWidgetsManPref.getWidgetid() != null) {
+                                       Long widgetid = epWidgetsManPref.getWidgetid();
+                                       if (existingWidgetsIds.containsKey(widgetid)) {
+                                               EPWidgetsManualSortPreference epWidgetsManualSort = existingWidgetsIds.get(widgetid);
+                                               epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());
+                                               epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
+                                               epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
+                                               epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
+                                               HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
+                                               additionalUpdateParam.put("userId", epWidgetsManualSort.getUserId());
+                                               dataAccessService.saveDomainObject(epWidgetsManualSort, additionalUpdateParam);
+                                       } else {
+                                               EPWidgetsManualSortPreference epWidgetsManualSort = new EPWidgetsManualSortPreference();
+                                               epWidgetsManualSort.setWidgetId(epWidgetsManPref.getWidgetid());
+                                               epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());
+                                               epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());
+                                               epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());
+                                               epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());
+                                               epWidgetsManualSort.setUserId(Ints.checkedCast(user.getId()));
+                                               dataAccessService.saveDomainObject(epWidgetsManualSort, null);
+                                       }
+                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+                               }
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "saveWidgetsSortManual failed", e);
+                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+               }
+               return fieldsValidator;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public FieldsValidator deleteUserWidgetSortPref(List<EPWidgetsSortPreference> delWidgetSortPref, EPUser user) {
+               FieldsValidator fieldsValidator = new FieldsValidator();
+               final Map<String, Long> params = new HashMap<>();
+               List<EPWidgetsManualSortPreference> epWidgets = new ArrayList<EPWidgetsManualSortPreference>();
+               try {
+                       params.put("userId", user.getId());
+                       epWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);
+                       Map<Long, EPWidgetsManualSortPreference> existingWidgetIds = new HashMap<Long, EPWidgetsManualSortPreference>();
+                       for (EPWidgetsManualSortPreference userWidgetSortPref : epWidgets) {
+                               existingWidgetIds.put(userWidgetSortPref.getWidgetId(), userWidgetSortPref);
+                       }
+                       for (EPWidgetsSortPreference delEpWidgetsManPref : delWidgetSortPref) {
+                               if (delEpWidgetsManPref.getWidgetid() != null) {
+                                       Long widgetId = delEpWidgetsManPref.getWidgetid();
+                                       if (existingWidgetIds.containsKey(widgetId)) {
+                                               dataAccessService.deleteDomainObjects(EPWidgetsManualSortPreference.class,
+                                                               "widget_id=" + widgetId + " AND user_id=" + user.getId(), null);
+                                       }
+                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+                               }
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "deleteUserWidgetSortPref failed", e);
+                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+               }
+               return fieldsValidator;
+       }
+
+       /*
+        * This Method Stores the Sort Order of User Apps by Sort Manual Preference
+        *
+        * @param: appsSortManual--contains User Apps Data
+        *
+        * @param: user--contains LoggedIn User Data
+        */
+       @SuppressWarnings("unchecked")
+       @Override
+       public FieldsValidator saveAppsSortManual(List<EPAppsManualPreference> appsSortManual, EPUser user) {
+               FieldsValidator fieldsValidator = new FieldsValidator();
+               final Map<String, Long> params = new HashMap<>();
+               List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();
+
+               try {
+                       params.put("userId", user.getId());
+                       epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);
+                       Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();
+                       for (EPUserAppsManualSortPreference userAppManualPref : epManualApps) {
+                               existingAppIds.put(userAppManualPref.getAppId(), userAppManualPref);
+                       }
+                       for (EPAppsManualPreference epAppsManPref : appsSortManual) {
+                               if (epAppsManPref.getAppid() != null) {
+                                       Long appid = epAppsManPref.getAppid();
+                                       if (existingAppIds.containsKey(appid)) {
+                                               EPUserAppsManualSortPreference epAppsManualSort = existingAppIds.get(appid);
+                                               epAppsManualSort
+                                                               .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
+                                               HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
+                                               additionalUpdateParam.put("userId", epAppsManualSort.getUserId());
+                                               dataAccessService.saveDomainObject(epAppsManualSort, additionalUpdateParam);
+                                       } else {
+                                               EPUserAppsManualSortPreference epAppsManualSort = new EPUserAppsManualSortPreference();
+                                               epAppsManualSort.setAppId(epAppsManPref.getAppid());
+                                               epAppsManualSort
+                                                               .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);
+                                               epAppsManualSort.setUserId(Ints.checkedCast(user.getId()));
+                                               dataAccessService.saveDomainObject(epAppsManualSort, null);
+                                       }
+                                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+                               }
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortManual failed", e);
+                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+               }
+               return fieldsValidator;
+       }
+
+       /*
+        * (non-Javadoc)
+        *
+        * @see org.openecomp.portalapp.portal.service.EPAppService#
+        * deleteUserAppSortManual(java.lang.String,
+        * org.openecomp.portalapp.portal.domain.EPUser)
+        */
+       @SuppressWarnings("unchecked")
+       @Override
+       public FieldsValidator deleteUserAppSortManual(EPDeleteAppsManualSortPref delAppSortManual, EPUser user) {
+               FieldsValidator fieldsValidator = new FieldsValidator();
+               final Map<String, Long> params = new HashMap<>();
+               List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();
+               try {
+                       params.put("userId", user.getId());
+                       epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);
+                       Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();
+                       for (EPUserAppsManualSortPreference userAppPref : epManualApps) {
+                               existingAppIds.put(userAppPref.getAppId(), userAppPref);
+                       }
+                       if (existingAppIds.containsKey(delAppSortManual.getAppId()) && !delAppSortManual.isSelect()) {
+                               dataAccessService.deleteDomainObjects(EPUserAppsManualSortPreference.class,
+                                               "app_id=" + delAppSortManual.getAppId() + " AND user_id=" + user.getId(), null);
+                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);
+                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+               }
+               return fieldsValidator;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public FieldsValidator saveAppsSortPreference(EPAppsSortPreference appsSortPreference, EPUser user) {
+               FieldsValidator fieldsValidator = new FieldsValidator();
+               final Map<String, Long> params = new HashMap<>();
+               List<EPUserAppsSortPreference> epSortTypes = new ArrayList<EPUserAppsSortPreference>();
+               EPUserAppsSortPreference usrSortPr = null;
+               try {
+                       params.put("userId", user.getId());
+                       epSortTypes = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);
+                       if (epSortTypes.size() == 0) {
+                               usrSortPr = new EPUserAppsSortPreference();
+                               usrSortPr.setUserId(Ints.checkedCast(user.getId()));
+                               usrSortPr.setSortPref(appsSortPreference.getValue());
+                               dataAccessService.saveDomainObject(usrSortPr, null);
+                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+                       } else {
+                               usrSortPr = epSortTypes.get(0);
+                               usrSortPr.setSortPref(appsSortPreference.getValue());
+                               HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();
+                               additionalUpdateParam.put("userId", usrSortPr.getUserId());
+                               dataAccessService.saveDomainObject(usrSortPr, additionalUpdateParam);
+                               fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);
+                       }
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortPreference failed", e);
+                       fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+               }
+               return fieldsValidator;
+       }
+
+       @SuppressWarnings("unchecked")
+       @Override
+       public String getUserAppsSortTypePreference(EPUser user) {
+               final Map<String, Long> params = new HashMap<>();
+               List<EPUserAppsSortPreference> userSortPrefs = new ArrayList<EPUserAppsSortPreference>();
+               try {
+                       params.put("userId", user.getId());
+                       userSortPrefs = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);
+                       if (userSortPrefs.size() > 0)
+                               return userSortPrefs.get(0).getSortPref();
+                       else
+                               return null;
+               } catch (Exception e) {
+                       logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);
+               }
+               return null;
+
+       }
+
+       @Override
+       public List<EPApp> getUserRemoteApps(String id) {
+               throw new RuntimeException(" Cannot be called from parent class");
+       }
+
+}