blob: 4e7aafae966328380e1df2e77b9e56c5f2af52db [file] [log] [blame]
/*
* 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.
*/
/*
* EntityTag.java
*
* Created on March 21, 2007, 3:14 PM
*
*/
package javax.ws.rs.core;
import javax.ws.rs.ext.RuntimeDelegate;
import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate;
/**
* An abstraction for the value of a HTTP Entity Tag, used as the value
* of an ETag response header.
* @see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.11">HTTP/1.1 section 3.11</a>
*/
public class EntityTag {
private String value;
private boolean weak;
private static final HeaderDelegate<EntityTag> delegate =
RuntimeDelegate.getInstance().createHeaderDelegate(EntityTag.class);
/**
* Creates a new instance of a strong EntityTag.
* @param value the value of the tag, quotes not included.
* @throws IllegalArgumentException if value is null
*/
public EntityTag(String value) {
this(value, false);
}
/**
* Creates a new instance of an EntityTag
* @param value the value of the tag, quotes not included.
* @param weak true if this represents a weak tag, false otherwise
* @throws IllegalArgumentException if value is null
*/
public EntityTag(String value, boolean weak) {
if (value == null)
throw new IllegalArgumentException("value==null");
this.value = value;
this.weak = weak;
}
/**
* Creates a new instance of EntityTag by parsing the supplied string.
* @param value the entity tag string
* @return the newly created EntityTag
* @throws IllegalArgumentException if the supplied string cannot be parsed
* or is null
*/
public static EntityTag valueOf(String value) throws IllegalArgumentException {
return delegate.fromString(value);
}
/**
* Check the strength of an EntityTag
* @return true if this represents a weak tag, false otherwise
*/
public boolean isWeak() {
return weak;
}
/**
* Get the value of an EntityTag
* @return the value of the tag
*/
public String getValue() {
return value;
}
/**
* Compares obj to this tag to see if they are the same considering weakness and
* value.
* @param obj the object to compare to
* @return true if the two tags are the same, false otherwise.
*/
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (!(obj instanceof EntityTag))
return super.equals(obj);
EntityTag other = (EntityTag)obj;
if (value.equals(other.getValue()) && weak==other.isWeak())
return true;
return false;
}
/**
* Generate hashCode based on value and weakness.
* @return the hashCode
*/
@Override
public int hashCode() {
int hash = 3;
hash = 17 * hash + (this.value != null ? this.value.hashCode() : 0);
hash = 17 * hash + (this.weak ? 1 : 0);
return hash;
}
/**
* Convert the entity tag to a string suitable for use as the value of the
* corresponding HTTP header.
* @return a stringified entity tag
*/
@Override
public String toString() {
return delegate.toString(this);
}
}