
org.sonar.server.user.GroupMembershipFinder Maven / Gradle / Ivy
/*
* SonarQube
* Copyright (C) 2009-2016 SonarSource SA
* mailto:contact AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.server.user;
import java.util.List;
import org.sonar.api.server.ServerSide;
import org.sonar.db.user.GroupMembershipDao;
import org.sonar.db.user.GroupMembershipDto;
import org.sonar.db.user.GroupMembershipQuery;
import org.sonar.db.user.UserDao;
import org.sonar.db.user.UserDto;
import org.sonar.server.exceptions.NotFoundException;
import static com.google.common.collect.Lists.newArrayList;
@ServerSide
public class GroupMembershipFinder {
public static class Membership {
private List groups;
private boolean hasMoreResults;
private Membership(List groups, boolean hasMoreResults) {
this.groups = groups;
this.hasMoreResults = hasMoreResults;
}
public List groups() {
return groups;
}
public boolean hasMoreResults() {
return hasMoreResults;
}
}
private final UserDao userDao;
private final GroupMembershipDao groupMembershipDao;
public GroupMembershipFinder(UserDao userDao, GroupMembershipDao groupMembershipDao) {
this.userDao = userDao;
this.groupMembershipDao = groupMembershipDao;
}
public Membership find(GroupMembershipQuery query) {
Long userId = userId(query.login());
int pageSize = query.pageSize();
int pageIndex = query.pageIndex();
int offset = (pageIndex - 1) * pageSize;
// Add one to page size in order to be able to know if there's more results or not
int limit = pageSize + 1;
List dtos = groupMembershipDao.selectGroups(query, userId, offset, limit);
boolean hasMoreResults = false;
if (dtos.size() == limit) {
hasMoreResults = true;
// Removed last entry as it's only need to know if there more results or not
dtos.remove(dtos.size() - 1);
}
return new Membership(toGroupMembership(dtos), hasMoreResults);
}
private Long userId(String login) {
UserDto userDto = userDao.selectActiveUserByLogin(login);
if (userDto == null) {
throw new NotFoundException("User '" + login + "' does not exists.");
}
return userDto.getId();
}
private static List toGroupMembership(List dtos) {
List groups = newArrayList();
for (GroupMembershipDto dto : dtos) {
groups.add(new GroupMembership()
.setId(dto.getId())
.setName(dto.getName())
.setDescription(dto.getDescription())
.setMember(dto.getUserId() != null));
}
return groups;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy