All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.ws.rs.core.CacheControl Maven / Gradle / Ivy

There is a newer version: 2.0.1
Show newest version
/*
 * 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 HTTP/1.1 section 14.9
 */
public class CacheControl {
    private boolean _private;
    private List privateFields;
    private boolean noCache;
    private List noCacheFields;
    private boolean noStore;
    private boolean noTransform;
    private boolean mustRevalidate;
    private boolean proxyRevalidate;
    private int maxAge = -1;
    private int sMaxAge = -1;
    private Map cacheExtension;
    
    private static final HeaderDelegate delegate = 
            RuntimeDelegate.getInstance().createHeaderDelegate(CacheControl.class);

    
    /**
     * Create a new instance of CacheControl. The new instance will have the 
     * following default settings:
     *
     * 
    *
  • private = false
  • *
  • noCache = false
  • *
  • noStore = false
  • *
  • noTransform = true
  • *
  • mustRevalidate = false
  • *
  • proxyRevalidate = false
  • *
  • An empty list of private fields
  • *
  • An empty list of no-cache fields
  • *
  • An empty map of cache extensions
  • *
*/ 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 HTTP/1.1 section 14.9.4 */ 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 HTTP/1.1 section 14.9.4 */ 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 HTTP/1.1 section 14.9.4 */ 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 HTTP/1.1 section 14.9.4 */ 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 HTTP/1.1 section 14.9.3 */ 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 HTTP/1.1 section 14.9.3 */ 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 HTTP/1.1 section 14.9.3 */ 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 HTTP/1.1 section 14.9.3 */ 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 HTTP/1.1 section 14.9.1 */ public List getNoCacheFields() { if (noCacheFields == null) noCacheFields = new ArrayList(); 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 HTTP/1.1 section 14.9.1 */ 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 HTTP/1.1 section 14.9.1 */ 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 HTTP/1.1 section 14.9.1 */ 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 HTTP/1.1 section 14.9.1 */ public List getPrivateFields() { if (privateFields == null) privateFields = new ArrayList(); 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 HTTP/1.1 section 14.9.1 */ 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 HTTP/1.1 section 14.9.5 */ 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 HTTP/1.1 section 14.9.5 */ 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 HTTP/1.1 section 14.9.2 */ 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 HTTP/1.1 section 14.9.2 */ 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 HTTP/1.1 section 14.9.6 */ public Map getCacheExtension() { if (cacheExtension == null) cacheExtension = new HashMap(); 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; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy