package org.atricore.idbus.idojos.virtualidentitystore.rule;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.atricore.idbus.idojos.virtualidentitystore.UserMappingRule;
import org.atricore.idbus.idojos.virtualidentitystore.BaseUserMappingRule;
import org.atricore.idbus.kernel.main.authn.BaseUser;
import org.atricore.idbus.kernel.main.authn.BaseUserImpl;
import org.atricore.idbus.kernel.main.authn.SSONameValuePair;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
/**
* @author <a href="mailto:gbrigand@josso.org">Gianluca Brigandi</a>
* @version $Id: MergeProperties.java 1644 2010-07-27 19:31:39Z sgonzalez $
* @org.apache.xbean.XBean element="merge-properties"
* <p/>
* Create a set of virtual user properties by aggregating user properties from source user entries.
*/
public class MergeProperties extends BaseUserMappingRule implements UserMappingRule {
private static final Log logger = LogFactory.getLog(MergeProperties.class);
public BaseUser join(Collection<BaseUser> selectedUsers) {
BaseUser jointUser;
logger.debug("Joining properties from users " + selectedUsers);
BaseUser firstUser = selectedUsers.iterator().next();
jointUser = new BaseUserImpl(firstUser.getName());
for (Iterator<BaseUser> baseUserIterator = selectedUsers.iterator(); baseUserIterator.hasNext();) {
BaseUser baseUser = baseUserIterator.next();
List<SSONameValuePair> properties = Arrays.asList(baseUser.getProperties());
for (Iterator<SSONameValuePair> ssoNameValuePairIterator = properties.iterator(); ssoNameValuePairIterator.hasNext();) {
SSONameValuePair ssoNameValuePair = ssoNameValuePairIterator.next();
jointUser.addProperty(ssoNameValuePair);
}
}
return jointUser;
}
}