001: /*
002: * Copyright 2005-2007 Noelios Consulting.
003: *
004: * The contents of this file are subject to the terms of the Common Development
005: * and Distribution License (the "License"). You may not use this file except in
006: * compliance with the License.
007: *
008: * You can obtain a copy of the license at
009: * http://www.opensource.org/licenses/cddl1.txt See the License for the specific
010: * language governing permissions and limitations under the License.
011: *
012: * When distributing Covered Code, include this CDDL HEADER in each file and
013: * include the License file at http://www.opensource.org/licenses/cddl1.txt If
014: * applicable, add the following below this CDDL HEADER, with the fields
015: * enclosed by brackets "[]" replaced with your own identifying information:
016: * Portions Copyright [yyyy] [name of copyright owner]
017: */
018:
019: package org.restlet.data;
020:
021: /**
022: * Modifier of a representation's media type. Useful to apply compression
023: * without losing the identity of the underlying media type.
024: *
025: * @author Jerome Louvel (contact@noelios.com)
026: */
027: public final class Encoding extends Metadata {
028: /** All encodings acceptable. */
029: public static final Encoding ALL = new Encoding("*",
030: "All encodings");
031:
032: /** The GNU Zip encoding. */
033: public static final Encoding GZIP = new Encoding("gzip",
034: "GZip compression");
035:
036: /** The Info-Zip encoding. */
037: public static final Encoding ZIP = new Encoding("zip",
038: "Zip compression");
039:
040: /** The common Unix file compression. */
041: public static final Encoding COMPRESS = new Encoding("compress",
042: "Common Unix compression");
043:
044: /** The zlib format defined by RFC 1950 and 1951. */
045: public static final Encoding DEFLATE = new Encoding("deflate",
046: "Deflate compression using the zlib format");
047:
048: /** The default (identity) encoding. */
049: public static final Encoding IDENTITY = new Encoding("identity",
050: "The default encoding with no transformation");
051:
052: /**
053: * Returns the encoding associated to a name. If an existing constant exists
054: * then it is returned, otherwise a new instance is created.
055: *
056: * @param name
057: * The name.
058: * @return The associated encoding.
059: */
060: public static Encoding valueOf(final String name) {
061: Encoding result = null;
062:
063: if (name != null) {
064: if (name.equalsIgnoreCase(ALL.getName()))
065: result = ALL;
066: else if (name.equalsIgnoreCase(GZIP.getName()))
067: result = GZIP;
068: else if (name.equalsIgnoreCase(ZIP.getName()))
069: result = ZIP;
070: else if (name.equalsIgnoreCase(COMPRESS.getName()))
071: result = COMPRESS;
072: else if (name.equalsIgnoreCase(DEFLATE.getName()))
073: result = DEFLATE;
074: else if (name.equalsIgnoreCase(IDENTITY.getName()))
075: result = IDENTITY;
076: else
077: result = new Encoding(name);
078: }
079:
080: return result;
081: }
082:
083: /**
084: * Constructor.
085: *
086: * @param name
087: * The name.
088: */
089: public Encoding(final String name) {
090: this (name, "Encoding applied to a representation");
091: }
092:
093: /**
094: * Constructor.
095: *
096: * @param name
097: * The name.
098: * @param description
099: * The description.
100: */
101: public Encoding(final String name, final String description) {
102: super (name, description);
103: }
104:
105: /** {@inheritDoc} */
106: @Override
107: public boolean equals(final Object object) {
108: return (object instanceof Encoding)
109: && getName().equalsIgnoreCase(
110: ((Encoding) object).getName());
111: }
112:
113: /** {@inheritDoc} */
114: @Override
115: public int hashCode() {
116: return (getName() == null) ? 0 : getName().toLowerCase()
117: .hashCode();
118: }
119: }
|