package org.mozilla.javascript.commonjs.module.provider;

import java.io.Serializable;
import java.util.StringTokenizer;

/**
 * Breaks a "contentType; charset=encoding" MIME type into content type and
 * encoding parts.
 * @author Attila Szegedi
 * @version $Id: ParsedContentType.java,v 1.3 2011/04/07 20:26:12 hannes%helma.at Exp $
 */
public final class ParsedContentType implements Serializable
{
    private static final long serialVersionUID = 1L;

    private final String contentType;
    private final String encoding;
    
    /**
     * Creates a new parsed content type.
     * @param mimeType the full MIME type; typically the value of the 
     * "Content-Type" header of some MIME-compliant message. Can be null.
     */
    public ParsedContentType(String mimeType) {
        String contentType = null;
        String encoding = null;
        if(mimeType != null) {
            StringTokenizer tok = new StringTokenizer(mimeType, ";");
            if(tok.hasMoreTokens()) {
                contentType = tok.nextToken().trim();
                while(tok.hasMoreTokens()) {
                    String param = tok.nextToken().trim();
                    if(param.startsWith("charset=")) {
                        encoding = param.substring(8).trim();
                        int l = encoding.length();
                        if(l > 0) {
                            if(encoding.charAt(0) == '"') {
                                encoding = encoding.substring(1);
                            }
                            if(encoding.charAt(l - 1) == '"') {
                                encoding = encoding.substring(0, l - 1);
                            }
                        }
                        break;
                    }
                }
            }
        }
        this.contentType = contentType;
        this.encoding = encoding;
    }
    
    /**
     * Returns the content type (without charset declaration) of the MIME type.
     * @return the content type (without charset declaration) of the MIME type.
     * Can be null if the MIME type was null.
     */
    public String getContentType() {
        return contentType;
    }
    
    /**
     * Returns the character encoding of the MIME type.
     * @return the character encoding of the MIME type. Can be null when it is
     * not specified.
     */
    public String getEncoding() {
        return encoding;
    }
}