1/*
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26/*
27 * @(#)ContentType.java       1.7 02/03/27
28 */
29
30
31
32package com.sun.xml.internal.ws.encoding;
33
34import javax.xml.ws.WebServiceException;
35
36/**
37 * This class represents a MIME ContentType value. It provides
38 * methods to parse a ContentType string into individual components
39 * and to generate a MIME style ContentType string.
40 *
41 * @version 1.7, 02/03/27
42 * @author  John Mani
43 */
44public final class ContentType {
45
46    private String primaryType; // primary type
47    private String subType;     // subtype
48    private ParameterList list; // parameter list
49
50    /**
51     * Constructor that takes a Content-Type string. The String
52     * is parsed into its constituents: primaryType, subType
53     * and parameters. A ParseException is thrown if the parse fails.
54     *
55     * @param   s       the Content-Type string.
56     * @exception WebServiceException if the parse fails.
57     */
58    public ContentType(String s) throws WebServiceException {
59        HeaderTokenizer h = new HeaderTokenizer(s, HeaderTokenizer.MIME);
60        HeaderTokenizer.Token tk;
61
62        // First "type" ..
63        tk = h.next();
64        if (tk.getType() != HeaderTokenizer.Token.ATOM)
65            throw new WebServiceException();
66        primaryType = tk.getValue();
67
68        // The '/' separator ..
69        tk = h.next();
70        if ((char)tk.getType() != '/')
71            throw new WebServiceException();
72
73        // Then "subType" ..
74        tk = h.next();
75        if (tk.getType() != HeaderTokenizer.Token.ATOM)
76            throw new WebServiceException();
77        subType = tk.getValue();
78
79        // Finally parameters ..
80        String rem = h.getRemainder();
81        if (rem != null)
82            list = new ParameterList(rem);
83    }
84
85
86    /**
87     * Return the primary type.
88     * @return the primary type
89     */
90    public String getPrimaryType() {
91            return primaryType;
92    }
93
94    /**
95     * Return the subType.
96     * @return the subType
97     */
98    public String getSubType() {
99            return subType;
100    }
101
102    /**
103     * Return the MIME type string, without the parameters.
104     * The returned value is basically the concatenation of
105     * the primaryType, the '/' character and the secondaryType.
106     *
107     * @return the type
108     */
109    public String getBaseType() {
110            return primaryType + '/' + subType;
111    }
112
113    /**
114     * Return the specified parameter value. Returns <code>null</code>
115     * if this parameter is absent.
116     *
117     * @param name parameter name
118     * @return  parameter value
119     */
120    public String getParameter(String name) {
121        if (list == null)
122            return null;
123
124        return list.get(name);
125    }
126
127    /**
128     * Return a ParameterList object that holds all the available
129     * parameters. Returns null if no parameters are available.
130     *
131     * @return  ParameterList
132     */
133    public ParameterList getParameterList() {
134            return list;
135    }
136
137}
138