getAppRolesForUser() method up in UserRolesController 64/98664/1
authorDominik Mizyn <d.mizyn@samsung.com>
Wed, 20 Nov 2019 12:43:48 +0000 (13:43 +0100)
committerDominik Mizyn <d.mizyn@samsung.com>
Wed, 20 Nov 2019 12:44:08 +0000 (13:44 +0100)
This patch provid getAppRolesForUser() method up in UserRolesController,
minor changes in domain classes and some essential services to provide
this method.

Issue-ID: PORTAL-710
Change-Id: I3701b580425f10ddf608d7333f9770728d073e1b
Signed-off-by: Dominik Mizyn <d.mizyn@samsung.com>
28 files changed:
portal-BE/src/main/java/org/onap/portal/controller/UserRolesController.java
portal-BE/src/main/java/org/onap/portal/dao/fn/FnAppDao.java
portal-BE/src/main/java/org/onap/portal/dao/fn/FnMenuFunctionalDao.java [new file with mode: 0644]
portal-BE/src/main/java/org/onap/portal/dao/fn/FnMenuFunctionalRolesDao.java [new file with mode: 0644]
portal-BE/src/main/java/org/onap/portal/dao/fn/FnRoleDao.java
portal-BE/src/main/java/org/onap/portal/dao/fn/FnUserRoleDao.java
portal-BE/src/main/java/org/onap/portal/domain/db/ep/EpAppFunction.java
portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnApp.java
portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnFunction.java
portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnMenuFunctional.java
portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnMenuFunctionalRoles.java
portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnRole.java
portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnRoleFunction.java
portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnRoleV.java
portal-BE/src/main/java/org/onap/portal/domain/db/fn/FnUserRole.java
portal-BE/src/main/java/org/onap/portal/domain/dto/transport/CentralV2Role.java
portal-BE/src/main/java/org/onap/portal/domain/dto/transport/EPUserAppCurrentRoles.java
portal-BE/src/main/java/org/onap/portal/domain/dto/transport/GlobalRoleWithApplicationRoleFunction.java
portal-BE/src/main/java/org/onap/portal/domain/dto/transport/Role.java [new file with mode: 0644]
portal-BE/src/main/java/org/onap/portal/exception/DeleteDomainObjectFailedException.java [new file with mode: 0644]
portal-BE/src/main/java/org/onap/portal/service/AdminRolesService.java
portal-BE/src/main/java/org/onap/portal/service/ExternalAccessRolesService.java
portal-BE/src/main/java/org/onap/portal/service/ep/EpAppFunctionService.java
portal-BE/src/main/java/org/onap/portal/service/fn/FnAppService.java
portal-BE/src/main/java/org/onap/portal/service/fn/FnMenuFunctionalRolesService.java [new file with mode: 0644]
portal-BE/src/main/java/org/onap/portal/service/fn/FnMenuFunctionalService.java [new file with mode: 0644]
portal-BE/src/main/java/org/onap/portal/service/fn/FnRoleService.java
portal-BE/src/main/java/org/onap/portal/service/fn/FnUserRoleService.java

index da3026e..87c8dff 100644 (file)
@@ -88,31 +88,31 @@ import org.springframework.web.bind.annotation.RestController;
 @Configuration
 public class UserRolesController {
 
 @Configuration
 public class UserRolesController {
 
-       private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserRolesController.class);
+  private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(UserRolesController.class);
 
 
-       private final FnUserService fnUserService;
-       private final FnUserRoleService fnUserRoleService;
-       private final AdminRolesService adminRolesService;
-       private final ApplicationsRestClientService applicationsRestClientService;
-       private final AuditServiceImpl auditService = new AuditServiceImpl();
+  private final FnUserService fnUserService;
+  private final FnUserRoleService fnUserRoleService;
+  private final AdminRolesService adminRolesService;
+  private final ApplicationsRestClientService applicationsRestClientService;
+  private final AuditServiceImpl auditService = new AuditServiceImpl();
 
 /*
        private final UserRolesService userRolesService;
        private final SearchService searchService;*/
 
 
 
 /*
        private final UserRolesService userRolesService;
        private final SearchService searchService;*/
 
 
-       private static final String FAILURE = "failure";
+  private static final String FAILURE = "failure";
 
 
-       @Autowired
-       public UserRolesController(final FnUserService fnUserService,
-               FnUserRoleService fnUserRoleService,
-               final AdminRolesService adminRolesService,
-               ApplicationsRestClientService applicationsRestClientService) {
-              this.fnUserService = fnUserService;
-              this.fnUserRoleService = fnUserRoleService;
-              this.adminRolesService = adminRolesService;
-              this.applicationsRestClientService = applicationsRestClientService;
-       }
+  @Autowired
+  public UserRolesController(final FnUserService fnUserService,
+      FnUserRoleService fnUserRoleService,
+      final AdminRolesService adminRolesService,
+      ApplicationsRestClientService applicationsRestClientService) {
+    this.fnUserService = fnUserService;
+    this.fnUserRoleService = fnUserRoleService;
+    this.adminRolesService = adminRolesService;
+    this.applicationsRestClientService = applicationsRestClientService;
+  }
 
 
        /*
 
 
        /*
@@ -260,317 +260,317 @@ public class UserRolesController {
 
                      return fieldsValidator;
               }
 
                      return fieldsValidator;
               }
-
-
-              @RequestMapping(value = {"/portalApi/userAppRoles"}, method = {
-                      RequestMethod.GET}, produces = "application/json")
-              public List<RoleInAppForUser> getAppRolesForUser(Principal principal,
-                      @RequestParam("user") String orgUserId,
-                      @RequestParam("app") Long appid, @RequestParam("externalRequest") Boolean extRequestValue,
-                      @RequestParam("isSystemUser") Boolean isSystemUser,
-                      HttpServletResponse response) {
-                     FnUser user = fnUserService.loadUserByUsername(principal.getName());
-                     List<RoleInAppForUser> result = null;
-                     String feErrorString = "";
-                     if (!adminRolesService.isAccountAdmin(user) && !adminRolesService.isRoleAdmin(user)) {
-                            logger.debug(EELFLoggerDelegate.debugLogger,
-                                    "getAppRolesForUser: Accountadminpermissioncheck {}, RoleAdmincheck {}",
-                                    adminRolesService.isAccountAdmin(user), adminRolesService.isRoleAdmin(user));
-                            EcompPortalUtils.setBadPermissions(user, response, "getAppRolesForUser");
-                            feErrorString = EcompPortalUtils.getFEErrorString(true, response.getStatus());
-                     } else {
-                            if ((!isSystemUser && EcompPortalUtils.legitimateUserId(orgUserId)) || isSystemUser) {
-                                   result = userRolesService.getAppRolesForUser(appid, orgUserId, extRequestValue, user);
-                                   logger.debug(EELFLoggerDelegate.debugLogger, "getAppRolesForUser: result {}, appId {}",
-                                           result, appid);
-                                   int responseCode = EcompPortalUtils.getExternalAppResponseCode();
-                                   if (responseCode != 0 && responseCode != 200) {
-                                          // external error
-                                          response.setStatus(responseCode);
-                                          feErrorString = EcompPortalUtils.getFEErrorString(false, responseCode);
-                                   } else if (result == null) {
-                                          // If the result is null, there was an internal onap error
-                                          // in the service call.
-                                          response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-                                          feErrorString = EcompPortalUtils.getFEErrorString(true,
-                                                  HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-                                   }
-                            } else {
-                                   logger.info(EELFLoggerDelegate.errorLogger, "getAppRolesForUser - no Organization User ID");
-                                   response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
-                                   feErrorString = EcompPortalUtils.getFEErrorString(true, HttpServletResponse.SC_BAD_REQUEST);
-                            }
-                     }
-
-                     StringBuilder sbUserApps = new StringBuilder();
-                     if (result != null && !result.isEmpty()) {
-                            sbUserApps.append("User '" + orgUserId + "' has Roles={");
-                            for (RoleInAppForUser appRole : result) {
-                                   if (appRole.isApplied) {
-                                          sbUserApps.append(appRole.roleName + ", ");
-                                   }
-                            }
-                            sbUserApps.append("} assigned to the appId '" + appid + "'.");
-                     } else {
-                            // Not sure creating an empty object will make any difference
-                            // but would like to give it a shot for defect #DE221057
-                            if (result == null) {
-                                   result = new ArrayList<>();
-                            }
-                            sbUserApps.append("User '" + orgUserId + "' and appid " + appid + " has no roles");
-                     }
-                     logger.info(EELFLoggerDelegate.errorLogger, sbUserApps.toString());
-
-                     EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppRoles", "get result =", result);
-                     if (feErrorString != "") {
-                            logger.debug(EELFLoggerDelegate.debugLogger, "LR: FEErrorString to header: " + feErrorString);
-
-                            response.addHeader("FEErrorString", feErrorString);
-                            response.addHeader("Access-Control-Expose-Headers", "FEErrorString");
-                     }
-                     return result;
-              }
-              */
-
-       @RequestMapping(value = {"/portalApi/userAppRoles"}, method = {
-               RequestMethod.PUT}, produces = "application/json")
-       public PortalRestResponse<String> putAppWithUserRoleStateForUser(Principal principal,
-               @RequestBody AppWithRolesForUser newAppRolesForUser, HttpServletResponse response) {
-              // FieldsValidator fieldsValidator = new FieldsValidator();
-              PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
-              StringBuilder sbUserApps = new StringBuilder();
-              if (newAppRolesForUser != null) {
-                     sbUserApps.append("User '").append(newAppRolesForUser.getOrgUserId());
-                     if (newAppRolesForUser.getAppId() != null && !newAppRolesForUser.getAppRoles().isEmpty()) {
-                            sbUserApps.append("' has roles = { ");
-                            for (RoleInAppForUser appRole : newAppRolesForUser.getAppRoles()) {
-                                   if (appRole.getIsApplied()) {
-                                          sbUserApps.append(appRole.getRoleName()).append(" ,");
-                                   }
-                            }
-                            sbUserApps.deleteCharAt(sbUserApps.length() - 1);
-                            sbUserApps.append("} assigned for the app ").append(newAppRolesForUser.getAppId());
-                     } else {
-                            sbUserApps.append("' has no roles assigned for app ").append(newAppRolesForUser.getAppId());
-                     }
-              }
-              logger.info(EELFLoggerDelegate.applicationLogger, "putAppWithUserRoleStateForUser: {}",
-                      sbUserApps.toString());
-
-              FnUser user = fnUserService.loadUserByUsername(principal.getName());
-              // boolean changesApplied = false;
-              ExternalRequestFieldsValidator changesApplied = null;
-
-              if (!adminRolesService.isAccountAdmin(user) && !adminRolesService.isRoleAdmin(user)) {
-                     EcompPortalUtils.setBadPermissions(user, response, "putAppWithUserRoleStateForUser");
-              } else if (newAppRolesForUser == null) {
-                     logger.error(EELFLoggerDelegate.errorLogger,
-                             "putAppWithUserRoleStateForUser: newAppRolesForUser is null");
-              } else {
-                     changesApplied = adminRolesService.setAppWithUserRoleStateForUser(user, newAppRolesForUser);
-                     try {
-                            if (changesApplied.isResult()) {
-                                   logger.info(EELFLoggerDelegate.applicationLogger,
-                                           "putAppWithUserRoleStateForUser: succeeded for app {}, user {}",
-                                           newAppRolesForUser.getAppId(),
-                                           newAppRolesForUser.getAppId());
-
-                                   MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,
-                                           EPEELFLoggerAdvice.getCurrentDateTimeUTC());
-                                   AuditLog auditLog = new AuditLog();
-                                   auditLog.setUserId(user.getId());
-                                   auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_UPDATE_USER);
-                                   auditLog.setAffectedRecordId(newAppRolesForUser.getOrgUserId());
-                                   auditLog.setComments(EcompPortalUtils.truncateString(sbUserApps.toString(),
-                                           PortalConstants.AUDIT_LOG_COMMENT_SIZE));
-                                   auditService.logActivity(auditLog, null);
-
-                                   MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP,
-                                           EPEELFLoggerAdvice.getCurrentDateTimeUTC());
-                                   EcompPortalUtils.calculateDateTimeDifferenceForLog(
-                                           MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
-                                           MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
-                                   logger.info(EELFLoggerDelegate.auditLogger,
-                                           EPLogUtil.formatAuditLogMessage(
-                                                   "UserRolesController.putAppWithUserRoleStateForUser",
-                                                   EcompAuditLog.CD_ACTIVITY_UPDATE_USER, user.getOrgUserId(),
-                                                   newAppRolesForUser.getOrgUserId(), sbUserApps.toString()));
-                                   MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
-                                   MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
-                                   MDC.remove(SystemProperties.MDC_TIMER);
-                                   portalResponse = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null);
-
-                            }
-                            if (!changesApplied.isResult()) {
-                                   throw new Exception(changesApplied.getDetailMessage());
-                            }
-
-                     } catch (Exception e) {
-                            logger.error(EELFLoggerDelegate.errorLogger,
-                                    "putAppWithUserRoleStateForUser: failed for app {}, user {}",
-                                    newAppRolesForUser.getAppId(),
-                                    newAppRolesForUser.getOrgUserId(), e);
-                            portalResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), null);
-                     }
-              }
-
-              EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppRoles", "put result =", changesApplied);
-              return portalResponse;
-       }
-
-       @RequestMapping(value = {"/portalApi/updateRemoteUserProfile"}, method = {
-               RequestMethod.GET}, produces = "application/json")
-       public PortalRestResponse<String> updateRemoteUserProfile(HttpServletRequest request) {
-
-              String updateRemoteUserFlag = FAILURE;
-              try {
-                     // saveNewUser = userService.saveNewUser(newUser);
-                     String orgUserId = request.getParameter("loginId");
-                     long appId = Long.parseLong(request.getParameter("appId"));
-                     fnUserRoleService.updateRemoteUserProfile(orgUserId, appId);
-              } catch (Exception e) {
-                     logger.error(EELFLoggerDelegate.errorLogger, "updateRemoteUserProfile failed", e);
-                     return new PortalRestResponse<>(PortalRestStatusEnum.OK, updateRemoteUserFlag, e.getMessage());
-              }
-              return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, updateRemoteUserFlag, "");
-
-       }
-
-       @RequestMapping(value = {"/portalApi/app/{appId}/users"}, method = {
-               RequestMethod.GET}, produces = "application/json")
-       public List<UserApplicationRoles> getUsersFromAppEndpoint(@PathVariable("appId") Long appId) {
-              try {
-                     logger.debug(EELFLoggerDelegate.debugLogger, "/portalApi/app/{}/users was invoked", appId);
-                     return fnUserRoleService.getUsersFromAppEndpoint(appId);
-              } catch (Exception e) {
-                     logger.error(EELFLoggerDelegate.errorLogger, "getUsersFromAppEndpoint failed", e);
-                     return new ArrayList<>();
-              }
-       }
-
-       @RequestMapping(value = {"/portalApi/app/{appId}/roles"}, method = {
-               RequestMethod.GET}, produces = "application/json")
-       public List<EcompRole> testGetRoles(HttpServletRequest request, @PathVariable("appId") Long appId)
-               throws HTTPException {
-              EcompRole[] appRoles = applicationsRestClientService.get(EcompRole[].class, appId, "/roles");
-              List<EcompRole> rolesList = Arrays.asList(appRoles);
-              EcompPortalUtils
-                      .logAndSerializeObject(logger, "/portalApi/app/{appId}/roles", "response for appId=" + appId,
-                              rolesList);
-
-              return rolesList;
-       }
-
-
-       @RequestMapping(value = {"/portalApi/admin/import/app/{appId}/roles"}, method = {
-               RequestMethod.GET}, produces = "application/json")
-       public List<FnRole> importRolesFromRemoteApplication(@PathVariable("appId") Long appId) throws HTTPException {
-              List<FnRole> rolesList = fnUserRoleService.importRolesFromRemoteApplication(appId);
-              EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/admin/import/app/{appId}/roles",
-                      "response for appId=" + appId, rolesList);
-
-              return rolesList;
-       }
-
-
-       @RequestMapping(value = {"/portalApi/app/{appId}/user/{orgUserId}/roles"}, method = {
-               RequestMethod.GET}, produces = "application/json")
-       public EcompRole testGetRoles(@PathVariable("appId") Long appId,
-               @PathVariable("orgUserId") String orgUserId) throws Exception {
-              if (!EcompPortalUtils.legitimateUserId(orgUserId)) {
-                     String msg = "Error /user/<user>/roles not legitimate orgUserId = " + orgUserId;
-                     logger.error(EELFLoggerDelegate.errorLogger, msg);
-                     throw new Exception(msg);
-              }
-              EcompRole[] roles = applicationsRestClientService.get(EcompRole[].class, appId,
-                      String.format("/user/%s/roles", orgUserId));
-              if (roles.length != 1) {
-                     String msg =
-                             "Error /user/<user>/roles returned array. expected size 1 recieved size = " + roles.length;
-                     logger.error(EELFLoggerDelegate.errorLogger, msg);
-                     throw new Exception(msg);
-              }
-
-              EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/app/{appId}/user/{orgUserId}/roles",
-                      "response for appId='" + appId + "' and orgUserId='" + orgUserId + "'", roles[0]);
-              return roles[0];
-       }
-
-
-       @RequestMapping(value = {"/portalApi/saveUserAppRoles"}, method = {
-               RequestMethod.PUT}, produces = "application/json")
-       public FieldsValidator putAppWithUserRoleRequest(Principal principal,
-               @RequestBody AppWithRolesForUser newAppRolesForUser, HttpServletResponse response) {
-              FieldsValidator fieldsValidator = null;
-              FnUser user = fnUserService.loadUserByUsername(principal.getName());
-              try {
-                     fieldsValidator = fnUserRoleService.putUserAppRolesRequest(newAppRolesForUser, user);
-                     response.setStatus(0);
-
-              } catch (Exception e) {
-                     logger.error(EELFLoggerDelegate.errorLogger, "putAppWithUserRoleRequest failed", e);
-
-              }
-              // return fieldsValidator;
-              EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/saveUserAppRoles", "PUT result =",
-                      response.getStatus());
-              return fieldsValidator;
-       }
-
-
-       @SuppressWarnings("ConstantConditions")
-       @RequestMapping(value = {"/portalApi/appCatalogRoles"}, method = {
-               RequestMethod.GET}, produces = "application/json")
-       public List<EPUserAppCatalogRoles> getUserAppCatalogRoles(Principal principal,
-               @RequestParam("appName") String appName) {
-              FnUser user = fnUserService.loadUserByUsername(principal.getName());
-              List<EPUserAppCatalogRoles> userAppRoleList = null;
-              try {
-                     userAppRoleList = fnUserRoleService.getUserAppCatalogRoles(user, appName);
-              } catch (Exception e) {
-                     logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortPref failed", e);
-
-              }
-              userAppRoleList.sort(getUserAppCatalogRolesComparator);
-              EcompPortalUtils
-                      .logAndSerializeObject(logger, "/portalApi/userApplicationRoles", "result =", userAppRoleList);
-
-              return userAppRoleList;
-
-       }
-
-
-       private Comparator<EPUserAppCatalogRoles> getUserAppCatalogRolesComparator =
-               Comparator.comparing(EPUserAppCatalogRoles::getRoleName);
-
-       @RequestMapping(value = "/portalApi/externalRequestAccessSystem", method = RequestMethod.GET,
-               produces = "application/json")
-       public ExternalSystemAccess readExternalRequestAccess() {
-              ExternalSystemAccess result = null;
-              try {
-                     result = fnUserRoleService.getExternalRequestAccess();
-                     EcompPortalUtils
-                             .logAndSerializeObject(logger, "/portalApi/externalRequestAccessSystem", "GET result =",
-                                     result);
-              } catch (Exception e) {
-                     logger.error(EELFLoggerDelegate.errorLogger,
-                             "readExternalRequestAccess failed: " + e.getMessage());
-              }
-              return result;
-
-       }
-
-       @RequestMapping(value = {"/portalApi/checkIfUserIsSuperAdmin"}, method = RequestMethod.GET,
-               produces = "application/json")
-       public boolean checkIfUserIsSuperAdmin(Principal principal) {
-              FnUser user = fnUserService.loadUserByUsername(principal.getName());
-
-              boolean isSuperAdmin = false;
-              try {
-                     isSuperAdmin = adminRolesService.isSuperAdmin(user.getOrgUserId());
-              } catch (Exception e) {
-                     logger.error(EELFLoggerDelegate.errorLogger, "checkIfUserIsSuperAdmin failed: " + e.getMessage());
-              }
-              return isSuperAdmin;
-       }
+*/
+
+  @RequestMapping(value = {"/portalApi/userAppRoles"}, method = {
+      RequestMethod.GET}, produces = "application/json")
+  public List<RoleInAppForUser> getAppRolesForUser(Principal principal,
+      @RequestParam("user") String orgUserId,
+      @RequestParam("app") Long appid, @RequestParam("externalRequest") Boolean extRequestValue,
+      @RequestParam("isSystemUser") Boolean isSystemUser,
+      HttpServletResponse response) {
+    FnUser user = fnUserService.loadUserByUsername(principal.getName());
+    List<RoleInAppForUser> result = null;
+    String feErrorString = "";
+    if (!adminRolesService.isAccountAdmin(user) && !adminRolesService.isRoleAdmin(user.getUserId())) {
+      logger.debug(EELFLoggerDelegate.debugLogger,
+          "getAppRolesForUser: Accountadminpermissioncheck {}, RoleAdmincheck {}",
+          adminRolesService.isAccountAdmin(user), adminRolesService.isRoleAdmin(user.getUserId()));
+      EcompPortalUtils.setBadPermissions(user, response, "getAppRolesForUser");
+      feErrorString = EcompPortalUtils.getFEErrorString(true, response.getStatus());
+    } else {
+      if (isSystemUser || EcompPortalUtils.legitimateUserId(orgUserId)) {
+        result = adminRolesService.getAppRolesForUser(appid, orgUserId, extRequestValue, user.getUserId());
+        logger.debug(EELFLoggerDelegate.debugLogger, "getAppRolesForUser: result {}, appId {}",
+            result, appid);
+        int responseCode = EcompPortalUtils.getExternalAppResponseCode();
+        if (responseCode != 0 && responseCode != 200) {
+          // external error
+          response.setStatus(responseCode);
+          feErrorString = EcompPortalUtils.getFEErrorString(false, responseCode);
+        } else if (result == null) {
+          // If the result is null, there was an internal onap error
+          // in the service call.
+          response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+          feErrorString = EcompPortalUtils.getFEErrorString(true,
+              HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+        }
+      } else {
+        logger.info(EELFLoggerDelegate.errorLogger, "getAppRolesForUser - no Organization User ID");
+        response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+        feErrorString = EcompPortalUtils.getFEErrorString(true, HttpServletResponse.SC_BAD_REQUEST);
+      }
+    }
+
+    StringBuilder sbUserApps = new StringBuilder();
+    if (result != null && !result.isEmpty()) {
+      sbUserApps.append("User '").append(orgUserId).append("' has Roles={");
+      for (RoleInAppForUser appRole : result) {
+        if (appRole.getIsApplied()) {
+          sbUserApps.append(appRole.getRoleName()).append(", ");
+        }
+      }
+      sbUserApps.append("} assigned to the appId '").append(appid).append("'.");
+    } else {
+      // Not sure creating an empty object will make any difference
+      // but would like to give it a shot for defect #DE221057
+      if (result == null) {
+        result = new ArrayList<>();
+      }
+      sbUserApps.append("User '").append(orgUserId).append("' and appid ").append(appid).append(" has no roles");
+    }
+    logger.info(EELFLoggerDelegate.errorLogger, sbUserApps.toString());
+
+    EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppRoles", "get result =", result);
+    if (!feErrorString.isEmpty()) {
+      logger.debug(EELFLoggerDelegate.debugLogger, "LR: FEErrorString to header: " + feErrorString);
+
+      response.addHeader("FEErrorString", feErrorString);
+      response.addHeader("Access-Control-Expose-Headers", "FEErrorString");
+    }
+    return result;
+  }
+
+
+  @RequestMapping(value = {"/portalApi/userAppRoles"}, method = {
+      RequestMethod.PUT}, produces = "application/json")
+  public PortalRestResponse<String> putAppWithUserRoleStateForUser(Principal principal,
+      @RequestBody AppWithRolesForUser newAppRolesForUser, HttpServletResponse response) {
+    // FieldsValidator fieldsValidator = new FieldsValidator();
+    PortalRestResponse<String> portalResponse = new PortalRestResponse<>();
+    StringBuilder sbUserApps = new StringBuilder();
+    if (newAppRolesForUser != null) {
+      sbUserApps.append("User '").append(newAppRolesForUser.getOrgUserId());
+      if (newAppRolesForUser.getAppId() != null && !newAppRolesForUser.getAppRoles().isEmpty()) {
+        sbUserApps.append("' has roles = { ");
+        for (RoleInAppForUser appRole : newAppRolesForUser.getAppRoles()) {
+          if (appRole.getIsApplied()) {
+            sbUserApps.append(appRole.getRoleName()).append(" ,");
+          }
+        }
+        sbUserApps.deleteCharAt(sbUserApps.length() - 1);
+        sbUserApps.append("} assigned for the app ").append(newAppRolesForUser.getAppId());
+      } else {
+        sbUserApps.append("' has no roles assigned for app ").append(newAppRolesForUser.getAppId());
+      }
+    }
+    logger.info(EELFLoggerDelegate.applicationLogger, "putAppWithUserRoleStateForUser: {}",
+        sbUserApps.toString());
+
+    FnUser user = fnUserService.loadUserByUsername(principal.getName());
+    // boolean changesApplied = false;
+    ExternalRequestFieldsValidator changesApplied = null;
+
+    if (!adminRolesService.isAccountAdmin(user) && !adminRolesService.isRoleAdmin(user.getUserId())) {
+      EcompPortalUtils.setBadPermissions(user, response, "putAppWithUserRoleStateForUser");
+    } else if (newAppRolesForUser == null) {
+      logger.error(EELFLoggerDelegate.errorLogger,
+          "putAppWithUserRoleStateForUser: newAppRolesForUser is null");
+    } else {
+      changesApplied = adminRolesService.setAppWithUserRoleStateForUser(user, newAppRolesForUser);
+      try {
+        if (changesApplied.isResult()) {
+          logger.info(EELFLoggerDelegate.applicationLogger,
+              "putAppWithUserRoleStateForUser: succeeded for app {}, user {}",
+              newAppRolesForUser.getAppId(),
+              newAppRolesForUser.getAppId());
+
+          MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,
+              EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+          AuditLog auditLog = new AuditLog();
+          auditLog.setUserId(user.getId());
+          auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_UPDATE_USER);
+          auditLog.setAffectedRecordId(newAppRolesForUser.getOrgUserId());
+          auditLog.setComments(EcompPortalUtils.truncateString(sbUserApps.toString(),
+              PortalConstants.AUDIT_LOG_COMMENT_SIZE));
+          auditService.logActivity(auditLog, null);
+
+          MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP,
+              EPEELFLoggerAdvice.getCurrentDateTimeUTC());
+          EcompPortalUtils.calculateDateTimeDifferenceForLog(
+              MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
+              MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
+          logger.info(EELFLoggerDelegate.auditLogger,
+              EPLogUtil.formatAuditLogMessage(
+                  "UserRolesController.putAppWithUserRoleStateForUser",
+                  EcompAuditLog.CD_ACTIVITY_UPDATE_USER, user.getOrgUserId(),
+                  newAppRolesForUser.getOrgUserId(), sbUserApps.toString()));
+          MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
+          MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
+          MDC.remove(SystemProperties.MDC_TIMER);
+          portalResponse = new PortalRestResponse<>(PortalRestStatusEnum.OK, "success", null);
+
+        }
+        if (!changesApplied.isResult()) {
+          throw new Exception(changesApplied.getDetailMessage());
+        }
+
+      } catch (Exception e) {
+        logger.error(EELFLoggerDelegate.errorLogger,
+            "putAppWithUserRoleStateForUser: failed for app {}, user {}",
+            newAppRolesForUser.getAppId(),
+            newAppRolesForUser.getOrgUserId(), e);
+        portalResponse = new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), null);
+      }
+    }
+
+    EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppRoles", "put result =", changesApplied);
+    return portalResponse;
+  }
+
+  @RequestMapping(value = {"/portalApi/updateRemoteUserProfile"}, method = {
+      RequestMethod.GET}, produces = "application/json")
+  public PortalRestResponse<String> updateRemoteUserProfile(HttpServletRequest request) {
+
+    String updateRemoteUserFlag = FAILURE;
+    try {
+      // saveNewUser = userService.saveNewUser(newUser);
+      String orgUserId = request.getParameter("loginId");
+      long appId = Long.parseLong(request.getParameter("appId"));
+      fnUserRoleService.updateRemoteUserProfile(orgUserId, appId);
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "updateRemoteUserProfile failed", e);
+      return new PortalRestResponse<>(PortalRestStatusEnum.OK, updateRemoteUserFlag, e.getMessage());
+    }
+    return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, updateRemoteUserFlag, "");
+
+  }
+
+  @RequestMapping(value = {"/portalApi/app/{appId}/users"}, method = {
+      RequestMethod.GET}, produces = "application/json")
+  public List<UserApplicationRoles> getUsersFromAppEndpoint(@PathVariable("appId") Long appId) {
+    try {
+      logger.debug(EELFLoggerDelegate.debugLogger, "/portalApi/app/{}/users was invoked", appId);
+      return fnUserRoleService.getUsersFromAppEndpoint(appId);
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "getUsersFromAppEndpoint failed", e);
+      return new ArrayList<>();
+    }
+  }
+
+  @RequestMapping(value = {"/portalApi/app/{appId}/roles"}, method = {
+      RequestMethod.GET}, produces = "application/json")
+  public List<EcompRole> testGetRoles(HttpServletRequest request, @PathVariable("appId") Long appId)
+      throws HTTPException {
+    EcompRole[] appRoles = applicationsRestClientService.get(EcompRole[].class, appId, "/roles");
+    List<EcompRole> rolesList = Arrays.asList(appRoles);
+    EcompPortalUtils
+        .logAndSerializeObject(logger, "/portalApi/app/{appId}/roles", "response for appId=" + appId,
+            rolesList);
+
+    return rolesList;
+  }
+
+
+  @RequestMapping(value = {"/portalApi/admin/import/app/{appId}/roles"}, method = {
+      RequestMethod.GET}, produces = "application/json")
+  public List<FnRole> importRolesFromRemoteApplication(@PathVariable("appId") Long appId) throws HTTPException {
+    List<FnRole> rolesList = fnUserRoleService.importRolesFromRemoteApplication(appId);
+    EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/admin/import/app/{appId}/roles",
+        "response for appId=" + appId, rolesList);
+
+    return rolesList;
+  }
+
+
+  @RequestMapping(value = {"/portalApi/app/{appId}/user/{orgUserId}/roles"}, method = {
+      RequestMethod.GET}, produces = "application/json")
+  public EcompRole testGetRoles(@PathVariable("appId") Long appId,
+      @PathVariable("orgUserId") String orgUserId) throws Exception {
+    if (!EcompPortalUtils.legitimateUserId(orgUserId)) {
+      String msg = "Error /user/<user>/roles not legitimate orgUserId = " + orgUserId;
+      logger.error(EELFLoggerDelegate.errorLogger, msg);
+      throw new Exception(msg);
+    }
+    EcompRole[] roles = applicationsRestClientService.get(EcompRole[].class, appId,
+        String.format("/user/%s/roles", orgUserId));
+    if (roles.length != 1) {
+      String msg =
+          "Error /user/<user>/roles returned array. expected size 1 recieved size = " + roles.length;
+      logger.error(EELFLoggerDelegate.errorLogger, msg);
+      throw new Exception(msg);
+    }
+
+    EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/app/{appId}/user/{orgUserId}/roles",
+        "response for appId='" + appId + "' and orgUserId='" + orgUserId + "'", roles[0]);
+    return roles[0];
+  }
+
+
+  @RequestMapping(value = {"/portalApi/saveUserAppRoles"}, method = {
+      RequestMethod.PUT}, produces = "application/json")
+  public FieldsValidator putAppWithUserRoleRequest(Principal principal,
+      @RequestBody AppWithRolesForUser newAppRolesForUser, HttpServletResponse response) {
+    FieldsValidator fieldsValidator = null;
+    FnUser user = fnUserService.loadUserByUsername(principal.getName());
+    try {
+      fieldsValidator = fnUserRoleService.putUserAppRolesRequest(newAppRolesForUser, user);
+      response.setStatus(0);
+
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "putAppWithUserRoleRequest failed", e);
+
+    }
+    // return fieldsValidator;
+    EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/saveUserAppRoles", "PUT result =",
+        response.getStatus());
+    return fieldsValidator;
+  }
+
+
+  @SuppressWarnings("ConstantConditions")
+  @RequestMapping(value = {"/portalApi/appCatalogRoles"}, method = {
+      RequestMethod.GET}, produces = "application/json")
+  public List<EPUserAppCatalogRoles> getUserAppCatalogRoles(Principal principal,
+      @RequestParam("appName") String appName) {
+    FnUser user = fnUserService.loadUserByUsername(principal.getName());
+    List<EPUserAppCatalogRoles> userAppRoleList = null;
+    try {
+      userAppRoleList = fnUserRoleService.getUserAppCatalogRoles(user, appName);
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortPref failed", e);
+
+    }
+    userAppRoleList.sort(getUserAppCatalogRolesComparator);
+    EcompPortalUtils
+        .logAndSerializeObject(logger, "/portalApi/userApplicationRoles", "result =", userAppRoleList);
+
+    return userAppRoleList;
+
+  }
+
+
+  private Comparator<EPUserAppCatalogRoles> getUserAppCatalogRolesComparator =
+      Comparator.comparing(EPUserAppCatalogRoles::getRoleName);
+
+  @RequestMapping(value = "/portalApi/externalRequestAccessSystem", method = RequestMethod.GET,
+      produces = "application/json")
+  public ExternalSystemAccess readExternalRequestAccess() {
+    ExternalSystemAccess result = null;
+    try {
+      result = fnUserRoleService.getExternalRequestAccess();
+      EcompPortalUtils
+          .logAndSerializeObject(logger, "/portalApi/externalRequestAccessSystem", "GET result =",
+              result);
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger,
+          "readExternalRequestAccess failed: " + e.getMessage());
+    }
+    return result;
+
+  }
+
+  @RequestMapping(value = {"/portalApi/checkIfUserIsSuperAdmin"}, method = RequestMethod.GET,
+      produces = "application/json")
+  public boolean checkIfUserIsSuperAdmin(Principal principal) {
+    FnUser user = fnUserService.loadUserByUsername(principal.getName());
+
+    boolean isSuperAdmin = false;
+    try {
+      isSuperAdmin = adminRolesService.isSuperAdmin(user.getOrgUserId());
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "checkIfUserIsSuperAdmin failed: " + e.getMessage());
+    }
+    return isSuperAdmin;
+  }
 }
 }
index 616ee2d..a1be3bd 100644 (file)
@@ -1,7 +1,10 @@
 package org.onap.portal.dao.fn;
 
 package org.onap.portal.dao.fn;
 
+import java.util.List;
 import org.onap.portal.domain.db.fn.FnApp;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.onap.portal.domain.db.fn.FnApp;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -9,4 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
 @Transactional
 public interface FnAppDao extends JpaRepository<FnApp, Long> {
 
 @Transactional
 public interface FnAppDao extends JpaRepository<FnApp, Long> {
 
+  @Query
+  List<FnApp> getByUebKey(final @Param("uebKey") String uebKey);
+
 }
 }
diff --git a/portal-BE/src/main/java/org/onap/portal/dao/fn/FnMenuFunctionalDao.java b/portal-BE/src/main/java/org/onap/portal/dao/fn/FnMenuFunctionalDao.java
new file mode 100644 (file)
index 0000000..0c8ac4a
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *             https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+package org.onap.portal.dao.fn;
+
+import java.util.List;
+import org.onap.portal.domain.db.fn.FnMenuFunctional;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+@Repository
+public interface FnMenuFunctionalDao extends JpaRepository<FnMenuFunctional, Long> {
+  @Query
+  List<FnMenuFunctional> retrieveByMenuId(final @Param("menuId") Long menuId);
+}
diff --git a/portal-BE/src/main/java/org/onap/portal/dao/fn/FnMenuFunctionalRolesDao.java b/portal-BE/src/main/java/org/onap/portal/dao/fn/FnMenuFunctionalRolesDao.java
new file mode 100644 (file)
index 0000000..10b189b
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *             https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+package org.onap.portal.dao.fn;
+
+import java.util.List;
+import org.onap.portal.domain.db.fn.FnMenuFunctionalRoles;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+@Repository
+public interface FnMenuFunctionalRolesDao extends JpaRepository<FnMenuFunctionalRoles, Long> {
+
+  @Query
+  List<FnMenuFunctionalRoles> retrieveByRoleId(final @Param("roleId") Long roleId);
+
+  @Query
+  List<FnMenuFunctionalRoles> retrieveByMenuId(final @Param("menuId") Long menuId);
+
+
+}
index a87f31c..b428ea1 100644 (file)
@@ -68,6 +68,12 @@ public interface FnRoleDao extends JpaRepository<FnRole, Long> {
   @Query
   List<FnRole> retrieveAppRolesByAppId(final @Param("appId") Long id);
 
   @Query
   List<FnRole> retrieveAppRolesByAppId(final @Param("appId") Long id);
 
+  @Query
+  List<FnRole> retrieveActiveRolesOfApplication(final @Param("appId") Long appId);
+
   @Query
   List<FnRole> retrieveAppRolesByRoleNameAndByAppId(final @Param("roleName") String roleName, final @Param("appId") Long appId);
   @Query
   List<FnRole> retrieveAppRolesByRoleNameAndByAppId(final @Param("roleName") String roleName, final @Param("appId") Long appId);
+
+  @Query
+  List<FnRole> getGlobalRolesOfPortal();
 }
 }
index efb56b2..952d516 100644 (file)
@@ -65,4 +65,7 @@ public interface FnUserRoleDao extends JpaRepository<FnUserRole, Long> {
 
        @Query
        List<FnUserRole> retrieveByAppIdAndUserId(final @Param("appId") Long appId, final @Param("userId") String userId);
 
        @Query
        List<FnUserRole> retrieveByAppIdAndUserId(final @Param("appId") Long appId, final @Param("userId") String userId);
+
+       @Query
+       List<FnUserRole> retrieveByAppIdAndRoleId(final @Param("appId") Long appId, final @Param("roleId") Long roleId);
 }
 }
index 533309d..5cccdcb 100644 (file)
@@ -101,62 +101,64 @@ CREATE TABLE `ep_app_function` (
 @IdClass(EpAppFunctionId.class)
 @NoArgsConstructor
 @AllArgsConstructor
 @IdClass(EpAppFunctionId.class)
 @NoArgsConstructor
 @AllArgsConstructor
-public class EpAppFunction extends DomainVo implements Serializable{
-       @Id
-       @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-       @JoinColumn(name = "app_id")
-       @Valid
-       private FnApp appId;
-       @Id
-       @Column(name = "function_cd", length = 250, nullable = false)
-       @Size(max = 250)
-       @NotNull
-       @SafeHtml
-       private String functionCd;
-       @Column(name = "function_name", length = 250, nullable = false)
-       @Size(max = 250)
-       @NotNull
-       @SafeHtml
-       private String functionName;
+public class EpAppFunction extends DomainVo implements Serializable {
 
 
-       private Long roleId;
-       private String type;
-       @SafeHtml
-       private String action;
-       @SafeHtml
-       private String editUrl;
+  @Id
+  @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+  @JoinColumn(name = "app_id")
+  @Valid
+  private FnApp appId;
+  @Id
+  @Column(name = "function_cd", length = 250, nullable = false)
+  @Size(max = 250)
+  @NotNull
+  @SafeHtml
+  private String functionCd;
+  @Column(name = "function_name", length = 250, nullable = false)
+  @Size(max = 250)
+  @NotNull
+  @SafeHtml
+  private String functionName;
 
 
-       @OneToMany(
-               targetEntity = EpAppRoleFunction.class,
-               mappedBy = "epAppFunction",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<EpAppRoleFunction> epAppRoleFunctions;
+  private Long roleId;
+  private String type;
+  @SafeHtml
+  private String action;
+  @SafeHtml
+  private String editUrl;
 
 
-       public EpAppFunction(Long id, String code, String name, FnApp appId, String type, String action,String editUrl) {
-              super();
-              this.id = id;
-              this.functionCd = code;
-              this.functionName = name;
-              this.appId = appId;
-              this.type = type;
-              this.action = action;
-              this.editUrl = editUrl;
-       }
+  @OneToMany(
+      targetEntity = EpAppRoleFunction.class,
+      mappedBy = "epAppFunction",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<EpAppRoleFunction> epAppRoleFunctions;
 
 
-       @Getter
-       @Setter
-       @EqualsAndHashCode
-       @NoArgsConstructor
-       @AllArgsConstructor
-       public static class EpAppFunctionId implements Serializable {
-              @Valid
-              private FnApp appId;
-              @Size(max = 250)
-              @NotNull
-              @SafeHtml
-              private String functionCd;
-       }
+  public EpAppFunction(Long id, String code, String name, FnApp appId, String type, String action, String editUrl) {
+    super();
+    this.id = id;
+    this.functionCd = code;
+    this.functionName = name;
+    this.appId = appId;
+    this.type = type;
+    this.action = action;
+    this.editUrl = editUrl;
+  }
+
+  @Getter
+  @Setter
+  @EqualsAndHashCode
+  @NoArgsConstructor
+  @AllArgsConstructor
+  public static class EpAppFunctionId implements Serializable {
+
+    @Valid
+    private FnApp appId;
+    @Size(max = 250)
+    @NotNull
+    @SafeHtml
+    private String functionCd;
+  }
 }
 
 }
 
index bada8e1..9beee46 100644 (file)
@@ -102,9 +102,13 @@ CREATE TABLE `fn_app` (
 */
 
 @NamedQueries({
 */
 
 @NamedQueries({
-        @NamedQuery(
-                name = "FnApp.retrieveWhereAuthCentralIsYAndOpenIsNAndAuthNamespaceIsNotNull",
-                query = "from FnApp where auth_central = 'Y' and open = 'N' and auth_namespace is not null")
+    @NamedQuery(
+        name = "FnApp.retrieveWhereAuthCentralIsYAndOpenIsNAndAuthNamespaceIsNotNull",
+        query = "from FnApp where authCentral = 'Y' and open = 'N' and authNamespace is not null"),
+    @NamedQuery(
+        name = "FnApp.getByUebKey",
+        query = "from FnApp where uebKey = :uebKey"
+    )
 })
 
 @Table(name = "fn_app")
 })
 
 @Table(name = "fn_app")
@@ -117,162 +121,162 @@ CREATE TABLE `fn_app` (
 @Entity
 public class FnApp extends DomainVo implements Serializable {
 
 @Entity
 public class FnApp extends DomainVo implements Serializable {
 
-       @Id
-       @GeneratedValue(strategy = GenerationType.AUTO)
-       @Column(name = "app_Id", length = 11, nullable = false)
-       @Digits(integer = 11, fraction = 0)
-       private Long appId;
-       @Column(name = "app_name", length = 100, nullable = false, columnDefinition = "varchar(100) not null default '?'")
-       @Size(max = 100)
-       @SafeHtml
-       @NotNull
-       private String appName;
-       @Column(name = "app_image_url", length = 256)
-       @Size(max = 256)
-       @SafeHtml
-       private String appImageUrl;
-       @Column(name = "app_description", length = 512)
-       @Size(max = 256)
-       @SafeHtml
-       private String appDescription;
-       @Column(name = "app_notes", length = 4096)
-       @Size(max = 4096)
-       @SafeHtml
-       private String appNotes;
-       @Column(name = "app_url", length = 256)
-       @Size(max = 256)
-       @SafeHtml
-       //TODO URL
-       @URL
-       private String appUrl;
-       @Column(name = "app_alternate_url", length = 256)
-       @Size(max = 256)
-       @SafeHtml
-       private String appAlternateUrl;
-       @Column(name = "app_rest_endpoint", length = 2000)
-       @Size(max = 2000)
-       @SafeHtml
-       private String appRestEndpoint;
-       @Column(name = "ml_app_name", length = 50, nullable = false, columnDefinition = "varchar(50) not null default '?'")
-       @Size(max = 50)
-       @SafeHtml
-       @NotNull
-       private String ml_app_name;
-       @Column(name = "ml_app_admin_id", length = 7, nullable = false, columnDefinition = "varchar(7) not null default '?'")
-       @Size(max = 7)
-       @SafeHtml
-       @NotNull
-       private String mlAppAdminId;
-       @Column(name = "mots_id", length = 11)
-       @Digits(integer = 11, fraction = 0)
-       private Long motsId;
-       @Column(name = "app_password", length = 256, nullable = false, columnDefinition = "varchar(256) not null default '?'")
-       @Size(max = 256)
-       @SafeHtml
-       @NotNull
-       private String appPassword;
-       @Column(name = "_open", length = 1, columnDefinition = "char(1) default 'N'")
-       private Boolean open;
-       @Column(name = "_enabled", length = 1, columnDefinition = "char(1) default 'N'")
-       private Boolean enabled;
-       @Column(name = "active_yn", length = 1, columnDefinition = "char(1) default 'Y'")
-       @Pattern(regexp = "[YNyn]")
-       @Size(max = 1)
-       @NotNull
-       @SafeHtml
-       private String activeYn;
-       @Column(name = "_thumbnail", columnDefinition = "mediumblob null default null")
-       private byte[] thumbnail;
-       @Column(name = "app_username", length = 50)
-       @Size(max = 50)
-       @SafeHtml
-       private String appUsername;
-       @Column(name = "ueb_key", length = 256)
-       @Size(max = 256)
-       @SafeHtml
-       private String uebKey;
-       @Column(name = "ueb_secret", length = 256)
-       @Size(max = 256)
-       @SafeHtml
-       private String uebSecret;
-       @Column(name = "ueb_topic_name", length = 256)
-       @Size(max = 256)
-       @SafeHtml
-       private String uebTopicName;
-       @Column(name = "app_type", length = 11, columnDefinition = "int(11) not null default 1")
-       @Digits(integer = 11, fraction = 0)
-       private Long appType;
-       @Column(name = "auth_central", length = 1, columnDefinition = "char(1) not null default 'N'", nullable = false)
-       private Boolean authCentral;
-       @Column(name = "auth_namespace", length = 100)
-       @Size(max = 100)
-       @SafeHtml
-       private String authNamespace;
-       @OneToMany(
-               targetEntity = FnMenuFunctionalRoles.class,
-               mappedBy = "appId",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<FnMenuFunctionalRoles> fnMenuFunctionalRoles;
-       @OneToMany(
-               targetEntity = EpUserRolesRequest.class,
-               mappedBy = "appId",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<EpUserRolesRequest> epUserRolesRequests;
-       @OneToMany(
-               targetEntity = EpAppFunction.class,
-               mappedBy = "appId",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<EpAppFunction> epAppFunctions;
-       @OneToMany(
-               targetEntity = EpAppRoleFunction.class,
-               mappedBy = "appId",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<EpAppRoleFunction> epAppRoleFunctions;
-       @OneToMany(
-               targetEntity = FnUserRole.class,
-               mappedBy = "appId",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<FnUserRole> fnUserRoles;
-       @OneToMany(
-               targetEntity = EpWebAnalyticsSource.class,
-               mappedBy = "appId",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<EpWebAnalyticsSource> epWebAnalyticsSources;
-       @OneToMany(
-               targetEntity = EpWidgetCatalogRole.class,
-               mappedBy = "appId",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<EpWidgetCatalogRole> epWidgetCatalogRoles;
-       @OneToMany(
-               targetEntity = EpMicroservice.class,
-               mappedBy = "appId",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<EpMicroservice> epMicroservices;
-       @OneToMany(
-               targetEntity = FnPersUserAppSel.class,
-               mappedBy = "appId",
-               cascade = CascadeType.ALL,
-               fetch = FetchType.LAZY
-       )
-       private Set<FnPersUserAppSel> fnPersUserAppSels;
+  @Id
+  @GeneratedValue(strategy = GenerationType.AUTO)
+  @Column(name = "app_Id", length = 11, nullable = false)
+  @Digits(integer = 11, fraction = 0)
+  private Long appId;
+  @Column(name = "app_name", length = 100, nullable = false, columnDefinition = "varchar(100) not null default '?'")
+  @Size(max = 100)
+  @SafeHtml
+  @NotNull
+  private String appName;
+  @Column(name = "app_image_url", length = 256)
+  @Size(max = 256)
+  @SafeHtml
+  private String appImageUrl;
+  @Column(name = "app_description", length = 512)
+  @Size(max = 256)
+  @SafeHtml
+  private String appDescription;
+  @Column(name = "app_notes", length = 4096)
+  @Size(max = 4096)
+  @SafeHtml
+  private String appNotes;
+  @Column(name = "app_url", length = 256)
+  @Size(max = 256)
+  @SafeHtml
+  //TODO URL
+  @URL
+  private String appUrl;
+  @Column(name = "app_alternate_url", length = 256)
+  @Size(max = 256)
+  @SafeHtml
+  private String appAlternateUrl;
+  @Column(name = "app_rest_endpoint", length = 2000)
+  @Size(max = 2000)
+  @SafeHtml
+  private String appRestEndpoint;
+  @Column(name = "ml_app_name", length = 50, nullable = false, columnDefinition = "varchar(50) not null default '?'")
+  @Size(max = 50)
+  @SafeHtml
+  @NotNull
+  private String ml_app_name;
+  @Column(name = "ml_app_admin_id", length = 7, nullable = false, columnDefinition = "varchar(7) not null default '?'")
+  @Size(max = 7)
+  @SafeHtml
+  @NotNull
+  private String mlAppAdminId;
+  @Column(name = "mots_id", length = 11)
+  @Digits(integer = 11, fraction = 0)
+  private Long motsId;
+  @Column(name = "app_password", length = 256, nullable = false, columnDefinition = "varchar(256) not null default '?'")
+  @Size(max = 256)
+  @SafeHtml
+  @NotNull
+  private String appPassword;
+  @Column(name = "_open", length = 1, columnDefinition = "char(1) default 'N'")
+  private Boolean open;
+  @Column(name = "_enabled", length = 1, columnDefinition = "char(1) default 'N'")
+  private Boolean enabled;
+  @Column(name = "active_yn", length = 1, columnDefinition = "char(1) default 'Y'")
+  @Pattern(regexp = "[YNyn]")
+  @Size(max = 1)
+  @NotNull
+  @SafeHtml
+  private String activeYn;
+  @Column(name = "_thumbnail", columnDefinition = "mediumblob null default null")
+  private byte[] thumbnail;
+  @Column(name = "app_username", length = 50)
+  @Size(max = 50)
+  @SafeHtml
+  private String appUsername;
+  @Column(name = "ueb_key", length = 256)
+  @Size(max = 256)
+  @SafeHtml
+  private String uebKey;
+  @Column(name = "ueb_secret", length = 256)
+  @Size(max = 256)
+  @SafeHtml
+  private String uebSecret;
+  @Column(name = "ueb_topic_name", length = 256)
+  @Size(max = 256)
+  @SafeHtml
+  private String uebTopicName;
+  @Column(name = "app_type", length = 11, columnDefinition = "int(11) not null default 1")
+  @Digits(integer = 11, fraction = 0)
+  private Long appType;
+  @Column(name = "auth_central", length = 1, columnDefinition = "char(1) not null default 'N'", nullable = false)
+  private Boolean authCentral;
+  @Column(name = "auth_namespace", length = 100)
+  @Size(max = 100)
+  @SafeHtml
+  private String authNamespace;
+  @OneToMany(
+      targetEntity = FnMenuFunctionalRoles.class,
+      mappedBy = "appId",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<FnMenuFunctionalRoles> fnMenuFunctionalRoles;
+  @OneToMany(
+      targetEntity = EpUserRolesRequest.class,
+      mappedBy = "appId",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<EpUserRolesRequest> epUserRolesRequests;
+  @OneToMany(
+      targetEntity = EpAppFunction.class,
+      mappedBy = "appId",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<EpAppFunction> epAppFunctions;
+  @OneToMany(
+      targetEntity = EpAppRoleFunction.class,
+      mappedBy = "appId",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<EpAppRoleFunction> epAppRoleFunctions;
+  @OneToMany(
+      targetEntity = FnUserRole.class,
+      mappedBy = "appId",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<FnUserRole> fnUserRoles;
+  @OneToMany(
+      targetEntity = EpWebAnalyticsSource.class,
+      mappedBy = "appId",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<EpWebAnalyticsSource> epWebAnalyticsSources;
+  @OneToMany(
+      targetEntity = EpWidgetCatalogRole.class,
+      mappedBy = "appId",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<EpWidgetCatalogRole> epWidgetCatalogRoles;
+  @OneToMany(
+      targetEntity = EpMicroservice.class,
+      mappedBy = "appId",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<EpMicroservice> epMicroservices;
+  @OneToMany(
+      targetEntity = FnPersUserAppSel.class,
+      mappedBy = "appId",
+      cascade = CascadeType.ALL,
+      fetch = FetchType.LAZY
+  )
+  private Set<FnPersUserAppSel> fnPersUserAppSels;
 
 
-       public Boolean isRestrictedApp() {
-              return (this.appType == 2);
-       }
+  public Boolean isRestrictedApp() {
+    return (this.appType == 2);
+  }
 }
 }
index 3375fd0..7bd9c38 100644 (file)
@@ -52,6 +52,7 @@ import javax.persistence.Table;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import lombok.AllArgsConstructor;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -68,6 +69,7 @@ CREATE TABLE `fn_function` (
 @Table(name = "fn_function")
 @NoArgsConstructor
 @AllArgsConstructor
 @Table(name = "fn_function")
 @NoArgsConstructor
 @AllArgsConstructor
+@Builder
 @Getter
 @Setter
 @Entity
 @Getter
 @Setter
 @Entity
@@ -82,6 +84,10 @@ public class FnFunction implements Serializable {
        @SafeHtml
        @NotNull
        private String functionName;
        @SafeHtml
        @NotNull
        private String functionName;
+       private String code;
+       private String name;
+       private String type;
+       private String action;
        @OneToMany(
                targetEntity = FnRestrictedUrl.class,
                mappedBy = "functionCd",
        @OneToMany(
                targetEntity = FnRestrictedUrl.class,
                mappedBy = "functionCd",
index e348a01..e1e2787 100644 (file)
@@ -54,6 +54,8 @@ import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
 import javax.persistence.ManyToOne;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import javax.validation.Valid;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import javax.validation.Valid;
@@ -83,6 +85,14 @@ CREATE TABLE `fn_menu_functional` (
 )
 */
 
 )
 */
 
+@NamedQueries({
+    @NamedQuery(
+        name = "FnMenuFunctional.retrieveByMenuId",
+        query = "from FnMenuFunctionalRoles where menuId =:menuId"
+    )
+}
+)
+
 @Table(name = "fn_menu_functional", indexes = {@Index(columnList = "parent_menu_id", name = "fk_fn_menu_func_parent_menu_id_idx")
 })
 @NoArgsConstructor
 @Table(name = "fn_menu_functional", indexes = {@Index(columnList = "parent_menu_id", name = "fk_fn_menu_func_parent_menu_id_idx")
 })
 @NoArgsConstructor
index 3e9ae0e..ff7cadc 100644 (file)
@@ -51,6 +51,8 @@ import javax.persistence.Id;
 import javax.persistence.Index;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.Index;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.validation.Valid;
 import javax.validation.constraints.Digits;
 import javax.persistence.Table;
 import javax.validation.Valid;
 import javax.validation.constraints.Digits;
@@ -76,6 +78,17 @@ CREATE TABLE `fn_menu_functional_roles` (
         )
 */
 
         )
 */
 
+@NamedQueries({
+    @NamedQuery(
+        name = "FnMenuFunctionalRoles.retrieveByRoleId",
+        query = "from FnMenuFunctionalRoles where roleId.roleId =:roleId"),
+    @NamedQuery(
+        name = "FnMenuFunctionalRoles.retrieveByMenuId",
+        query = "from FnMenuFunctionalRoles where menuId.menuId =:menuId"
+    )
+}
+)
+
 @Table(name = "fn_menu_functional_roles", indexes = {
         @Index(columnList = "menu_id", name = "fk_fn_menu_func_roles_menu_id_idx"),
         @Index(columnList = "app_id", name = "fk_fn_menu_func_roles_app_id_idx"),
 @Table(name = "fn_menu_functional_roles", indexes = {
         @Index(columnList = "menu_id", name = "fk_fn_menu_func_roles_menu_id_idx"),
         @Index(columnList = "app_id", name = "fk_fn_menu_func_roles_app_id_idx"),
index 80617ba..3de581b 100644 (file)
@@ -63,6 +63,7 @@ import javax.validation.constraints.Digits;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import lombok.AllArgsConstructor;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -110,7 +111,7 @@ CREATE TABLE `fn_role` (
         query = "FROM FnRole where roleName =:roleName and appId is null"),
     @NamedQuery(
         name = "FnRole.retrieveActiveRolesOfApplication",
         query = "FROM FnRole where roleName =:roleName and appId is null"),
     @NamedQuery(
         name = "FnRole.retrieveActiveRolesOfApplication",
-        query = "from FnRole where active_yn = 'Y' and appId=:appId"),
+        query = "from FnRole where activeYn = 'Y' and appId=:appId"),
     @NamedQuery(
         name = "FnRole.getUserRoleOnUserIdAndAppId",
         query = " FROM"
     @NamedQuery(
         name = "FnRole.getUserRoleOnUserIdAndAppId",
         query = " FROM"
@@ -120,7 +121,16 @@ CREATE TABLE `fn_role` (
             + "  fr.roleId = fur.roleId\n"
             + "  AND fur.userId = :userId"
             + "  AND fur.appId = :appId\n"
             + "  fr.roleId = fur.roleId\n"
             + "  AND fur.userId = :userId"
             + "  AND fur.appId = :appId\n"
-            + "  AND fr.activeYn = 'y'")
+            + "  AND fr.activeYn = 'y'"),
+    @NamedQuery(
+        name = "FnRole.getGlobalRolesOfPortal",
+        query = "from"
+            + "  FnRole"
+            + " where"
+            + "  roleName like 'global_%'"
+            + "  and appId is null"
+            + "  and activeYn = 'Y'"
+    )
 })
 
 @Table(name = "fn_role", indexes = {
 })
 
 @Table(name = "fn_role", indexes = {
@@ -128,6 +138,7 @@ CREATE TABLE `fn_role` (
 })
 @NoArgsConstructor
 @AllArgsConstructor
 })
 @NoArgsConstructor
 @AllArgsConstructor
+@Builder
 @Getter
 @Setter
 @Entity
 @Getter
 @Setter
 @Entity
index 944d739..90df590 100644 (file)
@@ -53,11 +53,13 @@ import javax.persistence.Table;
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.onap.portal.domain.db.fn.FnRoleFunction.FnRoleFunctionId;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.onap.portal.domain.db.fn.FnRoleFunction.FnRoleFunctionId;
+import org.onap.portal.domain.dto.DomainVo;
 
 /*
 CREATE TABLE `fn_role_function` (
 
 /*
 CREATE TABLE `fn_role_function` (
@@ -77,11 +79,12 @@ CREATE TABLE `fn_role_function` (
 })
 @NoArgsConstructor
 @AllArgsConstructor
 })
 @NoArgsConstructor
 @AllArgsConstructor
+@Builder
 @Getter
 @Setter
 @Entity
 @IdClass(FnRoleFunctionId.class)
 @Getter
 @Setter
 @Entity
 @IdClass(FnRoleFunctionId.class)
-public class FnRoleFunction implements Serializable{
+public class FnRoleFunction extends DomainVo implements Serializable{
 
        @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
        @JoinColumn(name = "role_Id", nullable = false)
 
        @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
        @JoinColumn(name = "role_Id", nullable = false)
@@ -96,6 +99,7 @@ public class FnRoleFunction implements Serializable{
        @Id
        private FnFunction functionCd;
 
        @Id
        private FnFunction functionCd;
 
+
        @Getter
        @Setter
        @NoArgsConstructor
        @Getter
        @Setter
        @NoArgsConstructor
index e1c4cde..ad9c2cc 100644 (file)
@@ -70,7 +70,7 @@ public class FnRoleV implements Serializable {
        @Column(name = "role_name")
        private String roleName;
        @Column(name = "active_yn")
        @Column(name = "role_name")
        private String roleName;
        @Column(name = "active_yn")
-       private String activeYn;
+       private Boolean activeYn;
        @Column(name = "priority")
        private BigInteger priority;
        @Column(name = "app_Id")
        @Column(name = "priority")
        private BigInteger priority;
        @Column(name = "app_Id")
index f3fdec1..10020f0 100644 (file)
@@ -87,79 +87,83 @@ CREATE TABLE `fn_user_role` (
 */
 
 @NamedNativeQueries({
 */
 
 @NamedNativeQueries({
-        @NamedNativeQuery(
-                name = "FnUserRole.retrieveUserRoleOnUserIdAndRoleIdAndAppId",
-                query = "FROM FnUserRole where user_id= :userId"
-                        + " and role_id= :roleId"
-                        + " and app_id= :appId"),
-        @NamedNativeQuery(
-                name = "FnUserRole.retrieveCachedAppRolesForUser",
-                query = "FROM FnUserRole where user_id= :userId"
-                        + " and user_id= :userId"
-                        + " and app_id= :appId"),
-        @NamedNativeQuery(
-                name = "FnUserRole.isSuperAdmin",
-                query = "SELECT"
-                        + "  user.USER_ID as userId,"
-                        + "  user.org_user_id as orgUserId,"
-                        + "  userrole.ROLE_ID as roleId,"
-                        + "  userrole.APP_ID as appId"
-                        + " FROM"
-                        + "  fn_user_role userrole"
-                        + "  INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID"
-                        + " WHERE"
-                        + "  user.org_user_id = :orgUserId"
-                        + "  AND userrole.ROLE_ID =:roleId"
-                        + "  AND userrole.APP_ID =:appId",
-                resultSetMapping = "UserRole",
-                resultClass = UserRole.class
-        )
+    @NamedNativeQuery(
+        name = "FnUserRole.retrieveUserRoleOnUserIdAndRoleIdAndAppId",
+        query = "FROM FnUserRole where user_id= :userId"
+            + " and role_id= :roleId"
+            + " and app_id= :appId"),
+    @NamedNativeQuery(
+        name = "FnUserRole.retrieveCachedAppRolesForUser",
+        query = "FROM FnUserRole where user_id= :userId"
+            + " and user_id= :userId"
+            + " and app_id= :appId"),
+    @NamedNativeQuery(
+        name = "FnUserRole.isSuperAdmin",
+        query = "SELECT"
+            + "  user.USER_ID as userId,"
+            + "  user.org_user_id as orgUserId,"
+            + "  userrole.ROLE_ID as roleId,"
+            + "  userrole.APP_ID as appId"
+            + " FROM"
+            + "  fn_user_role userrole"
+            + "  INNER JOIN fn_user user ON user.USER_ID = userrole.USER_ID"
+            + " WHERE"
+            + "  user.org_user_id = :orgUserId"
+            + "  AND userrole.ROLE_ID =:roleId"
+            + "  AND userrole.APP_ID =:appId",
+        resultSetMapping = "UserRole",
+        resultClass = UserRole.class
+    )
 })
 
 @SqlResultSetMapping(
 })
 
 @SqlResultSetMapping(
-        name = "UserRole",
-        classes = {
-                @ConstructorResult(
-                        targetClass = UserRole.class,
-                        columns = {
-                                @ColumnResult(name = "userId", type = Long.class),
-                                @ColumnResult(name = "orgUserId", type = String.class),
-                                @ColumnResult(name = "roleId", type = Long.class),
-                                @ColumnResult(name = "appId", type = Long.class)
-                        }
-                )
-        }
+    name = "UserRole",
+    classes = {
+        @ConstructorResult(
+            targetClass = UserRole.class,
+            columns = {
+                @ColumnResult(name = "userId", type = Long.class),
+                @ColumnResult(name = "orgUserId", type = String.class),
+                @ColumnResult(name = "roleId", type = Long.class),
+                @ColumnResult(name = "appId", type = Long.class)
+            }
+        )
+    }
 )
 
 @NamedQueries({
 )
 
 @NamedQueries({
-        @NamedQuery(
-                name = "FnUserRole.getAdminUserRoles",
-                query = "FROM FnUserRole fn "
-                        + "WHERE  fn.userId.userId = :userId "
-                        + "AND fn.roleId.roleId = :roleId "
-                        + "AND fn.appId.appId = :appId"),
-        @NamedQuery(
-                name = "FnUserRole.getUserRolesForRoleIdAndAppId",
-                query = "FROM\n"
-                        + "  FnUserRole userrole\n"
-                        + "WHERE\n"
-                        + "  userrole.roleId.roleId = :roleId\n"
-                        + "  AND userrole.appId.appId = :appId"),
-        @NamedQuery(
-            name = "FnUserRole.retrieveByAppIdAndUserId",
-            query = "from FnUserRole where appId.appId =:appId and userId.userId =:userId"
-        )
+    @NamedQuery(
+        name = "FnUserRole.getAdminUserRoles",
+        query = "FROM FnUserRole fn "
+            + " WHERE  fn.userId.userId = :userId "
+            + " AND fn.roleId.roleId = :roleId "
+            + " AND fn.appId.appId = :appId"),
+    @NamedQuery(
+        name = "FnUserRole.getUserRolesForRoleIdAndAppId",
+        query = "FROM"
+            + "  FnUserRole userrole"
+            + " WHERE"
+            + "  userrole.roleId.roleId = :roleId"
+            + "  AND userrole.appId.appId = :appId"),
+    @NamedQuery(
+        name = "FnUserRole.retrieveByAppIdAndUserId",
+        query = "from FnUserRole where appId.appId =:appId and userId.userId =:userId"
+    ),
+    @NamedQuery(
+        name = "FnUserRole.retrieveByAppIdAndRoleId",
+        query = "from FnUserRole where appId.appId =:appId and roleId.roleId =:roleId"
+    )
 })
 
 @Table(
 })
 
 @Table(
-        name = "fn_user_role",
-        indexes = {
-                @Index(name = "fn_user_role_role_id", columnList = "role_id"),
-                @Index(name = "fn_user_role_user_id", columnList = "user_id"),
-                @Index(name = "fk_fn_user__ref_178_fn_app_idx", columnList = "app_id")},
-        uniqueConstraints = {
-                @UniqueConstraint(name = "fn_user_role_id", columnNames = {"role_id", "user_id", "app_id"})
-        })
+    name = "fn_user_role",
+    indexes = {
+        @Index(name = "fn_user_role_role_id", columnList = "role_id"),
+        @Index(name = "fn_user_role_user_id", columnList = "user_id"),
+        @Index(name = "fk_fn_user__ref_178_fn_app_idx", columnList = "app_id")},
+    uniqueConstraints = {
+        @UniqueConstraint(name = "fn_user_role_id", columnNames = {"role_id", "user_id", "app_id"})
+    })
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
 @Builder
@@ -168,23 +172,23 @@ CREATE TABLE `fn_user_role` (
 @Entity
 public class FnUserRole implements Serializable {
 
 @Entity
 public class FnUserRole implements Serializable {
 
-       @Id
-       @GeneratedValue(strategy = GenerationType.AUTO)
-       @Column(name = "id", columnDefinition = "int(11) auto_increment")
-       private Long id;
-       @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
-       @JoinColumn(name = "user_id")
-       @Valid
-       private FnUser userId;
-       @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
-       @JoinColumn(name = "role_id")
-       @Valid
-       private FnRole roleId;
-       @Column(name = "priority", length = 4, columnDefinition = "decimal(4,0) DEFAULT NULL")
-       @Digits(integer = 4, fraction = 0)
-       private Long priority;
-       @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-       @JoinColumn(name = "app_Id")
-       @Valid
-       private FnApp appId;
+  @Id
+  @GeneratedValue(strategy = GenerationType.AUTO)
+  @Column(name = "id", columnDefinition = "int(11) auto_increment")
+  private Long id;
+  @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+  @JoinColumn(name = "user_id")
+  @Valid
+  private FnUser userId;
+  @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+  @JoinColumn(name = "role_id")
+  @Valid
+  private FnRole roleId;
+  @Column(name = "priority", length = 4, columnDefinition = "decimal(4,0) DEFAULT NULL")
+  @Digits(integer = 4, fraction = 0)
+  private Long priority;
+  @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+  @JoinColumn(name = "app_Id")
+  @Valid
+  private FnApp appId;
 }
\ No newline at end of file
 }
\ No newline at end of file
index 84fa0fb..267d23d 100644 (file)
@@ -51,6 +51,7 @@ import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.onap.portal.domain.db.ep.EpAppFunction;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.onap.portal.domain.db.ep.EpAppFunction;
+import org.onap.portal.domain.db.fn.FnRoleFunction;
 
 @Getter
 @Setter
 
 @Getter
 @Setter
@@ -71,8 +72,11 @@ public class CentralV2Role implements Serializable, Comparable {
   private String name;
   private boolean active;
   private Integer priority;
   private String name;
   private boolean active;
   private Integer priority;
-  private SortedSet<EpAppFunction> roleFunctions = new TreeSet<>();
+  @Builder.Default
+  private SortedSet<FnRoleFunction> roleFunctions = new TreeSet<>();
+  @Builder.Default
   private SortedSet<CentralV2Role> childRoles = new TreeSet<>();
   private SortedSet<CentralV2Role> childRoles = new TreeSet<>();
+  @Builder.Default
   private SortedSet<CentralV2Role> parentRoles = new TreeSet<>();
 
   public CentralV2Role(Long id, String name) {
   private SortedSet<CentralV2Role> parentRoles = new TreeSet<>();
 
   public CentralV2Role(Long id, String name) {
@@ -80,7 +84,7 @@ public class CentralV2Role implements Serializable, Comparable {
     this.name = name;
   }
 
     this.name = name;
   }
 
-  public void addRoleFunction(EpAppFunction roleFunction) {
+  public void addRoleFunction(FnRoleFunction roleFunction) {
     this.roleFunctions.add(roleFunction);
   }
 
     this.roleFunctions.add(roleFunction);
   }
 
index 249aee1..d994f6a 100644 (file)
@@ -42,11 +42,47 @@ package org.onap.portal.domain.dto.transport;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import java.io.Serializable;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import java.io.Serializable;
+import javax.persistence.ColumnResult;
+import javax.persistence.ConstructorResult;
+import javax.persistence.NamedNativeQuery;
+import javax.persistence.SqlResultSetMapping;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+@NamedNativeQuery(
+               name = "EPUserAppCurrentRoles",
+               query = "select\n"
+                               + "  distinct fu.role_id,\n"
+                               + "  fr.user_id,\n"
+                               + "  fu.role_name,\n"
+                               + "  fu.priority\n"
+                               + " from\n"
+                               + "  fn_role fu\n"
+                               + "  left outer join fn_user_role fr ON fu.role_id = fr.role_id\n"
+                               + "  and fu.app_id = fr.app_id\n"
+                               + "  and fr.role_id != 999\n"
+                               + " where\n"
+                               + "  fu.app_id = :appId\n"
+                               + "  and fr.user_id = :userId\n"
+                               + "  and fu.active_yn = 'Y'\n",
+               resultSetMapping = "EPUserAppCurrentRoles"
+)
+
+@SqlResultSetMapping(
+               name = "EPUserAppCurrentRoles",
+               classes = @ConstructorResult(
+                               targetClass = EPUserAppCurrentRoles.class,
+                               columns = {
+                                               @ColumnResult(name = "roleName"),
+                                               @ColumnResult(name = "userId"),
+                                               @ColumnResult(name = "priority"),
+                                               @ColumnResult(name = "roleId")
+                               }
+               )
+)
+
 @Getter
 @Setter
 @NoArgsConstructor
 @Getter
 @Setter
 @NoArgsConstructor
index c8b92f9..07a1f51 100644 (file)
@@ -42,6 +42,7 @@ package org.onap.portal.domain.dto.transport;
 
 import java.io.Serializable;
 import lombok.AllArgsConstructor;
 
 import java.io.Serializable;
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -50,19 +51,20 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
 @Getter
 @Setter
 @ToString
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class GlobalRoleWithApplicationRoleFunction implements Serializable {
 
 @NoArgsConstructor
 @AllArgsConstructor
 public class GlobalRoleWithApplicationRoleFunction implements Serializable {
 
-       private static final long serialVersionUID = 1L;
+  private static final long serialVersionUID = 1L;
 
 
-       private Long roleId;
-       private String  roleName;
-    private boolean active;
-    private Integer priority;
-    private String functionCd;
-    private String functionName;
-    private long appId;
-       private long roleAppId;
+  private Long roleId;
+  private String roleName;
+  private Boolean active;
+  private Integer priority;
+  private String functionCd;
+  private String functionName;
+  private Long appId;
+  private Long roleAppId;
 
 }
 
 }
diff --git a/portal-BE/src/main/java/org/onap/portal/domain/dto/transport/Role.java b/portal-BE/src/main/java/org/onap/portal/domain/dto/transport/Role.java
new file mode 100644 (file)
index 0000000..92eabbb
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *             https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+package org.onap.portal.domain.dto.transport;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import java.util.Iterator;
+import java.util.Set;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.onap.portal.domain.db.fn.FnRoleComposite;
+import org.onap.portal.domain.db.fn.FnRoleFunction;
+import org.onap.portal.domain.dto.DomainVo;
+import org.onap.portalsdk.core.domain.RoleFunction;
+
+@Getter
+@Setter
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class Role extends DomainVo {
+
+  private static final long serialVersionUID = 1L;
+
+  private String name;
+  private boolean active;
+  private Integer priority;
+  private Set<FnRoleFunction> roleFunctions;
+  private Set<FnRoleComposite> childRoles;
+  @JsonIgnore
+  private Set<FnRoleComposite> parentRoles;
+
+  public String getEditUrl() {
+    return "/role.htm?role_id=" + this.getId();
+  }
+
+  public String getToggleActiveImage() {
+    return "/static/fusion/images/" + (this.isActive() ? "active.png" : "inactive.png");
+  }
+
+  public String getToggleActiveAltText() {
+    return this.isActive() ? "Click to Deactivate Role" : "Click to Activate Role";
+  }
+
+  public void removeChildRole(Long roleId) {
+    Iterator i = this.childRoles.iterator();
+
+    while (i.hasNext()) {
+      org.onap.portalsdk.core.domain.Role childRole = (org.onap.portalsdk.core.domain.Role) i.next();
+      if (childRole.getId().equals(roleId)) {
+        this.childRoles.remove(childRole);
+        break;
+      }
+    }
+
+  }
+
+  public void removeParentRole(Long roleId) {
+
+    for (Object role : this.parentRoles) {
+      org.onap.portalsdk.core.domain.Role parentRole = (org.onap.portalsdk.core.domain.Role) role;
+      if (parentRole.getId().equals(roleId)) {
+        this.parentRoles.remove(parentRole);
+        break;
+      }
+    }
+
+  }
+
+  public void removeRoleFunction(String roleFunctionCd) {
+
+    for (Object function : this.roleFunctions) {
+      RoleFunction roleFunction = (RoleFunction) function;
+      if (roleFunction.getCode().equals(roleFunctionCd)) {
+        this.roleFunctions.remove(roleFunction);
+        break;
+      }
+    }
+
+  }
+
+  public int compareTo(Object obj) {
+    String c1 = this.getName();
+    String c2 = ((org.onap.portalsdk.core.domain.Role) obj).getName();
+    return c1 != null && c2 != null ? c1.compareTo(c2) : 1;
+  }
+}
diff --git a/portal-BE/src/main/java/org/onap/portal/exception/DeleteDomainObjectFailedException.java b/portal-BE/src/main/java/org/onap/portal/exception/DeleteDomainObjectFailedException.java
new file mode 100644 (file)
index 0000000..135ab08
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *             https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+package org.onap.portal.exception;
+
+public class DeleteDomainObjectFailedException extends Exception{
+
+  private static final long serialVersionUID = -4591508985449251121L;
+
+  public DeleteDomainObjectFailedException(String msg) {
+    super(msg);
+  }
+}
index 74b3548..9081fea 100644 (file)
@@ -52,48 +52,61 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
+import javax.persistence.Tuple;
 import org.apache.commons.lang.StringUtils;
 import org.apache.cxf.transport.http.HTTPException;
 import org.hibernate.Session;
 import org.apache.commons.lang.StringUtils;
 import org.apache.cxf.transport.http.HTTPException;
 import org.hibernate.Session;
-import org.hibernate.SessionFactory;
 import org.hibernate.Transaction;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.hibernate.Transaction;
 import org.json.JSONArray;
 import org.json.JSONObject;
+import org.onap.portal.domain.db.ep.EpAppFunction;
 import org.onap.portal.domain.db.ep.EpUserRolesRequest;
 import org.onap.portal.domain.db.ep.EpUserRolesRequestDet;
 import org.onap.portal.domain.db.fn.FnApp;
 import org.onap.portal.domain.db.ep.EpUserRolesRequest;
 import org.onap.portal.domain.db.ep.EpUserRolesRequestDet;
 import org.onap.portal.domain.db.fn.FnApp;
+import org.onap.portal.domain.db.fn.FnFunction;
+import org.onap.portal.domain.db.fn.FnMenuFunctional;
+import org.onap.portal.domain.db.fn.FnMenuFunctionalRoles;
 import org.onap.portal.domain.db.fn.FnRole;
 import org.onap.portal.domain.db.fn.FnRole;
+import org.onap.portal.domain.db.fn.FnRoleFunction;
 import org.onap.portal.domain.db.fn.FnUser;
 import org.onap.portal.domain.db.fn.FnUserRole;
 import org.onap.portal.domain.dto.transport.AppWithRolesForUser;
 import org.onap.portal.domain.dto.transport.CentralV2Role;
 import org.onap.portal.domain.db.fn.FnUser;
 import org.onap.portal.domain.db.fn.FnUserRole;
 import org.onap.portal.domain.dto.transport.AppWithRolesForUser;
 import org.onap.portal.domain.dto.transport.CentralV2Role;
+import org.onap.portal.domain.dto.transport.EPUserAppCurrentRoles;
 import org.onap.portal.domain.dto.transport.EcompUserAppRoles;
 import org.onap.portal.domain.dto.transport.ExternalAccessUser;
 import org.onap.portal.domain.dto.transport.ExternalAccessUserRoleDetail;
 import org.onap.portal.domain.dto.transport.ExternalRequestFieldsValidator;
 import org.onap.portal.domain.dto.transport.ExternalRoleDescription;
 import org.onap.portal.domain.dto.transport.RemoteRoleV1;
 import org.onap.portal.domain.dto.transport.EcompUserAppRoles;
 import org.onap.portal.domain.dto.transport.ExternalAccessUser;
 import org.onap.portal.domain.dto.transport.ExternalAccessUserRoleDetail;
 import org.onap.portal.domain.dto.transport.ExternalRequestFieldsValidator;
 import org.onap.portal.domain.dto.transport.ExternalRoleDescription;
 import org.onap.portal.domain.dto.transport.RemoteRoleV1;
+import org.onap.portal.domain.dto.transport.Role;
 import org.onap.portal.domain.dto.transport.RoleInAppForUser;
 import org.onap.portal.domain.dto.transport.RolesInAppForUser;
 import org.onap.portal.domain.dto.transport.RoleInAppForUser;
 import org.onap.portal.domain.dto.transport.RolesInAppForUser;
+import org.onap.portal.exception.DeleteDomainObjectFailedException;
 import org.onap.portal.exception.SyncUserRolesException;
 import org.onap.portal.logging.format.EPAppMessagesEnum;
 import org.onap.portal.logging.logic.EPLogUtil;
 import org.onap.portal.exception.SyncUserRolesException;
 import org.onap.portal.logging.format.EPAppMessagesEnum;
 import org.onap.portal.logging.logic.EPLogUtil;
+import org.onap.portal.service.ep.EpAppFunctionService;
 import org.onap.portal.service.ep.EpUserRolesRequestDetService;
 import org.onap.portal.service.ep.EpUserRolesRequestService;
 import org.onap.portal.service.fn.FnAppService;
 import org.onap.portal.service.ep.EpUserRolesRequestDetService;
 import org.onap.portal.service.ep.EpUserRolesRequestService;
 import org.onap.portal.service.fn.FnAppService;
+import org.onap.portal.service.fn.FnMenuFunctionalRolesService;
+import org.onap.portal.service.fn.FnMenuFunctionalService;
 import org.onap.portal.service.fn.FnRoleService;
 import org.onap.portal.service.fn.FnUserRoleService;
 import org.onap.portal.service.fn.FnUserService;
 import org.onap.portal.utils.EPCommonSystemProperties;
 import org.onap.portal.service.fn.FnRoleService;
 import org.onap.portal.service.fn.FnUserRoleService;
 import org.onap.portal.service.fn.FnUserService;
 import org.onap.portal.utils.EPCommonSystemProperties;
+import org.onap.portal.utils.EPUserUtils;
 import org.onap.portal.utils.EcompPortalUtils;
 import org.onap.portal.utils.PortalConstants;
 import org.onap.portal.utils.EcompPortalUtils;
 import org.onap.portal.utils.PortalConstants;
-import org.onap.portalsdk.core.domain.Role;
+import org.onap.portalsdk.core.domain.RoleFunction;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.onap.portalsdk.core.restful.domain.EcompRole;
 import org.onap.portalsdk.core.util.SystemProperties;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.onap.portalsdk.core.restful.domain.EcompRole;
 import org.onap.portalsdk.core.util.SystemProperties;
@@ -126,8 +139,11 @@ public class AdminRolesService {
   private final FnUserService fnUserService;
   private final FnRoleService fnRoleService;
   private final FnAppService fnAppService;
   private final FnUserService fnUserService;
   private final FnRoleService fnRoleService;
   private final FnAppService fnAppService;
+  private final FnMenuFunctionalService fnMenuFunctionalService;
   private final FnUserRoleService fnUserRoleService;
   private final FnUserRoleService fnUserRoleService;
+  private final EpAppFunctionService epAppFunctionService;
   private final EcompUserAppRolesService ecompUserAppRolesService;
   private final EcompUserAppRolesService ecompUserAppRolesService;
+  private final FnMenuFunctionalRolesService fnMenuFunctionalRolesService;
   private final ApplicationsRestClientService applicationsRestClientService;
   private final EpUserRolesRequestDetService epUserRolesRequestDetService;
   private final ExternalAccessRolesService externalAccessRolesService;
   private final ApplicationsRestClientService applicationsRestClientService;
   private final EpUserRolesRequestDetService epUserRolesRequestDetService;
   private final ExternalAccessRolesService externalAccessRolesService;
@@ -138,8 +154,11 @@ public class AdminRolesService {
       final EntityManager entityManager,
       final FnUserService fnUserService, FnRoleService fnRoleService,
       FnAppService fnAppService,
       final EntityManager entityManager,
       final FnUserService fnUserService, FnRoleService fnRoleService,
       FnAppService fnAppService,
+      FnMenuFunctionalService fnMenuFunctionalService,
       final FnUserRoleService fnUserRoleService,
       final FnUserRoleService fnUserRoleService,
+      EpAppFunctionService epAppFunctionService,
       EcompUserAppRolesService ecompUserAppRolesService,
       EcompUserAppRolesService ecompUserAppRolesService,
+      FnMenuFunctionalRolesService fnMenuFunctionalRolesService,
       ApplicationsRestClientService applicationsRestClientService,
       EpUserRolesRequestDetService epUserRolesRequestDetService,
       ExternalAccessRolesService externalAccessRolesService,
       ApplicationsRestClientService applicationsRestClientService,
       EpUserRolesRequestDetService epUserRolesRequestDetService,
       ExternalAccessRolesService externalAccessRolesService,
@@ -149,8 +168,11 @@ public class AdminRolesService {
     this.fnUserService = fnUserService;
     this.fnRoleService = fnRoleService;
     this.fnAppService = fnAppService;
     this.fnUserService = fnUserService;
     this.fnRoleService = fnRoleService;
     this.fnAppService = fnAppService;
+    this.fnMenuFunctionalService = fnMenuFunctionalService;
     this.fnUserRoleService = fnUserRoleService;
     this.fnUserRoleService = fnUserRoleService;
+    this.epAppFunctionService = epAppFunctionService;
     this.ecompUserAppRolesService = ecompUserAppRolesService;
     this.ecompUserAppRolesService = ecompUserAppRolesService;
+    this.fnMenuFunctionalRolesService = fnMenuFunctionalRolesService;
     this.applicationsRestClientService = applicationsRestClientService;
     this.epUserRolesRequestDetService = epUserRolesRequestDetService;
     this.externalAccessRolesService = externalAccessRolesService;
     this.applicationsRestClientService = applicationsRestClientService;
     this.epUserRolesRequestDetService = epUserRolesRequestDetService;
     this.externalAccessRolesService = externalAccessRolesService;
@@ -172,8 +194,6 @@ public class AdminRolesService {
 
   public boolean isAccountAdmin(FnUser user) {
     try {
 
   public boolean isAccountAdmin(FnUser user) {
     try {
-      final Map<String, Long> userParams = new HashMap<>();
-      userParams.put("userId", user.getId());
       logger.debug(EELFLoggerDelegate.debugLogger, ADMIN_ACCOUNT, user.getId());
       List<Integer> userAdminApps = getAdminAppsForTheUser(user.getId());
       logger.debug(EELFLoggerDelegate.debugLogger,
       logger.debug(EELFLoggerDelegate.debugLogger, ADMIN_ACCOUNT, user.getId());
       List<Integer> userAdminApps = getAdminAppsForTheUser(user.getId());
       logger.debug(EELFLoggerDelegate.debugLogger,
@@ -200,7 +220,7 @@ public class AdminRolesService {
     return false;
   }
 
     return false;
   }
 
-  public boolean isUser(FnUser user) {
+  boolean isUser(FnUser user) {
     try {
       FnUser currentUser = fnUserService.getUser(user.getId()).orElseThrow(Exception::new);
       if (currentUser != null && currentUser.getId() != null) {
     try {
       FnUser currentUser = fnUserService.getUser(user.getId()).orElseThrow(Exception::new);
       if (currentUser != null && currentUser.getId() != null) {
@@ -224,10 +244,10 @@ public class AdminRolesService {
     return false;
   }
 
     return false;
   }
 
-  public boolean isRoleAdmin(FnUser user) {
+  public boolean isRoleAdmin(Long userId) {
     try {
       logger.debug(EELFLoggerDelegate.debugLogger, "Checking if user has isRoleAdmin access");
     try {
       logger.debug(EELFLoggerDelegate.debugLogger, "Checking if user has isRoleAdmin access");
-      List getRoleFuncListOfUser = fnUserRoleService.getRoleFunctionsOfUserforAlltheApplications(user.getId());
+      List getRoleFuncListOfUser = fnUserRoleService.getRoleFunctionsOfUserforAlltheApplications(userId);
       logger.debug(EELFLoggerDelegate.debugLogger,
           "Checking if user has isRoleAdmin access :: getRoleFuncListOfUser", getRoleFuncListOfUser);
       Set<String> getRoleFuncListOfPortalSet = new HashSet<>(getRoleFuncListOfUser);
       logger.debug(EELFLoggerDelegate.debugLogger,
           "Checking if user has isRoleAdmin access :: getRoleFuncListOfUser", getRoleFuncListOfUser);
       Set<String> getRoleFuncListOfPortalSet = new HashSet<>(getRoleFuncListOfUser);
@@ -258,14 +278,14 @@ public class AdminRolesService {
     return false;
   }
 
     return false;
   }
 
-  public boolean isAccountAdminOfApplication(FnUser user, FnApp app) {
+  private boolean isAccountAdminOfApplication(Long userId, FnApp app) {
     boolean isApplicationAccountAdmin = false;
     try {
     boolean isApplicationAccountAdmin = false;
     try {
-      logger.debug(EELFLoggerDelegate.debugLogger, ADMIN_ACCOUNT, user.getId());
-      List<Integer> userAdminApps = getAdminAppsForTheUser(user.getId());
+      logger.debug(EELFLoggerDelegate.debugLogger, ADMIN_ACCOUNT, userId);
+      List<Integer> userAdminApps = getAdminAppsForTheUser(userId);
       if (!userAdminApps.isEmpty()) {
         isApplicationAccountAdmin = userAdminApps.contains(app.getId());
       if (!userAdminApps.isEmpty()) {
         isApplicationAccountAdmin = userAdminApps.contains(app.getId());
-        logger.debug(EELFLoggerDelegate.debugLogger, "Is account admin for user is true{} ,appId {}", user.getId(),
+        logger.debug(EELFLoggerDelegate.debugLogger, "Is account admin for user is true{} ,appId {}", userId,
             app.getId());
       }
     } catch (Exception e) {
             app.getId());
       }
     } catch (Exception e) {
@@ -275,7 +295,7 @@ public class AdminRolesService {
     }
     logger.debug(EELFLoggerDelegate.debugLogger,
         "In AdminRolesServiceImpl() - isAccountAdminOfApplication = {} and userId ={} ", isApplicationAccountAdmin,
     }
     logger.debug(EELFLoggerDelegate.debugLogger,
         "In AdminRolesServiceImpl() - isAccountAdminOfApplication = {} and userId ={} ", isApplicationAccountAdmin,
-        user.getOrgUserId());
+        userId);
     return isApplicationAccountAdmin;
 
   }
     return isApplicationAccountAdmin;
 
   }
@@ -305,12 +325,12 @@ public class AdminRolesService {
       try {
         FnApp app = fnAppService.getById(appId);
 
       try {
         FnApp app = fnAppService.getById(appId);
 
-        boolean checkIfUserisApplicationAccAdmin = isAccountAdminOfApplication(user,
+        boolean checkIfUserisApplicationAccAdmin = isAccountAdminOfApplication(user.getUserId(),
             app);
         Set<EcompRole> rolesGotDeletedFromApprover = new TreeSet<>();
 
         boolean checkIfUserIsOnlyRoleAdmin =
             app);
         Set<EcompRole> rolesGotDeletedFromApprover = new TreeSet<>();
 
         boolean checkIfUserIsOnlyRoleAdmin =
-            isRoleAdmin(user) && !checkIfUserisApplicationAccAdmin;
+            isRoleAdmin(user.getUserId()) && !checkIfUserisApplicationAccAdmin;
         if (checkIfUserIsOnlyRoleAdmin) {
           for (RoleInAppForUser roleInAppForUser : roleInAppForUserList) {
             if (!roleInAppForUser.getIsApplied()) {
         if (checkIfUserIsOnlyRoleAdmin) {
           for (RoleInAppForUser roleInAppForUser : roleInAppForUserList) {
             if (!roleInAppForUser.getIsApplied()) {
@@ -485,11 +505,10 @@ public class AdminRolesService {
     roleInAppForUserList.removeIf(role -> role.getIsApplied().equals(false));
     SortedSet<Role> roles = new TreeSet<>();
 
     roleInAppForUserList.removeIf(role -> role.getIsApplied().equals(false));
     SortedSet<Role> roles = new TreeSet<>();
 
-    List<FnRole> getAppRoles = externalAccessRolesService.getAppRoles(app.getId());
+    List<FnRole> getAppRoles = fnRoleService.getAppRoles(app.getId());
     List<FnApp> appList = new ArrayList<>();
     appList.add(app);
     List<CentralV2Role> roleList = new ArrayList<>();
     List<FnApp> appList = new ArrayList<>();
     appList.add(app);
     List<CentralV2Role> roleList = new ArrayList<>();
-    Map<String, Long> params = new HashMap<>();
 
     List<FnRole> userRoles = new ArrayList<>();
 
 
     List<FnRole> userRoles = new ArrayList<>();
 
@@ -537,7 +556,7 @@ public class AdminRolesService {
   }
 
   private FnRole roleToFnRole(Role role) {
   }
 
   private FnRole roleToFnRole(Role role) {
-    return new FnRole(role.getId(), role.getName(), role.getActive(), role.getPriority(), role.getRoleFunctions(),
+    return new FnRole(role.getId(), role.getName(), role.isActive(), role.getPriority(), role.getRoleFunctions(),
         role.getChildRoles(), role.getParentRoles());
   }
 
         role.getChildRoles(), role.getParentRoles());
   }
 
@@ -1200,6 +1219,452 @@ public class AdminRolesService {
     }
   }
 
     }
   }
 
+  private Role fnRoleToRole(final FnRole role) {
+    return Role.builder().name(role.getRoleName()).active(role.getActiveYn()).priority(role.getPriority())
+        .roleFunctions(role.getFnRoleFunctions()).childRoles(role.getChildRoles()).parentRoles(role.getParentRoles())
+        .build();
+  }
+
+  @SuppressWarnings("unchecked")
+  public List<RoleInAppForUser> getAppRolesForUser(Long appId, String orgUserId, Boolean extRequestValue, Long userId) {
+    List<RoleInAppForUser> rolesInAppForUser = null;
+    FnApp app = fnAppService.getById(appId);
+    logger.debug(EELFLoggerDelegate.debugLogger, "In getAppRolesForUser() - app = {}", app);
+    try {
+      // for onap portal app, no need to make a remote call
+      List<Role> roleList = new ArrayList<>();
+      if (!PortalConstants.PORTAL_APP_ID.equals(appId)) {
+        if (app.getAuthCentral()) {
+          List<CentralV2Role> cenRoleList = externalAccessRolesService.getRolesForApp(app.getUebKey());
+          for (CentralV2Role cenRole : cenRoleList) {
+            Role role = new Role();
+            role.setActive(cenRole.isActive());
+            role.setId(cenRole.getId());
+            role.setName(cenRole.getName());
+            role.setPriority(cenRole.getPriority());
+            roleList.add(role);
+          }
+        } else {
+          Optional<FnUser> user = fnUserService.getUser(userId);
+          if (user.isPresent()){
+            roleList = user.get().getFnRoles().stream().map(this::fnRoleToRole).collect(Collectors.toList());
+          }
+        }
+        List<Role> activeRoleList = new ArrayList<>();
+        for (Role role : roleList) {
+          if (role.isActive()) {
+            if (role.getId() != 1) { // prevent portal admin from being added
+              activeRoleList.add(role);
+            } else if (extRequestValue) {
+              activeRoleList.add(role);
+            }
+          }
+
+        }
+        FnUser localUser = getUserFromApp(Long.toString(userId), app, applicationsRestClientService);
+        // If localUser does not exists return roles
+        Set<FnRole> roleSet = null;
+        FnRole[] roleSetList = null;
+        if (localUser != null) {
+          roleSet = localUser.getAppEPRoles(app);
+          roleSetList = roleSet.toArray(new FnRole[0]);
+        }
+        rolesInAppForUser = fnUserRoleService
+            .constructRolesInAppForUserGet(activeRoleList, roleSetList, extRequestValue);
+        return rolesInAppForUser;
+      }
+
+      EcompRole[] appRoles = null;
+      boolean checkIfUserIsApplicationAccAdmin = false;
+      List<EcompRole> roles = new ArrayList<>();
+      if (app.getAuthCentral()) {
+        List<FnRole> applicationRoles = fnRoleService.retrieveActiveRolesOfApplication(app.getId());
+        FnApp application = fnAppService.getById(appId);
+        checkIfUserIsApplicationAccAdmin = isAccountAdminOfApplication(userId,
+            application);
+
+        List<FnRole> roleSetWithFunctioncds = new ArrayList<>();
+        for (FnRole role : applicationRoles) {
+          List<EpAppFunction> cenRoleFuncList = epAppFunctionService.getAppRoleFunctionList(role.getId(), app.getId());
+          for (EpAppFunction roleFunc : cenRoleFuncList) {
+
+            String functionCode = EcompPortalUtils.getFunctionCode(roleFunc.getFunctionCd());
+            functionCode = EPUserUtils.decodeFunctionCode(functionCode);
+            String type = externalAccessRolesService.getFunctionCodeType(roleFunc.getFunctionCd());
+            String action = externalAccessRolesService.getFunctionCodeAction(roleFunc.getFunctionCd());
+            String name = roleFunc.getFunctionName();
+
+            FnFunction function = new FnFunction();
+            function.setAction(action);
+            function.setType(type);
+            function.setCode(functionCode);
+            function.setName(name);
+            role.getFnRoleFunctions().add(new FnRoleFunction(role, function));
+
+          }
+          roleSetWithFunctioncds.add(role);
+
+
+        }
+
+        for (FnRole role1 : roleSetWithFunctioncds) {
+          EcompRole ecompRole = new EcompRole();
+          ecompRole.setId(role1.getId());
+          ecompRole.setName(role1.getRoleName());
+          ecompRole.setRoleFunctions(role1.getRoleFunctions());
+          roles.add(ecompRole);
+
+        }
+        if (checkIfUserIsApplicationAccAdmin) {
+          appRoles = roles.toArray(new EcompRole[roles.size()]);
+          logger.debug(EELFLoggerDelegate.debugLogger,
+              "In getAppRolesForUser() If Logged in user checkIfUserisApplicationAccAdmin- appRoles = {}", appRoles);
+        } else if (isRoleAdmin(userId) && !checkIfUserIsApplicationAccAdmin) {
+          List<EcompRole> roleAdminAppRoles = new ArrayList<>();
+          List<String> roleAdminAppRolesNames = new ArrayList<>();
+          String QUERY =
+              "select distinct fr.role_name as roleName from fn_user_role fu, ep_app_role_function ep, ep_app_function ea, fn_role fr"
+                  + " where fu.role_id = ep.role_id"
+                  + " and fu.app_id = ep.app_id"
+                  + " and fu.user_id = :userId"
+                  + " and fu.role_id = fr.role_id and fr.active_yn='Y'"
+                  + " and ea.function_cd = ep.function_cd and ea.function_cd like 'approver|%'"
+                  + " and exists"
+                  + " ("
+                  + " select fa.app_id from fn_user fu, fn_user_role ur, fn_app fa where fu.user_id =:userId and fu.user_id = ur.user_id"
+                  + " and ur.app_id = fa.app_id and fa.enabled = 'Y')";
+          List<Tuple> tuples = entityManager.createNativeQuery(QUERY, Tuple.class)
+              .setParameter("userId", userId)
+              .getResultList();
+          List<String> getUserApproverRoles = tuples.stream().map(tuple -> (String) tuple.get("roleName"))
+              .collect(Collectors.toList());
+
+          List<EcompRole> userapproverRolesList = new ArrayList<>();
+          for (String str : getUserApproverRoles) {
+            EcompRole epRole = roles.stream().filter(x -> str.equals(x.getName())).findAny().orElse(null);
+            if (epRole != null) {
+              userapproverRolesList.add(epRole);
+            }
+          }
+          for (EcompRole role : userapproverRolesList) {
+
+            List<RoleFunction> roleFunList = new ArrayList<>(role.getRoleFunctions());
+            boolean checkIfFunctionsExits = roleFunList.stream()
+                .anyMatch(roleFunction -> roleFunction.getType().equalsIgnoreCase("Approver"));
+            if (checkIfFunctionsExits) {
+              roleAdminAppRoles.add(role);
+              List<RoleFunction> filteredList = roleFunList.stream()
+                  .filter(x -> "Approver".equalsIgnoreCase(x.getType())).collect(Collectors.toList());
+              roleAdminAppRolesNames.addAll(filteredList.stream().map(RoleFunction::getCode)
+                  .collect(Collectors.toList()));
+            }
+          }
+          for (String name : roleAdminAppRolesNames) {
+            roles.stream().filter(x -> name.equals(x.getName())).findAny().ifPresent(roleAdminAppRoles::add);
+
+          }
+          appRoles = roleAdminAppRoles.toArray(new EcompRole[0]);
+
+        }
+      } else {
+        appRoles = applicationsRestClientService.get(EcompRole[].class, appId, "/roles");
+      }
+      // Test this error case, for generating an internal ONAP Portal
+      // error
+      // EcompRole[] appRoles = null;
+      // If there is an exception in the rest client api, then null will
+      // be returned.
+      if (appRoles != null) {
+        if (!app.getAuthCentral()) {
+          syncAppRoles(appId, appRoles);
+        }
+        EcompRole[] userAppRoles = null;
+        try {
+          try {
+            if (app.getAuthCentral()) {
+              List<FnUser> actualUser = fnUserService.getUserWithOrgUserId(Long.toString(userId));
+              List<EPUserAppCurrentRoles> userAppsRolesList = entityManager
+                  .createNamedQuery("EPUserAppCurrentRoles")
+                  .setParameter("appId", app.getId())
+                  .setParameter("userId", actualUser.get(0).getId())
+                  .getResultList();
+              List<EcompRole> setUserRoles = new ArrayList<>();
+              for (EPUserAppCurrentRoles role : userAppsRolesList) {
+                logger.debug(EELFLoggerDelegate.debugLogger,
+                    "In getAppRolesForUser() - userAppsRolesList get userRolename = {}", role.getRoleName());
+                EcompRole ecompRole = new EcompRole();
+                ecompRole.setId(role.getRoleId());
+                ecompRole.setName(role.getRoleName());
+                setUserRoles.add(ecompRole);
+              }
+
+              boolean checkIfUserisAccAdmin = setUserRoles.stream()
+                  .anyMatch(ecompRole -> ecompRole.getId() == 999L);
+
+              if (!checkIfUserisAccAdmin) {
+                List<EcompRole> appRolesList = Arrays.asList(appRoles);
+                Set<EcompRole> finalUserAppRolesList = new HashSet<>();
+
+                List<String> roleNames = new ArrayList<>();
+                for (EcompRole role : setUserRoles) {
+                  EcompRole epRole = appRolesList.stream()
+                      .filter(x -> role.getName().equals(x.getName())).findAny().orElse(null);
+                  List<RoleFunction> roleFunList = new ArrayList<>();
+
+                  if (epRole != null) {
+                    if (epRole.getRoleFunctions().size() > 0) {
+                      roleFunList.addAll(epRole.getRoleFunctions());
+                    }
+                    boolean checkIfFunctionsExits = roleFunList.stream().anyMatch(
+                        roleFunction -> roleFunction.getType().equalsIgnoreCase("Approver"));
+                    if (checkIfFunctionsExits) {
+                      finalUserAppRolesList.add(role);
+                      List<RoleFunction> filteredList = roleFunList.stream()
+                          .filter(x -> "Approver".equalsIgnoreCase(x.getType()))
+                          .collect(Collectors.toList());
+                      roleNames = filteredList.stream().map(RoleFunction::getCode)
+                          .collect(Collectors.toList());
+                    } else {
+                      roleNames.add(epRole.getName());
+                    }
+                  }
+                  for (String name : roleNames) {
+                    EcompRole ecompRole = appRolesList.stream()
+                        .filter(x -> name.equals(x.getName())).findAny().orElse(null);
+                    if (ecompRole != null) {
+                      finalUserAppRolesList.add(ecompRole);
+                    }
+                  }
+                }
+                for (String name : roleNames) {
+                  boolean checkIfFunctionsExits = userAppsRolesList.stream().anyMatch(
+                      role -> role.getRoleName().equalsIgnoreCase(name));
+                  if (checkIfFunctionsExits) {
+                    appRolesList.stream().filter(x -> name.equals(x.getName()))
+                        .findAny().ifPresent(setUserRoles::add);
+                  }
+                }
+                userAppRoles = setUserRoles.toArray(new EcompRole[0]);
+              }
+            } else {
+              userAppRoles = applicationsRestClientService.get(EcompRole[].class, appId,
+                  String.format("/user/%s/roles", userId));
+            }
+          } catch (HTTPException e) {
+            // Some apps are returning 400 if user is not found.
+            if (e.getResponseCode() == 400) {
+              logger.debug(EELFLoggerDelegate.debugLogger,
+                  "getAppRolesForUser caught exception with response code 400; continuing", e);
+            } else {
+              // Other response code, let it come thru.
+              throw e;
+            }
+          }
+          if (userAppRoles == null) {
+            if (EcompPortalUtils.getExternalAppResponseCode() == 400) {
+              EcompPortalUtils.setExternalAppResponseCode(200);
+              String message = String.format(
+                  "getAppRolesForUser: App %s, User %, endpoint /user/{userid}/roles returned 400, "
+                      + "assuming user doesn't exist, app is framework SDK based, and things are ok. "
+                      + "Overriding to 200 until framework SDK returns a useful response.",
+                  Long.toString(appId), userId);
+              logger.warn(EELFLoggerDelegate.applicationLogger, message);
+            }
+          }
+
+          HashMap<Long, EcompRole> appRolesActiveMap = hashMapFromEcompRoles(appRoles);
+          ArrayList<EcompRole> activeRoles = new ArrayList<>();
+          if (userAppRoles != null) {
+            for (EcompRole userAppRole : userAppRoles) {
+              if (appRolesActiveMap.containsKey(userAppRole.getId())) {
+                EcompRole role = new EcompRole();
+                role.setId(userAppRole.getId());
+                role.setName(userAppRole.getName());
+                activeRoles.add(role);
+              }
+            }
+          }
+          EcompRole[] userAppRolesActive = activeRoles.toArray(new EcompRole[0]);
+
+          boolean checkIfUserisRoleAdmin = isRoleAdmin(userId) && !checkIfUserIsApplicationAccAdmin;
+
+          // If the remote application isn't down we MUST sync user
+          // roles here in case we have this user here!
+          syncUserRoles(Long.toString(userId), appId, userAppRolesActive, extRequestValue, null, checkIfUserisRoleAdmin,
+              appRoles);
+        } catch (Exception e) {
+          // TODO: we may need to check if user exists, maybe remote
+          // app is down.
+          String message = String.format(
+              "getAppRolesForUser: user %s does not exist in remote application %s", userId,
+              Long.toString(appId));
+          logger.error(EELFLoggerDelegate.errorLogger, message, e);
+          userAppRoles = new EcompRole[0];
+        }
+        rolesInAppForUser = fnUserRoleService.constructRolesInAppForUserGet(appRoles, userAppRoles);
+      }
+    } catch (Exception e) {
+      String message = String.format("getAppRolesForUser: failed for User %s, AppId %s", userId,
+          Long.toString(appId));
+      logger.error(EELFLoggerDelegate.errorLogger, message, e);
+    }
+    return rolesInAppForUser;
+  }
+
+  private void syncAppRoles(Long appId, EcompRole[] appRoles) throws Exception {
+    logger.debug(EELFLoggerDelegate.debugLogger, "entering syncAppRoles for appId: " + appId);
+    HashMap<Long, EcompRole> newRolesMap = hashMapFromEcompRoles(appRoles);
+    try {
+      List<FnRole> currentAppRoles = fnRoleService.retrieveAppRolesByAppId(appId);
+
+      List<FnRole> obsoleteRoles = new ArrayList<>();
+      for (FnRole oldAppRole : currentAppRoles) {
+        if (oldAppRole.getAppRoleId() != null) {
+          EcompRole role;
+          role = newRolesMap.get(oldAppRole.getAppRoleId());
+          if (role != null) {
+            if (!(role.getName() == null || oldAppRole.getRoleName().equals(role.getName()))) {
+              oldAppRole.setRoleName(role.getName());
+            }
+            oldAppRole.setActiveYn(true);
+            newRolesMap.remove(oldAppRole.getAppRoleId());
+          } else {
+            obsoleteRoles.add(oldAppRole);
+          }
+        } else {
+          obsoleteRoles.add(oldAppRole);
+        }
+      }
+      Collection<EcompRole> newRolesToAdd = newRolesMap.values();
+      if (obsoleteRoles.size() > 0) {
+        logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: we have obsolete roles to delete");
+        for (FnRole role : obsoleteRoles) {
+          logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: obsolete role: " + role.toString());
+          Long roleId = role.getId();
+          List<FnUserRole> userRoles = fnUserRoleService.retrieveByAppIdAndRoleId(appId, roleId);
+
+          logger.debug(EELFLoggerDelegate.debugLogger,
+              "syncAppRoles: number of userRoles to delete: " + userRoles.size());
+          for (FnUserRole userRole : userRoles) {
+            logger.debug(EELFLoggerDelegate.debugLogger,
+                "syncAppRoles: about to delete userRole: " + userRole.toString());
+            fnUserRoleService.deleteById(userRole.getId());
+            logger.debug(EELFLoggerDelegate.debugLogger,
+                "syncAppRoles: finished deleting userRole: " + userRole.toString());
+          }
+          List<FnMenuFunctionalRoles> funcMenuRoles = fnMenuFunctionalRolesService.retrieveByroleId(roleId);
+          int numMenuRoles = funcMenuRoles.size();
+          logger.debug(EELFLoggerDelegate.debugLogger,
+              "syncAppRoles: number of funcMenuRoles for roleId: " + roleId + ": " + numMenuRoles);
+          for (FnMenuFunctionalRoles funcMenuRole : funcMenuRoles) {
+            Long menuId = funcMenuRole.getMenuId().getMenuId();
+            // If this is the only role for this menu item, then the
+            // app and roles will be gone,
+            // so must null out the url too, to be consistent
+            List<FnMenuFunctionalRoles> funcMenuRoles2 = fnMenuFunctionalRolesService.retrieveByMenuId(menuId);
+            int numMenuRoles2 = funcMenuRoles2.size();
+            logger.debug(EELFLoggerDelegate.debugLogger,
+                "syncAppRoles: number of funcMenuRoles for menuId: " + menuId + ": " + numMenuRoles2);
+            fnMenuFunctionalRolesService.delete(funcMenuRole);
+
+            if (numMenuRoles2 == 1) {
+              // If this is the only role for this menu item, then
+              // the app and roles will be gone,
+              // so must null out the url too, to be consistent
+              logger.debug(EELFLoggerDelegate.debugLogger,
+                  "syncAppRoles: There is exactly 1 menu item for this role, so emptying the url");
+              List<FnMenuFunctional> funcMenuItems = fnMenuFunctionalService.retrieveByMenuId(menuId);
+              if (funcMenuItems.size() > 0) {
+                logger.debug(EELFLoggerDelegate.debugLogger, "got the menu item");
+                FnMenuFunctional funcMenuItem = funcMenuItems.get(0);
+                funcMenuItem.setUrl("");
+              }
+            }
+          }
+          boolean isPortalRequest = true;
+          deleteRoleDependencyRecords(roleId, appId, isPortalRequest);
+          logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: about to delete the role: " + role.toString());
+          fnRoleService.delete(role);
+          logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: deleted the role");
+        }
+      }
+      for (EcompRole role : newRolesToAdd) {
+        logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: about to add missing role: " + role.toString());
+        FnRole newRole = new FnRole();
+        // Attention! All roles from remote application supposed to be
+        // active!
+        newRole.setActiveYn(true);
+        newRole.setRoleName(role.getName());
+        newRole.setAppId(appId);
+        newRole.setAppRoleId(role.getId());
+        fnRoleService.saveOne(newRole);
+      }
+      logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: about to commit the transaction");
+      logger.debug(EELFLoggerDelegate.debugLogger, "syncAppRoles: committed the transaction");
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "syncAppRoles failed", e);
+      EPLogUtil.logEcompError(logger, EPAppMessagesEnum.BeDaoSystemError, e);
+      throw new Exception(e);
+    }
+  }
+
+  private void deleteRoleDependencyRecords(Long roleId, Long appId, boolean isPortalRequest)
+      throws Exception {
+    Session localSession = entityManager.unwrap(Session.class);
+    try {
+      String sql;
+      Query query;
+      // It should delete only when it portal's roleId
+      if (appId.equals(PortalConstants.PORTAL_APP_ID)) {
+        // Delete from fn_role_function
+        sql = "DELETE FROM fn_role_function WHERE role_id=" + roleId;
+        logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+        query = localSession.createSQLQuery(sql);
+        query.executeUpdate();
+        // Delete from fn_role_composite
+        sql = "DELETE FROM fn_role_composite WHERE parent_role_id=" + roleId + " OR child_role_id=" + roleId;
+        logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+        query = localSession.createSQLQuery(sql);
+        query.executeUpdate();
+      }
+      // Delete from ep_app_role_function
+      sql = "DELETE FROM ep_app_role_function WHERE role_id=" + roleId;
+      logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+      query = localSession.createSQLQuery(sql);
+      query.executeUpdate();
+      // Delete from ep_role_notification
+      sql = "DELETE FROM ep_role_notification WHERE role_id=" + roleId;
+      logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+      query = localSession.createSQLQuery(sql);
+      query.executeUpdate();
+      // Delete from fn_user_pseudo_role
+      sql = "DELETE FROM fn_user_pseudo_role WHERE pseudo_role_id=" + roleId;
+      logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+      query = localSession.createSQLQuery(sql);
+      query.executeUpdate();
+      // Delete form EP_WIDGET_CATALOG_ROLE
+      sql = "DELETE FROM EP_WIDGET_CATALOG_ROLE WHERE role_id=" + roleId;
+      logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+      query = localSession.createSQLQuery(sql);
+      query.executeUpdate();
+      // Delete form EP_WIDGET_CATALOG_ROLE
+      sql = "DELETE FROM ep_user_roles_request_det WHERE requested_role_id=" + roleId;
+      logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+      query = localSession.createSQLQuery(sql);
+      query.executeUpdate();
+      if (!isPortalRequest) {
+        // Delete form fn_menu_functional_roles
+        sql = "DELETE FROM fn_menu_functional_roles WHERE role_id=" + roleId;
+        logger.debug(EELFLoggerDelegate.debugLogger, "Executing query: " + sql);
+        query = localSession.createSQLQuery(sql);
+        query.executeUpdate();
+      }
+    } catch (Exception e) {
+      logger.debug(EELFLoggerDelegate.debugLogger, "deleteRoleDependeciesRecord: failed ", e);
+      throw new DeleteDomainObjectFailedException("delete Failed" + e.getMessage());
+    }
+  }
+
   private void checkIfRoleInactive(FnRole epRole) throws Exception {
     if (!epRole.getActiveYn()) {
       throw new Exception(epRole.getRoleName() + " role is unavailable");
   private void checkIfRoleInactive(FnRole epRole) throws Exception {
     if (!epRole.getActiveYn()) {
       throw new Exception(epRole.getRoleName() + " role is unavailable");
index e1ad430..76e29d6 100644 (file)
 
 package org.onap.portal.service;
 
 
 package org.onap.portal.service;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.SortedSet;
 import java.util.TreeSet;
+import java.util.stream.Collectors;
+import javax.persistence.EntityManager;
+import javax.persistence.Tuple;
 import org.onap.portal.domain.db.ep.EpAppFunction;
 import org.onap.portal.domain.db.fn.FnApp;
 import org.onap.portal.domain.db.ep.EpAppFunction;
 import org.onap.portal.domain.db.fn.FnApp;
+import org.onap.portal.domain.db.fn.FnFunction;
 import org.onap.portal.domain.db.fn.FnRole;
 import org.onap.portal.domain.db.fn.FnRole;
+import org.onap.portal.domain.db.fn.FnRoleFunction;
 import org.onap.portal.domain.dto.transport.CentralV2Role;
 import org.onap.portal.domain.dto.transport.CentralV2Role;
+import org.onap.portal.domain.dto.transport.GlobalRoleWithApplicationRoleFunction;
+import org.onap.portal.domain.dto.transport.Role;
 import org.onap.portal.exception.RoleFunctionException;
 import org.onap.portal.logging.logic.EPLogUtil;
 import org.onap.portal.service.ep.EpAppFunctionService;
 import org.onap.portal.exception.RoleFunctionException;
 import org.onap.portal.logging.logic.EPLogUtil;
 import org.onap.portal.service.ep.EpAppFunctionService;
+import org.onap.portal.service.fn.FnAppService;
 import org.onap.portal.service.fn.FnRoleService;
 import org.onap.portal.utils.EPCommonSystemProperties;
 import org.onap.portal.utils.EPUserUtils;
 import org.onap.portal.service.fn.FnRoleService;
 import org.onap.portal.utils.EPCommonSystemProperties;
 import org.onap.portal.utils.EPUserUtils;
@@ -87,20 +97,50 @@ public class ExternalAccessRolesService {
   private static final String ROLE_NAME = "name";
   private static final String APP_ID_EQUALS = " app_id = ";
 
   private static final String ROLE_NAME = "name";
   private static final String APP_ID_EQUALS = " app_id = ";
 
+  private static final String GET_GLOBAL_ROLE_WITH_APPLICATION_ROLE_FUNCTIONS = "select"
+      + "  distinct d.roleId as roleId,"
+      + "  d.roleName as roleName,"
+      + "  d.activeYn as active,"
+      + "  d.priority as priority,"
+      + "  c.epAppFunction.functionCd as functionCd,"
+      + "  e.functionName as functionName,"
+      + "  c.epAppFunction.appId as appId,"
+      + "  c.roleAppId as roleAppId"
+      + " from"
+      + "  FnUserRole a,"
+      + "  FnApp b,"
+      + "  EpAppRoleFunction c,"
+      + "  FnRole d,"
+      + "  EpAppFunction e"
+      + " where"
+      + "  b.appId = c.appId.appId"
+      + "  and a.appId = c.roleAppId"
+      + "  and b.enabled = 'Y'"
+      + "  and c.fnRole.roleId = d.roleId"
+      + "  and d.activeYn = 'Y'"
+      + "  and e.functionCd = c.epAppFunction.functionCd"
+      + "  and c.appId.appId = :appId"
+      + "  and e.appId.appId = c.appId.appId";
+
   private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ExternalAccessRolesService.class);
   private RestTemplate template = new RestTemplate();
 
   private final FnRoleService fnRoleService;
   private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ExternalAccessRolesService.class);
   private RestTemplate template = new RestTemplate();
 
   private final FnRoleService fnRoleService;
+  private final FnAppService fnAppService;
+  private final EntityManager entityManager;
   private final EpAppFunctionService epAppFunctionService;
 
   @Autowired
   public ExternalAccessRolesService(FnRoleService fnRoleService,
   private final EpAppFunctionService epAppFunctionService;
 
   @Autowired
   public ExternalAccessRolesService(FnRoleService fnRoleService,
+      FnAppService fnAppService, EntityManager entityManager,
       EpAppFunctionService epAppFunctionService) {
     this.fnRoleService = fnRoleService;
       EpAppFunctionService epAppFunctionService) {
     this.fnRoleService = fnRoleService;
+    this.fnAppService = fnAppService;
+    this.entityManager = entityManager;
     this.epAppFunctionService = epAppFunctionService;
   }
 
     this.epAppFunctionService = epAppFunctionService;
   }
 
-  public String getFunctionCodeType(String roleFuncItem) {
+  String getFunctionCodeType(String roleFuncItem) {
     String type = null;
     if ((roleFuncItem.contains(FUNCTION_PIPE) && roleFuncItem.contains("menu"))
         || (!roleFuncItem.contains(FUNCTION_PIPE) && roleFuncItem.contains("menu"))) {
     String type = null;
     if ((roleFuncItem.contains(FUNCTION_PIPE) && roleFuncItem.contains("menu"))
         || (!roleFuncItem.contains(FUNCTION_PIPE) && roleFuncItem.contains("menu"))) {
@@ -127,11 +167,11 @@ public class ExternalAccessRolesService {
     return !roleFuncItem.contains(FUNCTION_PIPE) && !roleFuncItem.contains("url");
   }
 
     return !roleFuncItem.contains(FUNCTION_PIPE) && !roleFuncItem.contains("url");
   }
 
-  public List<FnRole> getPortalAppRoleInfo(Long roleId) {
+  List<FnRole> getPortalAppRoleInfo(Long roleId) {
     return fnRoleService.retrieveAppRoleByRoleIdWhereAppIdIsNull(roleId);
   }
 
     return fnRoleService.retrieveAppRoleByRoleIdWhereAppIdIsNull(roleId);
   }
 
-  public ResponseEntity<String> getUserRolesFromExtAuthSystem(String name, HttpEntity<String> getUserRolesEntity) {
+  ResponseEntity<String> getUserRolesFromExtAuthSystem(String name, HttpEntity<String> getUserRolesEntity) {
     logger.debug(EELFLoggerDelegate.debugLogger, "Connecting to external system to get current user roles");
     ResponseEntity<String> getResponse = template
         .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
     logger.debug(EELFLoggerDelegate.debugLogger, "Connecting to external system to get current user roles");
     ResponseEntity<String> getResponse = template
         .exchange(SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_CENTRAL_ACCESS_URL)
@@ -149,7 +189,7 @@ public class ExternalAccessRolesService {
     return getResponse;
   }
 
     return getResponse;
   }
 
-  public Map<String, FnRole> getAppRoleNamesWithUnderscoreMap(FnApp app) {
+  Map<String, FnRole> getAppRoleNamesWithUnderscoreMap(FnApp app) {
     final Map<String, FnRole> currentRolesInDB = new HashMap<>();
     List<FnRole> getCurrentRoleList = null;
     final Map<String, Long> appParams = new HashMap<>();
     final Map<String, FnRole> currentRolesInDB = new HashMap<>();
     List<FnRole> getCurrentRoleList = null;
     final Map<String, Long> appParams = new HashMap<>();
@@ -166,20 +206,18 @@ public class ExternalAccessRolesService {
     return currentRolesInDB;
   }
 
     return currentRolesInDB;
   }
 
-  public List<CentralV2Role> createCentralRoleObject(List<FnApp> app, List<FnRole> roleInfo,
+  List<CentralV2Role> createCentralRoleObject(List<FnApp> app, List<FnRole> roleInfo,
       List<CentralV2Role> roleList) throws RoleFunctionException {
     for (FnRole role : roleInfo) {
       List<EpAppFunction> cenRoleFuncList = epAppFunctionService
           .getAppRoleFunctionList(role.getId(), app.get(0).getId());
       List<CentralV2Role> roleList) throws RoleFunctionException {
     for (FnRole role : roleInfo) {
       List<EpAppFunction> cenRoleFuncList = epAppFunctionService
           .getAppRoleFunctionList(role.getId(), app.get(0).getId());
-      SortedSet<EpAppFunction> roleFunctionSet = new TreeSet<>();
+      SortedSet<FnRoleFunction> roleFunctionSet = new TreeSet<>();
       for (EpAppFunction roleFunc : cenRoleFuncList) {
         String functionCode = EcompPortalUtils.getFunctionCode(roleFunc.getFunctionCd());
         functionCode = EPUserUtils.decodeFunctionCode(functionCode);
         String type = getFunctionCodeType(roleFunc.getFunctionCd());
         String action = getFunctionCodeAction(roleFunc.getFunctionCd());
       for (EpAppFunction roleFunc : cenRoleFuncList) {
         String functionCode = EcompPortalUtils.getFunctionCode(roleFunc.getFunctionCd());
         functionCode = EPUserUtils.decodeFunctionCode(functionCode);
         String type = getFunctionCodeType(roleFunc.getFunctionCd());
         String action = getFunctionCodeAction(roleFunc.getFunctionCd());
-        EpAppFunction cenRoleFunc = new EpAppFunction(role.getId(), functionCode,
-            roleFunc.getFunctionName(), null, type, action, null);
-        roleFunctionSet.add(cenRoleFunc);
+        FnRoleFunction cenRoleFunc = new FnRoleFunction(role, FnFunction.builder().code(functionCode).name(roleFunc.getFunctionName()).type(type).action(action).build());
       }
       SortedSet<CentralV2Role> childRoles = new TreeSet<>();
       SortedSet<CentralV2Role> parentRoles = new TreeSet<>();
       }
       SortedSet<CentralV2Role> childRoles = new TreeSet<>();
       SortedSet<CentralV2Role> parentRoles = new TreeSet<>();
@@ -202,22 +240,134 @@ public class ExternalAccessRolesService {
     return roleList;
   }
 
     return roleList;
   }
 
-  private String getFunctionCodeAction(String roleFuncItem) {
+  String getFunctionCodeAction(String roleFuncItem) {
     return (!roleFuncItem.contains(FUNCTION_PIPE)) ? "*" : EcompPortalUtils.getFunctionAction(roleFuncItem);
   }
 
     return (!roleFuncItem.contains(FUNCTION_PIPE)) ? "*" : EcompPortalUtils.getFunctionAction(roleFuncItem);
   }
 
-  public List<FnRole> getAppRoles(Long appId) {
-    List<FnRole> applicationRoles;
+  List<CentralV2Role> getRolesForApp(String uebkey) throws Exception {
+    logger.debug(EELFLoggerDelegate.debugLogger, "getRolesForApp: Entering into getRolesForApp");
+    List<CentralV2Role> roleList = new ArrayList<>();
     try {
     try {
-      if (appId == 1) {
-        applicationRoles = fnRoleService.retrieveAppRolesWhereAppIdIsNull();
-      } else {
-        applicationRoles = fnRoleService.retrieveAppRolesByAppId(appId);
+      List<FnApp> app = fnAppService.getByUebKey(uebkey);
+      List<FnRole> appRolesList = fnRoleService.getAppRoles(app.get(0).getId());
+      roleList = createCentralRoleObject(app, appRolesList, roleList);
+      if (app.get(0).getId() != PortalConstants.PORTAL_APP_ID) {
+        List<CentralV2Role> globalRoleList = getGlobalRolesOfApplication(app.get(0).getId());
+        List<FnRole> globalRolesList = fnRoleService.getGlobalRolesOfPortal();
+        List<CentralV2Role> portalsGlobalRolesFinlaList = new ArrayList<>();
+        if (!globalRolesList.isEmpty()) {
+          for (FnRole eprole : globalRolesList) {
+            CentralV2Role cenRole = convertRoleToCentralV2Role(eprole);
+            portalsGlobalRolesFinlaList.add(cenRole);
+          }
+          roleList.addAll(globalRoleList);
+          for (CentralV2Role role : portalsGlobalRolesFinlaList) {
+            CentralV2Role result = roleList.stream().filter(x -> role.getId().equals(x.getId())).findAny()
+                .orElse(null);
+            if (result == null) {
+              roleList.add(role);
+            }
+          }
+        } else {
+          for (FnRole role : globalRolesList) {
+            CentralV2Role cenRole = convertRoleToCentralV2Role(role);
+            roleList.add(cenRole);
+          }
+        }
       }
     } catch (Exception e) {
       }
     } catch (Exception e) {
-      logger.error(EELFLoggerDelegate.errorLogger, "getAppRoles: failed", e);
+      logger.error(EELFLoggerDelegate.errorLogger, "getRolesForApp: Failed!", e);
       throw e;
     }
       throw e;
     }
-    return applicationRoles;
+    logger.debug(EELFLoggerDelegate.debugLogger, "getRolesForApp: Finished!");
+    return roleList.stream().distinct().collect(Collectors.toList());
+  }
+
+  private CentralV2Role convertRoleToCentralV2Role(FnRole role) {
+    return CentralV2Role.builder().id(role.getId()).created(role.getCreated())
+        .modified(role.getModified()).createdId(role.getCreatedId().getUserId())
+        .modifiedId(role.getModifiedId().getUserId())
+        .rowNum(role.getRowNum()).name(role.getRoleName()).active(role.getActiveYn())
+        .priority(role.getPriority()).roleFunctions(new TreeSet<>()).childRoles(new TreeSet<>())
+        .parentRoles(new TreeSet<>()).build();
+  }
+
+  private List<CentralV2Role> getGlobalRolesOfApplication(Long appId) {
+    List<GlobalRoleWithApplicationRoleFunction> globalRoles = new ArrayList<>();
+    try {
+      List<Tuple> tuples = entityManager.createQuery(GET_GLOBAL_ROLE_WITH_APPLICATION_ROLE_FUNCTIONS, Tuple.class)
+          .setParameter("appId", appId)
+          .getResultList();
+      globalRoles = tuples.stream().map(this::tupleToGlobalRoleWithApplicationRoleFunction).collect(Collectors.toList());
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "getCentralizedAppsOfUser failed", e);
+    }
+    List<CentralV2Role> roleList = new ArrayList<>();
+    if (globalRoles.size() > 0) {
+      roleList = finalListOfCentralRoles(globalRoles);
+    }
+    return roleList;
+  }
+
+  private GlobalRoleWithApplicationRoleFunction tupleToGlobalRoleWithApplicationRoleFunction(Tuple tuple) {
+    return GlobalRoleWithApplicationRoleFunction.builder().roleId((Long) tuple.get("roleId"))
+        .roleName((String) tuple.get("roleName"))
+        .functionCd((String) tuple.get("functionCd")).functionName((String) tuple.get("functionName"))
+        .active((Boolean) tuple.get("active")).priority((Integer) tuple.get("priority"))
+        .appId((Long) tuple.get("appId")).roleAppId((Long) tuple.get("roleAppId")).build();
+  }
+
+  private List<CentralV2Role> finalListOfCentralRoles(List<GlobalRoleWithApplicationRoleFunction> globalRoles) {
+    List<CentralV2Role> rolesfinalList = new ArrayList<>();
+    for (GlobalRoleWithApplicationRoleFunction role : globalRoles) {
+      boolean found = false;
+      for (CentralV2Role cenRole : rolesfinalList) {
+        if (role.getRoleId().equals(cenRole.getId())) {
+          SortedSet<FnRoleFunction> roleFunctions = cenRole.getRoleFunctions();
+          FnRoleFunction cenRoleFun = createCentralRoleFunctionForGlobalRole(role);
+          roleFunctions.add(cenRoleFun);
+          cenRole.setRoleFunctions(roleFunctions);
+          found = true;
+          break;
+        }
+      }
+      if (!found) {
+        CentralV2Role cenrole = new CentralV2Role();
+        cenrole.setName(role.getRoleName());
+        cenrole.setId(role.getRoleId());
+        cenrole.setActive(role.getActive());
+        cenrole.setPriority(role.getPriority());
+        SortedSet<FnRoleFunction> roleFunctions = new TreeSet<>();
+        FnRoleFunction cenRoleFun = createCentralRoleFunctionForGlobalRole(role);
+        roleFunctions.add(cenRoleFun);
+        cenrole.setRoleFunctions(roleFunctions);
+        rolesfinalList.add(cenrole);
+      }
+    }
+    return rolesfinalList;
+  }
+
+  private FnRoleFunction createCentralRoleFunctionForGlobalRole(GlobalRoleWithApplicationRoleFunction role) {
+    String instance;
+    String type;
+    String action;
+    FnRoleFunction cenRoleFun = null;
+    if (role.getFunctionCd().contains(FUNCTION_PIPE)) {
+      instance = EcompPortalUtils.getFunctionCode(role.getFunctionCd());
+      type = EcompPortalUtils.getFunctionType(role.getFunctionCd());
+      action = EcompPortalUtils.getFunctionAction(role.getFunctionCd());
+      cenRoleFun = FnRoleFunction.builder().build();
+      FnRole fnRole = FnRole.builder().build();
+      FnFunction fnFunction = FnFunction.builder().functionCd(instance).name(role.getFunctionName()).type(type).action(action).build();
+      cenRoleFun.setRoleId(fnRole);
+      cenRoleFun.setFunctionCd(fnFunction);
+    } else {
+      type = getFunctionCodeType(role.getFunctionCd());
+      action = getFunctionCodeAction(role.getFunctionCd());
+      FnFunction fnFunction = FnFunction.builder().functionCd(role.getFunctionCd()).name(role.getFunctionName()).type(type).action(action).build();
+      cenRoleFun.setRoleId(new FnRole());
+      cenRoleFun.setFunctionCd(fnFunction);
+    }
+    return cenRoleFun;
   }
 }
   }
 }
index b3691fc..012983d 100644 (file)
 
 package org.onap.portal.service.ep;
 
 
 package org.onap.portal.service.ep;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import org.onap.portal.dao.ep.EpAppFunctionDao;
 import org.onap.portal.domain.db.ep.EpAppFunction;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.onap.portal.dao.ep.EpAppFunctionDao;
 import org.onap.portal.domain.db.ep.EpAppFunction;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -57,6 +62,18 @@ public class EpAppFunctionService {
   }
 
   public List<EpAppFunction> getAppRoleFunctionList(final Long roleId, final Long appId) {
   }
 
   public List<EpAppFunction> getAppRoleFunctionList(final Long roleId, final Long appId) {
-    return epAppFunctionDao.getAppRoleFunctionList(roleId, appId);
+
+    return Optional.of(epAppFunctionDao.getAppRoleFunctionList(roleId, appId))
+        .orElse(new ArrayList<>())
+        .stream()
+        .filter(distinctByKey(EpAppFunction::getAppId))
+        .filter(distinctByKey(EpAppFunction::getFunctionCd))
+        .filter(distinctByKey(EpAppFunction::getFunctionName))
+        .collect(Collectors.toList());
+  }
+
+  private <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
+    List<Object> seen = new ArrayList<>();
+    return t -> seen.add(keyExtractor.apply(t));
   }
 }
   }
 }
index a3920e3..4e79ba5 100644 (file)
@@ -81,6 +81,10 @@ public class FnAppService {
     return Optional.of(fnAppDao.getOne(id)).orElseThrow(EntityExistsException::new);
   }
 
     return Optional.of(fnAppDao.getOne(id)).orElseThrow(EntityExistsException::new);
   }
 
+  public List<FnApp> getByUebKey(final String uebKey){
+    return Optional.of(fnAppDao.getByUebKey(uebKey)).orElse(new ArrayList<>());
+  }
+
   public void createOnboardingFromApp(FnApp app, OnboardingApp onboardingApp) {
     onboardingApp.setId(app.getId());
     onboardingApp.setName(app.getAppName());
   public void createOnboardingFromApp(FnApp app, OnboardingApp onboardingApp) {
     onboardingApp.setId(app.getId());
     onboardingApp.setName(app.getAppName());
diff --git a/portal-BE/src/main/java/org/onap/portal/service/fn/FnMenuFunctionalRolesService.java b/portal-BE/src/main/java/org/onap/portal/service/fn/FnMenuFunctionalRolesService.java
new file mode 100644 (file)
index 0000000..c1747da
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *             https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+package org.onap.portal.service.fn;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import org.onap.portal.dao.fn.FnMenuFunctionalRolesDao;
+import org.onap.portal.domain.db.fn.FnMenuFunctionalRoles;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class FnMenuFunctionalRolesService {
+  private final FnMenuFunctionalRolesDao fnMenuFunctionalRolesDao;
+
+  @Autowired
+  public FnMenuFunctionalRolesService(FnMenuFunctionalRolesDao fnMenuFunctionalRolesDao) {
+    this.fnMenuFunctionalRolesDao = fnMenuFunctionalRolesDao;
+  }
+
+  public void deleteById(final Long id){
+    fnMenuFunctionalRolesDao.deleteById(id);
+  }
+
+  public void delete(final FnMenuFunctionalRoles id){
+    fnMenuFunctionalRolesDao.delete(id);
+  }
+
+  public List<FnMenuFunctionalRoles> retrieveByroleId(final Long roleId){
+    return Optional.of(fnMenuFunctionalRolesDao.retrieveByRoleId(roleId)).orElse(new ArrayList<>());
+  }
+
+  public List<FnMenuFunctionalRoles> retrieveByMenuId(final Long menuId){
+    return Optional.of(fnMenuFunctionalRolesDao.retrieveByMenuId(menuId)).orElse(new ArrayList<>());
+  }
+
+}
diff --git a/portal-BE/src/main/java/org/onap/portal/service/fn/FnMenuFunctionalService.java b/portal-BE/src/main/java/org/onap/portal/service/fn/FnMenuFunctionalService.java
new file mode 100644 (file)
index 0000000..97f3188
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *             https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.
+ *
+ * ============LICENSE_END============================================
+ *
+ *
+ */
+
+package org.onap.portal.service.fn;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import org.onap.portal.dao.fn.FnMenuFunctionalDao;
+import org.onap.portal.domain.db.fn.FnMenuFunctional;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class FnMenuFunctionalService {
+
+  private final FnMenuFunctionalDao fnMenuFunctionalDao;
+
+  @Autowired
+  public FnMenuFunctionalService(FnMenuFunctionalDao fnMenuFunctionalDao) {
+    this.fnMenuFunctionalDao = fnMenuFunctionalDao;
+  }
+
+  public List<FnMenuFunctional> retrieveByMenuId(final Long menuId) {
+    return Optional.of(fnMenuFunctionalDao.retrieveByMenuId(menuId)).orElse(new ArrayList<>());
+  }
+
+}
index aa859db..b0c4e60 100644 (file)
@@ -43,9 +43,12 @@ package org.onap.portal.service.fn;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import javax.persistence.EntityExistsException;
 import javax.persistence.EntityExistsException;
+import javax.print.attribute.standard.Fidelity;
 import org.onap.portal.dao.fn.FnRoleDao;
 import org.onap.portal.domain.db.fn.FnRole;
 import org.onap.portal.dao.fn.FnRoleDao;
 import org.onap.portal.domain.db.fn.FnRole;
+import org.onap.portal.service.ExternalAccessRolesService;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -70,9 +73,6 @@ public class FnRoleService {
   }
 
   public FnRole getRole(final Long appId, final Long appRoleId) {
   }
 
   public FnRole getRole(final Long appId, final Long appRoleId) {
-
-    String sql = "SELECT * FROM fn_role where APP_ID = :appId AND APP_ROLE_ID = :appRoleId";
-
     List<FnRole> roles = Optional.of(fnRoleDao.retrieveAppRoleByAppRoleIdAndByAppId(appId, appRoleId))
         .orElse(new ArrayList<>());
     if (!roles.isEmpty()) {
     List<FnRole> roles = Optional.of(fnRoleDao.retrieveAppRoleByAppRoleIdAndByAppId(appId, appRoleId))
         .orElse(new ArrayList<>());
     if (!roles.isEmpty()) {
@@ -87,6 +87,21 @@ public class FnRoleService {
     return null;
   }
 
     return null;
   }
 
+  public List<FnRole> getAppRoles(Long appId) {
+    List<FnRole> applicationRoles;
+    try {
+      if (appId == 1) {
+        applicationRoles = retrieveAppRolesWhereAppIdIsNull();
+      } else {
+        applicationRoles = retrieveAppRolesByAppId(appId);
+      }
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "getAppRoles: failed", e);
+      throw e;
+    }
+    return applicationRoles;
+  }
+
   public List<FnRole> retrieveAppRoleByAppRoleIdAndByAppId(final Long appId, final Long appRoleId) {
     return Optional.of(fnRoleDao.retrieveAppRoleByAppRoleIdAndByAppId(appId, appRoleId)).orElse(new ArrayList<>());
   }
   public List<FnRole> retrieveAppRoleByAppRoleIdAndByAppId(final Long appId, final Long appRoleId) {
     return Optional.of(fnRoleDao.retrieveAppRoleByAppRoleIdAndByAppId(appId, appRoleId)).orElse(new ArrayList<>());
   }
@@ -110,4 +125,26 @@ public class FnRoleService {
   public List<FnRole> retrieveAppRolesByRoleNameAndByAppId(final String roleName, final Long appId) {
     return Optional.of(fnRoleDao.retrieveAppRolesByRoleNameAndByAppId(roleName, appId)).orElse(new ArrayList<>());
   }
   public List<FnRole> retrieveAppRolesByRoleNameAndByAppId(final String roleName, final Long appId) {
     return Optional.of(fnRoleDao.retrieveAppRolesByRoleNameAndByAppId(roleName, appId)).orElse(new ArrayList<>());
   }
+
+  public List<FnRole> retrieveActiveRolesOfApplication(final Long appId) {
+    return Optional.of(fnRoleDao.retrieveActiveRolesOfApplication(appId)).orElse(new ArrayList<>());
+  }
+
+  public List<FnRole> getGlobalRolesOfPortal() {
+    List<FnRole> globalRoles = new ArrayList<>();
+    try {
+      globalRoles = Optional.of(fnRoleDao.getGlobalRolesOfPortal()).orElse(new ArrayList<>());
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "getGlobalRolesOfPortal failed", e);
+    }
+    return globalRoles;
+  }
+
+  public void delete(FnRole role) {
+    fnRoleDao.delete(role);
+  }
+
+  public FnRole saveOne(final FnRole role){
+    return fnRoleDao.save(role);
+  }
 }
 }
index 7772c8f..cadc343 100644 (file)
@@ -47,24 +47,17 @@ import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.stream.Collectors;
 import javax.persistence.EntityManager;
 import java.util.Optional;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.stream.Collectors;
 import javax.persistence.EntityManager;
-import javax.persistence.Query;
 import javax.persistence.Tuple;
 import javax.servlet.http.HttpServletResponse;
 import javax.persistence.Tuple;
 import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.lang.StringUtils;
 import org.apache.cxf.transport.http.HTTPException;
 import org.apache.cxf.transport.http.HTTPException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.Transaction;
 import org.onap.portal.dao.fn.FnUserRoleDao;
 import org.onap.portal.domain.db.ep.EpUserRolesRequest;
 import org.onap.portal.domain.db.ep.EpUserRolesRequestDet;
 import org.onap.portal.dao.fn.FnUserRoleDao;
 import org.onap.portal.domain.db.ep.EpUserRolesRequest;
 import org.onap.portal.domain.db.ep.EpUserRolesRequestDet;
@@ -75,21 +68,17 @@ import org.onap.portal.domain.db.fn.FnUserRole;
 import org.onap.portal.domain.dto.ecomp.EPUserAppCatalogRoles;
 import org.onap.portal.domain.dto.ecomp.ExternalSystemAccess;
 import org.onap.portal.domain.dto.transport.AppWithRolesForUser;
 import org.onap.portal.domain.dto.ecomp.EPUserAppCatalogRoles;
 import org.onap.portal.domain.dto.ecomp.ExternalSystemAccess;
 import org.onap.portal.domain.dto.transport.AppWithRolesForUser;
-import org.onap.portal.domain.dto.transport.ExternalAccessUserRoleDetail;
 import org.onap.portal.domain.dto.transport.FieldsValidator;
 import org.onap.portal.domain.dto.transport.RemoteRole;
 import org.onap.portal.domain.dto.transport.RemoteUserWithRoles;
 import org.onap.portal.domain.dto.transport.FieldsValidator;
 import org.onap.portal.domain.dto.transport.RemoteRole;
 import org.onap.portal.domain.dto.transport.RemoteUserWithRoles;
+import org.onap.portal.domain.dto.transport.Role;
 import org.onap.portal.domain.dto.transport.RoleInAppForUser;
 import org.onap.portal.domain.dto.transport.UserApplicationRoles;
 import org.onap.portal.domain.dto.transport.RoleInAppForUser;
 import org.onap.portal.domain.dto.transport.UserApplicationRoles;
-import org.onap.portal.exception.SyncUserRolesException;
-import org.onap.portal.logging.format.EPAppMessagesEnum;
-import org.onap.portal.logging.logic.EPLogUtil;
 import org.onap.portal.service.ApplicationsRestClientService;
 import org.onap.portal.service.ApplicationsRestClientService;
-import org.onap.portal.service.ExternalAccessRolesService;
+import org.onap.portal.service.ep.EpAppFunctionService;
 import org.onap.portal.service.ep.EpUserRolesRequestDetService;
 import org.onap.portal.service.ep.EpUserRolesRequestService;
 import org.onap.portal.utils.EPCommonSystemProperties;
 import org.onap.portal.service.ep.EpUserRolesRequestDetService;
 import org.onap.portal.service.ep.EpUserRolesRequestService;
 import org.onap.portal.utils.EPCommonSystemProperties;
-import org.onap.portal.utils.EcompPortalUtils;
 import org.onap.portal.utils.PortalConstants;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.onap.portalsdk.core.restful.domain.EcompRole;
 import org.onap.portal.utils.PortalConstants;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
 import org.onap.portalsdk.core.restful.domain.EcompRole;
@@ -97,7 +86,6 @@ import org.onap.portalsdk.core.util.SystemProperties;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.client.RestTemplate;
 
 @Service
 @Transactional
 
 @Service
 @Transactional
@@ -164,6 +152,7 @@ public class FnUserRoleService {
   private final FnAppService fnAppService;
   private final FnRoleService fnRoleService;
   private final FnUserService fnUserService;
   private final FnAppService fnAppService;
   private final FnRoleService fnRoleService;
   private final FnUserService fnUserService;
+  private final EpAppFunctionService epAppFunctionService;
   private final EpUserRolesRequestService epUserRolesRequestService;
   private final EpUserRolesRequestDetService epUserRolesRequestDetService;
   private final EntityManager entityManager;
   private final EpUserRolesRequestService epUserRolesRequestService;
   private final EpUserRolesRequestDetService epUserRolesRequestDetService;
   private final EntityManager entityManager;
@@ -175,6 +164,7 @@ public class FnUserRoleService {
       FnAppService fnAppService,
       FnRoleService fnRoleService,
       FnUserService fnUserService,
       FnAppService fnAppService,
       FnRoleService fnRoleService,
       FnUserService fnUserService,
+      EpAppFunctionService epAppFunctionService,
       EpUserRolesRequestService epUserRolesRequestService,
       EpUserRolesRequestDetService epUserRolesRequestDetService,
       EntityManager entityManager,
       EpUserRolesRequestService epUserRolesRequestService,
       EpUserRolesRequestDetService epUserRolesRequestDetService,
       EntityManager entityManager,
@@ -183,12 +173,17 @@ public class FnUserRoleService {
     this.fnAppService = fnAppService;
     this.fnRoleService = fnRoleService;
     this.fnUserService = fnUserService;
     this.fnAppService = fnAppService;
     this.fnRoleService = fnRoleService;
     this.fnUserService = fnUserService;
+    this.epAppFunctionService = epAppFunctionService;
     this.epUserRolesRequestService = epUserRolesRequestService;
     this.epUserRolesRequestDetService = epUserRolesRequestDetService;
     this.entityManager = entityManager;
     this.applicationsRestClientService = applicationsRestClientService;
   }
 
     this.epUserRolesRequestService = epUserRolesRequestService;
     this.epUserRolesRequestDetService = epUserRolesRequestDetService;
     this.entityManager = entityManager;
     this.applicationsRestClientService = applicationsRestClientService;
   }
 
+  public List<FnUserRole> retrieveByAppIdAndRoleId(final Long appId, final Long roleId) {
+    return Optional.of(fnUserRoleDao.retrieveByAppIdAndRoleId(appId, roleId)).orElse(new ArrayList<>());
+  }
+
   public List<FnUserRole> getAdminUserRoles(final Long userId, final Long roleId, final Long appId) {
     return fnUserRoleDao.getAdminUserRoles(userId, roleId, appId).orElse(new ArrayList<>());
   }
   public List<FnUserRole> getAdminUserRoles(final Long userId, final Long roleId, final Long appId) {
     return fnUserRoleDao.getAdminUserRoles(userId, roleId, appId).orElse(new ArrayList<>());
   }
@@ -480,4 +475,68 @@ public class FnUserRoleService {
   public void deleteById(final Long id) {
     fnUserRoleDao.deleteById(id);
   }
   public void deleteById(final Long id) {
     fnUserRoleDao.deleteById(id);
   }
+
+  public List<RoleInAppForUser> constructRolesInAppForUserGet(List<Role> appRoles, FnRole[] userAppRoles,
+      Boolean extRequestValue) {
+    List<RoleInAppForUser> rolesInAppForUser = new ArrayList<>();
+
+    Set<Long> userAppRolesMap = new HashSet<>();
+    if (userAppRoles != null) {
+      for (FnRole ecompRole : userAppRoles) {
+        userAppRolesMap.add(ecompRole.getAppId());
+      }
+      logger.debug(EELFLoggerDelegate.debugLogger, "In constructRolesInAppForUserGet() - userAppRolesMap = {}",
+          userAppRolesMap);
+
+    } else {
+      logger.error(EELFLoggerDelegate.errorLogger,
+          "constructRolesInAppForUserGet has received userAppRoles list empty.");
+    }
+
+    if (appRoles != null) {
+      for (Role ecompRole : appRoles) {
+        logger.debug(EELFLoggerDelegate.debugLogger, "In constructRolesInAppForUserGet() - appRoles not null = {}",
+            ecompRole);
+
+        if (ecompRole.getId().equals(PortalConstants.ACCOUNT_ADMIN_ROLE_ID) && !extRequestValue) {
+          continue;
+        }
+        RoleInAppForUser roleForUser = new RoleInAppForUser(ecompRole.getId(), ecompRole.getName());
+        roleForUser.setIsApplied(userAppRolesMap.contains(ecompRole.getId()));
+        rolesInAppForUser.add(roleForUser);
+        logger.debug(EELFLoggerDelegate.debugLogger, "In constructRolesInAppForUserGet() - rolesInAppForUser = {}",
+            rolesInAppForUser);
+
+      }
+    } else {
+      logger.error(EELFLoggerDelegate.errorLogger,
+          "constructRolesInAppForUser has received appRoles list empty.");
+    }
+    return rolesInAppForUser;
+  }
+
+  public List<RoleInAppForUser> constructRolesInAppForUserGet(EcompRole[] appRoles, EcompRole[] userAppRoles) {
+    List<RoleInAppForUser> rolesInAppForUser = new ArrayList<>();
+
+    Set<Long> userAppRolesMap = new HashSet<>();
+    if (userAppRoles != null) {
+      for (EcompRole ecompRole : userAppRoles) {
+        userAppRolesMap.add(ecompRole.getId());
+      }
+    } else {
+      logger.error(EELFLoggerDelegate.errorLogger,
+          "constructRolesInAppForUserGet has received userAppRoles list empty");
+    }
+
+    if (appRoles != null) {
+      for (EcompRole ecompRole : appRoles) {
+        RoleInAppForUser roleForUser = new RoleInAppForUser(ecompRole.getId(), ecompRole.getName());
+        roleForUser.setIsApplied(userAppRolesMap.contains(ecompRole.getId()));
+        rolesInAppForUser.add(roleForUser);
+      }
+    } else {
+      logger.error(EELFLoggerDelegate.errorLogger, "constructRolesInAppForUser has received appRoles list empty");
+    }
+    return rolesInAppForUser;
+  }
 }
 }