001 /** 002 * 003 * Copyright 2003-2006 The Apache Software Foundation 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package javax.mail.internet; 019 020 import java.io.IOException; 021 import java.io.OutputStream; 022 023 import javax.mail.MessagingException; 024 025 /** 026 * @version $Rev: 421852 $ $Date: 2006-07-14 03:02:19 -0700 (Fri, 14 Jul 2006) $ 027 */ 028 029 030 public class PreencodedMimeBodyPart extends MimeBodyPart { 031 // the defined transfer encoding 032 private String transferEncoding; 033 034 035 /** 036 * Create a new body part with the specified MIME transfer encoding. 037 * 038 * @param encoding The content encoding. 039 */ 040 public PreencodedMimeBodyPart(String encoding) { 041 transferEncoding = encoding; 042 } 043 044 045 /** 046 * Retieve the defined encoding for this body part. 047 * 048 * @return 049 * @exception MessagingException 050 */ 051 public String getEncoding() throws MessagingException { 052 return transferEncoding; 053 } 054 055 /** 056 * Write the body part content to the stream without applying 057 * and additional encodings. 058 * 059 * @param out The target output stream. 060 * 061 * @exception IOException 062 * @exception MessagingException 063 */ 064 public void writeTo(OutputStream out) throws IOException, MessagingException { 065 headers.writeTo(out, null); 066 // add the separater between the headers and the data portion. 067 out.write('\r'); 068 out.write('\n'); 069 // write this out without getting an encoding stream 070 getDataHandler().writeTo(out); 071 out.flush(); 072 } 073 074 075 /** 076 * Override of update headers to ensure the transfer encoding 077 * is forced to the correct type. 078 * 079 * @exception MessagingException 080 */ 081 protected void updateHeaders() throws MessagingException { 082 super.updateHeaders(); 083 setHeader("Content-Transfer-Encoding", transferEncoding); 084 } 085 } 086