package er.javamail;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileTypeMap;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.internet.MimeBodyPart;
import javax.mail.util.ByteArrayDataSource;
import com.webobjects.foundation.NSData;
/**
* <span class="en">
* Attaches a byte array or NSData to a mail. The mime type is pulled from the file name, so be sure to provide a
* reasonable one.
* </span>
*
* <span class="ja">
* byte 配列、又は NSData をメールに添付します。
* mime タイプはファイル名より取得され、正しいファイル名を渡す必要がある。
* </span>
*
* @author ak
*/
public class ERMailDataAttachment extends ERMailAttachment {
protected String _fileName;
protected String _contentID;
protected String _mimeType;
protected DataHandler _dataHandler;
protected ERMailDataAttachment(Object content) {
super(content);
}
public ERMailDataAttachment(String fileName, String id, NSData content) {
this(fileName, id, content._bytesNoCopy());
}
public ERMailDataAttachment(String fileName, String id, byte content[]) {
super(content);
_mimeType = FileTypeMap.getDefaultFileTypeMap().getContentType(fileName);
_fileName = fileName;
_contentID = id;
}
public ERMailDataAttachment(String fileName, String id, DataHandler aHandler) {
super(null);
_fileName = fileName;
_contentID = id;
_dataHandler = aHandler;
_mimeType = FileTypeMap.getDefaultFileTypeMap().getContentType(fileName);
}
/**
* <span class="ja">
* ファイル名を取得します。
* 設定されていなければ、"attachement.txt" が戻ります。
*
* @return ファイル名
* </span>
*/
public String fileName() {
if (_fileName == null)
_fileName = "attachement.txt";
return _fileName;
}
/**
* <span class="ja">
* DataHandler を取得します。
*
* @return DataHandler
* </span>
*/
public DataHandler getDataHandler() {
return _dataHandler;
}
/**
* <span class="ja">
* ファイル名をセットします。
*
* @param name - ファイル名
* </span>
*/
public void setFileName(String name) {
_fileName = name;
}
/**
* <span class="ja">
* コンテント ID を取得します。
*
* @return コンテント ID
* </span>
*/
public String contentID() {
return _contentID;
}
/**
* <span class="ja">
* コンテント ID をセットします。
*
* @param id - コンテント ID
* </span>
*/
public void setContentID(String id) {
_contentID = id;
}
@Override
protected BodyPart getBodyPart() throws MessagingException {
MimeBodyPart bp = new MimeBodyPart();
if (getDataHandler() == null) {
DataSource ds = new ByteArrayDataSource((byte[]) content(), _mimeType);
bp.setDataHandler(new DataHandler(ds));
} else {
bp.setDataHandler(getDataHandler());
if (_mimeType != null) {
bp.setHeader("Content-type", _mimeType);
}
}
if (contentID() != null) {
bp.setHeader("Content-ID", contentID());
}
bp.setFileName(fileName());
return bp;
}
}