package org.apereo.cas.services.support; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apereo.cas.services.RegisteredServiceAttributeFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.OrderComparator; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * The filter that chains other filters inside it. * * @author Misagh Moayyed * @since 5.1.0 */ public class RegisteredServiceChainingAttributeFilter implements RegisteredServiceAttributeFilter { private static final long serialVersionUID = 903015750234610128L; private static final Logger LOGGER = LoggerFactory.getLogger(RegisteredServiceChainingAttributeFilter.class); private List<RegisteredServiceAttributeFilter> filters = new ArrayList<>(); public RegisteredServiceChainingAttributeFilter() { } public List<RegisteredServiceAttributeFilter> getFilters() { return filters; } public void setFilters(final List<RegisteredServiceAttributeFilter> filters) { this.filters = filters; } @Override public Map<String, Object> filter(final Map<String, Object> givenAttributes) { OrderComparator.sort(this.filters); final Map<String, Object> attributes = new HashMap<>(); filters.forEach(policy -> attributes.putAll(policy.filter(givenAttributes))); return attributes; } @Override public boolean equals(final Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj.getClass() != getClass()) { return false; } final RegisteredServiceChainingAttributeFilter rhs = (RegisteredServiceChainingAttributeFilter) obj; return new EqualsBuilder() .append(this.filters, rhs.filters) .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder() .append(filters) .toHashCode(); } @Override public String toString() { return new ToStringBuilder(this) .append("filters", filters) .toString(); } }