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: * Character set used to encode characters in textual representations.
023: *
024: * @author Jerome Louvel (contact@noelios.com)
025: */
026: public final class CharacterSet extends Metadata {
027: /** All character sets acceptable. */
028: public static final CharacterSet ALL = new CharacterSet("*",
029: "All character sets");
030:
031: /**
032: * The ISO/IEC 8859-1 or Latin 1 character set.
033: *
034: * @see <a href="http://en.wikipedia.org/wiki/ISO_8859-1">Wikipedia page</a>
035: */
036: public static final CharacterSet ISO_8859_1 = new CharacterSet(
037: "ISO-8859-1", "ISO/IEC 8859-1 or Latin 1 character set");
038:
039: /**
040: * The US-ASCII character set.
041: *
042: * @see <a href="http://en.wikipedia.org/wiki/US-ASCII">Wikipedia page</a>
043: */
044: public static final CharacterSet US_ASCII = new CharacterSet(
045: "US-ASCII", "US ASCII character set");
046:
047: /**
048: * The UTF-8 character set.
049: *
050: * @see <a href="http://en.wikipedia.org/wiki/UTF-8">Wikipedia page</a>
051: */
052: public static final CharacterSet UTF_8 = new CharacterSet("UTF-8",
053: "UTF 8 character set");
054:
055: /**
056: * The UTF-16 character set.
057: *
058: * @see <a href="http://en.wikipedia.org/wiki/UTF-16">Wikipedia page</a>
059: */
060: public static final CharacterSet UTF_16 = new CharacterSet(
061: "UTF-16", "UTF 16 character set");
062:
063: /**
064: * Returns the character set associated to a name. If an existing constant
065: * exists then it is returned, otherwise a new instance is created.
066: *
067: * @param name
068: * The name.
069: * @return The associated character set.
070: */
071: public static CharacterSet valueOf(final String name) {
072: CharacterSet result = null;
073:
074: if (name != null) {
075: if (name.equalsIgnoreCase(ALL.getName()))
076: result = ALL;
077: else if (name.equalsIgnoreCase(ISO_8859_1.getName()))
078: result = ISO_8859_1;
079: else if (name.equalsIgnoreCase(US_ASCII.getName()))
080: result = US_ASCII;
081: else if (name.equalsIgnoreCase(UTF_8.getName()))
082: result = UTF_8;
083: else if (name.equalsIgnoreCase(UTF_16.getName()))
084: result = UTF_16;
085: else
086: result = new CharacterSet(name);
087: }
088:
089: return result;
090: }
091:
092: /**
093: * Constructor.
094: *
095: * @param name
096: * The name.
097: */
098: public CharacterSet(final String name) {
099: this (name == null ? null : name.toUpperCase(),
100: "Character set or range of character sets");
101: }
102:
103: /**
104: * Constructor.
105: *
106: * @param name
107: * The name.
108: * @param description
109: * The description.
110: */
111: public CharacterSet(final String name, final String description) {
112: super (name == null ? null : name.toUpperCase(), description);
113: }
114:
115: /** {@inheritDoc} */
116: @Override
117: public boolean equals(final Object object) {
118: return (object instanceof CharacterSet)
119: && getName().equalsIgnoreCase(
120: ((CharacterSet) object).getName());
121: }
122:
123: /** {@inheritDoc} */
124: @Override
125: public int hashCode() {
126: return (getName() == null) ? 0 : getName().toLowerCase()
127: .hashCode();
128: }
129: }
|