/* * The contents of this file are subject to the Netscape Public * License Version 1.1 (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.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is the Netscape Messaging Access SDK Version 3.5 code, * released on or about June 15, 1998. * * The Initial Developer of the Original Code is Netscape Communications * Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): ______________________________________. */ /* * Copyright (c) 1997 and 1998 Netscape Communications Corporation * (http://home.netscape.com/misc/trademarks.html) */ package netscape.messaging.mime; import java.io.*; import java.lang.*; import java.util.*; /** * The MIMEBodyPart class represents a body-part of a MIME message. * MIMEBodyPart is the base class for all MIME BodyPart classes: * MIMEBasicPart, MIMEMessagePart, and MIMEMultiPart. * @author Prasad Yendluri */ public abstract class MIMEBodyPart implements Cloneable { /** * Content Disposition is Attachment. */ public static final int ATTACHMENT = 0; /** * Content Disposition is inline. */ public static final int INLINE = 1; /** * Base64 Transfer Encoding. */ public static final int BASE64 = 0; /** * Quoted Printable Transfer Encoding. */ public static final int QP = 1; /** * Binary Data with No Transfer Encoding. */ public static final int BINARY = 2; /** * 7bit Data with No Transfer Encoding. */ public static final int E7BIT = 3; /** * 8bit Data with No Transfer Encoding. */ public static final int E8BIT = 4; //=========================================================================== // // Internal members not visible at the API // //=========================================================================== public static final int UNINITIALIZED = -1; protected static final int DATABUFSZ = 8192; protected static final int HDRBUFSZ = 1024; protected String m_contentSubType; protected String m_contentTypeParams; protected String m_contentID; protected int m_contentDisposition; protected String m_contentDispParams; protected String m_contentDescription; protected static final byte[] CRLF = "\r\n".getBytes(); protected static final byte[] LF = "\n".getBytes(); protected Object m_UserObject; //=========================================================================== // // get() and set() Methods // //=========================================================================== /** * Returns Content-Type of this MIME Part. * Note: The primary content-type is determined by the * actual MIMEPart class and thus cannot be set. * @return String containing the Content-Type or * NULL if Content-Type cannot be determined. */ public abstract String getContentType (); /** * Returns Content SubType of this MIME Part. * @return String containing the Content-SubType or * NULL if Content-SubType cannot be determined. */ public String getContentSubType () { if (m_contentSubType == null) return (null); return (m_contentSubType); } /** * Sets the Content SubType of this MIME Part. * Note: The primary content-type is determined by the * actual MIMEPart class and thus cannot be set. * @param subType String to use as sub-type for this part. * @exception MIMEException If the subtype parameter is null. */ public void setContentSubType (String subType) throws MIMEException { // It is client's responsibility to check the consistency with content-type etc. // We can not really enforce this as, new sub-types can be added any time. if (subType != null) m_contentSubType = subType; else throw new MIMEException ("Invalid null Content-SubType"); } /** * Returns Content-Type Parameters of this MIME Part. * @return String containing the Content-Type Parameters or * NULL if no parameters exist. */ public String getContentTypeParams () { if (m_contentTypeParams == null) return (null); return (m_contentTypeParams); } /** * Sets Content-Type Parameters of this MIME Part. * @param params String to use as Content-Type Parameters. */ public void setContentTypeParams (String params) { // It is client's responsibility to check the consistency with content-type etc. // We can not really enforce this as, new kind of params can be added any time. if (params != null) m_contentTypeParams = params; else m_contentTypeParams = null; } /** * Returns Content-ID of this MIME Part. * @return String containing the Content-ID Parameters or * NULL if none is present. */ public String getContentID () { if (m_contentID == null) return (null); return (m_contentID); } /** * Sets Content-ID of this MIME Part. * @param cid String to use as Content-ID. */ public void setContentID (String cid) { if (cid != null) m_contentID = cid; else m_contentID = null; } /** * Returns Content-Disposition of this MIME Part. * @return Content-Disposition of this MIME Part or * -1 if none present. * @see MIMEBodyPart#ATTACHMENT * @see MIMEBodyPart#INLINE */ public int getContentDisposition () { if (m_contentDisposition == UNINITIALIZED) return (-1); else return (m_contentDisposition); } /** * Sets Content-Disposition of this MIME Part. * @param disposition Value of the Content-Disposition. Must be ATTACHMENT or INLINE. * @see MIMEBodyPart#ATTACHMENT * @see MIMEBodyPart#INLINE * @exception MIMEException If invalid disposition value is passed. */ public void setContentDisposition (int disposition) throws MIMEException { if ((disposition != MIMEBodyPart.ATTACHMENT) && (disposition != MIMEBodyPart.INLINE)) { throw new MIMEException ("Invalid ContentDisposition: " + disposition); } m_contentDisposition = disposition; } /** * Returns Content-Disposition Parameters of this MIME Part. * @return String containing the Content Disposition Parameters or * NULL if none exist. */ public String getContentDispParams () { if (m_contentDispParams == null) return (null); return (m_contentDispParams); } /** * Sets Content-Disposition Parameters of this MIME Part. * @param params String to be used as Content-Disposition Parameters. */ public void setContentDispParams (String params) { if (params != null) m_contentDispParams = params; else m_contentDispParams = null; } /** * Returns Content-Description of this MIME Part. NULL if none present. */ public String getContentDescription () { if (m_contentDescription == null) return (null); return (m_contentDescription); } /** * Sets Content-Description of this MIME Part. * @param description String to be used as Content-Description. */ public void setContentDescription (String description) { if (description != null) m_contentDescription = description; else m_contentDescription = null; } public Object clone () throws CloneNotSupportedException { return (super.clone()); } protected Object getUserObject() { return m_UserObject; } protected void setUserObject( Object userObject ) { m_UserObject = userObject; } }