/jsr-311-1.1.1/src/javax/ws/rs/core/CacheControl.java
Java | 370 lines | 160 code | 31 blank | 179 comment | 44 complexity | fb5200d96e78f93356d9a7fc401b2dad MD5 | raw file
- /*
- * The contents of this file are subject to the terms
- * of the Common Development and Distribution License
- * (the "License"). You may not use this file except
- * in compliance with the License.
- *
- * You can obtain a copy of the license at
- * http://www.opensource.org/licenses/cddl1.php
- * See the License for the specific language governing
- * permissions and limitations under the License.
- */
- /*
- * CacheControl.java
- *
- * Created on March 5, 2007, 3:36 PM
- */
- package javax.ws.rs.core;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.ws.rs.ext.RuntimeDelegate;
- import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate;
- /**
- * An abstraction for the value of a HTTP Cache-Control response header.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">HTTP/1.1 section 14.9</a>
- */
- public class CacheControl {
- private boolean _private;
- private List<String> privateFields;
- private boolean noCache;
- private List<String> noCacheFields;
- private boolean noStore;
- private boolean noTransform;
- private boolean mustRevalidate;
- private boolean proxyRevalidate;
- private int maxAge = -1;
- private int sMaxAge = -1;
- private Map<String, String> cacheExtension;
-
- private static final HeaderDelegate<CacheControl> delegate =
- RuntimeDelegate.getInstance().createHeaderDelegate(CacheControl.class);
-
- /**
- * Create a new instance of CacheControl. The new instance will have the
- * following default settings:
- *
- * <ul>
- * <li>private = false</li>
- * <li>noCache = false</li>
- * <li>noStore = false</li>
- * <li>noTransform = true</li>
- * <li>mustRevalidate = false</li>
- * <li>proxyRevalidate = false</li>
- * <li>An empty list of private fields</li>
- * <li>An empty list of no-cache fields</li>
- * <li>An empty map of cache extensions</li>
- * </ul>
- */
- public CacheControl() {
- _private = false;
- noCache = false;
- noStore = false;
- noTransform = true;
- mustRevalidate = false;
- proxyRevalidate = false;
- }
- /**
- * Creates a new instance of CacheControl by parsing the supplied string.
- * @param value the cache control string
- * @return the newly created CacheControl
- * @throws IllegalArgumentException if the supplied string cannot be parsed
- * or is null
- */
- public static CacheControl valueOf(String value) throws IllegalArgumentException {
- return delegate.fromString(value);
- }
-
- /**
- * Corresponds to the must-revalidate cache control directive.
- * @return true if the must-revalidate cache control directive will be included in the
- * response, false otherwise.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4">HTTP/1.1 section 14.9.4</a>
- */
- public boolean isMustRevalidate() {
- return mustRevalidate;
- }
- /**
- * Corresponds to the must-revalidate cache control directive.
- * @param mustRevalidate true if the must-revalidate cache control directive should be included in the
- * response, false otherwise.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4">HTTP/1.1 section 14.9.4</a>
- */
- public void setMustRevalidate(boolean mustRevalidate) {
- this.mustRevalidate = mustRevalidate;
- }
- /**
- * Corresponds to the proxy-revalidate cache control directive.
- * @return true if the proxy-revalidate cache control directive will be included in the
- * response, false otherwise.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4">HTTP/1.1 section 14.9.4</a>
- */
- public boolean isProxyRevalidate() {
- return proxyRevalidate;
- }
- /**
- * Corresponds to the must-revalidate cache control directive.
- * @param proxyRevalidate true if the proxy-revalidate cache control directive should be included in the
- * response, false otherwise.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4">HTTP/1.1 section 14.9.4</a>
- */
- public void setProxyRevalidate(boolean proxyRevalidate) {
- this.proxyRevalidate = proxyRevalidate;
- }
- /**
- * Corresponds to the max-age cache control directive.
- * @return the value of the max-age cache control directive, -1 if the directive is disabled.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3">HTTP/1.1 section 14.9.3</a>
- */
- public int getMaxAge() {
- return maxAge;
- }
- /**
- * Corresponds to the max-age cache control directive.
- * @param maxAge the value of the max-age cache control directive, a value of -1 will disable the directive.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3">HTTP/1.1 section 14.9.3</a>
- */
- public void setMaxAge(int maxAge) {
- this.maxAge = maxAge;
- }
- /**
- * Corresponds to the s-maxage cache control directive.
- * @return the value of the s-maxage cache control directive, -1 if the directive is disabled.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3">HTTP/1.1 section 14.9.3</a>
- */
- public int getSMaxAge() {
- return sMaxAge;
- }
- /**
- * Corresponds to the s-maxage cache control directive.
- * @param sMaxAge the value of the s-maxage cache control directive, a value of -1 will disable the directive.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3">HTTP/1.1 section 14.9.3</a>
- */
- public void setSMaxAge(int sMaxAge) {
- this.sMaxAge = sMaxAge;
- }
- /**
- * Corresponds to the value of the no-cache cache control directive.
- * @return a mutable list of field-names that will form the value of the no-cache cache control directive.
- * An empty list results in a bare no-cache directive.
- * @see #isNoCache
- * @see #setNoCache
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1">HTTP/1.1 section 14.9.1</a>
- */
- public List<String> getNoCacheFields() {
- if (noCacheFields == null)
- noCacheFields = new ArrayList<String>();
- return noCacheFields;
- }
- /**
- * Corresponds to the no-cache cache control directive.
- * @param noCache true if the no-cache cache control directive should be included in the
- * response, false otherwise.
- * @see #getNoCacheFields
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1">HTTP/1.1 section 14.9.1</a>
- */
- public void setNoCache(boolean noCache) {
- this.noCache = noCache;
- }
- /**
- * Corresponds to the no-cache cache control directive.
- * @return true if the no-cache cache control directive will be included in the
- * response, false otherwise.
- * @see #getNoCacheFields
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1">HTTP/1.1 section 14.9.1</a>
- */
- public boolean isNoCache() {
- return noCache;
- }
- /**
- * Corresponds to the private cache control directive.
- * @return true if the private cache control directive will be included in the
- * response, false otherwise.
- * @see #getPrivateFields
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1">HTTP/1.1 section 14.9.1</a>
- */
- public boolean isPrivate() {
- return _private;
- }
- /**
- * Corresponds to the value of the private cache control directive.
- * @return a mutable list of field-names that will form the value of the private cache control directive.
- * An empty list results in a bare no-cache directive.
- * @see #isPrivate
- * @see #setPrivate
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1">HTTP/1.1 section 14.9.1</a>
- */
- public List<String> getPrivateFields() {
- if (privateFields == null)
- privateFields = new ArrayList<String>();
- return privateFields;
- }
- /**
- * Corresponds to the private cache control directive.
- * @param _private true if the private cache control directive should be included in the
- * response, false otherwise.
- * @see #getPrivateFields
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1">HTTP/1.1 section 14.9.1</a>
- */
- public void setPrivate(boolean _private) {
- this._private = _private;
- }
- /**
- * Corresponds to the no-transform cache control directive.
- * @return true if the no-transform cache control directive will be included in the
- * response, false otherwise.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5">HTTP/1.1 section 14.9.5</a>
- */
- public boolean isNoTransform() {
- return noTransform;
- }
- /**
- * Corresponds to the no-transform cache control directive.
- * @param noTransform true if the no-transform cache control directive should be included in the
- * response, false otherwise.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5">HTTP/1.1 section 14.9.5</a>
- */
- public void setNoTransform(boolean noTransform) {
- this.noTransform = noTransform;
- }
- /**
- * Corresponds to the no-store cache control directive.
- * @return true if the no-store cache control directive will be included in the
- * response, false otherwise.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.2">HTTP/1.1 section 14.9.2</a>
- */
- public boolean isNoStore() {
- return noStore;
- }
- /**
- * Corresponds to the no-store cache control directive.
- * @param noStore true if the no-store cache control directive should be included in the
- * response, false otherwise.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.2">HTTP/1.1 section 14.9.2</a>
- */
- public void setNoStore(boolean noStore) {
- this.noStore = noStore;
- }
- /**
- * Corresponds to a set of extension cache control directives.
- * @return a mutable map of cache control extension names and their values.
- * If a key has a null value, it will appear as a bare directive. If a key has
- * a value that contains no whitespace then the directive will appear as
- * a simple name=value pair. If a key has a value that contains whitespace
- * then the directive will appear as a quoted name="value" pair.
- * @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.6">HTTP/1.1 section 14.9.6</a>
- */
- public Map<String, String> getCacheExtension() {
- if (cacheExtension == null)
- cacheExtension = new HashMap<String, String>();
- return cacheExtension;
- }
- /**
- * Convert the cache control to a string suitable for use as the value of the
- * corresponding HTTP header.
- * @return a stringified cache control
- */
- @Override
- public String toString() {
- return delegate.toString(this);
- }
- /**
- * Generate hash code from cache control properties.
- * @return the hashCode
- */
- @Override
- public int hashCode() {
- int hash = 7;
- hash = 41 * hash + (this._private ? 1 : 0);
- hash = 41 * hash + (this.privateFields != null ? this.privateFields.hashCode() : 0);
- hash = 41 * hash + (this.noCache ? 1 : 0);
- hash = 41 * hash + (this.noCacheFields != null ? this.noCacheFields.hashCode() : 0);
- hash = 41 * hash + (this.noStore ? 1 : 0);
- hash = 41 * hash + (this.noTransform ? 1 : 0);
- hash = 41 * hash + (this.mustRevalidate ? 1 : 0);
- hash = 41 * hash + (this.proxyRevalidate ? 1 : 0);
- hash = 41 * hash + this.maxAge;
- hash = 41 * hash + this.sMaxAge;
- hash = 41 * hash + (this.cacheExtension != null ? this.cacheExtension.hashCode() : 0);
- return hash;
- }
- /**
- * Compares obj to this cache control to see if they are the same
- * considering all property values.
- * @param obj the object to compare to
- * @return true if the two cache controls are the same, false otherwise.
- */
- @Override
- public boolean equals(Object obj) {
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final CacheControl other = (CacheControl) obj;
- if (this._private != other._private) {
- return false;
- }
- if (this.privateFields != other.privateFields && (this.privateFields == null || !this.privateFields.equals(other.privateFields))) {
- return false;
- }
- if (this.noCache != other.noCache) {
- return false;
- }
- if (this.noCacheFields != other.noCacheFields && (this.noCacheFields == null || !this.noCacheFields.equals(other.noCacheFields))) {
- return false;
- }
- if (this.noStore != other.noStore) {
- return false;
- }
- if (this.noTransform != other.noTransform) {
- return false;
- }
- if (this.mustRevalidate != other.mustRevalidate) {
- return false;
- }
- if (this.proxyRevalidate != other.proxyRevalidate) {
- return false;
- }
- if (this.maxAge != other.maxAge) {
- return false;
- }
- if (this.sMaxAge != other.sMaxAge) {
- return false;
- }
- if (this.cacheExtension != other.cacheExtension && (this.cacheExtension == null || !this.cacheExtension.equals(other.cacheExtension))) {
- return false;
- }
- return true;
- }
-
- }