package org.apereo.cas.authentication; import org.apereo.cas.authentication.principal.Service; import org.springframework.core.OrderComparator; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * This is {@link DefaultAuthenticationServiceSelectionPlan}. * * @author Misagh Moayyed * @since 5.1.0 */ public class DefaultAuthenticationServiceSelectionPlan implements AuthenticationServiceSelectionPlan { private final List<AuthenticationServiceSelectionStrategy> strategies; public DefaultAuthenticationServiceSelectionPlan() { this.strategies = new ArrayList<>(); } public DefaultAuthenticationServiceSelectionPlan(final AuthenticationServiceSelectionStrategy... strategies) { this.strategies = Arrays.stream(strategies).collect(Collectors.toList()); } @Override public void registerStrategy(final AuthenticationServiceSelectionStrategy strategy) { strategies.add(strategy); } @Override public Service resolveService(final Service service) { OrderComparator.sort(this.strategies); return this.strategies.stream() .filter(s -> s.supports(service)) .findFirst() .get() .resolveServiceFrom(service); } }