/*
* ContentType.java February 2001
*
* Copyright (C) 2001, Niall Gallagher <niallg@users.sf.net>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package org.simpleframework.http;
/**
* This provides access to the MIME type parts, that is the primary
* type, the secondary type and an optional character set parameter.
* The <code>charset</code> parameter is one of many parameters that
* can be associated with a MIME type. This however this exposes this
* parameter with a typed method.
* <p>
* The <code>getCharset</code> will return the character encoding the
* content type is encoded within. This allows the user of the content
* to decode it correctly. Other parameters can be acquired from this
* by simply providing the name of the parameter.
*
* @author Niall Gallagher
*/
public interface ContentType {
/**
* This method is used to get the primary and secondary parts
* joined together with a "/". This is typically how a content
* type is examined. Here convenience is most important, we can
* easily compare content types without any parameters.
*
* @return this returns the primary and secondary types
*/
String getType();
/**
* This sets the primary type to whatever value is in the string
* provided is. If the string is null then this will contain a
* null string for the primary type of the parameter, which is
* likely invalid in most cases.
*
* @param type the type to set for the primary type of this
*/
void setPrimary(String type);
/**
* This is used to retrieve the primary type of this MIME type. The
* primary type part within the MIME type defines the generic type.
* For example <code>text/plain; charset=UTF-8</code>. This will
* return the text value. If there is no primary type then this
* will return <code>null</code> otherwise the string value.
*
* @return the primary type part of this MIME type
*/
String getPrimary();
/**
* This sets the secondary type to whatever value is in the string
* provided is. If the string is null then this will contain a
* null string for the secondary type of the parameter, which is
* likely invalid in most cases.
*
* @param type the type to set for the primary type of this
*/
void setSecondary(String type);
/**
* This is used to retrieve the secondary type of this MIME type.
* The secondary type part within the MIME type defines the generic
* type. For example <code>text/html; charset=UTF-8</code>. This
* will return the HTML value. If there is no secondary type then
* this will return <code>null</code> otherwise the string value.
*
* @return the primary type part of this MIME type
*/
String getSecondary();
/**
* This will set the <code>charset</code> to whatever value the
* string contains. If the string is null then this will not set
* the parameter to any value and the <code>toString</code> method
* will not contain any details of the parameter.
*
* @param charset parameter value to add to the MIME type
*/
void setCharset(String charset);
/**
* This is used to retrieve the <code>charset</code> of this MIME
* type. This is a special parameter associated with the type, if
* the parameter is not contained within the type then this will
* return null, which typically means the default of ISO-8859-1.
*
* @return the value that this parameter contains
*/
String getCharset();
/**
* This is used to retrieve an arbitrary parameter from the MIME
* type header. This ensures that values for <code>boundary</code>
* or other such parameters are not lost when the header is parsed.
* This will return the value, unquoted if required, as a string.
*
* @param name this is the name of the parameter to be retrieved
*
* @return this is the value for the parameter, or null if empty
*/
String getParameter(String name);
/**
* This will add a named parameter to the content type header. If
* a parameter of the specified name has already been added to the
* header then that value will be replaced by the new value given.
* Parameters such as the <code>boundary</code> as well as other
* common parameters can be set with this method.
*
* @param name this is the name of the parameter to be added
* @param value this is the value to associate with the name
*/
void setParameter(String name, String value);
/**
* This will return the value of the MIME type as a string. This
* will concatenate the primary and secondary type values and
* add the <code>charset</code> parameter to the type which will
* recreate the content type.
*
* @return this returns the string representation of the type
*/
String toString();
}