blob: 971356da8e8a1ca59fa543c693fd22a6e921a94f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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
*
* http://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 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;
public class CacheControl {
private int maxAge = -1;
private int sMaxAge = -1;
private boolean isPrivate = false;
private boolean noCache = false;
private boolean noStore = false;
private boolean noTransform = true;
private boolean mustRevalidate = false;
private boolean proxyRevalidate = false;
private Map<String, String> cacheExtensions = null;
private List<String> noCacheFields = null;
private List<String> privateFields = null;
public CacheControl() {
/* do nothing */
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
/*
* TODO: should the check be for instanceof or for getClass()? this
* class is not final so checking instanceof for now.
*/
if (!(obj instanceof CacheControl)) {
return false;
}
CacheControl other = (CacheControl)obj;
if (isPrivate != other.isPrivate()) {
return false;
}
if (noCache != other.isNoCache()) {
return false;
}
if (noStore != other.isNoStore()) {
return false;
}
if (noTransform != other.isNoTransform()) {
return false;
}
if (mustRevalidate != other.isMustRevalidate()) {
return false;
}
if (proxyRevalidate != other.isProxyRevalidate()) {
return false;
}
if (maxAge != other.getMaxAge()) {
return false;
}
if (sMaxAge != other.getSMaxAge()) {
return false;
}
if (!getCacheExtension().equals(other.getCacheExtension())) {
return false;
}
if (!getPrivateFields().equals(other.getPrivateFields())) {
return false;
}
if (!getNoCacheFields().equals(other.getNoCacheFields())) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + maxAge;
result = 31 * result + sMaxAge;
result = 31 * result + ((isPrivate) ? 1 : 0);
result = 31 * result + ((noCache) ? 1 : 0);
result = 31 * result + ((noStore) ? 1 : 0);
result = 31 * result + ((noTransform) ? 1 : 0);
result = 31 * result + ((mustRevalidate) ? 1 : 0);
result = 31 * result + ((proxyRevalidate) ? 1 : 0);
result = 31 * result + getCacheExtension().hashCode();
result = 31 * result + getNoCacheFields().hashCode();
result = 31 * result + getPrivateFields().hashCode();
return result;
}
public Map<String, String> getCacheExtension() {
if (cacheExtensions == null) {
cacheExtensions = new HashMap<String, String>();
}
return cacheExtensions;
}
public int getMaxAge() {
return maxAge;
}
public List<String> getNoCacheFields() {
if (noCacheFields == null) {
noCacheFields = new ArrayList<String>();
}
return noCacheFields;
}
public List<String> getPrivateFields() {
if (privateFields == null) {
privateFields = new ArrayList<String>();
}
return privateFields;
}
public int getSMaxAge() {
return sMaxAge;
}
public boolean isMustRevalidate() {
return mustRevalidate;
}
public boolean isNoCache() {
return noCache;
}
public boolean isNoStore() {
return noStore;
}
public boolean isNoTransform() {
return noTransform;
}
public boolean isPrivate() {
return isPrivate;
}
public boolean isProxyRevalidate() {
return proxyRevalidate;
}
public void setMaxAge(int maxAge) {
this.maxAge = maxAge;
}
public void setMustRevalidate(boolean mustRevalidate) {
this.mustRevalidate = mustRevalidate;
}
public void setNoCache(boolean noCache) {
this.noCache = noCache;
}
public void setNoStore(boolean noStore) {
this.noStore = noStore;
}
public void setNoTransform(boolean noTransform) {
this.noTransform = noTransform;
}
public void setPrivate(boolean isPrivate) {
this.isPrivate = isPrivate;
}
public void setProxyRevalidate(boolean proxyRevalidate) {
this.proxyRevalidate = proxyRevalidate;
}
public void setSMaxAge(int sMaxAge) {
this.sMaxAge = sMaxAge;
}
private final static HeaderDelegate<CacheControl> headerDelegate =
RuntimeDelegate
.getInstance()
.createHeaderDelegate(CacheControl.class);
@Override
public String toString() {
return headerDelegate.toString(this);
}
public static CacheControl valueOf(String value) {
return headerDelegate.fromString(value);
}
}