/*
 * Copyright 2002-2019 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.servlet.mvc.condition;

import java.util.Collection;
import java.util.StringJoiner;

import org.springframework.lang.Nullable;

A base class for RequestCondition types providing implementations of equals(Object), hashCode(), and toString().
Author:Rossen Stoyanchev
Type parameters:
  • <T> – the type of objects that this RequestCondition can be combined with and compared to
Since:3.1
/** * A base class for {@link RequestCondition} types providing implementations of * {@link #equals(Object)}, {@link #hashCode()}, and {@link #toString()}. * * @author Rossen Stoyanchev * @since 3.1 * @param <T> the type of objects that this RequestCondition can be combined * with and compared to */
public abstract class AbstractRequestCondition<T extends AbstractRequestCondition<T>> implements RequestCondition<T> {
Indicates whether this condition is empty, i.e. whether or not it contains any discrete items.
Returns:true if empty; false otherwise
/** * Indicates whether this condition is empty, i.e. whether or not it * contains any discrete items. * @return {@code true} if empty; {@code false} otherwise */
public boolean isEmpty() { return getContent().isEmpty(); }
Return the discrete items a request condition is composed of.

For example URL patterns, HTTP request methods, param expressions, etc.

Returns:a collection of objects (never null)
/** * Return the discrete items a request condition is composed of. * <p>For example URL patterns, HTTP request methods, param expressions, etc. * @return a collection of objects (never {@code null}) */
protected abstract Collection<?> getContent();
The notation to use when printing discrete items of content.

For example " || " for URL patterns or " && " for param expressions.

/** * The notation to use when printing discrete items of content. * <p>For example {@code " || "} for URL patterns or {@code " && "} * for param expressions. */
protected abstract String getToStringInfix(); @Override public boolean equals(@Nullable Object other) { if (this == other) { return true; } if (other == null || getClass() != other.getClass()) { return false; } return getContent().equals(((AbstractRequestCondition<?>) other).getContent()); } @Override public int hashCode() { return getContent().hashCode(); } @Override public String toString() { String infix = getToStringInfix(); StringJoiner joiner = new StringJoiner(infix, "[", "]"); for (Object expression : getContent()) { joiner.add(expression.toString()); } return joiner.toString(); } }