FileDocCategorySizeDatePackage
MimeType.javaAPI DocGlassfish v2 API12096Mon May 14 15:29:52 BST 2007javax.activation

MimeType

public class MimeType extends Object implements Externalizable
A Multipurpose Internet Mail Extension (MIME) type, as defined in RFC 2045 and 2046.

Fields Summary
private String
primaryType
private String
subType
private MimeTypeParameterList
parameters
private static final String
TSPECIALS
A string that holds all the special chars.
Constructors Summary
public MimeType()
Default constructor.


           
      
        primaryType = "application";
        subType = "*";
        parameters = new MimeTypeParameterList();
    
public MimeType(String rawdata)
Constructor that builds a MimeType from a String.

param
rawdata the MIME type string

        parse(rawdata);
    
public MimeType(String primary, String sub)
Constructor that builds a MimeType with the given primary and sub type but has an empty parameter list.

param
primary the primary MIME type
param
sub the MIME sub-type
exception
MimeTypeParseException if the primary type or subtype is not a valid token

        //    check to see if primary is valid
        if (isValidToken(primary)) {
            primaryType = primary.toLowerCase(Locale.ENGLISH);
        } else {
            throw new MimeTypeParseException("Primary type is invalid.");
        }

        //    check to see if sub is valid
        if (isValidToken(sub)) {
            subType = sub.toLowerCase(Locale.ENGLISH);
        } else {
            throw new MimeTypeParseException("Sub type is invalid.");
        }

        parameters = new MimeTypeParameterList();
    
Methods Summary
public java.lang.StringgetBaseType()
Return a String representation of this object without the parameter list.

return
the MIME type and sub-type

        return primaryType + "/" + subType;
    
public java.lang.StringgetParameter(java.lang.String name)
Retrieve the value associated with the given name, or null if there is no current association.

param
name the parameter name
return
the paramter's value

        return parameters.get(name);
    
public javax.activation.MimeTypeParameterListgetParameters()
Retrieve this object's parameter list.

return
a MimeTypeParameterList object representing the parameters

        return parameters;
    
public java.lang.StringgetPrimaryType()
Retrieve the primary type of this object.

return
the primary MIME type

        return primaryType;
    
public java.lang.StringgetSubType()
Retrieve the subtype of this object.

return
the MIME subtype

        return subType;
    
private static booleanisTokenChar(char c)
Determine whether or not a given character belongs to a legal token.

        return ((c > 040) && (c < 0177)) && (TSPECIALS.indexOf(c) < 0);
    
private booleanisValidToken(java.lang.String s)
Determine whether or not a given string is a legal token.

        int len = s.length();
        if (len > 0) {
            for (int i = 0; i < len; ++i) {
                char c = s.charAt(i);
                if (!isTokenChar(c)) {
                    return false;
                }
            }
            return true;
        } else {
            return false;
        }
    
public booleanmatch(javax.activation.MimeType type)
Determine if the primary and sub type of this object is the same as what is in the given type.

param
type the MimeType object to compare with
return
true if they match

        return primaryType.equals(type.getPrimaryType())
                    && (subType.equals("*")
                            || type.getSubType().equals("*")
                            || (subType.equals(type.getSubType())));
    
public booleanmatch(java.lang.String rawdata)
Determine if the primary and sub type of this object is the same as the content type described in rawdata.

param
rawdata the MIME type string to compare with
return
true if they match

        return match(new MimeType(rawdata));
    
private voidparse(java.lang.String rawdata)
A routine for parsing the MIME type out of a String.

        int slashIndex = rawdata.indexOf('/");
        int semIndex = rawdata.indexOf(';");
        if ((slashIndex < 0) && (semIndex < 0)) {
            //    neither character is present, so treat it
            //    as an error
            throw new MimeTypeParseException("Unable to find a sub type.");
        } else if ((slashIndex < 0) && (semIndex >= 0)) {
            //    we have a ';' (and therefore a parameter list),
            //    but no '/' indicating a sub type is present
            throw new MimeTypeParseException("Unable to find a sub type.");
        } else if ((slashIndex >= 0) && (semIndex < 0)) {
            //    we have a primary and sub type but no parameter list
            primaryType = rawdata.substring(0, slashIndex).trim().
						toLowerCase(Locale.ENGLISH);
            subType = rawdata.substring(slashIndex + 1).trim().
						toLowerCase(Locale.ENGLISH);
            parameters = new MimeTypeParameterList();
        } else if (slashIndex < semIndex) {
            //    we have all three items in the proper sequence
            primaryType = rawdata.substring(0, slashIndex).trim().
						toLowerCase(Locale.ENGLISH);
            subType = rawdata.substring(slashIndex + 1, semIndex).trim().
						toLowerCase(Locale.ENGLISH);
            parameters = new MimeTypeParameterList(rawdata.substring(semIndex));
        } else {
            // we have a ';' lexically before a '/' which means we
	    // have a primary type and a parameter list but no sub type
            throw new MimeTypeParseException("Unable to find a sub type.");
        }

        //    now validate the primary and sub types

        //    check to see if primary is valid
        if (!isValidToken(primaryType))
            throw new MimeTypeParseException("Primary type is invalid.");

        //    check to see if sub is valid
        if (!isValidToken(subType))
            throw new MimeTypeParseException("Sub type is invalid.");
    
public voidreadExternal(java.io.ObjectInput in)
The object implements the readExternal method to restore its contents by calling the methods of DataInput for primitive types and readObject for objects, strings and arrays. The readExternal method must read the values in the same sequence and with the same types as were written by writeExternal.

param
in the ObjectInput object to read from
exception
ClassNotFoundException If the class for an object being restored cannot be found.

        try {
            parse(in.readUTF());
        } catch (MimeTypeParseException e) {
            throw new IOException(e.toString());
        }
    
public voidremoveParameter(java.lang.String name)
Remove any value associated with the given name.

param
name the parameter name

        parameters.remove(name);
    
public voidsetParameter(java.lang.String name, java.lang.String value)
Set the value to be associated with the given name, replacing any previous association.

param
name the parameter name
param
value the paramter's value

        parameters.set(name, value);
    
public voidsetPrimaryType(java.lang.String primary)
Set the primary type for this object to the given String.

param
primary the primary MIME type
exception
MimeTypeParseException if the primary type is not a valid token

        //    check to see if primary is valid
        if (!isValidToken(primaryType))
            throw new MimeTypeParseException("Primary type is invalid.");
        primaryType = primary.toLowerCase(Locale.ENGLISH);
    
public voidsetSubType(java.lang.String sub)
Set the subtype for this object to the given String.

param
sub the MIME subtype
exception
MimeTypeParseException if the subtype is not a valid token

        //    check to see if sub is valid
        if (!isValidToken(subType))
            throw new MimeTypeParseException("Sub type is invalid.");
        subType = sub.toLowerCase(Locale.ENGLISH);
    
public java.lang.StringtoString()
Return the String representation of this object.

        return getBaseType() + parameters.toString();
    
public voidwriteExternal(java.io.ObjectOutput out)
The object implements the writeExternal method to save its contents by calling the methods of DataOutput for its primitive values or calling the writeObject method of ObjectOutput for objects, strings and arrays.

param
out the ObjectOutput object to write to
exception
IOException Includes any I/O exceptions that may occur

        out.writeUTF(toString());
	out.flush();