package org.josso.gateway.identity.service.store.virtual; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.josso.auth.Credential; import org.josso.gateway.identity.service.BaseRole; import org.josso.gateway.identity.service.BaseUser; /** * @author <a href="mailto:gbrigand@josso.org">Gianluca Brigandi</a> * @version $Id: RuleBasedIdentityDataMappingPolicy.java 1644 2010-07-27 19:31:39Z sgonzalez $ * @org.apache.xbean.XBean element="rule-based-mapping-policy" * <p/> * An Identity Data Mapping Policy implementation which delegates identity mapping concerns to entity-specific rules. * There are 4 types of rules : * <p/> * a. User Mapping rules for selecting, joining, transforming and validating user entries. * b. Role Mapping rules for selecting, joining, transforming and validating user role entries. * c. Credential Mapping rules for selecting, joining, transforming and validating user credential entries. * d. User Identifier Mapping rules for selecting, joining, transforming and validating user identification entries. */ public class RuleBasedIdentityDataMappingPolicy implements IdentityDataMappingPolicy { private List<UserMappingRule> userMappingRules; private List<RoleMappingRule> roleMappingRules; private List<CredentialMappingRule> credentialMappingRules; private List<UIDMappingRule> uidMappingRules; private List<BindMappingRule> bindMappingRules; private List<UserExistsMappingRule> userExistsMappingRules; public Collection<BaseUser> selectUser(Collection<BaseUser> sourceUsers) throws VirtualIdentityStoreException { Collection<BaseUser> selectedUsers = sourceUsers; for (Iterator<UserMappingRule> userMappingRulesIterator = userMappingRules.iterator(); userMappingRulesIterator.hasNext();) { UserMappingRule userMappingRule = userMappingRulesIterator.next(); Collection<BaseUser> users = userMappingRule.select(selectedUsers); if (users != null) { selectedUsers = users; } } return selectedUsers; } public BaseUser joinUsers(Collection<BaseUser> selectedUsers) throws VirtualIdentityStoreException { BaseUser jointUser = null; for (Iterator<UserMappingRule> userMappingRulesIterator = userMappingRules.iterator(); userMappingRulesIterator.hasNext();) { UserMappingRule userMappingRule = userMappingRulesIterator.next(); jointUser = userMappingRule.join(selectedUsers); if (jointUser != null) break; } return jointUser; } public BaseUser transformUser(BaseUser jointUser) throws VirtualIdentityStoreException { BaseUser transformedUser = jointUser; for (Iterator<UserMappingRule> userMappingRulesIterator = userMappingRules.iterator(); userMappingRulesIterator.hasNext();) { UserMappingRule userMappingRule = userMappingRulesIterator.next(); BaseUser user; user = userMappingRule.transform(transformedUser); if (user != null) transformedUser = user; } return transformedUser; } public void validateUser(BaseUser transformedUser) throws VirtualIdentityStoreException { for (Iterator<UserMappingRule> userMappingRulesIterator = userMappingRules.iterator(); userMappingRulesIterator.hasNext();) { UserMappingRule userMappingRule = userMappingRulesIterator.next(); userMappingRule.validate(transformedUser); } } public Collection<BaseRole> selectRoles(Collection<BaseRole> sourceRoles) throws VirtualIdentityStoreException { Collection<BaseRole> selectedRoles = sourceRoles; for (Iterator<RoleMappingRule> roleMappingRulesIterator = roleMappingRules.iterator(); roleMappingRulesIterator.hasNext();) { RoleMappingRule roleMappingRule = roleMappingRulesIterator.next(); Collection<BaseRole> roles = roleMappingRule.select(selectedRoles); if (roles != null) { selectedRoles = roles; } } return selectedRoles; } public Collection<BaseRole> joinRoles(Collection<BaseRole> selectedRoles) throws VirtualIdentityStoreException { Collection<BaseRole> jointRoles = selectedRoles; for (Iterator<RoleMappingRule> roleMappingRulesIterator = roleMappingRules.iterator(); roleMappingRulesIterator.hasNext();) { RoleMappingRule roleMappingRule = roleMappingRulesIterator.next(); Collection<BaseRole> roles = roleMappingRule.join(selectedRoles); if (roles != null) { jointRoles = roles; } } return jointRoles; } public Collection<BaseRole> transformRoles(Collection<BaseRole> jointRoles) throws VirtualIdentityStoreException { Collection<BaseRole> transformedRoles = jointRoles; for (Iterator<RoleMappingRule> roleMappingRulesIterator = roleMappingRules.iterator(); roleMappingRulesIterator.hasNext();) { RoleMappingRule roleMappingRule = roleMappingRulesIterator.next(); Collection<BaseRole> roles; roles = roleMappingRule.transform(transformedRoles); if (roles != null) { transformedRoles = roles; } } return transformedRoles; } public void validateRoles(Collection<BaseRole> transformedRoles) throws VirtualIdentityStoreException { for (Iterator<RoleMappingRule> roleMappingRulesIterator = roleMappingRules.iterator(); roleMappingRulesIterator.hasNext();) { RoleMappingRule roleMappingRule = roleMappingRulesIterator.next(); roleMappingRule.validate(transformedRoles); } } public Collection<Credential> selectCredentials(Collection<Credential> sourceCredentials) throws VirtualIdentityStoreException { Collection<Credential> selectedCredentials = sourceCredentials; for (Iterator<CredentialMappingRule> credentialMappingRulesIterator = credentialMappingRules.iterator(); credentialMappingRulesIterator.hasNext();) { CredentialMappingRule credentialMappingRule = credentialMappingRulesIterator.next(); Collection<Credential> credentials = credentialMappingRule.select(selectedCredentials); if (credentials != null) { selectedCredentials = credentials; } } return selectedCredentials; } public Collection<Credential> joinCredentials(Collection<Credential> selectedCredentials) throws VirtualIdentityStoreException { Collection<Credential> jointCredentials = selectedCredentials; for (Iterator<CredentialMappingRule> credentialMappingRulesIterator = credentialMappingRules.iterator(); credentialMappingRulesIterator.hasNext();) { CredentialMappingRule credentialMappingRule = credentialMappingRulesIterator.next(); Collection<Credential> credentials = credentialMappingRule.join(selectedCredentials); if (credentials != null) { jointCredentials = credentials; } } return jointCredentials; } public Collection<Credential> transformCredentials(Collection<Credential> jointCredentials) throws VirtualIdentityStoreException { Collection<Credential> transformedCredentials = jointCredentials; for (Iterator<CredentialMappingRule> credentialMappingRulesIterator = credentialMappingRules.iterator(); credentialMappingRulesIterator.hasNext();) { CredentialMappingRule credentialMappingRule = credentialMappingRulesIterator.next(); Collection<Credential> credentials; credentials = credentialMappingRule.transform(transformedCredentials); if (credentials != null) { transformedCredentials = credentials; } } return transformedCredentials; } public void validateCredentials(Collection<Credential> transformedCredentials) throws VirtualIdentityStoreException { for (Iterator<CredentialMappingRule> credentialMappingRulesIterator = credentialMappingRules.iterator(); credentialMappingRulesIterator.hasNext();) { CredentialMappingRule credentialMappingRule = credentialMappingRulesIterator.next(); credentialMappingRule.validate(transformedCredentials); } } public Collection<String> selectUID(Collection<String> sourceUIDs) { Collection<String> selectedUIDs = sourceUIDs; for (Iterator<UIDMappingRule> uidMappingRulesIterator = uidMappingRules.iterator(); uidMappingRulesIterator.hasNext();) { UIDMappingRule uidMappingRule = uidMappingRulesIterator.next(); Collection<String> uids = uidMappingRule.select(selectedUIDs); if (uids != null) { selectedUIDs = uids; } } return selectedUIDs; } public String joinUIDs(Collection<String> selectedUIDs) { String jointUID = null; for (Iterator<UIDMappingRule> uidMappingRulesIterator = uidMappingRules.iterator(); uidMappingRulesIterator.hasNext();) { UIDMappingRule uidMappingRule = uidMappingRulesIterator.next(); String uid = uidMappingRule.join(selectedUIDs); if (uid != null) { jointUID = uid; break; } } return jointUID; } public String transformUID(String jointUID) { String transformedUID = jointUID; for (Iterator<UIDMappingRule> uidMappingRulesIterator = uidMappingRules.iterator(); uidMappingRulesIterator.hasNext();) { UIDMappingRule uidMappingRule = uidMappingRulesIterator.next(); String uid; uid = uidMappingRule.transform(transformedUID); if (uid != null) transformedUID = uid; } return transformedUID; } public void validateUID(String transformedUID) { for (Iterator<UIDMappingRule> uidMappingRulesIterator = uidMappingRules.iterator(); uidMappingRulesIterator.hasNext();) { UIDMappingRule uidMappingRule = uidMappingRulesIterator.next(); uidMappingRule.validate(transformedUID); } } public Collection<BindOutcome> selectBindOutcomes(Collection<BindOutcome> sourceOutcomes) { Collection<BindOutcome> selectedOutcomes = sourceOutcomes; for (Iterator<BindMappingRule> bindMappingRulesIterator = bindMappingRules.iterator(); bindMappingRulesIterator.hasNext();) { BindMappingRule bindMappingRule = bindMappingRulesIterator.next(); Collection<BindOutcome> bindOutcomes = bindMappingRule.select(selectedOutcomes); if (bindOutcomes != null) { selectedOutcomes = bindOutcomes; } } return selectedOutcomes; } public BindOutcome joinBindOutcomes(Collection<BindOutcome> selectedOutcomes) { BindOutcome jointOutcome = null; for (Iterator<BindMappingRule> bindMappingRulesIterator = bindMappingRules.iterator(); bindMappingRulesIterator.hasNext();) { BindMappingRule bindMappingRule = bindMappingRulesIterator.next(); jointOutcome = bindMappingRule.join(selectedOutcomes); if (jointOutcome != null) break; } return jointOutcome; } public BindOutcome transformBindOutcome(BindOutcome jointEntry) { BindOutcome transformedOutcome = jointEntry; for (Iterator<BindMappingRule> bindMappingRulesIterator = bindMappingRules.iterator(); bindMappingRulesIterator.hasNext();) { BindMappingRule bindMappingRule = bindMappingRulesIterator.next(); BindOutcome bindOutcome; bindOutcome = bindMappingRule.transform(transformedOutcome); if (bindOutcome != null) transformedOutcome = bindOutcome; } return transformedOutcome; } public void validateBindOutcome(BindOutcome transformedEntry) { for (Iterator<BindMappingRule> bindMappingRulesIterator = bindMappingRules.iterator(); bindMappingRulesIterator.hasNext();) { BindMappingRule bindMappingRule = bindMappingRulesIterator.next(); bindMappingRule.validate(transformedEntry); } } public Collection<UserExistsOutcome> selectUserExistsOutcomes(Collection<UserExistsOutcome> sourceOutcomes) { Collection<UserExistsOutcome> selectedOutcomes = sourceOutcomes; for (Iterator<UserExistsMappingRule> userExistsMappingRulesIterator = userExistsMappingRules.iterator(); userExistsMappingRulesIterator.hasNext();) { UserExistsMappingRule userExistsMappingRule = userExistsMappingRulesIterator.next(); Collection<UserExistsOutcome> userExistsOutcomes = userExistsMappingRule.select(selectedOutcomes); if (userExistsOutcomes != null) { selectedOutcomes = userExistsOutcomes; } } return selectedOutcomes; } public UserExistsOutcome joinUserExistsOutcomes(Collection<UserExistsOutcome> selectedOutcomes) { UserExistsOutcome jointOutcome = null; for (Iterator<UserExistsMappingRule> userExistsMappingRulesIterator = userExistsMappingRules.iterator(); userExistsMappingRulesIterator.hasNext();) { UserExistsMappingRule userExistsMappingRule = userExistsMappingRulesIterator.next(); jointOutcome = userExistsMappingRule.join(selectedOutcomes); if (jointOutcome != null) break; } return jointOutcome; } public UserExistsOutcome transformUserExistsOutcome(UserExistsOutcome jointEntry) { UserExistsOutcome transformedOutcome = jointEntry; for (Iterator<UserExistsMappingRule> userExistsMappingRulesIterator = userExistsMappingRules.iterator(); userExistsMappingRulesIterator.hasNext();) { UserExistsMappingRule userExistsMappingRule = userExistsMappingRulesIterator.next(); UserExistsOutcome userExistsOutcome; userExistsOutcome = userExistsMappingRule.transform(transformedOutcome); if (userExistsOutcome != null) transformedOutcome = userExistsOutcome; } return transformedOutcome; } public void validateUserExistsOutcome(UserExistsOutcome transformedEntry) { for (Iterator<UserExistsMappingRule> userExistsMappingRulesIterator = userExistsMappingRules.iterator(); userExistsMappingRulesIterator.hasNext();) { UserExistsMappingRule userExistsMappingRule = userExistsMappingRulesIterator.next(); userExistsMappingRule.validate(transformedEntry); } } /** * @return * @org.apache.xbean.Property alias="user-mapping-rules" nestedType="org.josso.gateway.identity.service.store.virtual.UserMappingRule" */ public List<UserMappingRule> getUserMappingRules() { return userMappingRules; } public void setUserMappingRules(List<UserMappingRule> userMappingRules) { this.userMappingRules = userMappingRules; } /** * @return * @org.apache.xbean.Property alias="roles-mapping-rules" nestedType="org.josso.gateway.identity.service.store.virtual.RoleMappingRule" */ public List<RoleMappingRule> getRoleMappingRules() { return roleMappingRules; } public void setRoleMappingRules(List<RoleMappingRule> roleMappingRules) { this.roleMappingRules = roleMappingRules; } /** * @return * @org.apache.xbean.Property alias="credentials-mapping-rules" nestedType="org.josso.gateway.identity.service.store.virtual.CredentialMappingRule" */ public List<CredentialMappingRule> getCredentialMappingRules() { return credentialMappingRules; } public void setCredentialMappingRules(List<CredentialMappingRule> credentialMappingRules) { this.credentialMappingRules = credentialMappingRules; } /** * @return * @org.apache.xbean.Property alias="uid-mapping-rules" nestedType="org.josso.gateway.identity.service.store.virtual.UIDMappingRule" */ public List<UIDMappingRule> getUIDMappingRules() { return uidMappingRules; } public void setUIDMappingRules(List<UIDMappingRule> uidMappingRules) { this.uidMappingRules = uidMappingRules; } /** * @return * @org.apache.xbean.Property alias="bind-mapping-rules" nestedType="org.josso.gateway.identity.service.store.virtual.BindMappingRule" */ public List<BindMappingRule> getBindMappingRules() { return bindMappingRules; } public void setBindMappingRules(List<BindMappingRule> bindMappingRules) { this.bindMappingRules = bindMappingRules; } /** * @return * @org.apache.xbean.Property alias="user-exists-mapping-rules" nestedType="org.josso.gateway.identity.service.store.virtual.UserExistsMappingRule" */ public List<UserExistsMappingRule> getUserExistsMappingRules() { return userExistsMappingRules; } public void setUserExistsMappingRules(List<UserExistsMappingRule> userExistsMappingRules) { this.userExistsMappingRules = userExistsMappingRules; } }