package org.atricore.idbus.capabilities.sso.main.select.internal; import org.atricore.idbus.capabilities.sso.main.SSOException; import org.atricore.idbus.capabilities.sso.main.select.spi.*; import org.atricore.idbus.kernel.main.federation.metadata.CircleOfTrustMemberDescriptor; import org.atricore.idbus.kernel.main.federation.metadata.EndpointDescriptor; import org.atricore.idbus.kernel.main.mediation.select.SelectorChannel; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * */ public class EntitySelectorManagerImpl implements EntitySelectorManager { // Selectors by concern private SelectionStrategiesRegistry registry; public List<EntitySelector> resolveSelectors(EntitySelectionContext ctx, SelectorChannel channel, String strategyName) throws SSOException { List<EndpointDescriptor> endpoints = new ArrayList<EndpointDescriptor>(); SelectionStrategy strategy = registry.lookup(strategyName); if (strategy == null) throw new SSOException("Invalid selection strategy " + strategyName); return strategy.getSelectors(); } public List<EndpointDescriptor> resolveUserClaimsEndpoints(EntitySelectionContext ctx, SelectorChannel channel, String strategyName) throws SSOException { List<EndpointDescriptor> endpoints = new ArrayList<EndpointDescriptor>(); SelectionStrategy strategy = registry.lookup(strategyName); if (strategy == null) throw new SSOException("Invalid selection strategy " + strategyName); for (int i = 0; i < strategy.getSelectors().size(); i++) { EntitySelector selector = strategy.getSelectors().get(i); Collection<EndpointDescriptor> se = selector.getUserClaimsEndpoints(ctx, channel); if (se != null) { endpoints.addAll(se); } } return endpoints; } public CircleOfTrustMemberDescriptor selectEntity(String strategyName, EntitySelector preferedSelector, EntitySelectionContext ctx, SelectorChannel channel) throws SSOException { SelectionStrategy strategy = registry.lookup(strategyName); if (strategy == null) throw new SSOException("Invalid selection strategy " + strategyName); for (int i = 0; i < strategy.getSelectors().size(); i++) { EntitySelector selector = strategy.getSelectors().get(i); if (!selector.equals(preferedSelector)) continue; CircleOfTrustMemberDescriptor m = selector.selectCotMember(ctx, channel); if (m != null) return m; } return null; } public SelectionStrategiesRegistry getRegistry() { return registry; } public void setRegistry(SelectionStrategiesRegistry registry) { this.registry = registry; } }