/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.security.userstore;
import java.util.HashSet;
import java.util.Set;
import com.enonic.cms.core.security.group.GroupEntity;
import com.enonic.cms.core.security.group.GroupKey;
/**
* A class that calculates the difference between a set of group keys for requested memberships and a set of group keys for existing
* membership provided add and remove commands that can be used to synchronize the memberships with the UserStoreService.
*/
public class GroupMembershipDiffResolver
{
private GroupEntity groupToUpdate;
private Set<GroupKey> existingMemberships;
public GroupMembershipDiffResolver( GroupEntity groupToUpdate )
{
this.groupToUpdate = groupToUpdate;
setExistingMemberships();
}
private void setExistingMemberships()
{
if ( existingMemberships == null )
{
existingMemberships = new HashSet<GroupKey>();
}
for ( GroupEntity existingMembership : groupToUpdate.getMemberships( true ) )
{
existingMemberships.add( existingMembership.getGroupKey() );
}
}
public Set<GroupKey> resolveGroupsToJoin( Set<GroupKey> requestedMemberships )
{
final Set<GroupKey> groupsToAddTo = new HashSet<GroupKey>( requestedMemberships );
groupsToAddTo.removeAll( existingMemberships );
return groupsToAddTo;
}
public Set<GroupKey> resolveGroupsToLeave( Set<GroupKey> requestedMemberships )
{
final Set<GroupKey> groupsToRemoveFrom = new HashSet<GroupKey>( existingMemberships );
groupsToRemoveFrom.removeAll( requestedMemberships );
return groupsToRemoveFrom;
}
}