UserRolesController methods up
[portal.git] / portal-BE / src / main / java / org / onap / portal / service / fn / FnUserRoleService.java
index 6c1b9fa..7772c8f 100644 (file)
@@ -47,6 +47,7 @@ import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -56,9 +57,14 @@ 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 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.onap.portal.dao.fn.FnUserRoleDao;
 import org.onap.portal.domain.db.ep.EpUserRolesRequest;
 import org.onap.portal.domain.db.ep.EpUserRolesRequestDet;
@@ -69,325 +75,409 @@ 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.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.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.ExternalAccessRolesService;
 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.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.web.client.RestTemplate;
 
 @Service
 @Transactional
 public class FnUserRoleService {
 
-       private static final String USER_APP_CATALOG_ROLES =
-               "select\n"
-                       + "  A.reqId as reqId,\n"
-                       + "  B.requestedRoleId.roleId as requestedRoleId,\n"
-                       + "  A.requestStatus as requestStatus,\n"
-                       + "  A.appId.appId as appId,\n"
-                       + "  (\n"
-                       + "    select\n"
-                       + "      roleName\n"
-                       + "    from\n"
-                       + "      FnRole\n"
-                       + "    where\n"
-                       + "      roleId = B.requestedRoleId.roleId\n"
-                       + "  ) as roleName\n"
-                       + "from\n"
-                       + "  EpUserRolesRequest A\n"
-                       + "  left join EpUserRolesRequestDet B on A.reqId = B.reqId.reqId\n"
-                       + "where\n"
-                       + "  A.userId.userId = :userid\n"
-                       + "  and A.appId IN (\n"
-                       + "    select\n"
-                       + "      appId\n"
-                       + "    from\n"
-                       + "      FnApp\n"
-                       + "    where\n"
-                       + "      appName = :appName\n"
-                       + "  )\n"
-                       + "  and A.requestStatus = 'P'\n";
-
-       private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FnUserRoleService.class);
-       private final FnUserRoleDao fnUserRoleDao;
-       private final FnAppService fnAppService;
-       private final FnRoleService fnRoleService;
-       private final FnUserService fnUserService;
-       private final EpUserRolesRequestService epUserRolesRequestService;
-       private final EpUserRolesRequestDetService epUserRolesRequestDetService;
-       private final EntityManager entityManager;
-       private final ApplicationsRestClientService applicationsRestClientService;
-
-       @Autowired
-       public FnUserRoleService(FnUserRoleDao fnUserRoleDao, FnAppService fnAppService,
-               FnRoleService fnRoleService,
-               FnUserService fnUserService,
-               EpUserRolesRequestService epUserRolesRequestService,
-               EpUserRolesRequestDetService epUserRolesRequestDetService,
-               EntityManager entityManager,
-               ApplicationsRestClientService applicationsRestClientService) {
-              this.fnUserRoleDao = fnUserRoleDao;
-              this.fnAppService = fnAppService;
-              this.fnRoleService = fnRoleService;
-              this.fnUserService = fnUserService;
-              this.epUserRolesRequestService = epUserRolesRequestService;
-              this.epUserRolesRequestDetService = epUserRolesRequestDetService;
-              this.entityManager = entityManager;
-              this.applicationsRestClientService = applicationsRestClientService;
-       }
-
-       public List<FnUserRole> getAdminUserRoles(final Long userId, final Long roleId, final Long appId) {
-              return fnUserRoleDao.getAdminUserRoles(userId, roleId, appId).orElse(new ArrayList<>());
-       }
-
-       public boolean isSuperAdmin(final String orgUserId, final Long roleId, final Long appId) {
-              List<FnUserRole> roles = getUserRolesForRoleIdAndAppId(roleId, appId).stream()
-                      .filter(role -> role.getUserId().getOrgUserId().equals(orgUserId)).collect(Collectors.toList());
-              return !roles.isEmpty();
-       }
-
-       private List<FnUserRole> getUserRolesForRoleIdAndAppId(final Long roleId, final Long appId) {
-              return Optional.of(fnUserRoleDao.getUserRolesForRoleIdAndAppId(roleId, appId)).orElse(new ArrayList<>());
-       }
-
-       public FnUserRole saveOne(final FnUserRole fnUserRole) {
-              return fnUserRoleDao.save(fnUserRole);
-       }
-
-       public ExternalSystemAccess getExternalRequestAccess() {
-              ExternalSystemAccess res = null;
-              try {
-                     res = new ExternalSystemAccess(EPCommonSystemProperties.EXTERNAL_ACCESS_ENABLE,
-                             Boolean.parseBoolean(
-                                     SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_ACCESS_ENABLE)));
-              } catch (Exception e) {
-                     logger.error(EELFLoggerDelegate.errorLogger, "getExternalRequestAccess failed" + e.getMessage());
-              }
-              return res;
-       }
-
-       public List<EPUserAppCatalogRoles> getUserAppCatalogRoles(FnUser userid, String appName) {
-              List<Tuple> tuples = entityManager.createQuery(USER_APP_CATALOG_ROLES, Tuple.class)
-                      .setParameter("userid", userid.getUserId())
-                      .setParameter("appName", appName)
-                      .getResultList();
-              return tuples.stream().map(this::tupleToEPUserAppCatalogRoles).collect(Collectors.toList());
-       }
-
-       private EPUserAppCatalogRoles tupleToEPUserAppCatalogRoles(Tuple tuple) {
-              return new EPUserAppCatalogRoles((Long) tuple.get("reqId"), (Long) tuple.get("requestedRoleId"),
-                      (String) tuple.get("roleName"), (String) tuple.get("requestStatus"), (Long) tuple.get("appId"));
-       }
-
-       private boolean postUserRolesToMylogins(AppWithRolesForUser userAppRolesData,
-               ApplicationsRestClientService applicationsRestClientService, Long appId, Long userId)
-               throws JsonProcessingException, HTTPException {
-              boolean result = false;
-              ObjectMapper mapper = new ObjectMapper();
-              mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-              String userRolesAsString = mapper.writeValueAsString(userAppRolesData);
-              logger.error(EELFLoggerDelegate.errorLogger,
-                      "Should not be reached here, as the endpoint is not defined yet from the Mylogins");
-              applicationsRestClientService.post(AppWithRolesForUser.class, appId, userRolesAsString,
-                      String.format("/user/%s/myLoginroles", userId));
-              return result;
-       }
-
-       public FieldsValidator putUserAppRolesRequest(AppWithRolesForUser newAppRolesForUser, FnUser user) {
-              FieldsValidator fieldsValidator = new FieldsValidator();
-              List<FnRole> appRole;
-              try {
-                     logger.error(EELFLoggerDelegate.errorLogger,
-                             "Should not be reached here, still the endpoint is yet to be defined");
-                     boolean result = postUserRolesToMylogins(newAppRolesForUser, applicationsRestClientService,
-                             newAppRolesForUser.getAppId(), user.getId());
-                     logger.debug(EELFLoggerDelegate.debugLogger, "putUserAppRolesRequest: result {}", result);
-                     FnApp app = fnAppService.getById(newAppRolesForUser.getAppId());
-                     EpUserRolesRequest epUserRolesRequest = new EpUserRolesRequest();
-                     epUserRolesRequest.setCreatedDate(LocalDateTime.now());
-                     epUserRolesRequest.setUpdatedDate(LocalDateTime.now());
-                     epUserRolesRequest.setUserId(user);
-                     epUserRolesRequest.setAppId(app);
-                     epUserRolesRequest.setRequestStatus("P");
-                     List<RoleInAppForUser> appRoleIdList = newAppRolesForUser.getAppRoles();
-                     Set<EpUserRolesRequestDet> appRoleDetails = new LinkedHashSet<>();
-                     epUserRolesRequestService.saveOne(epUserRolesRequest);
-                     for (RoleInAppForUser userAppRoles : appRoleIdList) {
-                            Boolean isAppliedVal = userAppRoles.getIsApplied();
-                            if (isAppliedVal) {
-                                   appRole = fnRoleService
-                                           .retrieveAppRoleByAppRoleIdAndByAppId(newAppRolesForUser.getAppId(),
-                                                   userAppRoles.getRoleId());
-                                   if (!appRole.isEmpty()) {
-                                          EpUserRolesRequestDet epAppRoleDetail = new EpUserRolesRequestDet();
-                                          epAppRoleDetail.setRequestedRoleId(appRole.get(0));
-                                          epAppRoleDetail.setRequestType("P");
-                                          epAppRoleDetail.setReqId(epUserRolesRequest);
-                                          epUserRolesRequestDetService.saveOne(epAppRoleDetail);
-                                   }
-                            }
-                     }
-                     epUserRolesRequest.setEpRequestIdDetail(appRoleDetails);
-                     fieldsValidator.setHttpStatusCode((long) HttpServletResponse.SC_OK);
-
-              } catch (Exception e) {
-                     logger.error(EELFLoggerDelegate.errorLogger, "putUserAppRolesRequest failed", e);
-                     fieldsValidator.setHttpStatusCode((long) HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-              }
-              return fieldsValidator;
-       }
-
-       public List<FnRole> importRolesFromRemoteApplication(Long appId) throws HTTPException {
-              FnRole[] appRolesFull = applicationsRestClientService.get(FnRole[].class, appId, "/rolesFull");
-              List<FnRole> rolesList = Arrays.asList(appRolesFull);
-              for (FnRole externalAppRole : rolesList) {
-
-                     // Try to find an existing extern role for the app in the local
-                     // onap DB. If so, then use its id to update the existing external
-                     // application role record.
-                     Long externAppId = externalAppRole.getId();
-                     FnRole existingAppRole = fnRoleService.getRole(appId, externAppId);
-                     if (existingAppRole != null) {
-                            logger.debug(EELFLoggerDelegate.debugLogger,
-                                    String.format(
-                                            "ecomp role already exists for app=%s; appRoleId=%s. No need to import this one.",
-                                            appId, externAppId));
-                            continue;
-                     }
-                     // persistExternalRoleInEcompDb(externalAppRole, appId,
-                     // roleService);
-              }
-
-              return rolesList;
-       }
-
-       public List<UserApplicationRoles> getUsersFromAppEndpoint(Long appId) throws HTTPException {
-              ArrayList<UserApplicationRoles> userApplicationRoles = new ArrayList<>();
-
-              FnApp app = fnAppService.getById(appId);
-              //If local or centralized application
-              if (PortalConstants.PORTAL_APP_ID.equals(appId) || app.getAuthCentral()) {
-                     List<FnUser> userList = fnUserService.getActiveUsers();
-                     for (FnUser user : userList) {
-                            UserApplicationRoles userWithAppRoles = convertToUserApplicationRoles(appId, user, app);
-                            if (userWithAppRoles.getRoles() != null && userWithAppRoles.getRoles().size() > 0) {
-                                   userApplicationRoles.add(userWithAppRoles);
-                            }
-                     }
-
-              }
-              // remote app
-              else {
-                     RemoteUserWithRoles[] remoteUsers = null;
-                     String remoteUsersString = applicationsRestClientService.getIncomingJsonString(appId, "/users");
-
-                     remoteUsers = doGetUsers(isAppUpgradeVersion(app), remoteUsersString);
-
-                     userApplicationRoles = new ArrayList<>();
-                     for (RemoteUserWithRoles remoteUser : remoteUsers) {
-                            UserApplicationRoles userWithRemoteAppRoles = convertToUserApplicationRoles(appId,
-                                    remoteUser);
-                            if (userWithRemoteAppRoles.getRoles() != null
-                                    && userWithRemoteAppRoles.getRoles().size() > 0) {
-                                   userApplicationRoles.add(userWithRemoteAppRoles);
-                            } else {
-                                   logger.debug(EELFLoggerDelegate.debugLogger,
-                                           "User " + userWithRemoteAppRoles.getOrgUserId()
-                                                   + " doesn't have any roles assigned to any app.");
-                            }
-                     }
-              }
-
-              return userApplicationRoles;
-       }
-
-       private UserApplicationRoles convertToUserApplicationRoles(Long appId, RemoteUserWithRoles remoteUser) {
-              UserApplicationRoles userWithRemoteAppRoles = new UserApplicationRoles();
-              userWithRemoteAppRoles.setAppId(appId);
-              userWithRemoteAppRoles.setOrgUserId(remoteUser.getOrgUserId());
-              userWithRemoteAppRoles.setFirstName(remoteUser.getFirstName());
-              userWithRemoteAppRoles.setLastName(remoteUser.getLastName());
-              userWithRemoteAppRoles.setRoles(remoteUser.getRoles());
-              return userWithRemoteAppRoles;
-       }
-
-       private boolean isAppUpgradeVersion(FnApp app) {
-              return true;
-       }
-
-       private RemoteUserWithRoles[] doGetUsers(boolean postOpenSource, String remoteUsersString) {
-
-              ObjectMapper mapper = new ObjectMapper();
-              try {
-                     return mapper.readValue(remoteUsersString, RemoteUserWithRoles[].class);
-              } catch (IOException e) {
-                     logger.error(EELFLoggerDelegate.errorLogger,
-                             "doGetUsers : Failed : Unexpected property in incoming JSON",
-                             e);
-                     logger.error(EELFLoggerDelegate.errorLogger,
-                             "doGetUsers : Incoming JSON that caused it --> " + remoteUsersString);
-              }
-
-              return new RemoteUserWithRoles[0];
-       }
-
-       private UserApplicationRoles convertToUserApplicationRoles(Long appId, FnUser user, FnApp app) {
-              UserApplicationRoles userWithRemoteAppRoles = new UserApplicationRoles();
-              userWithRemoteAppRoles.setAppId(appId);
-              userWithRemoteAppRoles.setOrgUserId(user.getOrgUserId());
-              userWithRemoteAppRoles.setFirstName(user.getFirstName());
-              userWithRemoteAppRoles.setLastName(user.getLastName());
-              userWithRemoteAppRoles.setRoles(convertToRemoteRoleList(user, app));
-              return userWithRemoteAppRoles;
-       }
-
-       private List<RemoteRole> convertToRemoteRoleList(FnUser user, FnApp app) {
-              List<RemoteRole> roleList = new ArrayList<>();
-              SortedSet<FnRole> roleSet = user.getAppEPRoles(app);
-              for (FnRole role : roleSet) {
-                     logger.debug(EELFLoggerDelegate.debugLogger, "In convertToRemoteRoleList() - for user {}, found Name {}", user.getOrgUserId(), role.getRoleName());
-                     RemoteRole rRole = new RemoteRole();
-                     rRole.setId(role.getId());
-                     rRole.setName(role.getRoleName());
-                     roleList.add(rRole);
-              }
-
-              //Get the active roles of user for that application using query
-              List<FnRole> userEpRoleList = fnRoleService.getUserRoleOnUserIdAndAppId(user.getId(), app.getId());
-
-              for (FnRole remoteUserRoleList : userEpRoleList) {
-
-                     RemoteRole remoteRoleListId = roleList.stream().filter(x -> remoteUserRoleList.getId().equals(x.getId()))
-                             .findAny().orElse(null);
-                     if (remoteRoleListId == null) {
-                            logger.debug(EELFLoggerDelegate.debugLogger,
-                                    "Adding the role to the rolelist () - for user {}, found Name {}", user.getOrgUserId(),
-
-                                    remoteUserRoleList.getRoleName());
-                            RemoteRole role = new RemoteRole();
-                            role.setId(remoteUserRoleList.getId());
-                            role.setName(remoteUserRoleList.getRoleName());
-
-                            roleList.add(role);
-                     }
-
-              }
-
-              logger.debug(EELFLoggerDelegate.debugLogger, "rolelist size of the USER() - for user {}, found RoleListSize {}", user.getOrgUserId(), roleList.size());
-
-              return roleList;
-
-
-
-       }
+  private static final String GET_ROLE_FUNCTIONS_OF_USERFOR_ALLTHE_APPLICATIONS =
+      "select\n"
+          + "  distinct ep.function_cd functionCd\n"
+          + "from\n"
+          + "  fn_user_role fu,\n"
+          + "  ep_app_role_function ep,\n"
+          + "  ep_app_function ea\n"
+          + "where\n"
+          + "  fu.role_id = ep.role_id\n"
+          + "  and fu.app_id = ep.app_id\n"
+          + "  and fu.user_id = 'userId'\n"
+          + "  and ea.function_cd = ep.function_cd\n"
+          + "  and exists (\n"
+          + "    select\n"
+          + "      fa.app_id\n"
+          + "    from\n"
+          + "      fn_user fu,\n"
+          + "      fn_user_role ur,\n"
+          + "      fn_app fa\n"
+          + "    where\n"
+          + "      fu.user_id = 'userId'\n"
+          + "      and fu.user_id = ur.user_id\n"
+          + "      and ur.app_id = fa.app_id\n"
+          + "      and fa.enabled = 'Y'\n"
+          + "  )";
+
+  private static final String USER_APP_CATALOG_ROLES =
+      "select\n"
+          + "  A.reqId as reqId,\n"
+          + "  B.requestedRoleId.roleId as requestedRoleId,\n"
+          + "  A.requestStatus as requestStatus,\n"
+          + "  A.appId.appId as appId,\n"
+          + "  (\n"
+          + "    select\n"
+          + "      roleName\n"
+          + "    from\n"
+          + "      FnRole\n"
+          + "    where\n"
+          + "      roleId = B.requestedRoleId.roleId\n"
+          + "  ) as roleName\n"
+          + "from\n"
+          + "  EpUserRolesRequest A\n"
+          + "  left join EpUserRolesRequestDet B on A.reqId = B.reqId.reqId\n"
+          + "where\n"
+          + "  A.userId.userId = :userid\n"
+          + "  and A.appId IN (\n"
+          + "    select\n"
+          + "      appId\n"
+          + "    from\n"
+          + "      FnApp\n"
+          + "    where\n"
+          + "      appName = :appName\n"
+          + "  )\n"
+          + "  and A.requestStatus = 'P'\n";
+
+  private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FnUserRoleService.class);
+
+  private final FnUserRoleDao fnUserRoleDao;
+  private final FnAppService fnAppService;
+  private final FnRoleService fnRoleService;
+  private final FnUserService fnUserService;
+  private final EpUserRolesRequestService epUserRolesRequestService;
+  private final EpUserRolesRequestDetService epUserRolesRequestDetService;
+  private final EntityManager entityManager;
+  private final ApplicationsRestClientService applicationsRestClientService;
+
+  @Autowired
+  public FnUserRoleService(FnUserRoleDao
+      fnUserRoleDao,
+      FnAppService fnAppService,
+      FnRoleService fnRoleService,
+      FnUserService fnUserService,
+      EpUserRolesRequestService epUserRolesRequestService,
+      EpUserRolesRequestDetService epUserRolesRequestDetService,
+      EntityManager entityManager,
+      ApplicationsRestClientService applicationsRestClientService) {
+    this.fnUserRoleDao = fnUserRoleDao;
+    this.fnAppService = fnAppService;
+    this.fnRoleService = fnRoleService;
+    this.fnUserService = fnUserService;
+    this.epUserRolesRequestService = epUserRolesRequestService;
+    this.epUserRolesRequestDetService = epUserRolesRequestDetService;
+    this.entityManager = entityManager;
+    this.applicationsRestClientService = applicationsRestClientService;
+  }
+
+  public List<FnUserRole> getAdminUserRoles(final Long userId, final Long roleId, final Long appId) {
+    return fnUserRoleDao.getAdminUserRoles(userId, roleId, appId).orElse(new ArrayList<>());
+  }
+
+  public boolean isSuperAdmin(final String orgUserId, final Long roleId, final Long appId) {
+    List<FnUserRole> roles = getUserRolesForRoleIdAndAppId(roleId, appId).stream()
+        .filter(role -> role.getUserId().getOrgUserId().equals(orgUserId)).collect(Collectors.toList());
+    return !roles.isEmpty();
+  }
+
+  private List<FnUserRole> getUserRolesForRoleIdAndAppId(final Long roleId, final Long appId) {
+    return Optional.of(fnUserRoleDao.getUserRolesForRoleIdAndAppId(roleId, appId)).orElse(new ArrayList<>());
+  }
+
+  public FnUserRole saveOne(final FnUserRole fnUserRole) {
+    return fnUserRoleDao.save(fnUserRole);
+  }
+
+  public ExternalSystemAccess getExternalRequestAccess() {
+    ExternalSystemAccess res = null;
+    try {
+      res = new ExternalSystemAccess(EPCommonSystemProperties.EXTERNAL_ACCESS_ENABLE,
+          Boolean.parseBoolean(
+              SystemProperties.getProperty(EPCommonSystemProperties.EXTERNAL_ACCESS_ENABLE)));
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "getExternalRequestAccess failed" + e.getMessage());
+    }
+    return res;
+  }
+
+  public List<EPUserAppCatalogRoles> getUserAppCatalogRoles(FnUser userid, String appName) {
+    List<Tuple> tuples = entityManager.createQuery(USER_APP_CATALOG_ROLES, Tuple.class)
+        .setParameter("userid", userid.getUserId())
+        .setParameter("appName", appName)
+        .getResultList();
+    return Optional.of(tuples.stream().map(this::tupleToEPUserAppCatalogRoles).collect(Collectors.toList()))
+        .orElse(new ArrayList<>());
+  }
+
+  private EPUserAppCatalogRoles tupleToEPUserAppCatalogRoles(Tuple tuple) {
+    return new EPUserAppCatalogRoles((Long) tuple.get("reqId"), (Long) tuple.get("requestedRoleId"),
+        (String) tuple.get("roleName"), (String) tuple.get("requestStatus"), (Long) tuple.get("appId"));
+  }
+
+  private boolean postUserRolesToMylogins(AppWithRolesForUser userAppRolesData,
+      ApplicationsRestClientService applicationsRestClientService, Long appId, Long userId)
+      throws JsonProcessingException, HTTPException {
+    boolean result = false;
+    ObjectMapper mapper = new ObjectMapper();
+    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+    String userRolesAsString = mapper.writeValueAsString(userAppRolesData);
+    logger.error(EELFLoggerDelegate.errorLogger,
+        "Should not be reached here, as the endpoint is not defined yet from the Mylogins");
+    applicationsRestClientService.post(AppWithRolesForUser.class, appId, userRolesAsString,
+        String.format("/user/%s/myLoginroles", userId));
+    return result;
+  }
+
+  public FieldsValidator putUserAppRolesRequest(AppWithRolesForUser newAppRolesForUser, FnUser user) {
+    FieldsValidator fieldsValidator = new FieldsValidator();
+    List<FnRole> appRole;
+    try {
+      logger.error(EELFLoggerDelegate.errorLogger,
+          "Should not be reached here, still the endpoint is yet to be defined");
+      boolean result = postUserRolesToMylogins(newAppRolesForUser, applicationsRestClientService,
+          newAppRolesForUser.getAppId(), user.getId());
+      logger.debug(EELFLoggerDelegate.debugLogger, "putUserAppRolesRequest: result {}", result);
+      FnApp app = fnAppService.getById(newAppRolesForUser.getAppId());
+      EpUserRolesRequest epUserRolesRequest = new EpUserRolesRequest();
+      epUserRolesRequest.setCreatedDate(LocalDateTime.now());
+      epUserRolesRequest.setUpdatedDate(LocalDateTime.now());
+      epUserRolesRequest.setUserId(user);
+      epUserRolesRequest.setAppId(app);
+      epUserRolesRequest.setRequestStatus("P");
+      List<RoleInAppForUser> appRoleIdList = newAppRolesForUser.getAppRoles();
+      Set<EpUserRolesRequestDet> appRoleDetails = new LinkedHashSet<>();
+      epUserRolesRequestService.saveOne(epUserRolesRequest);
+      for (RoleInAppForUser userAppRoles : appRoleIdList) {
+        Boolean isAppliedVal = userAppRoles.getIsApplied();
+        if (isAppliedVal) {
+          appRole = fnRoleService
+              .retrieveAppRoleByAppRoleIdAndByAppId(newAppRolesForUser.getAppId(),
+                  userAppRoles.getRoleId());
+          if (!appRole.isEmpty()) {
+            EpUserRolesRequestDet epAppRoleDetail = new EpUserRolesRequestDet();
+            epAppRoleDetail.setRequestedRoleId(appRole.get(0));
+            epAppRoleDetail.setRequestType("P");
+            epAppRoleDetail.setReqId(epUserRolesRequest);
+            epUserRolesRequestDetService.saveOne(epAppRoleDetail);
+          }
+        }
+      }
+      epUserRolesRequest.setEpRequestIdDetail(appRoleDetails);
+      fieldsValidator.setHttpStatusCode((long) HttpServletResponse.SC_OK);
+
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "putUserAppRolesRequest failed", e);
+      fieldsValidator.setHttpStatusCode((long) HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+    }
+    return fieldsValidator;
+  }
+
+  public List<FnRole> importRolesFromRemoteApplication(Long appId) throws HTTPException {
+    FnRole[] appRolesFull = applicationsRestClientService.get(FnRole[].class, appId, "/rolesFull");
+    List<FnRole> rolesList = Arrays.asList(appRolesFull);
+    for (FnRole externalAppRole : rolesList) {
+
+      // Try to find an existing extern role for the app in the local
+      // onap DB. If so, then use its id to update the existing external
+      // application role record.
+      Long externAppId = externalAppRole.getId();
+      FnRole existingAppRole = fnRoleService.getRole(appId, externAppId);
+      if (existingAppRole != null) {
+        logger.debug(EELFLoggerDelegate.debugLogger,
+            String.format(
+                "ecomp role already exists for app=%s; appRoleId=%s. No need to import this one.",
+                appId, externAppId));
+      }
+    }
+
+    return rolesList;
+  }
+
+  public List<UserApplicationRoles> getUsersFromAppEndpoint(Long appId) throws HTTPException {
+    ArrayList<UserApplicationRoles> userApplicationRoles = new ArrayList<>();
+
+    FnApp app = fnAppService.getById(appId);
+    //If local or centralized application
+    if (PortalConstants.PORTAL_APP_ID.equals(appId) || app.getAuthCentral()) {
+      List<FnUser> userList = fnUserService.getActiveUsers();
+      for (FnUser user : userList) {
+        UserApplicationRoles userWithAppRoles = convertToUserApplicationRoles(appId, user, app);
+        if (userWithAppRoles.getRoles() != null && userWithAppRoles.getRoles().size() > 0) {
+          userApplicationRoles.add(userWithAppRoles);
+        }
+      }
+
+    }
+    // remote app
+    else {
+      RemoteUserWithRoles[] remoteUsers;
+      String remoteUsersString = applicationsRestClientService.getIncomingJsonString(appId, "/users");
+
+      remoteUsers = doGetUsers(remoteUsersString);
+
+      userApplicationRoles = new ArrayList<>();
+      for (RemoteUserWithRoles remoteUser : remoteUsers) {
+        UserApplicationRoles userWithRemoteAppRoles = convertToUserApplicationRoles(appId,
+            remoteUser);
+        if (userWithRemoteAppRoles.getRoles() != null
+            && userWithRemoteAppRoles.getRoles().size() > 0) {
+          userApplicationRoles.add(userWithRemoteAppRoles);
+        } else {
+          logger.debug(EELFLoggerDelegate.debugLogger,
+              "User " + userWithRemoteAppRoles.getOrgUserId()
+                  + " doesn't have any roles assigned to any app.");
+        }
+      }
+    }
+
+    return userApplicationRoles;
+  }
+
+  private UserApplicationRoles convertToUserApplicationRoles(Long appId, RemoteUserWithRoles remoteUser) {
+    UserApplicationRoles userWithRemoteAppRoles = new UserApplicationRoles();
+    userWithRemoteAppRoles.setAppId(appId);
+    userWithRemoteAppRoles.setOrgUserId(remoteUser.getOrgUserId());
+    userWithRemoteAppRoles.setFirstName(remoteUser.getFirstName());
+    userWithRemoteAppRoles.setLastName(remoteUser.getLastName());
+    userWithRemoteAppRoles.setRoles(remoteUser.getRoles());
+    return userWithRemoteAppRoles;
+  }
+
+  private RemoteUserWithRoles[] doGetUsers(String remoteUsersString) {
+
+    ObjectMapper mapper = new ObjectMapper();
+    try {
+      return mapper.readValue(remoteUsersString, RemoteUserWithRoles[].class);
+    } catch (IOException e) {
+      logger.error(EELFLoggerDelegate.errorLogger,
+          "doGetUsers : Failed : Unexpected property in incoming JSON",
+          e);
+      logger.error(EELFLoggerDelegate.errorLogger,
+          "doGetUsers : Incoming JSON that caused it --> " + remoteUsersString);
+    }
+
+    return new RemoteUserWithRoles[0];
+  }
+
+  private UserApplicationRoles convertToUserApplicationRoles(Long appId, FnUser user, FnApp app) {
+    UserApplicationRoles userWithRemoteAppRoles = new UserApplicationRoles();
+    userWithRemoteAppRoles.setAppId(appId);
+    userWithRemoteAppRoles.setOrgUserId(user.getOrgUserId());
+    userWithRemoteAppRoles.setFirstName(user.getFirstName());
+    userWithRemoteAppRoles.setLastName(user.getLastName());
+    userWithRemoteAppRoles.setRoles(convertToRemoteRoleList(user, app));
+    return userWithRemoteAppRoles;
+  }
+
+  private List<RemoteRole> convertToRemoteRoleList(FnUser user, FnApp app) {
+    List<RemoteRole> roleList = new ArrayList<>();
+    SortedSet<FnRole> roleSet = user.getAppEPRoles(app);
+    for (FnRole role : roleSet) {
+      logger.debug(EELFLoggerDelegate.debugLogger,
+          "In convertToRemoteRoleList() - for user {}, found Name {}", user.getOrgUserId(),
+          role.getRoleName());
+      RemoteRole rRole = new RemoteRole();
+      rRole.setId(role.getId());
+      rRole.setName(role.getRoleName());
+      roleList.add(rRole);
+    }
+
+    //Get the active roles of user for that application using query
+    List<FnRole> userEpRoleList = fnRoleService.getUserRoleOnUserIdAndAppId(user.getId(), app.getId());
+
+    for (FnRole remoteUserRoleList : userEpRoleList) {
+
+      RemoteRole remoteRoleListId = roleList.stream()
+          .filter(x -> remoteUserRoleList.getId().equals(x.getId()))
+          .findAny().orElse(null);
+      if (remoteRoleListId == null) {
+        logger.debug(EELFLoggerDelegate.debugLogger,
+            "Adding the role to the rolelist () - for user {}, found Name {}",
+            user.getOrgUserId(),
+
+            remoteUserRoleList.getRoleName());
+        RemoteRole role = new RemoteRole();
+        role.setId(remoteUserRoleList.getId());
+        role.setName(remoteUserRoleList.getRoleName());
+
+        roleList.add(role);
+      }
+
+    }
+
+    logger.debug(EELFLoggerDelegate.debugLogger,
+        "rolelist size of the USER() - for user {}, found RoleListSize {}", user.getOrgUserId(),
+        roleList.size());
+    return roleList;
+  }
+
+  public List getRoleFunctionsOfUserforAlltheApplications(Long userId) {
+    List<Tuple> tuples = entityManager
+        .createQuery(GET_ROLE_FUNCTIONS_OF_USERFOR_ALLTHE_APPLICATIONS, Tuple.class)
+        .setParameter("userid", userId)
+        .getResultList();
+    return Optional.of(tuples.stream().map(tuple -> tuple.get("functionCd")).collect(Collectors.toList()))
+        .orElse(new ArrayList<>());
+  }
+
+  public List<FnUserRole> retrieveByAppIdAndUserId(final Long appId, final String userId) {
+    return Optional.of(fnUserRoleDao.retrieveByAppIdAndUserId(appId, userId)).orElse(new ArrayList<>());
+  }
+
+  public String updateRemoteUserProfile(String orgUserId, long appId) {
+    ObjectMapper mapper = new ObjectMapper();
+    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+    FnUser client = fnUserService.loadUserByUsername(orgUserId);
+    FnUser newUser = new FnUser();
+    newUser.setActiveYn(client.getActiveYn());
+    newUser.setFirstName(client.getFirstName());
+    newUser.setLastName(client.getLastName());
+    newUser.setLoginId(client.getLoginId());
+    newUser.setLoginPwd(client.getLoginPwd());
+    newUser.setMiddleName(client.getMiddleName());
+    newUser.setEmail(client.getEmail());
+    newUser.setOrgUserId(client.getLoginId());
+    try {
+      String userAsString = mapper.writeValueAsString(newUser);
+      List<FnApp> appList = fnAppService.getUserRemoteApps(client.getId().toString());
+      // applicationsRestClientService.post(EPUser.class, appId,
+      // userAsString, String.format("/user", orgUserId));
+      for (FnApp eachApp : appList) {
+        try {
+          applicationsRestClientService.post(FnUser.class, eachApp.getId(), userAsString,
+              String.format("/user/%s", orgUserId));
+        } catch (Exception e) {
+          logger.error(EELFLoggerDelegate.errorLogger, "Failed to update user: " + client.getOrgUserId()
+              + " in remote app. appId = " + eachApp.getId());
+        }
+      }
+    } catch (Exception e) {
+      logger.error(EELFLoggerDelegate.errorLogger, "updateRemoteUserProfile failed", e);
+      return "failure";
+    }
+    return "success";
+  }
+
+  public void deleteById(final Long id) {
+    fnUserRoleDao.deleteById(id);
+  }
 }