package io.graceland.filter; import java.util.Comparator; import javax.servlet.Filter; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.inject.Provider; /** * A filter specification, used when adding a filter to the {@link io.dropwizard.jetty.setup.ServletEnvironment}. It * provides the filter instance, the priority of the filter, and a name for the filter. */ public class FilterSpec { public static final Comparator<FilterSpec> PRIORITY_COMPARATOR = new Comparator<FilterSpec>() { @Override public int compare(FilterSpec o1, FilterSpec o2) { return o1.getPriority() - o2.getPriority(); } }; private final Provider<? extends Filter> filterProvider; private final int priority; private final String name; private final ImmutableList<FilterPattern> patterns; FilterSpec( Provider<? extends Filter> filterProvider, int priority, String name, ImmutableList<FilterPattern> patterns) { this.filterProvider = Preconditions.checkNotNull(filterProvider, "Filter Provider cannot be null."); this.priority = Preconditions.checkNotNull(priority, "Priority cannot be null."); this.name = Preconditions.checkNotNull(name, "Name cannot be null."); this.patterns = Preconditions.checkNotNull(patterns, "Filter Patterns cannot be null."); } public Filter getFilter() { return filterProvider.get(); } /** * The priority is used to determine the order of the filters added to the {@link io.dropwizard.setup.Environment}. * * @return The filter's priority. */ public int getPriority() { return priority; } public String getName() { return name; } public ImmutableList<FilterPattern> getPatterns() { return patterns; } }