1 /*
2 * Copyright 2003-2008 the original author or authors.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 * You are receiving this code free of charge, which represents many hours of
17 * effort from other individuals and corporations. As a responsible member
18 * of the community, you are asked (but not required) to donate any
19 * enhancements or improvements back to the community under a similar open
20 * source license. Thank you. -TMN
21 */
22 package groovyx.net.http;
23
24 import java.util.Iterator;
25
26 import org.apache.commons.collections.iterators.ArrayIterator;
27
28 /**
29 * Enumeration of common <a href="http://www.iana.org/assignments/media-types/">IANA</a>
30 * content-types. This may be used to specify a request or response
31 * content-type more easily than specifying the full string each time. i.e.
32 * <pre>
33 * http.request( GET, JSON ) {...}</pre>
34 *
35 * Is roughly equivalent to:
36 * <pre>
37 * http.request( GET, 'application/json' )</pre>
38 *
39 * The only difference being, equivalent content-types (i.e.
40 * <code>application/xml</code> and <code>text/xml</code> are all added to the
41 * request's <code>Accept</code> header. By default, all equivalent content-types
42 * are handled the same by the {@link EncoderRegistry} and {@link ParserRegistry}
43 * as well.
44 * @author <a href='mailto:tnichols@enernoc.com'>Tom Nichols</a>
45 */
46 public enum ContentType {
47 ANY("*/*"),
48 TEXT("text/plain"),
49 JSON("application/json","application/javascript","text/javascript"),
50 XML("application/xml","text/xml","application/xhtml+xml"),
51 HTML("text/html"),
52 URLENC("application/x-www-form-urlencoded"),
53 BINARY("binary/octet-stream");
54
55 private final String[] ctStrings;
56 public String[] getContentTypeStrings() { return ctStrings; }
57 @Override public String toString() { return ctStrings[0]; }
58
59 /**
60 * Builds a string to be used as an HTTP <code>Accept</code> header
61 * value, i.e. "application/xml, text/xml"
62 * @return
63 */
64 @SuppressWarnings("unchecked")
65 public String getAcceptHeader() {
66 Iterator<String> iter = new ArrayIterator(ctStrings);
67 StringBuilder sb = new StringBuilder();
68 while ( iter.hasNext() ) {
69 sb.append( iter.next() );
70 if ( iter.hasNext() ) sb.append( ", " );
71 }
72 return sb.toString();
73 }
74
75 private ContentType( String... contentTypes ) {
76 this.ctStrings = contentTypes;
77 }
78 }