package io.graceland.filter; import java.util.EnumSet; import javax.servlet.DispatcherType; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; /** * Holds the URL patterns that a filter will be associated with. * * @see io.graceland.filter.FilterSpec */ public class FilterPattern { public static final EnumSet<DispatcherType> DEFAULT_DISPATCHER_TYPES = EnumSet.allOf(DispatcherType.class); public static final boolean DEFAULT_MATCH_AFTER = true; private final EnumSet<DispatcherType> dispatcherTypes; private final boolean matchAfter; private final ImmutableList<String> urlPatterns; FilterPattern(EnumSet<DispatcherType> dispatcherTypes, boolean matchAfter, ImmutableList<String> urlPatterns) { Preconditions.checkNotNull(dispatcherTypes, "Dispatcher Types cannot be null."); Preconditions.checkNotNull(urlPatterns, "URL Patterns cannot be null."); Preconditions.checkArgument(!dispatcherTypes.isEmpty(), "Dispatcher Arguments cannot be empty"); Preconditions.checkArgument(!urlPatterns.isEmpty(), "URL Patterns cannot be empty"); this.dispatcherTypes = dispatcherTypes; this.matchAfter = matchAfter; this.urlPatterns = urlPatterns; } /** * Returns a new instance of FilterPattern, using the passed in arguments. */ public static FilterPattern newInstance( EnumSet<DispatcherType> dispatcherTypes, boolean matchAfter, Iterable<String> patterns) { return new FilterPattern(dispatcherTypes, matchAfter, ImmutableList.copyOf(patterns)); } /** * Returns a new instance of FilterPattern, using the passed in arguments. */ public static FilterPattern newInstance( EnumSet<DispatcherType> dispatcherTypes, boolean matchAfter, String... patterns) { return new FilterPattern(dispatcherTypes, matchAfter, ImmutableList.copyOf(patterns)); } /** * Returns a new intance of FitlerPattern using default values and the patterns passed in. * <p/> * The default values are {@link io.graceland.filter.FilterPattern#DEFAULT_DISPATCHER_TYPES} and * {@link io.graceland.filter.FilterPattern#DEFAULT_MATCH_AFTER}. * * @param patterns The URL patterns to use. */ public static FilterPattern forPatterns(String... patterns) { return new FilterPattern(DEFAULT_DISPATCHER_TYPES, DEFAULT_MATCH_AFTER, ImmutableList.copyOf(patterns)); } /** * Returns a new intance of FitlerPattern using default values and the patterns passed in. * <p/> * The default values are {@link io.graceland.filter.FilterPattern#DEFAULT_DISPATCHER_TYPES} and * {@link io.graceland.filter.FilterPattern#DEFAULT_MATCH_AFTER}. * * @param patterns The URL patterns to use. */ public static FilterPattern forPatterns(Iterable<String> patterns) { return new FilterPattern(DEFAULT_DISPATCHER_TYPES, DEFAULT_MATCH_AFTER, ImmutableList.copyOf(patterns)); } public EnumSet<DispatcherType> getDispatcherTypes() { return dispatcherTypes; } public boolean isMatchAfter() { return matchAfter; } public ImmutableList<String> getUrlPatterns() { return urlPatterns; } }