/** * Gets a list users by their logins. The result does NOT contain {@code null} values for users not found, so * the size of result may be less than the number of keys. * A single user is returned if input keys contain multiple occurrences of a key. * <p>Contrary to {@link #selectByLogins(DbSession, Collection)}, results are in the same order as input keys.</p> */ public List<UserDto> selectByOrderedLogins(DbSession session, Collection<String> logins) { List<UserDto> unordered = selectByLogins(session, logins); return logins.stream() .map(new LoginToUser(unordered)) .filter(Objects::nonNull) .collect(Collectors.toList()); }
private void validateLogin(SettingData data) { try (DbSession dbSession = dbClient.openSession(false)) { List<UserDto> users = dbClient.userDao().selectByLogins(dbSession, data.values).stream().filter(UserDto::isActive).collect(Collectors.toList()); checkRequest(data.values.size() == users.size(), "Error when validating login setting with key '%s' and values [%s]. A value is not a valid login.", data.key, data.values.stream().collect(Collectors.joining(", "))); } } }
private List<String> getLogins(DbSession dbSession, @Nullable List<String> assigneeLogins) { List<String> userLogins = new ArrayList<>(); for (String login : ofNullable(assigneeLogins).orElse(emptyList())) { if (LOGIN_MYSELF.equals(login)) { if (userSession.getLogin() == null) { userLogins.add(UNKNOWN); } else { userLogins.add(userSession.getLogin()); } } else { userLogins.add(login); } } List<UserDto> userDtos = dbClient.userDao().selectByLogins(dbSession, userLogins); List<String> assigneeUuid = userDtos.stream().map(UserDto::getUuid).collect(toList()); if ((assigneeLogins != null) && firstNonNull(assigneeUuid, emptyList()).isEmpty()) { assigneeUuid = ImmutableList.of("non-existent-uuid"); } return assigneeUuid; }
@Test public void selectUsersByLogins_empty_logins() { // no need to access db Collection<UserDto> users = underTest.selectByLogins(session, emptyList()); assertThat(users).isEmpty(); }
private List<UserDto> findUsers(DbSession dbSession, PermissionQuery query, PermissionTemplateDto template) { List<String> orderedLogins = dbClient.permissionTemplateDao().selectUserLoginsByQueryAndTemplate(dbSession, query, template.getId()); return Ordering.explicit(orderedLogins).onResultOf(UserDto::getLogin).immutableSortedCopy(dbClient.userDao().selectByLogins(dbSession, orderedLogins)); }
@Override public void handle(Request request, Response response) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { OrganizationDto organization = getOrganization(dbSession, request.param("organization")); userSession.checkMembership(organization); UserQuery.Builder userQuery = buildUserQuery(request, organization); SearchOptions searchOptions = buildSearchOptions(request); SearchResult<UserDoc> searchResults = userIndex.search(userQuery.build(), searchOptions); List<String> orderedLogins = searchResults.getDocs().stream().map(UserDoc::login).collect(MoreCollectors.toList()); List<UserDto> users = dbClient.userDao().selectByLogins(dbSession, orderedLogins).stream() .sorted(Ordering.explicit(orderedLogins).onResultOf(UserDto::getLogin)) .collect(MoreCollectors.toList()); Multiset<String> groupCountByLogin = null; if (userSession.hasPermission(ADMINISTER, organization)) { groupCountByLogin = dbClient.groupMembershipDao().countGroupByLoginsAndOrganization(dbSession, orderedLogins, organization.getUuid()); } Common.Paging wsPaging = buildWsPaging(request, searchResults); SearchMembersWsResponse wsResponse = buildResponse(users, wsPaging, groupCountByLogin); writeProtobuf(wsResponse, request, response); } }
@Test public void selectUsersByLogins() { db.users().insertUser(user -> user.setLogin("user1")); db.users().insertUser(user -> user.setLogin("user2")); db.users().insertUser(user -> user.setLogin("inactive_user").setActive(false)); Collection<UserDto> users = underTest.selectByLogins(session, asList("user1", "inactive_user", "other")); assertThat(users).extracting("login").containsExactlyInAnyOrder("user1", "inactive_user"); }
/** * Gets a list users by their logins. The result does NOT contain {@code null} values for users not found, so * the size of result may be less than the number of keys. * A single user is returned if input keys contain multiple occurrences of a key. * <p>Contrary to {@link #selectByLogins(DbSession, Collection)}, results are in the same order as input keys.</p> */ public List<UserDto> selectByOrderedLogins(DbSession session, Collection<String> logins) { List<UserDto> unordered = selectByLogins(session, logins); return from(logins).transform(new LoginToUser(unordered)).filter(Predicates.notNull()).toList(); }
/** * @deprecated since 6.0 please use {@link #selectByLogins(DbSession, Collection)} instead */ @Deprecated public List<UserDto> selectByLogins(Collection<String> logins) { try (DbSession session = mybatis.openSession(false)) { return selectByLogins(session, logins); } }
private void validateLogin(SettingData data) { try (DbSession dbSession = dbClient.openSession(false)) { List<UserDto> users = dbClient.userDao().selectByLogins(dbSession, data.values).stream().filter(UserDto::isActive).collect(Collectors.toList()); checkRequest(data.values.size() == users.size(), "Error when validating login setting with key '%s' and values [%s]. A value is not a valid login.", data.key, data.values.stream().collect(Collectors.joining(", "))); } } }
private List<String> getLogins(Request request) { List<String> assigneeLogins = request.paramAsStrings(PARAM_ASSIGNEES); List<String> onlyLogins = new ArrayList<>(); for (String login : ofNullable(assigneeLogins).orElse(emptyList())) { if (LOGIN_MYSELF.equals(login)) { if (userSession.getLogin() == null) { onlyLogins.add(UNKNOWN); } else { onlyLogins.add(userSession.getLogin()); } } else { onlyLogins.add(login); } } try (DbSession dbSession = dbClient.openSession(false)) { List<UserDto> userDtos = dbClient.userDao().selectByLogins(dbSession, onlyLogins); List<String> assigneeUuid = userDtos.stream().map(UserDto::getUuid).collect(toList()); if ((assigneeLogins != null) && firstNonNull(assigneeUuid, emptyList()).isEmpty()) { assigneeUuid = ImmutableList.of("non-existent-uuid"); } return assigneeUuid; } }
@Override public List<User> findByLogins(List<String> logins) { try (DbSession dbSession = dbClient.openSession(false)) { List<UserDto> dtos = dbClient.userDao().selectByLogins(dbSession, logins); return toUsers(dtos); } }
private List<UserDto> findUsers(DbSession dbSession, PermissionQuery query, PermissionTemplateDto template) { List<String> orderedLogins = dbClient.permissionTemplateDao().selectUserLoginsByQueryAndTemplate(dbSession, query, template.getId()); return Ordering.explicit(orderedLogins).onResultOf(UserDto::getLogin).immutableSortedCopy(dbClient.userDao().selectByLogins(dbSession, orderedLogins)); }
@Override public void handle(Request request, Response response) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { OrganizationDto organization = getOrganization(dbSession, request.param("organization")); UserQuery.Builder userQuery = buildUserQuery(request, organization); SearchOptions searchOptions = buildSearchOptions(request); SearchResult<UserDoc> searchResults = userIndex.search(userQuery.build(), searchOptions); List<String> orderedLogins = searchResults.getDocs().stream().map(UserDoc::login).collect(MoreCollectors.toList()); List<UserDto> users = dbClient.userDao().selectByLogins(dbSession, orderedLogins).stream() .sorted(Ordering.explicit(orderedLogins).onResultOf(UserDto::getLogin)) .collect(MoreCollectors.toList()); Multiset<String> groupCountByLogin = null; if (userSession.hasPermission(OrganizationPermission.ADMINISTER, organization)) { groupCountByLogin = dbClient.groupMembershipDao().countGroupByLoginsAndOrganization(dbSession, orderedLogins, organization.getUuid()); } Common.Paging wsPaging = buildWsPaging(request, searchResults); SearchMembersWsResponse wsResponse = buildResponse(users, wsPaging, groupCountByLogin); writeProtobuf(wsResponse, request, response); } }