1/* 2* Conditions Of Use 3* 4* This software was developed by employees of the National Institute of 5* Standards and Technology (NIST), an agency of the Federal Government. 6* Pursuant to title 15 Untied States Code Section 105, works of NIST 7* employees are not subject to copyright protection in the United States 8* and are considered to be in the public domain. As a result, a formal 9* license is not needed to use the software. 10* 11* This software is provided by NIST as a service and is expressly 12* provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED 13* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF 14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT 15* AND DATA ACCURACY. NIST does not warrant or make any representations 16* regarding the use of the software or the results thereof, including but 17* not limited to the correctness, accuracy, reliability or usefulness of 18* the software. 19* 20* Permission to use this software is contingent upon your acceptance 21* of the terms of this agreement 22* 23* . 24* 25*/ 26/******************************************************************************* 27* Product of NIST/ITL Advanced Networking Technologies Division (ANTD). * 28*******************************************************************************/ 29package gov.nist.javax.sip.header; 30 31import javax.sip.header.ContentTypeHeader; 32import java.text.ParseException; 33 34/** 35* ContentType SIP Header 36* <pre> 37*14.17 Content-Type 38* 39* The Content-Type entity-header field indicates the media type of the 40* entity-body sent to the recipient or, in the case of the HEAD method, 41* the media type that would have been sent had the request been a GET. 42* 43* Content-Type = "Content-Type" ":" media-type 44* 45* Media types are defined in section 3.7. An example of the field is 46* 47* Content-Type: text/html; charset=ISO-8859-4 48* 49* Further discussion of methods for identifying the media type of an 50* entity is provided in section 7.2.1. 51* 52* From HTTP RFC 2616 53* </pre> 54* 55* 56*@version 1.2 57* 58*@author M. Ranganathan <br/> 59*@author Olivier Deruelle <br/> 60*@version 1.2 $Revision: 1.7 $ $Date: 2009/07/17 18:57:29 $ 61*@since 1.1 62* 63*/ 64public class ContentType 65 extends ParametersHeader 66 implements javax.sip.header.ContentTypeHeader { 67 68 /** 69 * Comment for <code>serialVersionUID</code> 70 */ 71 private static final long serialVersionUID = 8475682204373446610L; 72 /** mediaRange field. 73 */ 74 protected MediaRange mediaRange; 75 76 /** Default constructor. 77 */ 78 public ContentType() { 79 super(CONTENT_TYPE); 80 } 81 82 /** Constructor given a content type and subtype. 83 *@param contentType is the content type. 84 *@param contentSubtype is the content subtype 85 */ 86 public ContentType(String contentType, String contentSubtype) { 87 this(); 88 this.setContentType(contentType, contentSubtype); 89 } 90 91 /** compare two MediaRange headers. 92 * @param media String to set 93 * @return int. 94 */ 95 public int compareMediaRange(String media) { 96 return ( 97 mediaRange.type + "/" + mediaRange.subtype).compareToIgnoreCase( 98 media); 99 } 100 101 /** 102 * Encode into a canonical string. 103 * @return String. 104 */ 105 public String encodeBody() { 106 return encodeBody(new StringBuffer()).toString(); 107 } 108 109 protected StringBuffer encodeBody(StringBuffer buffer) { 110 mediaRange.encode(buffer); 111 if (hasParameters()) { 112 buffer.append(SEMICOLON); 113 parameters.encode(buffer); 114 } 115 return buffer; 116 } 117 118 /** get the mediaRange field. 119 * @return MediaRange. 120 */ 121 public MediaRange getMediaRange() { 122 return mediaRange; 123 } 124 125 /** get the Media Type. 126 * @return String. 127 */ 128 public String getMediaType() { 129 return mediaRange.type; 130 } 131 132 /** get the MediaSubType field. 133 * @return String. 134 */ 135 public String getMediaSubType() { 136 return mediaRange.subtype; 137 } 138 139 /** Get the content subtype. 140 *@return the content subtype string (or null if not set). 141 */ 142 public String getContentSubType() { 143 return mediaRange == null ? null : mediaRange.getSubtype(); 144 } 145 146 /** Get the content subtype. 147 *@return the content tyep string (or null if not set). 148 */ 149 150 public String getContentType() { 151 return mediaRange == null ? null : mediaRange.getType(); 152 } 153 154 /** Get the charset parameter. 155 */ 156 public String getCharset() { 157 return this.getParameter("charset"); 158 } 159 160 /** 161 * Set the mediaRange member 162 * @param m mediaRange field. 163 */ 164 public void setMediaRange(MediaRange m) { 165 mediaRange = m; 166 } 167 168 /** 169 * set the content type and subtype. 170 *@param contentType Content type string. 171 *@param contentSubType content subtype string 172 */ 173 public void setContentType(String contentType, String contentSubType) { 174 if (mediaRange == null) 175 mediaRange = new MediaRange(); 176 mediaRange.setType(contentType); 177 mediaRange.setSubtype(contentSubType); 178 } 179 180 /** 181 * set the content type. 182 *@param contentType Content type string. 183 */ 184 185 public void setContentType(String contentType) throws ParseException { 186 if (contentType == null) 187 throw new NullPointerException("null arg"); 188 if (mediaRange == null) 189 mediaRange = new MediaRange(); 190 mediaRange.setType(contentType); 191 192 } 193 194 /** Set the content subtype. 195 * @param contentType String to set 196 */ 197 public void setContentSubType(String contentType) throws ParseException { 198 if (contentType == null) 199 throw new NullPointerException("null arg"); 200 if (mediaRange == null) 201 mediaRange = new MediaRange(); 202 mediaRange.setSubtype(contentType); 203 } 204 205 public Object clone() { 206 ContentType retval = (ContentType) super.clone(); 207 if (this.mediaRange != null) 208 retval.mediaRange = (MediaRange) this.mediaRange.clone(); 209 return retval; 210 } 211 212 public boolean equals(Object other) { 213 if (other instanceof ContentTypeHeader) { 214 final ContentTypeHeader o = (ContentTypeHeader) other; 215 return this.getContentType().equalsIgnoreCase( o.getContentType() ) 216 && this.getContentSubType().equalsIgnoreCase( o.getContentSubType() ) 217 && equalParameters( o ); 218 } 219 return false; 220 } 221} 222 223