merge with branch issue-439

This commit is contained in:
Sebastian Sdorra
2013-09-13 16:20:03 +02:00
2 changed files with 32 additions and 9 deletions

View File

@@ -55,6 +55,8 @@ import javax.xml.bind.annotation.XmlRootElement;
/** /**
* Organizes users into a group for easier permissions management. * Organizes users into a group for easier permissions management.
*
* TODO for 2.0: Use a set instead of a list for members
* *
* @author Sebastian Sdorra * @author Sebastian Sdorra
*/ */

View File

@@ -35,6 +35,8 @@ package sonia.scm.group;
//~--- non-JDK imports -------------------------------------------------------- //~--- non-JDK imports --------------------------------------------------------
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Provider; import com.google.inject.Provider;
import com.google.inject.Singleton; import com.google.inject.Singleton;
@@ -87,7 +89,7 @@ public class DefaultGroupManager extends AbstractGroupManager
*/ */
@Inject @Inject
public DefaultGroupManager(GroupDAO groupDAO, public DefaultGroupManager(GroupDAO groupDAO,
Provider<Set<GroupListener>> groupListenerProvider) Provider<Set<GroupListener>> groupListenerProvider)
{ {
this.groupDAO = groupDAO; this.groupDAO = groupDAO;
this.groupListenerProvider = groupListenerProvider; this.groupListenerProvider = groupListenerProvider;
@@ -130,7 +132,7 @@ public class DefaultGroupManager extends AbstractGroupManager
if (logger.isInfoEnabled()) if (logger.isInfoEnabled())
{ {
logger.info("create group {} of type {}", group.getName(), logger.info("create group {} of type {}", group.getName(),
group.getType()); group.getType());
} }
SecurityUtil.assertIsAdmin(); SecurityUtil.assertIsAdmin();
@@ -140,6 +142,7 @@ public class DefaultGroupManager extends AbstractGroupManager
throw new GroupAllreadyExistExeption(); throw new GroupAllreadyExistExeption();
} }
removeDuplicateMembers(group);
group.setCreationDate(System.currentTimeMillis()); group.setCreationDate(System.currentTimeMillis());
fireEvent(group, HandlerEvent.BEFORE_CREATE); fireEvent(group, HandlerEvent.BEFORE_CREATE);
groupDAO.add(group); groupDAO.add(group);
@@ -161,7 +164,7 @@ public class DefaultGroupManager extends AbstractGroupManager
if (logger.isInfoEnabled()) if (logger.isInfoEnabled())
{ {
logger.info("delete group {} of type {}", group.getName(), logger.info("delete group {} of type {}", group.getName(),
group.getType()); group.getType());
} }
SecurityUtil.assertIsAdmin(); SecurityUtil.assertIsAdmin();
@@ -212,7 +215,7 @@ public class DefaultGroupManager extends AbstractGroupManager
if (logger.isInfoEnabled()) if (logger.isInfoEnabled())
{ {
logger.info("modify group {} of type {}", group.getName(), logger.info("modify group {} of type {}", group.getName(),
group.getType()); group.getType());
} }
SecurityUtil.assertIsAdmin(); SecurityUtil.assertIsAdmin();
@@ -221,6 +224,7 @@ public class DefaultGroupManager extends AbstractGroupManager
if (groupDAO.contains(name)) if (groupDAO.contains(name))
{ {
removeDuplicateMembers(group);
group.setLastModified(System.currentTimeMillis()); group.setLastModified(System.currentTimeMillis());
fireEvent(group, HandlerEvent.BEFORE_MODIFY); fireEvent(group, HandlerEvent.BEFORE_MODIFY);
groupDAO.modify(group); groupDAO.modify(group);
@@ -247,7 +251,7 @@ public class DefaultGroupManager extends AbstractGroupManager
if (logger.isInfoEnabled()) if (logger.isInfoEnabled())
{ {
logger.info("refresh group {} of type {}", group.getName(), logger.info("refresh group {} of type {}", group.getName(),
group.getType()); group.getType());
} }
SecurityUtil.assertIsAdmin(); SecurityUtil.assertIsAdmin();
@@ -279,7 +283,7 @@ public class DefaultGroupManager extends AbstractGroupManager
} }
return SearchUtil.search(searchRequest, groupDAO.getAll(), return SearchUtil.search(searchRequest, groupDAO.getAll(),
new TransformFilter<Group>() new TransformFilter<Group>()
{ {
@Override @Override
public Group accept(Group group) public Group accept(Group group)
@@ -287,7 +291,7 @@ public class DefaultGroupManager extends AbstractGroupManager
Group result = null; Group result = null;
if (SearchUtil.matchesOne(searchRequest, group.getName(), if (SearchUtil.matchesOne(searchRequest, group.getName(),
group.getDescription())) group.getDescription()))
{ {
result = group.clone(); result = group.clone();
} }
@@ -373,12 +377,12 @@ public class DefaultGroupManager extends AbstractGroupManager
*/ */
@Override @Override
public Collection<Group> getAll(Comparator<Group> comparator, int start, public Collection<Group> getAll(Comparator<Group> comparator, int start,
int limit) int limit)
{ {
SecurityUtil.assertIsAdmin(); SecurityUtil.assertIsAdmin();
return Util.createSubCollection(groupDAO.getAll(), comparator, return Util.createSubCollection(groupDAO.getAll(), comparator,
new CollectionAppender<Group>() new CollectionAppender<Group>()
{ {
@Override @Override
public void append(Collection<Group> collection, Group item) public void append(Collection<Group> collection, Group item)
@@ -439,6 +443,23 @@ public class DefaultGroupManager extends AbstractGroupManager
return groupDAO.getLastModified(); return groupDAO.getLastModified();
} }
//~--- methods --------------------------------------------------------------
/**
* Remove duplicate members from group.
* Have a look at issue #439
*
*
* @param group group
*/
private void removeDuplicateMembers(Group group)
{
List<String> members =
Lists.newArrayList(ImmutableSet.copyOf(group.getMembers()));
group.setMembers(members);
}
//~--- fields --------------------------------------------------------------- //~--- fields ---------------------------------------------------------------
/** Field description */ /** Field description */