forked from restlet/restlet-framework-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEncoding.java
More file actions
168 lines (150 loc) · 5.55 KB
/
Encoding.java
File metadata and controls
168 lines (150 loc) · 5.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/**
* Copyright 2005-2013 Restlet S.A.S.
*
* The contents of this file are subject to the terms of one of the following
* open source licenses: Apache 2.0 or LGPL 3.0 or LGPL 2.1 or CDDL 1.0 or EPL
* 1.0 (the "Licenses"). You can select the license that you prefer but you may
* not use this file except in compliance with one of these Licenses.
*
* You can obtain a copy of the Apache 2.0 license at
* http://www.opensource.org/licenses/apache-2.0
*
* You can obtain a copy of the LGPL 3.0 license at
* http://www.opensource.org/licenses/lgpl-3.0
*
* You can obtain a copy of the LGPL 2.1 license at
* http://www.opensource.org/licenses/lgpl-2.1
*
* You can obtain a copy of the CDDL 1.0 license at
* http://www.opensource.org/licenses/cddl1
*
* You can obtain a copy of the EPL 1.0 license at
* http://www.opensource.org/licenses/eclipse-1.0
*
* See the Licenses for the specific language governing permissions and
* limitations under the Licenses.
*
* Alternatively, you can obtain a royalty free commercial license with less
* limitations, transferable or non-transferable, directly at
* http://www.restlet.com/products/restlet-framework
*
* Restlet is a registered trademark of Restlet S.A.S.
*/
package org.restlet.data;
/**
* Modifier of a representation's media type. Useful to apply compression
* without losing the identity of the underlying media type.
*
* @author Jerome Louvel
*/
public final class Encoding extends Metadata {
/** All encodings acceptable. */
public static final Encoding ALL = new Encoding("*", "All encodings");
/** The common Unix file compression. */
public static final Encoding COMPRESS = new Encoding("compress",
"Common Unix compression");
/** The zlib format defined by RFC 1950 and 1951. */
public static final Encoding DEFLATE = new Encoding("deflate",
"Deflate compression using the zlib format");
/** The FreeMarker encoding. */
public static final Encoding FREEMARKER = new Encoding("freemarker",
"FreeMarker templated representation");
/** The GNU Zip encoding. */
public static final Encoding GZIP = new Encoding("gzip", "GZip compression");
/** The default (identity) encoding. */
public static final Encoding IDENTITY = new Encoding("identity",
"The default encoding with no transformation");
/** The Velocity encoding. */
public static final Encoding VELOCITY = new Encoding("velocity",
"Velocity templated representation");
/** The Info-Zip encoding. */
public static final Encoding ZIP = new Encoding("zip", "Zip compression");
/**
* Returns the encoding associated to a name. If an existing constant exists
* then it is returned, otherwise a new instance is created.
*
* @param name
* The name.
* @return The associated encoding.
*/
public static Encoding valueOf(final String name) {
Encoding result = null;
if ((name != null) && !name.equals("")) {
if (name.equalsIgnoreCase(ALL.getName())) {
result = ALL;
} else if (name.equalsIgnoreCase(GZIP.getName())) {
result = GZIP;
} else if (name.equalsIgnoreCase(ZIP.getName())) {
result = ZIP;
} else if (name.equalsIgnoreCase(COMPRESS.getName())) {
result = COMPRESS;
} else if (name.equalsIgnoreCase(DEFLATE.getName())) {
result = DEFLATE;
} else if (name.equalsIgnoreCase(IDENTITY.getName())) {
result = IDENTITY;
} else if (name.equalsIgnoreCase(FREEMARKER.getName())) {
result = FREEMARKER;
} else if (name.equalsIgnoreCase(VELOCITY.getName())) {
result = VELOCITY;
} else {
result = new Encoding(name);
}
}
return result;
}
/**
* Constructor.
*
* @param name
* The name.
*/
public Encoding(final String name) {
this(name, "Encoding applied to a representation");
}
/**
* Constructor.
*
* @param name
* The name.
* @param description
* The description.
*/
public Encoding(final String name, final String description) {
super(name, description);
}
/** {@inheritDoc} */
@Override
public boolean equals(final Object object) {
return (object instanceof Encoding)
&& getName().equalsIgnoreCase(((Encoding) object).getName());
}
@Override
public Metadata getParent() {
return equals(ALL) ? null : ALL;
}
/** {@inheritDoc} */
@Override
public int hashCode() {
return (getName() == null) ? 0 : getName().toLowerCase().hashCode();
}
/**
* Indicates if a given encoding is included in the current one. The test is
* true if both encodings are equal or if the given encoding is within the
* range of the current one. For example, ALL includes all encodings. A null
* encoding is considered as included into the current one.
* <p>
* Examples:
* <ul>
* <li>ALL.includes(COMPRESS) -> true</li>
* <li>COMPRESS.includes(ALL) -> false</li>
* </ul>
*
* @param included
* The encoding to test for inclusion.
* @return True if the given encoding is included in the current one.
* @see #isCompatible(Metadata)
*/
public boolean includes(Metadata included) {
return equals(ALL) || (included == null) || equals(included);
}
}