[PORTAL-7] Rebase
[portal.git] / ecomp-portal-BE-common / src / main / java / org / openecomp / portalapp / portal / service / EPAppCommonServiceImpl.java
1 /*-\r
2  * ================================================================================\r
3  * ECOMP Portal\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ================================================================================\r
19  */\r
20 package org.openecomp.portalapp.portal.service;\r
21 \r
22 import java.io.IOException;\r
23 import java.util.ArrayList;\r
24 import java.util.Base64;\r
25 import java.util.HashMap;\r
26 import java.util.HashSet;\r
27 import java.util.List;\r
28 import java.util.Map;\r
29 import java.util.Set;\r
30 \r
31 import javax.annotation.PostConstruct;\r
32 import javax.servlet.http.HttpServletResponse;\r
33 \r
34 import org.apache.commons.lang.StringUtils;\r
35 import org.hibernate.Query;\r
36 import org.hibernate.Session;\r
37 import org.hibernate.SessionFactory;\r
38 import org.hibernate.Transaction;\r
39 import org.openecomp.portalapp.portal.domain.AdminUserApp;\r
40 import org.openecomp.portalapp.portal.domain.AdminUserApplications;\r
41 import org.openecomp.portalapp.portal.domain.AppIdAndNameTransportModel;\r
42 import org.openecomp.portalapp.portal.domain.AppsResponse;\r
43 import org.openecomp.portalapp.portal.domain.EPApp;\r
44 import org.openecomp.portalapp.portal.domain.EPUser;\r
45 import org.openecomp.portalapp.portal.domain.EPUserAppsManualSortPreference;\r
46 import org.openecomp.portalapp.portal.domain.EPUserAppsSortPreference;\r
47 import org.openecomp.portalapp.portal.domain.EPWidgetsManualSortPreference;\r
48 import org.openecomp.portalapp.portal.domain.EcompApp;\r
49 import org.openecomp.portalapp.portal.domain.UserRole;\r
50 import org.openecomp.portalapp.portal.domain.UserRoles;\r
51 import org.openecomp.portalapp.portal.ecomp.model.AppCatalogItem;\r
52 import org.openecomp.portalapp.portal.logging.format.EPAppMessagesEnum;\r
53 import org.openecomp.portalapp.portal.logging.logic.EPLogUtil;\r
54 import org.openecomp.portalapp.portal.transport.EPAppsManualPreference;\r
55 import org.openecomp.portalapp.portal.transport.EPAppsSortPreference;\r
56 import org.openecomp.portalapp.portal.transport.EPDeleteAppsManualSortPref;\r
57 import org.openecomp.portalapp.portal.transport.EPWidgetsSortPreference;\r
58 import org.openecomp.portalapp.portal.transport.FieldsValidator;\r
59 import org.openecomp.portalapp.portal.transport.FunctionalMenuItem;\r
60 import org.openecomp.portalapp.portal.transport.LocalRole;\r
61 import org.openecomp.portalapp.portal.transport.OnboardingApp;\r
62 import org.openecomp.portalapp.portal.ueb.EPUebHelper;\r
63 import org.openecomp.portalapp.portal.utils.EPCommonSystemProperties;\r
64 import org.openecomp.portalapp.portal.utils.EcompPortalUtils;\r
65 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
66 import org.openecomp.portalsdk.core.onboarding.ueb.Helper;\r
67 import org.openecomp.portalsdk.core.onboarding.ueb.TopicManager;\r
68 import org.openecomp.portalsdk.core.onboarding.util.CipherUtil;\r
69 import org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants;\r
70 import org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties;\r
71 import org.openecomp.portalsdk.core.service.DataAccessService;\r
72 import org.openecomp.portalsdk.core.util.SystemProperties;\r
73 import org.springframework.beans.factory.annotation.Autowired;\r
74 \r
75 import com.att.nsa.apiClient.http.HttpException;\r
76 import com.att.nsa.cambria.client.CambriaClient.CambriaApiException;\r
77 import com.att.nsa.cambria.client.CambriaClientBuilders;\r
78 import com.att.nsa.cambria.client.CambriaIdentityManager;\r
79 import com.google.common.primitives.Ints;\r
80 \r
81 public class EPAppCommonServiceImpl implements EPAppService {\r
82 \r
83         protected String ECOMP_APP_ID = "1";\r
84         protected String SUPER_ADMIN_ROLE_ID = "1";\r
85         protected String ACCOUNT_ADMIN_ROLE_ID = "999";\r
86         protected String RESTRICTED_APP_ROLE_ID = "900";\r
87 \r
88         private static final String urlField = "url";\r
89         private static final String nameField = "name";\r
90 \r
91         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EPAppCommonServiceImpl.class);\r
92 \r
93         @Autowired\r
94         AdminRolesService adminRolesService;\r
95         @Autowired\r
96         private SessionFactory sessionFactory;\r
97         @Autowired\r
98         private DataAccessService dataAccessService;\r
99         @Autowired\r
100         EPUebHelper epUebHelper;\r
101 \r
102         @PostConstruct\r
103         private void init() {\r
104                 SUPER_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.SYS_ADMIN_ROLE_ID);\r
105                 ACCOUNT_ADMIN_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.ACCOUNT_ADMIN_ROLE_ID);\r
106                 ECOMP_APP_ID = SystemProperties.getProperty(EPCommonSystemProperties.ECOMP_APP_ID);\r
107                 RESTRICTED_APP_ROLE_ID = SystemProperties.getProperty(EPCommonSystemProperties.RESTRICTED_APP_ROLE_ID);\r
108         }\r
109 \r
110         @Override\r
111         public List<EPApp> getUserAsAdminApps(EPUser user) {\r
112                 if (adminRolesService.isAccountAdmin(user)) {\r
113                         String sql = "SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID=FN_APP.APP_ID where "\r
114                                         + "FN_USER_ROLE.USER_ID=" + user.getId() + " AND FN_USER_ROLE.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID\r
115                                         + " AND FN_APP.ENABLED = 'Y'";\r
116                         logQuery(sql);\r
117                         try {\r
118                                 @SuppressWarnings("unchecked")\r
119                                 List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);\r
120                                 return adminApps;\r
121                         } catch (Exception e) {\r
122                                 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
123                                 return null;\r
124                         }\r
125                 } else {\r
126                         logger.error(EELFLoggerDelegate.errorLogger,\r
127                                         "getUserAsAdminApps: only Account Admin may invoke this function!");\r
128                         return new ArrayList<EPApp>();\r
129                 }\r
130         }\r
131 \r
132         @Override\r
133         public List<EPApp> getUserByOrgUserIdAsAdminApps(String orgUserId) {\r
134                 String format = "SELECT * FROM FN_APP app INNER JOIN FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "\r
135                                 + "INNER JOIN FN_USER user on user.USER_ID = userrole.USER_ID "\r
136                                 + "WHERE user.org_user_id = '%s' AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID\r
137                                 + " AND FN_APP.ENABLED = 'Y'";\r
138 \r
139                 String sql = String.format(format, orgUserId);\r
140                 logQuery(sql);\r
141 \r
142                 try {\r
143                         @SuppressWarnings("unchecked")\r
144                         List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);\r
145                         return adminApps;\r
146                 } catch (Exception e) {\r
147                         EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
148                         return null;\r
149                 }\r
150         }\r
151 \r
152         @Override\r
153         public List<EPApp> getAppsFullList() {\r
154                 @SuppressWarnings("unchecked")\r
155                 List<EPApp> apps = dataAccessService.getList(EPApp.class, null);\r
156                 return apps;\r
157         }\r
158 \r
159         @Override\r
160         public List<EcompApp> getEcompAppAppsFullList() {\r
161                 return transformAppsToEcompApps(getAppsFullList());\r
162         }\r
163 \r
164         @Override\r
165         public List<EcompApp> transformAppsToEcompApps(List<EPApp> appsList) {\r
166                 List<EcompApp> ecompAppList = new ArrayList<EcompApp>();\r
167                 for (EPApp app : appsList) {\r
168                         EcompApp ecompApp = new EcompApp();\r
169                         ecompApp.setId(app.getId());\r
170                         ecompApp.setName(app.getName());\r
171                         ecompApp.setImageUrl(app.getImageUrl());\r
172                         ecompApp.setDescription(app.getDescription());\r
173                         ecompApp.setNotes(app.getNotes());\r
174                         ecompApp.setUrl(app.getUrl());\r
175                         ecompApp.setAlternateUrl(app.getAlternateUrl());\r
176                         ecompApp.setUebTopicName(app.getUebTopicName());\r
177                         ecompApp.setUebKey(app.getUebKey());\r
178                         ecompApp.setUebSecret(app.getUebSecret());\r
179                         ecompApp.setEnabled(app.getEnabled());\r
180                         ecompApp.setRestrictedApp(app.isRestrictedApp());\r
181                         ecompAppList.add(ecompApp);\r
182                 }\r
183                 return ecompAppList;\r
184         }\r
185 \r
186         @Override\r
187         public EPApp getApp(Long appId) {\r
188                 try {\r
189                         @SuppressWarnings("unchecked")\r
190                         List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id = " + appId, null, null);\r
191                         return (apps.size() > 0) ? apps.get(0) : null;\r
192                 } catch (Exception e) {\r
193                         EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
194                         return null;\r
195                 }\r
196         }\r
197 \r
198         @SuppressWarnings("unchecked")\r
199         @Override\r
200         public List<AppIdAndNameTransportModel> getAdminApps(EPUser user) {\r
201                 if (adminRolesService.isAccountAdmin(user)) {\r
202                         String format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app inner join FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "\r
203                                         + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID\r
204                                         + " AND (app.ENABLED = 'Y' OR app.APP_ID=1)";\r
205                         String sql = String.format(format, user.getId());\r
206                         // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND\r
207                         // app.APP_REST_ENDPOINT <> ''";\r
208                         logQuery(sql);\r
209                         try {\r
210                                 return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);\r
211                         } catch (Exception e) {\r
212                                 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
213                                 logger.error(EELFLoggerDelegate.errorLogger,\r
214                                                 "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);\r
215                         }\r
216                 }\r
217                 return new ArrayList<AppIdAndNameTransportModel>();\r
218         }\r
219 \r
220         @Override\r
221         public EPApp getAppDetail(String appName) {\r
222                 final Map<String, String> params = new HashMap<String, String>();\r
223                 try {\r
224                         params.put("appName", appName);\r
225                         @SuppressWarnings("unchecked")\r
226                         List<EPApp> apps = (List<EPApp>) dataAccessService.executeNamedQuery("getAppDetails", params, null);\r
227                         return (apps.size() > 0) ? apps.get(0) : null;\r
228                 } catch (Exception e) {\r
229                         EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
230                         return null;\r
231                 }\r
232         }\r
233 \r
234         @SuppressWarnings("unchecked")\r
235         @Override\r
236         public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(EPUser user) {\r
237                 if (adminRolesService.isSuperAdmin(user) || adminRolesService.isAccountAdmin(user)) {\r
238                         String format = "";\r
239                         String sql = "";\r
240                         if (adminRolesService.isSuperAdmin(user)) {\r
241                                 format = "SELECT app.APP_ID, app.APP_NAME, app.APP_TYPE FROM FN_APP app "\r
242                                                 + "where app.ENABLED = 'Y' AND app.app_type = 1";\r
243                         } else {\r
244                                 format = "SELECT app.APP_ID, app.APP_NAME, APP_TYPE FROM FN_APP app inner join FN_USER_ROLE userrole ON userrole.APP_ID=app.APP_ID "\r
245                                                 + "where userrole.USER_ID = %d AND userrole.ROLE_ID=" + ACCOUNT_ADMIN_ROLE_ID\r
246                                                 + " AND app.ENABLED = 'Y' AND app.app_type = 1";\r
247                         }\r
248                         sql = String.format(format, user.getId());\r
249                         // sql += " AND app.APP_REST_ENDPOINT IS NOT NULL AND\r
250                         // app.APP_REST_ENDPOINT <> ''";\r
251                         logQuery(sql);\r
252                         try {\r
253                                 return dataAccessService.executeSQLQuery(sql, AppIdAndNameTransportModel.class, null);\r
254                         } catch (Exception e) {\r
255                                 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
256                                 logger.error(EELFLoggerDelegate.errorLogger,\r
257                                                 "Exception occurred while fetching the adminApps for user " + user.getLoginId(), e);\r
258                         }\r
259                 }\r
260                 return new ArrayList<AppIdAndNameTransportModel>();\r
261         }\r
262 \r
263         protected void logQuery(String sql) {\r
264                 logger.debug(EELFLoggerDelegate.debugLogger, "logQuery: " + sql);\r
265         }\r
266 \r
267         public DataAccessService getDataAccessService() {\r
268                 return dataAccessService;\r
269         }\r
270 \r
271         public void setDataAccessService(DataAccessService dataAccessService) {\r
272                 this.dataAccessService = dataAccessService;\r
273         }\r
274 \r
275         @Override\r
276         public List<AdminUserApplications> getAppsAdmins() {\r
277                 String sql = "SELECT apps.APP_NAME, apps.APP_ID, user.USER_ID, user.FIRST_NAME, user.LAST_NAME, user.org_user_id FROM fn_user_role userrole "\r
278                                 + "INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID "\r
279                                 + "INNER JOIN fn_app apps ON apps.APP_ID = userrole.APP_ID " + "WHERE userrole.ROLE_ID = "\r
280                                 + ACCOUNT_ADMIN_ROLE_ID + " AND (apps.ENABLED = 'Y' OR apps.APP_ID=1)";\r
281                 logQuery(sql);\r
282                 try {\r
283                         @SuppressWarnings("unchecked")\r
284                         List<AdminUserApp> adminApps = dataAccessService.executeSQLQuery(sql, AdminUserApp.class, null);\r
285                         // DataAccessService does not use generic types.\r
286                         return aggregateRowsResultsByUserId(adminApps);\r
287                 } catch (Exception e) {\r
288                         EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
289                         return null;\r
290                 }\r
291         }\r
292 \r
293         private List<AdminUserApplications> aggregateRowsResultsByUserId(List<AdminUserApp> adminApps) {\r
294                 HashMap<Long, AdminUserApplications> adminUserApplications = new HashMap<Long, AdminUserApplications>();\r
295                 for (AdminUserApp app : adminApps) {\r
296                         Long userId = app.getUser_Id();\r
297                         if (adminUserApplications.get(userId) == null)\r
298                                 adminUserApplications.put(userId, new AdminUserApplications(app));\r
299                         else\r
300                                 adminUserApplications.get(userId).addApp(app.getAppId(), app.getAppName());\r
301                 }\r
302                 return new ArrayList<AdminUserApplications>(adminUserApplications.values());\r
303         }\r
304 \r
305         @Override\r
306         public List<AppsResponse> getAllApps(Boolean all) {\r
307                 // If all is true, return both active and inactive apps. Otherwise, just\r
308                 // active apps.\r
309                 @SuppressWarnings("unchecked")\r
310                 // Sort the list by application name so the drop-down looks pretty.\r
311                 List<EPApp> apps = all\r
312                                 ? (List<EPApp>) dataAccessService.getList(EPApp.class, " where id != " + ECOMP_APP_ID, "name", null)\r
313                                 : (List<EPApp>) dataAccessService.getList(EPApp.class,\r
314                                                 " where ( enabled = 'Y' or id = " + ECOMP_APP_ID + ")", "name", null);\r
315 \r
316                 List<AppsResponse> appsModified = new ArrayList<AppsResponse>();\r
317                 for (EPApp app : apps) {\r
318                         appsModified.add(new AppsResponse(app.getId(), app.getName(), app.isRestrictedApp(), app.getEnabled()));\r
319                 }\r
320                 return appsModified;\r
321         }\r
322 \r
323         @Override\r
324         public UserRoles getUserProfile(String loginId) {\r
325                 String format = "SELECT DISTINCT user.USER_ID, role.ROLE_ID, user.org_user_id, user.FIRST_NAME, user.LAST_NAME, role.ROLE_NAME  FROM fn_user_role userrole "\r
326                                 + "INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID "\r
327                                 + "INNER JOIN fn_role role ON role.ROLE_ID = userrole.ROLE_ID "\r
328                                 + "WHERE user.org_user_id = \"%s\" and (userrole.app_id = 1 or role.role_id = " + ACCOUNT_ADMIN_ROLE_ID\r
329                                 + ") ";\r
330                 String sql = String.format(format, loginId);\r
331                 logQuery(sql);\r
332                 @SuppressWarnings("unchecked")\r
333                 List<UserRole> userRoleList = dataAccessService.executeSQLQuery(sql, UserRole.class, null);\r
334                 ArrayList<UserRoles> usersRolesList = aggregateUserProfileRowsResultsByRole(userRoleList);\r
335                 if (usersRolesList == null || usersRolesList.size() < 1)\r
336                         return null;\r
337 \r
338                 return usersRolesList.get(0);\r
339         }\r
340 \r
341         @Override\r
342         public UserRoles getUserProfileNormalized(EPUser user) {\r
343                 // Check database.\r
344                 UserRoles userAndRoles = getUserProfile(user.getLoginId());\r
345                 // If no roles are defined, treat this user as a guest.\r
346                 if (user.isGuest() || userAndRoles == null) {\r
347                         logger.debug(EELFLoggerDelegate.debugLogger, "getUserProfile: treating user {} as guest",\r
348                                         user.getLoginId());\r
349                         UserRole userRole = new UserRole();\r
350                         userRole.setUser_Id(user.getId());\r
351                         userRole.setOrgUserId(user.getLoginId());\r
352                         userRole.setFirstName(user.getFirstName());\r
353                         userRole.setLastName(user.getLastName());\r
354                         userRole.setRoleId(-1L);\r
355                         userRole.setRoleName("Guest");\r
356                         userRole.setUser_Id(-1L);\r
357                         userAndRoles = new UserRoles(userRole);\r
358                 }\r
359 \r
360                 return userAndRoles;\r
361         }\r
362 \r
363         protected ArrayList<UserRoles> aggregateUserProfileRowsResultsByRole(List<UserRole> userRoleList) {\r
364                 HashMap<String, UserRoles> userRoles = new HashMap<String, UserRoles>();\r
365                 for (UserRole user : userRoleList) {\r
366                         String orgUserId = user.getOrgUserId();\r
367                         if (userRoles.get(orgUserId) == null)\r
368                                 userRoles.put(orgUserId, new UserRoles(user));\r
369                         else\r
370                                 userRoles.get(orgUserId).addRole(user.getRoleName());\r
371                 }\r
372                 return new ArrayList<UserRoles>(userRoles.values());\r
373         }\r
374 \r
375         private boolean isRestrictedApp(Long appId) {\r
376                 EPApp app = getApp(appId);\r
377                 return app.isRestrictedApp();\r
378         }\r
379 \r
380         // For the functional menu edit\r
381         @Override\r
382         public List<LocalRole> getAppRoles(Long appId) {\r
383                 String sql = "";\r
384                 if (isRestrictedApp(appId)) {\r
385                         sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where ROLE_ID = '" + RESTRICTED_APP_ROLE_ID + "'";\r
386                 } else {\r
387                         sql = "SELECT ROLE_ID, ROLE_NAME from FN_ROLE where APP_ID = '" + appId + "'";\r
388                 }\r
389                 logQuery(sql);\r
390                 @SuppressWarnings("unchecked")\r
391                 List<LocalRole> appRoles = dataAccessService.executeSQLQuery(sql, LocalRole.class, null);\r
392                 return appRoles;\r
393         }\r
394 \r
395         protected String userAppsQuery(EPUser user) {\r
396                 StringBuilder query = new StringBuilder();\r
397                 if (adminRolesService.isSuperAdmin(user)) {\r
398                         query.append("SELECT * FROM FN_APP where FN_APP.ENABLED = 'Y' ORDER BY APP_NAME");\r
399                 } else {\r
400                         query.append("SELECT * FROM FN_APP join FN_USER_ROLE ON FN_USER_ROLE.APP_ID = FN_APP.APP_ID where ");\r
401                         query.append(\r
402                                         "FN_USER_ROLE.USER_ID = " + user.getId() + " AND FN_USER_ROLE.ROLE_ID != " + SUPER_ADMIN_ROLE_ID);\r
403                         query.append(" AND FN_APP.ENABLED = 'Y'");\r
404                 }\r
405                 return query.toString();\r
406         }\r
407 \r
408         protected FieldsValidator onboardingAppFieldsChecker(OnboardingApp onboardingApp) {\r
409                 FieldsValidator fieldsValidator = new FieldsValidator();\r
410                 if (onboardingApp.name == null || onboardingApp.name.length() == 0 || onboardingApp.url == null\r
411                                 || onboardingApp.url.length() == 0 || onboardingApp.restrictedApp == null\r
412                                 || onboardingApp.isOpen == null || onboardingApp.isEnabled == null\r
413                                 || (onboardingApp.id != null && onboardingApp.id.equals(ECOMP_APP_ID))\r
414                                 // For a normal app (appType==1), these fields must be filled\r
415                                 // in.\r
416                                 // For a restricted app (appType==2), they will be empty.\r
417                                 || ((!onboardingApp.restrictedApp)\r
418                                                 && (onboardingApp.username == null || onboardingApp.username.length() == 0\r
419                                                                 || onboardingApp.appPassword == null || onboardingApp.appPassword.length() == 0))) {\r
420                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);\r
421                 }\r
422                 return fieldsValidator;\r
423         }\r
424 \r
425         @Override\r
426         public List<EPApp> getUserApps(EPUser user) {\r
427                 List<EPApp> openApps = getOpenApps();\r
428 \r
429                 if (user.isGuest()) {\r
430                         return openApps;\r
431                 } else {\r
432                         String sql = userAppsQuery(user);\r
433                         logQuery(sql);\r
434 \r
435                         // TreeSet<EPApp> distinctApps = new TreeSet<EPApp>();\r
436                         List<EPApp> appsList = new ArrayList<>();\r
437                         @SuppressWarnings("unchecked")\r
438                         List<EPApp> adminApps = dataAccessService.executeSQLQuery(sql, EPApp.class, null);\r
439                         HashSet<EPApp> appSet = new HashSet<>();\r
440                         for (EPApp app : adminApps) {\r
441                                 appSet.add(app);\r
442                                 appsList.add(app);\r
443                         }\r
444 \r
445                         for (EPApp app : openApps) {\r
446                                 if (!appSet.contains(app))\r
447                                         appsList.add(app);\r
448                         }\r
449 \r
450                         return appsList;\r
451                 }\r
452         }\r
453 \r
454         @Override\r
455         public List<EPApp> getPersAdminApps(EPUser user) {\r
456                 final Map<String, Long> params = new HashMap<>();\r
457                 params.put("userId", user.getId());\r
458                 // Named query is stored in EP.hbm.xml, mapped to EPApp\r
459                 @SuppressWarnings("unchecked")\r
460                 List<EPApp> list = dataAccessService.executeNamedQuery("getPersAdminApps", params, null);\r
461                 return list;\r
462         }\r
463 \r
464         @Override\r
465         public List<EPApp> getPersUserApps(EPUser user) {\r
466                 final Map<String, Long> params = new HashMap<>();\r
467                 params.put("userId", user.getId());\r
468                 // Named query is stored in EP.hbm.xml, mapped to EPApp\r
469                 @SuppressWarnings("unchecked")\r
470                 List<EPApp> list = dataAccessService.executeNamedQuery("getPersUserApps", params, null);\r
471                 return list;\r
472         }\r
473 \r
474         /*\r
475          * (non-Javadoc)\r
476          *\r
477          * @see\r
478          * org.openecomp.portalapp.portal.service.EPAppService#getAppCatalog(com.att\r
479          * .fusionapp.ecomp.portal.domain.EPUser)\r
480          */\r
481         @Override\r
482         public List<AppCatalogItem> getUserAppCatalog(EPUser user) {\r
483                 final Map<String, Long> params = new HashMap<>();\r
484                 params.put("userId", user.getId());\r
485                 // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem\r
486                 @SuppressWarnings("unchecked")\r
487                 List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getUserAppCatalog", params, null);\r
488                 return list;\r
489         }\r
490 \r
491         /*\r
492          * (non-Javadoc)\r
493          *\r
494          * @see\r
495          * org.openecomp.portalapp.portal.service.EPAppService#getAdminAppCatalog(\r
496          * org.openecomp.portalapp.portal.domain.EPUser)\r
497          */\r
498         @Override\r
499         public List<AppCatalogItem> getAdminAppCatalog(EPUser user) {\r
500                 final Map<String, Long> params = new HashMap<>();\r
501                 params.put("userId", user.getId());\r
502                 // Named query is stored in EP.hbm.xml, mapped to AppCatalogItem\r
503                 @SuppressWarnings("unchecked")\r
504                 List<AppCatalogItem> list = dataAccessService.executeNamedQuery("getAdminAppCatalog", params, null);\r
505                 return list;\r
506         }\r
507 \r
508         private List<EPApp> getOpenApps() {\r
509                 @SuppressWarnings("unchecked")\r
510                 List<EPApp> openApps = dataAccessService.getList(EPApp.class, " where open='Y' and enabled='Y'", null, null);\r
511                 return openApps;\r
512         }\r
513 \r
514         @SuppressWarnings("unchecked")\r
515         @Override\r
516         public List<EPApp> getAppsOrderByName(EPUser user) {\r
517                 final Map<String, Long> params = new HashMap<>();\r
518                 List<EPApp> sortedAppsByName = null;\r
519                 try {\r
520                         if (adminRolesService.isSuperAdmin(user)) {\r
521                                 params.put("userId", user.getId());\r
522                                 sortedAppsByName = dataAccessService.executeNamedQuery("getPersAdminAppsOrderByName", params, null);\r
523                         } else {\r
524                                 params.put("userId", user.getId());\r
525                                 sortedAppsByName = dataAccessService.executeNamedQuery("getPersUserAppsOrderByName", params, null);\r
526                         }\r
527                 } catch (Exception e) {\r
528                         logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByName failed", e);\r
529                 }\r
530                 return sortedAppsByName;\r
531         }\r
532 \r
533         @SuppressWarnings("unchecked")\r
534         @Override\r
535         public List<EPApp> getAppsOrderByLastUsed(EPUser user) {\r
536 \r
537                 final Map<String, Long> params = new HashMap<>();\r
538                 List<EPApp> sortedAppsByLastUsed = new ArrayList<EPApp>();\r
539                 List<EPApp> finalsortedAppsByLastUsed = new ArrayList<EPApp>();\r
540                 try {\r
541                         if (adminRolesService.isSuperAdmin(user)) {\r
542                                 params.put("userId", user.getId());\r
543                                 sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByLastUsed", params, null);\r
544                         } else {\r
545                                 params.put("userId", user.getId());\r
546                                 sortedAppsByLastUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByLastUsed", params, null);\r
547                         }\r
548                         Set<String> epAppSet = new HashSet<String>();\r
549                         for (EPApp eapp : sortedAppsByLastUsed)\r
550                                 if (!epAppSet.contains(eapp.getName())) {\r
551                                         finalsortedAppsByLastUsed.add(eapp);\r
552                                         epAppSet.add(eapp.getName());\r
553                                 }\r
554 \r
555                 } catch (Exception e) {\r
556                         logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByLastUsed failed", e);\r
557                 }\r
558                 return finalsortedAppsByLastUsed;\r
559         }\r
560 \r
561         @SuppressWarnings("unchecked")\r
562         @Override\r
563         public List<EPApp> getAppsOrderByMostUsed(EPUser user) {\r
564                 final Map<String, Long> params = new HashMap<>();\r
565                 List<EPApp> sortedAppsByMostUsed = new ArrayList<EPApp>();\r
566                 List<EPApp> finalsortedAppsByMostUsed = new ArrayList<EPApp>();\r
567                 try {\r
568                         if (adminRolesService.isSuperAdmin(user)) {\r
569                                 params.put("userId", user.getId());\r
570                                 sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getAdminAppsOrderByMostUsed", params, null);\r
571                         } else {\r
572                                 params.put("userId", user.getId());\r
573                                 sortedAppsByMostUsed = dataAccessService.executeNamedQuery("getUserAppsOrderByMostUsed", params, null);\r
574                         }\r
575                         Set<String> epAppSet = new HashSet<String>();\r
576 \r
577                         for (EPApp eapp : sortedAppsByMostUsed) {\r
578                                 if (!epAppSet.contains(eapp.getName())) {\r
579                                         finalsortedAppsByMostUsed.add(eapp);\r
580                                         epAppSet.add(eapp.getName());\r
581                                 }\r
582                         }\r
583                 } catch (Exception e) {\r
584                         logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByMostUsed failed", e);\r
585                 }\r
586 \r
587                 return finalsortedAppsByMostUsed;\r
588         }\r
589 \r
590         /*\r
591          * This Method retrieves the User Apps by Sort Manual Preference\r
592          *\r
593          * @param: user--contains LoggedIn User Data\r
594          */\r
595         @SuppressWarnings("unchecked")\r
596         @Override\r
597         public List<EPApp> getAppsOrderByManual(EPUser user) {\r
598                 final Map<String, Long> params = new HashMap<>();\r
599                 List<EPApp> sortedAppsByManual = new ArrayList<EPApp>();\r
600                 List<EPApp> finalsortedAppsByManual = new ArrayList<EPApp>();\r
601                 try {\r
602                         if (adminRolesService.isSuperAdmin(user)) {\r
603                                 params.put("userId", user.getId());\r
604                                 sortedAppsByManual = dataAccessService.executeNamedQuery("getAdminAppsOrderByManual", params, null);\r
605                         } else {\r
606                                 params.put("userId", user.getId());\r
607                                 sortedAppsByManual = dataAccessService.executeNamedQuery("getUserAppsOrderByManual", params, null);\r
608                         }\r
609                         Set<String> epAppSet = new HashSet<String>();\r
610 \r
611                         for (EPApp eapp : sortedAppsByManual) {\r
612                                 if (!epAppSet.contains(eapp.getName())) {\r
613                                         finalsortedAppsByManual.add(eapp);\r
614                                         epAppSet.add(eapp.getName());\r
615                                 }\r
616                         }\r
617                 } catch (Exception e) {\r
618                         logger.error(EELFLoggerDelegate.errorLogger, "getAppsOrderByManual failed", e);\r
619                 }\r
620                 return finalsortedAppsByManual;\r
621         }\r
622 \r
623         @Override\r
624         public List<OnboardingApp> getOnboardingApps() {\r
625                 @SuppressWarnings("unchecked")\r
626                 List<EPApp> apps = dataAccessService.getList(EPApp.class, " where id!=" + ECOMP_APP_ID, null, null);\r
627                 List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();\r
628                 for (EPApp app : apps) {\r
629                         OnboardingApp onboardingApp = new OnboardingApp();\r
630                         createOnboardingFromApp(app, onboardingApp);\r
631                         onboardingAppsList.add(onboardingApp);\r
632                 }\r
633                 return onboardingAppsList;\r
634         }\r
635 \r
636         @Override\r
637         public List<OnboardingApp> getEnabledNonOpenOnboardingApps() {\r
638                 @SuppressWarnings("unchecked")\r
639                 List<EPApp> apps = dataAccessService.getList(EPApp.class,\r
640                                 " where enabled = true and open = false and id!=" + ECOMP_APP_ID, null, null);\r
641                 List<OnboardingApp> onboardingAppsList = new ArrayList<OnboardingApp>();\r
642                 for (EPApp app : apps) {\r
643                         OnboardingApp onboardingApp = new OnboardingApp();\r
644                         createOnboardingFromApp(app, onboardingApp);\r
645                         onboardingAppsList.add(onboardingApp);\r
646                 }\r
647                 return onboardingAppsList;\r
648         }\r
649 \r
650         @SuppressWarnings("unchecked")\r
651         private void validateOnboardingApp(OnboardingApp onboardingApp, FieldsValidator fieldsValidator) {\r
652                 boolean duplicatedUrl = false;\r
653                 boolean duplicatedName = false;\r
654                 List<EPApp> apps;\r
655                 if (onboardingApp.id == null) {\r
656                         apps = dataAccessService.getList(EPApp.class,\r
657                                         " where url = '" + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);\r
658                 } else {\r
659                         apps = dataAccessService.getList(EPApp.class, " where id = " + onboardingApp.id + " or url = '"\r
660                                         + onboardingApp.url + "' or name = '" + onboardingApp.name + "'", null, null);\r
661                 }\r
662                 for (EPApp app : apps) {\r
663                         if (onboardingApp.id != null && onboardingApp.id.equals(app.getId())) {\r
664                                 continue;\r
665                         }\r
666                         if (!duplicatedUrl && app.getUrl().equalsIgnoreCase(onboardingApp.url)) {\r
667                                 duplicatedUrl = true;\r
668                                 if (duplicatedName) {\r
669                                         break;\r
670                                 }\r
671                         }\r
672                         if (!duplicatedName && app.getName().equalsIgnoreCase(onboardingApp.name)) {\r
673                                 duplicatedName = true;\r
674                                 if (duplicatedUrl) {\r
675                                         break;\r
676                                 }\r
677                         }\r
678                 }\r
679                 if (duplicatedUrl || duplicatedName) {\r
680                         if (duplicatedUrl) {\r
681                                 fieldsValidator.addProblematicFieldName(urlField);\r
682                         }\r
683                         if (duplicatedName) {\r
684                                 fieldsValidator.addProblematicFieldName(nameField);\r
685                         }\r
686                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);\r
687                         fieldsValidator.errorCode = new Long(EPCommonSystemProperties.DUBLICATED_FIELD_VALUE_ECOMP_ERROR);\r
688                 }\r
689         }\r
690 \r
691         @Override\r
692         public FieldsValidator modifyOnboardingApp(OnboardingApp modifiedOnboardingApp, EPUser user) {\r
693                 logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering modifyOnboardingApp");\r
694                 FieldsValidator fieldsValidator = onboardingAppFieldsChecker(modifiedOnboardingApp);\r
695                 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
696                         validateOnboardingApp(modifiedOnboardingApp, fieldsValidator);\r
697                 }\r
698                 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
699                         if (modifiedOnboardingApp.id != null) {\r
700                                 updateApp(modifiedOnboardingApp.id, modifiedOnboardingApp, fieldsValidator, user);\r
701                         } else {\r
702                                 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);\r
703                         }\r
704                 }\r
705                 return fieldsValidator;\r
706         }\r
707 \r
708         @Override\r
709         public FieldsValidator addOnboardingApp(OnboardingApp newOnboardingApp, EPUser user) {\r
710                 FieldsValidator fieldsValidator = onboardingAppFieldsChecker(newOnboardingApp);\r
711                 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
712                         validateOnboardingApp(newOnboardingApp, fieldsValidator);\r
713                 }\r
714                 if (fieldsValidator.httpStatusCode.intValue() == HttpServletResponse.SC_OK) {\r
715                         if (newOnboardingApp.id == null) {\r
716                                 updateApp(null, newOnboardingApp, fieldsValidator, user);\r
717                         } else {\r
718                                 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_BAD_REQUEST);\r
719                         }\r
720                 }\r
721                 return fieldsValidator;\r
722         }\r
723 \r
724         @Override\r
725         public FieldsValidator deleteOnboardingApp(EPUser user, Long appid) {\r
726                 FieldsValidator fieldsValidator = new FieldsValidator();\r
727                 if (!adminRolesService.isSuperAdmin(user)) {\r
728                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_FORBIDDEN);\r
729                         return fieldsValidator;\r
730                 }\r
731                 Boolean result = false;\r
732                 Session localSession = null;\r
733                 Transaction transaction = null;\r
734                 try {\r
735                         localSession = sessionFactory.openSession();\r
736                         transaction = localSession.beginTransaction();\r
737 \r
738                         // 1) Remove the URL for any functional menu item associated with\r
739                         // this app\r
740                         String sql = "UPDATE fn_menu_functional m, fn_menu_functional_roles mr SET m.url='' "\r
741                                         + " WHERE m.menu_id=mr.menu_id " + " AND mr.app_id='" + appid + "'";\r
742                         logQuery(sql);\r
743                         Query query = localSession.createSQLQuery(sql);\r
744                         query.executeUpdate();\r
745 \r
746                         // Remove any favorites associated with a menu item that is\r
747                         // associated with this app\r
748                         sql = "Delete from fn_menu_favorites " + " using fn_menu_favorites inner join fn_menu_functional_roles "\r
749                                         + " where fn_menu_functional_roles.app_id='" + appid + "' "\r
750                                         + " AND fn_menu_functional_roles.menu_id=fn_menu_favorites.menu_id";\r
751                         logQuery(sql);\r
752                         query = localSession.createSQLQuery(sql);\r
753                         query.executeUpdate();\r
754 \r
755                         // Remove all role, appid records from fn_menu_functional_role\r
756                         // that are associated with this app\r
757                         sql = "delete from fn_menu_functional_roles where app_id='" + appid + "'";\r
758                         logQuery(sql);\r
759                         query = localSession.createSQLQuery(sql);\r
760                         query.executeUpdate();\r
761 \r
762                         // Remove all records from fn_user_role associated with this app\r
763                         sql = "delete from fn_user_role where app_id='" + appid + "'";\r
764                         logQuery(sql);\r
765                         query = localSession.createSQLQuery(sql);\r
766                         query.executeUpdate();\r
767 \r
768                         // Remove any widgets associated with this app\r
769                         sql = "delete from ep_widget_catalog_role where app_id='" + appid + "'";\r
770                         logQuery(sql);\r
771                         query = localSession.createSQLQuery(sql);\r
772                         query.executeUpdate();\r
773 \r
774                         // Remove any roles associated with this app\r
775                         sql = "delete from ep_role_notification " + " using ep_role_notification inner join fn_role "\r
776                                         + " where fn_role.app_id='" + appid + "' " + " and ep_role_notification.role_id= fn_role.role_id";\r
777                         logQuery(sql);\r
778                         query = localSession.createSQLQuery(sql);\r
779                         query.executeUpdate();\r
780 \r
781                         // Remove all records from fn_role associated with this app\r
782                         sql = "delete from fn_role where app_id='" + appid + "'";\r
783                         logQuery(sql);\r
784                         query = localSession.createSQLQuery(sql);\r
785                         query.executeUpdate();\r
786 \r
787                         // Remove app contact us entries\r
788                         sql = "delete from fn_app_contact_us where app_id='" + appid + "'";\r
789                         logQuery(sql);\r
790                         query = localSession.createSQLQuery(sql);\r
791                         query.executeUpdate();\r
792 \r
793                         // Remove any widgets associated with this app\r
794                         sql = "delete from fn_widget where app_id='" + appid + "'";\r
795                         logQuery(sql);\r
796                         query = localSession.createSQLQuery(sql);\r
797                         query.executeUpdate();\r
798 \r
799                         // Remove rows in the app personalization selection table\r
800                         sql = "delete from fn_pers_user_app_sel where app_id='" + appid + "'";\r
801                         logQuery(sql);\r
802                         query = localSession.createSQLQuery(sql);\r
803                         query.executeUpdate();\r
804 \r
805                         // Remove rows in the app personalization sort table\r
806                         sql = "delete from ep_pers_user_app_man_sort where app_id='" + appid + "'";\r
807                         logQuery(sql);\r
808                         query = localSession.createSQLQuery(sql);\r
809                         query.executeUpdate();\r
810 \r
811                         // Delete the app\r
812                         sql = "delete from fn_app where app_id='" + appid + "'";\r
813                         logQuery(sql);\r
814                         query = localSession.createSQLQuery(sql);\r
815                         query.executeUpdate();\r
816 \r
817                         transaction.commit();\r
818                         result = true;\r
819                 } catch (Exception e) {\r
820                         logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);\r
821                         EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError);\r
822                         EcompPortalUtils.rollbackTransaction(transaction, "deleteOnboardingApp rollback, exception = " + e);\r
823                 } finally {\r
824                         EcompPortalUtils.closeLocalSession(localSession, "deleteOnboardingApp");\r
825                 }\r
826                 if (!result) {\r
827                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
828                 }\r
829                 return fieldsValidator;\r
830         }\r
831 \r
832         private static Object syncRests = new Object();\r
833 \r
834         // An app has been enabled/disabled. Must enable/disable all associated\r
835         // functional menu items.\r
836         private void setFunctionalMenuItemsEnabled(Session localSession, Boolean enabled, Long appId) {\r
837                 String active_yn = enabled ? "Y" : "N";\r
838                 String sql = "SELECT m.menu_id, m.column_num, m.text, m.parent_menu_id, m.url, m.active_yn "\r
839                                 + "FROM fn_menu_functional m, fn_menu_functional_roles r " + "WHERE m.menu_id = r.menu_id "\r
840                                 + " AND r.app_id = '" + appId + "' ";\r
841                 logQuery(sql);\r
842                 @SuppressWarnings("unchecked")\r
843                 List<FunctionalMenuItem> menuItems = dataAccessService.executeSQLQuery(sql, FunctionalMenuItem.class, null);\r
844                 for (FunctionalMenuItem menuItem : menuItems) {\r
845                         FunctionalMenuItem myMenuItem = (FunctionalMenuItem) localSession.get(FunctionalMenuItem.class,\r
846                                         menuItem.menuId);\r
847                         myMenuItem.active_yn = active_yn;\r
848                         localSession.save(myMenuItem);\r
849                 }\r
850         }\r
851 \r
852         // Attention! If (appId == null) we use this function to create application\r
853         // otherwise we use it to modify existing application\r
854         private void updateApp(Long appId, OnboardingApp onboardingApp, FieldsValidator fieldsValidator, EPUser user) {\r
855                 logger.debug(EELFLoggerDelegate.debugLogger, "LR: entering updateApp");\r
856                 // Separate out the code for a restricted app, since it doesn't need any\r
857                 // of the UEB code.\r
858                 if (onboardingApp.restrictedApp) {\r
859                         boolean result = false;\r
860                         Session localSession = null;\r
861                         Transaction transaction = null;\r
862                         try {\r
863                                 localSession = sessionFactory.openSession();\r
864                                 transaction = localSession.beginTransaction();\r
865                                 EPApp app;\r
866                                 if (appId == null) {\r
867                                         app = new EPApp();\r
868                                 } else {\r
869                                         app = (EPApp) localSession.get(EPApp.class, appId);\r
870                                         if (app == null || app.getId() == null) { // App is already\r
871                                                 // deleted!\r
872                                                 transaction.commit();\r
873                                                 localSession.close();\r
874                                                 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);\r
875                                                 return;\r
876                                         }\r
877                                 }\r
878                                 createAppFromOnboarding(app, onboardingApp, localSession);\r
879                                 localSession.saveOrUpdate(app);\r
880                                 // Enable or disable all menu items associated with this app\r
881                                 setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);\r
882                                 transaction.commit();\r
883                                 result = true;\r
884                         } catch (Exception e) {\r
885                                 EcompPortalUtils.rollbackTransaction(transaction,\r
886                                                 "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));\r
887                         } finally {\r
888                                 EcompPortalUtils.closeLocalSession(localSession, "updateApp");\r
889                         }\r
890                         if (!result) {\r
891                                 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
892                         }\r
893 \r
894                 } else {\r
895                         synchronized (syncRests) {\r
896                                 boolean result = false;\r
897                                 Session localSession = null;\r
898                                 Transaction transaction = null;\r
899                                 try {\r
900                                         localSession = sessionFactory.openSession();\r
901                                         transaction = localSession.beginTransaction();\r
902                                         EPApp app;\r
903                                         if (appId == null) {\r
904                                                 app = new EPApp();\r
905                                                 // -------------------------------------------------------------------------------------------\r
906                                                 // Register this App with the UEB communication server.\r
907                                                 // Save\r
908                                                 // the App's unique mailbox/topic\r
909                                                 // name and keys to the FN_APP table. The App's mailbox\r
910                                                 // and\r
911                                                 // keys will be visible to the\r
912                                                 // admin on the ECOMP portal.\r
913                                                 // -------------------------------------------------------------------------------------------\r
914                                                 TopicManager topicManager = new TopicManager();\r
915                                                 final CambriaIdentityManager im = new CambriaClientBuilders.IdentityManagerBuilder()\r
916                                                                 .usingHosts(Helper.uebUrlList()).build();\r
917                                                 com.att.nsa.apiClient.credentials.ApiCredential credential = im.createApiKey(user.getEmail(),\r
918                                                                 "ECOMP Portal Owner");\r
919                                                 String appKey = credential.getApiKey();\r
920                                                 String appSecret = credential.getApiSecret();\r
921                                                 String appMailboxName = null;\r
922 \r
923                                                 int maxNumAttemptsToCreateATopic = 3;\r
924                                                 boolean successfullyCreatedMailbox = false;\r
925                                                 for (int i = 0; i < maxNumAttemptsToCreateATopic; i++) {\r
926                                                         appMailboxName = "ECOMP-PORTAL-OUTBOX-" + (int) (Math.random() * 100000.0);\r
927 \r
928                                                         try {\r
929                                                                 topicManager.createTopic(\r
930                                                                                 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
931                                                                                 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),\r
932                                                                                 appMailboxName, "ECOMP outbox for app" + onboardingApp.name);\r
933                                                                 successfullyCreatedMailbox = true;\r
934                                                                 logger.debug(EELFLoggerDelegate.debugLogger,\r
935                                                                                 "Successfully created " + appMailboxName + " for App " + onboardingApp.name);\r
936                                                                 logger.debug(EELFLoggerDelegate.debugLogger, "    Key = " + appKey + " Secret = "\r
937                                                                                 + appSecret + " generated using = " + user.getEmail());\r
938                                                                 break;\r
939                                                         } catch (HttpException e) {\r
940                                                                 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebConnectionError, e);\r
941                                                                 if (e.getStatusCode() == 409) {\r
942                                                                         logger.error(EELFLoggerDelegate.errorLogger, "Topic/mailbox " + appMailboxName\r
943                                                                                         + " already exists. Will try using a different name", e);\r
944                                                                 } else {\r
945                                                                         logger.error(EELFLoggerDelegate.errorLogger, "HttpException when onboarding App: ",\r
946                                                                                         e);\r
947                                                                 }\r
948                                                         }\r
949                                                 }\r
950 \r
951                                                 if (successfullyCreatedMailbox) {\r
952                                                         onboardingApp.setUebTopicName(appMailboxName);\r
953                                                         onboardingApp.setUebKey(appKey);\r
954                                                         onboardingApp.setUebSecret(appSecret);\r
955 \r
956                                                         try {\r
957                                                                 /*\r
958                                                                  * EP is a publisher to this App's new mailbox\r
959                                                                  */\r
960                                                                 topicManager.addPublisher(\r
961                                                                                 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
962                                                                                 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET),\r
963                                                                                 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
964                                                                                 appMailboxName);\r
965 \r
966                                                                 /*\r
967                                                                  * This App is a subscriber of its own mailbox\r
968                                                                  */\r
969                                                                 topicManager.addSubscriber(\r
970                                                                                 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
971                                                                                 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,\r
972                                                                                 appMailboxName);\r
973 \r
974                                                                 /*\r
975                                                                  * This App is a publisher to EP\r
976                                                                  */\r
977                                                                 topicManager.addPublisher(\r
978                                                                                 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_KEY),\r
979                                                                                 PortalApiProperties.getProperty(PortalApiConstants.UEB_APP_SECRET), appKey,\r
980                                                                                 PortalApiProperties.getProperty(PortalApiConstants.ECOMP_PORTAL_INBOX_NAME));\r
981                                                         } catch (HttpException | CambriaApiException | IOException e) {\r
982                                                                 EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);\r
983                                                                 logger.error(EELFLoggerDelegate.errorLogger,\r
984                                                                                 "Error when configuring Publisher/Subscriber for App's new mailbox", e);\r
985                                                                 transaction.commit();\r
986                                                                 localSession.close();\r
987                                                                 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);\r
988                                                                 return;\r
989                                                         }\r
990                                                 } else {\r
991                                                         transaction.commit();\r
992                                                         localSession.close();\r
993                                                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_CONFLICT);\r
994                                                         return;\r
995                                                 }\r
996                                         } else {\r
997                                                 app = (EPApp) localSession.get(EPApp.class, appId);\r
998                                                 if (app == null || app.getId() == null) {\r
999                                                         // App is already deleted!\r
1000                                                         transaction.commit();\r
1001                                                         localSession.close();\r
1002                                                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_NOT_FOUND);\r
1003                                                         return;\r
1004                                                 }\r
1005                                         }\r
1006                                         logger.debug(EELFLoggerDelegate.debugLogger, "LR: about to call createAppFromOnboarding");\r
1007                                         createAppFromOnboarding(app, onboardingApp, localSession);\r
1008                                         logger.debug(EELFLoggerDelegate.debugLogger,\r
1009                                                         "LR: updateApp: finished calling createAppFromOnboarding");\r
1010                                         localSession.saveOrUpdate(app);\r
1011                                         logger.debug(EELFLoggerDelegate.debugLogger,\r
1012                                                         "LR: updateApp: finished calling localSession.saveOrUpdate");\r
1013                                         // Enable or disable all menu items associated with this app\r
1014                                         setFunctionalMenuItemsEnabled(localSession, onboardingApp.isEnabled, appId);\r
1015                                         logger.debug(EELFLoggerDelegate.debugLogger,\r
1016                                                         "LR: updateApp: finished calling setFunctionalMenuItemsEnabled");\r
1017                                         transaction.commit();\r
1018                                         logger.debug(EELFLoggerDelegate.debugLogger, "LR: updateApp: finished calling transaction.commit");\r
1019                                         epUebHelper.addPublisher(app);\r
1020                                         logger.debug(EELFLoggerDelegate.debugLogger,\r
1021                                                         "LR: updateApp: finished calling epUebHelper.addPublisher");\r
1022                                         result = true;\r
1023                                 } catch (Exception e) {\r
1024                                         logger.error(EELFLoggerDelegate.errorLogger, "updateApp failed", e);\r
1025                                         EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeUebRegisterOnboardingAppError, e);\r
1026                                         EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);\r
1027                                         EcompPortalUtils.rollbackTransaction(transaction,\r
1028                                                         "updateApp rollback, exception = " + EcompPortalUtils.getStackTrace(e));\r
1029                                 } finally {\r
1030                                         EcompPortalUtils.closeLocalSession(localSession, "updateApp");\r
1031                                 }\r
1032                                 if (!result) {\r
1033                                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
1034                                 }\r
1035                         }\r
1036                 }\r
1037         }\r
1038 \r
1039         /**\r
1040          * Populates a transport model of the application from a database row model.\r
1041          * Leaves out the thumbnail because the FE fetches images via a different\r
1042          * API.\r
1043          * \r
1044          * @param app\r
1045          *            Model of database row\r
1046          * @param onboardingApp\r
1047          *            Model for transport as JSON\r
1048          */\r
1049         @Override\r
1050         public void createOnboardingFromApp(EPApp app, OnboardingApp onboardingApp) {\r
1051                 onboardingApp.id = app.getId();\r
1052                 onboardingApp.name = app.getName();\r
1053                 onboardingApp.imageUrl = app.getImageUrl();\r
1054                 onboardingApp.description = app.getDescription();\r
1055                 onboardingApp.notes = app.getNotes();\r
1056                 onboardingApp.url = app.getUrl();\r
1057                 onboardingApp.alternateUrl = app.getAlternateUrl();\r
1058                 onboardingApp.restUrl = app.getAppRestEndpoint();\r
1059                 onboardingApp.isOpen = app.getOpen();\r
1060                 onboardingApp.isEnabled = app.getEnabled();\r
1061                 onboardingApp.username = app.getUsername();\r
1062                 onboardingApp.appPassword = decryptedPassword(app.getAppPassword(), app);\r
1063                 onboardingApp.uebTopicName = app.getUebTopicName();\r
1064                 onboardingApp.uebKey = app.getUebKey();\r
1065                 onboardingApp.uebSecret = app.getUebSecret();\r
1066                 onboardingApp.setRestrictedApp(app.isRestrictedApp());\r
1067                 // if (app.getThumbnail() != null)\r
1068                 // onboardingApp.thumbnail = new\r
1069                 // String(Base64.getEncoder().encode(app.getThumbnail()));\r
1070         }\r
1071 \r
1072         /**\r
1073          * Creates a database object for an application from an uploaded transport\r
1074          * model. Must decode the thumbnail, if any.\r
1075          * \r
1076          * @param app\r
1077          * @param onboardingApp\r
1078          * @param localSession\r
1079          * @return The first argument.\r
1080          */\r
1081         protected EPApp createAppFromOnboarding(EPApp app, OnboardingApp onboardingApp, Session localSession) {\r
1082                 app.setName(onboardingApp.name);\r
1083                 app.setDescription(onboardingApp.description);\r
1084                 app.setNotes(onboardingApp.notes);\r
1085                 app.setUrl(onboardingApp.url);\r
1086                 app.setAlternateUrl(onboardingApp.alternateUrl);\r
1087                 app.setAppRestEndpoint(onboardingApp.restUrl);\r
1088                 app.setOpen(onboardingApp.isOpen);\r
1089                 app.setEnabled(onboardingApp.isEnabled);\r
1090                 app.setUsername(onboardingApp.username);\r
1091                 app.setAppPassword(this.encryptedPassword(onboardingApp.appPassword, app));\r
1092                 app.setUebTopicName(onboardingApp.uebTopicName);\r
1093                 app.setUebKey(onboardingApp.uebKey);\r
1094                 app.setUebSecret(onboardingApp.uebSecret);\r
1095                 app.setRestrictedApp(onboardingApp.restrictedApp);\r
1096                 if (!StringUtils.isEmpty(onboardingApp.thumbnail)) {\r
1097                         logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: onboarding thumbnail is NOT empty");\r
1098                         String[] splitBase64Thumbnail = onboardingApp.thumbnail.split("base64,");\r
1099                         logger.debug(EELFLoggerDelegate.debugLogger,\r
1100                                         "createAppFromOnboarding: length of splitBase64Thumbnail: " + splitBase64Thumbnail.length);\r
1101                         if (splitBase64Thumbnail.length > 1) {\r
1102                                 // This occurs when we have a new image, not an existing image\r
1103                                 byte[] decodedImage = Base64.getDecoder().decode(splitBase64Thumbnail[1].getBytes());\r
1104                                 logger.debug(EELFLoggerDelegate.debugLogger, "createAppFromOnboarding: finished calling decode");\r
1105                                 // This is basically a boolean indicator that an image is\r
1106                                 // present.\r
1107                                 app.setImageUrl(constructImageName(onboardingApp));\r
1108                                 app.setThumbnail(decodedImage);\r
1109                         }\r
1110                 } else if (app.getThumbnail() != null) {\r
1111                         // The thumbnail that came in from the json is empty; the previous\r
1112                         // thumbnail is NOT empty. Must delete it.\r
1113                         logger.debug(EELFLoggerDelegate.debugLogger,\r
1114                                         "createAppFromOnboarding: onboarding thumbnail is empty; db thumbnail is NOT null");\r
1115                         app.setImageUrl(null);\r
1116                         app.setThumbnail(null);\r
1117                 } else {\r
1118                         logger.debug(EELFLoggerDelegate.debugLogger,\r
1119                                         "createAppFromOnboarding: onboarding thumbnail is empty; db thumbnail is null");\r
1120                 }\r
1121                 return app;\r
1122         }\r
1123 \r
1124         protected String constructImageName(OnboardingApp onboardingApp) {\r
1125                 return "portal_" + String.valueOf(onboardingApp.url.hashCode() + "_" + (int) (Math.random() * 100000.0))\r
1126                                 + ".png";\r
1127         }\r
1128 \r
1129         // Don't encrypt or decrypt the password if it is null or the empty string\r
1130         private String decryptedPassword(String encryptedAppPwd, EPApp app) {\r
1131                 String result = "";\r
1132                 if (encryptedAppPwd != null & encryptedAppPwd.length() > 0) {\r
1133                         try {\r
1134                                 result = CipherUtil.decrypt(encryptedAppPwd,\r
1135                                                 SystemProperties.getProperty(SystemProperties.Decryption_Key));\r
1136                         } catch (Exception e) {\r
1137                                 logger.error(EELFLoggerDelegate.errorLogger, "decryptedPassword failed for app " + app.getName(), e);\r
1138                         }\r
1139                 }\r
1140                 return result;\r
1141         }\r
1142 \r
1143         protected String encryptedPassword(String decryptedAppPwd, EPApp app) {\r
1144                 String result = "";\r
1145                 if (decryptedAppPwd != null & decryptedAppPwd.length() > 0) {\r
1146                         try {\r
1147                                 result = CipherUtil.encrypt(decryptedAppPwd,\r
1148                                                 SystemProperties.getProperty(SystemProperties.Decryption_Key));\r
1149                         } catch (Exception e) {\r
1150                                 logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword failed for app " + app.getName(), e);\r
1151                         }\r
1152                 }\r
1153                 return result;\r
1154         }\r
1155 \r
1156         @SuppressWarnings("unchecked")\r
1157         @Override\r
1158         public FieldsValidator saveWidgetsSortManual(List<EPWidgetsSortPreference> widgetsSortManual, EPUser user) {\r
1159                 FieldsValidator fieldsValidator = new FieldsValidator();\r
1160                 final Map<String, Long> params = new HashMap<>();\r
1161                 List<EPWidgetsManualSortPreference> epManualWidgets = new ArrayList<EPWidgetsManualSortPreference>();\r
1162 \r
1163                 try {\r
1164                         params.put("userId", user.getId());\r
1165                         epManualWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);\r
1166                         Map<Long, EPWidgetsManualSortPreference> existingWidgetsIds = new HashMap<Long, EPWidgetsManualSortPreference>();\r
1167                         for (EPWidgetsManualSortPreference userWidgetManualPref : epManualWidgets) {\r
1168                                 existingWidgetsIds.put(userWidgetManualPref.getWidgetId(), userWidgetManualPref);\r
1169                         }\r
1170                         for (EPWidgetsSortPreference epWidgetsManPref : widgetsSortManual) {\r
1171                                 if (epWidgetsManPref.getWidgetid() != null) {\r
1172                                         Long widgetid = epWidgetsManPref.getWidgetid();\r
1173                                         if (existingWidgetsIds.containsKey(widgetid)) {\r
1174                                                 EPWidgetsManualSortPreference epWidgetsManualSort = existingWidgetsIds.get(widgetid);\r
1175                                                 epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());\r
1176                                                 epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());\r
1177                                                 epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());\r
1178                                                 epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());\r
1179                                                 HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();\r
1180                                                 additionalUpdateParam.put("userId", epWidgetsManualSort.getUserId());\r
1181                                                 dataAccessService.saveDomainObject(epWidgetsManualSort, additionalUpdateParam);\r
1182                                         } else {\r
1183                                                 EPWidgetsManualSortPreference epWidgetsManualSort = new EPWidgetsManualSortPreference();\r
1184                                                 epWidgetsManualSort.setWidgetId(epWidgetsManPref.getWidgetid());\r
1185                                                 epWidgetsManualSort.setWidgetRow(epWidgetsManPref.getRow());\r
1186                                                 epWidgetsManualSort.setWidgetCol(epWidgetsManPref.getCol());\r
1187                                                 epWidgetsManualSort.setWidgetWidth(epWidgetsManPref.getSizeX());\r
1188                                                 epWidgetsManualSort.setWidgetHeight(epWidgetsManPref.getSizeY());\r
1189                                                 epWidgetsManualSort.setUserId(Ints.checkedCast(user.getId()));\r
1190                                                 dataAccessService.saveDomainObject(epWidgetsManualSort, null);\r
1191                                         }\r
1192                                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
1193                                 }\r
1194                         }\r
1195                 } catch (Exception e) {\r
1196                         logger.error(EELFLoggerDelegate.errorLogger, "saveWidgetsSortManual failed", e);\r
1197                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
1198                 }\r
1199                 return fieldsValidator;\r
1200         }\r
1201 \r
1202         @SuppressWarnings("unchecked")\r
1203         @Override\r
1204         public FieldsValidator deleteUserWidgetSortPref(List<EPWidgetsSortPreference> delWidgetSortPref, EPUser user) {\r
1205                 FieldsValidator fieldsValidator = new FieldsValidator();\r
1206                 final Map<String, Long> params = new HashMap<>();\r
1207                 List<EPWidgetsManualSortPreference> epWidgets = new ArrayList<EPWidgetsManualSortPreference>();\r
1208                 try {\r
1209                         params.put("userId", user.getId());\r
1210                         epWidgets = dataAccessService.executeNamedQuery("userWidgetManualSortPrfQuery", params, null);\r
1211                         Map<Long, EPWidgetsManualSortPreference> existingWidgetIds = new HashMap<Long, EPWidgetsManualSortPreference>();\r
1212                         for (EPWidgetsManualSortPreference userWidgetSortPref : epWidgets) {\r
1213                                 existingWidgetIds.put(userWidgetSortPref.getWidgetId(), userWidgetSortPref);\r
1214                         }\r
1215                         for (EPWidgetsSortPreference delEpWidgetsManPref : delWidgetSortPref) {\r
1216                                 if (delEpWidgetsManPref.getWidgetid() != null) {\r
1217                                         Long widgetId = delEpWidgetsManPref.getWidgetid();\r
1218                                         if (existingWidgetIds.containsKey(widgetId)) {\r
1219                                                 dataAccessService.deleteDomainObjects(EPWidgetsManualSortPreference.class,\r
1220                                                                 "widget_id=" + widgetId + " AND user_id=" + user.getId(), null);\r
1221                                         }\r
1222                                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
1223                                 }\r
1224                         }\r
1225                 } catch (Exception e) {\r
1226                         logger.error(EELFLoggerDelegate.errorLogger, "deleteUserWidgetSortPref failed", e);\r
1227                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
1228                 }\r
1229                 return fieldsValidator;\r
1230         }\r
1231 \r
1232         /*\r
1233          * This Method Stores the Sort Order of User Apps by Sort Manual Preference\r
1234          *\r
1235          * @param: appsSortManual--contains User Apps Data\r
1236          *\r
1237          * @param: user--contains LoggedIn User Data\r
1238          */\r
1239         @SuppressWarnings("unchecked")\r
1240         @Override\r
1241         public FieldsValidator saveAppsSortManual(List<EPAppsManualPreference> appsSortManual, EPUser user) {\r
1242                 FieldsValidator fieldsValidator = new FieldsValidator();\r
1243                 final Map<String, Long> params = new HashMap<>();\r
1244                 List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();\r
1245 \r
1246                 try {\r
1247                         params.put("userId", user.getId());\r
1248                         epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);\r
1249                         Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();\r
1250                         for (EPUserAppsManualSortPreference userAppManualPref : epManualApps) {\r
1251                                 existingAppIds.put(userAppManualPref.getAppId(), userAppManualPref);\r
1252                         }\r
1253                         for (EPAppsManualPreference epAppsManPref : appsSortManual) {\r
1254                                 if (epAppsManPref.getAppid() != null) {\r
1255                                         Long appid = epAppsManPref.getAppid();\r
1256                                         if (existingAppIds.containsKey(appid)) {\r
1257                                                 EPUserAppsManualSortPreference epAppsManualSort = existingAppIds.get(appid);\r
1258                                                 epAppsManualSort\r
1259                                                                 .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);\r
1260                                                 HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();\r
1261                                                 additionalUpdateParam.put("userId", epAppsManualSort.getUserId());\r
1262                                                 dataAccessService.saveDomainObject(epAppsManualSort, additionalUpdateParam);\r
1263                                         } else {\r
1264                                                 EPUserAppsManualSortPreference epAppsManualSort = new EPUserAppsManualSortPreference();\r
1265                                                 epAppsManualSort.setAppId(epAppsManPref.getAppid());\r
1266                                                 epAppsManualSort\r
1267                                                                 .setAppManualSortOrder((epAppsManPref.getCol() + (6 * epAppsManPref.getRow())) + 1);\r
1268                                                 epAppsManualSort.setUserId(Ints.checkedCast(user.getId()));\r
1269                                                 dataAccessService.saveDomainObject(epAppsManualSort, null);\r
1270                                         }\r
1271                                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
1272                                 }\r
1273                         }\r
1274                 } catch (Exception e) {\r
1275                         logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortManual failed", e);\r
1276                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
1277                 }\r
1278                 return fieldsValidator;\r
1279         }\r
1280 \r
1281         /*\r
1282          * (non-Javadoc)\r
1283          *\r
1284          * @see org.openecomp.portalapp.portal.service.EPAppService#\r
1285          * deleteUserAppSortManual(java.lang.String,\r
1286          * org.openecomp.portalapp.portal.domain.EPUser)\r
1287          */\r
1288         @SuppressWarnings("unchecked")\r
1289         @Override\r
1290         public FieldsValidator deleteUserAppSortManual(EPDeleteAppsManualSortPref delAppSortManual, EPUser user) {\r
1291                 FieldsValidator fieldsValidator = new FieldsValidator();\r
1292                 final Map<String, Long> params = new HashMap<>();\r
1293                 List<EPUserAppsManualSortPreference> epManualApps = new ArrayList<EPUserAppsManualSortPreference>();\r
1294                 try {\r
1295                         params.put("userId", user.getId());\r
1296                         epManualApps = dataAccessService.executeNamedQuery("userAppsManualSortPrfQuery", params, null);\r
1297                         Map<Long, EPUserAppsManualSortPreference> existingAppIds = new HashMap<Long, EPUserAppsManualSortPreference>();\r
1298                         for (EPUserAppsManualSortPreference userAppPref : epManualApps) {\r
1299                                 existingAppIds.put(userAppPref.getAppId(), userAppPref);\r
1300                         }\r
1301                         if (existingAppIds.containsKey(delAppSortManual.getAppId()) && !delAppSortManual.isSelect()) {\r
1302                                 dataAccessService.deleteDomainObjects(EPUserAppsManualSortPreference.class,\r
1303                                                 "app_id=" + delAppSortManual.getAppId() + " AND user_id=" + user.getId(), null);\r
1304                                 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
1305                         }\r
1306                 } catch (Exception e) {\r
1307                         logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);\r
1308                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
1309                 }\r
1310                 return fieldsValidator;\r
1311         }\r
1312 \r
1313         @SuppressWarnings("unchecked")\r
1314         @Override\r
1315         public FieldsValidator saveAppsSortPreference(EPAppsSortPreference appsSortPreference, EPUser user) {\r
1316                 FieldsValidator fieldsValidator = new FieldsValidator();\r
1317                 final Map<String, Long> params = new HashMap<>();\r
1318                 List<EPUserAppsSortPreference> epSortTypes = new ArrayList<EPUserAppsSortPreference>();\r
1319                 EPUserAppsSortPreference usrSortPr = null;\r
1320                 try {\r
1321                         params.put("userId", user.getId());\r
1322                         epSortTypes = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);\r
1323                         if (epSortTypes.size() == 0) {\r
1324                                 usrSortPr = new EPUserAppsSortPreference();\r
1325                                 usrSortPr.setUserId(Ints.checkedCast(user.getId()));\r
1326                                 usrSortPr.setSortPref(appsSortPreference.getValue());\r
1327                                 dataAccessService.saveDomainObject(usrSortPr, null);\r
1328                                 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
1329                         } else {\r
1330                                 usrSortPr = epSortTypes.get(0);\r
1331                                 usrSortPr.setSortPref(appsSortPreference.getValue());\r
1332                                 HashMap<String, Integer> additionalUpdateParam = new HashMap<String, Integer>();\r
1333                                 additionalUpdateParam.put("userId", usrSortPr.getUserId());\r
1334                                 dataAccessService.saveDomainObject(usrSortPr, additionalUpdateParam);\r
1335                                 fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_OK);\r
1336                         }\r
1337                 } catch (Exception e) {\r
1338                         logger.error(EELFLoggerDelegate.errorLogger, "saveAppsSortPreference failed", e);\r
1339                         fieldsValidator.httpStatusCode = new Long(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);\r
1340                 }\r
1341                 return fieldsValidator;\r
1342         }\r
1343 \r
1344         @SuppressWarnings("unchecked")\r
1345         @Override\r
1346         public String getUserAppsSortTypePreference(EPUser user) {\r
1347                 final Map<String, Long> params = new HashMap<>();\r
1348                 List<EPUserAppsSortPreference> userSortPrefs = new ArrayList<EPUserAppsSortPreference>();\r
1349                 try {\r
1350                         params.put("userId", user.getId());\r
1351                         userSortPrefs = dataAccessService.executeNamedQuery("userAppsSortPreferenceQuery", params, null);\r
1352                         if (userSortPrefs.size() > 0)\r
1353                                 return userSortPrefs.get(0).getSortPref();\r
1354                         else\r
1355                                 return null;\r
1356                 } catch (Exception e) {\r
1357                         logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);\r
1358                 }\r
1359                 return null;\r
1360 \r
1361         }\r
1362 \r
1363         @Override\r
1364         public List<EPApp> getUserRemoteApps(String id) {\r
1365                 throw new RuntimeException(" Cannot be called from parent class");\r
1366         }\r
1367 \r
1368 }\r