001/**************************************************************** 002 * Licensed to the Apache Software Foundation (ASF) under one * 003 * or more contributor license agreements. See the NOTICE file * 004 * distributed with this work for additional information * 005 * regarding copyright ownership. The ASF licenses this file * 006 * to you under the Apache License, Version 2.0 (the * 007 * "License"); you may not use this file except in compliance * 008 * with the License. You may obtain a copy of the License at * 009 * * 010 * http://www.apache.org/licenses/LICENSE-2.0 * 011 * * 012 * Unless required by applicable law or agreed to in writing, * 013 * software distributed under the License is distributed on an * 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 015 * KIND, either express or implied. See the License for the * 016 * specific language governing permissions and limitations * 017 * under the License. * 018 ****************************************************************/ 019 020package org.apache.james.mime4j.message; 021 022import java.util.Collection; 023import java.util.Date; 024import java.util.Map; 025import java.util.TimeZone; 026 027import org.apache.james.mime4j.codec.DecodeMonitor; 028import org.apache.james.mime4j.dom.Header; 029import org.apache.james.mime4j.dom.Message; 030import org.apache.james.mime4j.dom.address.Address; 031import org.apache.james.mime4j.dom.address.Mailbox; 032import org.apache.james.mime4j.dom.field.AddressListField; 033import org.apache.james.mime4j.dom.field.ContentDispositionField; 034import org.apache.james.mime4j.dom.field.ContentTransferEncodingField; 035import org.apache.james.mime4j.dom.field.ContentTypeField; 036import org.apache.james.mime4j.dom.field.DateTimeField; 037import org.apache.james.mime4j.dom.field.FieldName; 038import org.apache.james.mime4j.dom.field.MailboxField; 039import org.apache.james.mime4j.dom.field.MailboxListField; 040import org.apache.james.mime4j.dom.field.UnstructuredField; 041import org.apache.james.mime4j.field.ContentTransferEncodingFieldImpl; 042import org.apache.james.mime4j.field.ContentTypeFieldImpl; 043import org.apache.james.mime4j.field.Fields; 044import org.apache.james.mime4j.field.MimeVersionFieldLenientImpl; 045import org.apache.james.mime4j.stream.RawField; 046import org.apache.james.mime4j.util.MimeUtil; 047 048/** 049 * Default implementation of {@link Message}. 050 */ 051public class MessageImpl extends AbstractMessage { 052 053 /** 054 * Creates a new empty <code>Message</code>. 055 */ 056 public MessageImpl() { 057 super(); 058 Header header = obtainHeader(); 059 RawField rawField = new RawField(FieldName.MIME_VERSION, "1.0"); 060 header.addField(MimeVersionFieldLenientImpl.PARSER.parse(rawField, DecodeMonitor.SILENT)); 061 } 062 063 @Override 064 protected String newUniqueBoundary() { 065 return MimeUtil.createUniqueBoundary(); 066 } 067 068 @Override 069 protected UnstructuredField newMessageId(String hostname) { 070 return Fields.messageId(hostname); 071 } 072 073 @Override 074 protected DateTimeField newDate(Date date, TimeZone zone) { 075 return Fields.date(FieldName.DATE, date, zone); 076 } 077 078 @Override 079 protected MailboxField newMailbox(String fieldName, Mailbox mailbox) { 080 return Fields.mailbox(fieldName, mailbox); 081 } 082 083 @Override 084 protected MailboxListField newMailboxList(String fieldName, 085 Collection<Mailbox> mailboxes) { 086 return Fields.mailboxList(fieldName, mailboxes); 087 } 088 089 @Override 090 protected AddressListField newAddressList(String fieldName, 091 Collection<? extends Address> addresses) { 092 return Fields.addressList(fieldName, addresses); 093 } 094 095 @Override 096 protected UnstructuredField newSubject(String subject) { 097 return Fields.subject(subject); 098 } 099 100 @Override 101 protected ContentDispositionField newContentDisposition( 102 String dispositionType, String filename, long size, 103 Date creationDate, Date modificationDate, Date readDate) { 104 return Fields.contentDisposition(dispositionType, filename, size, 105 creationDate, modificationDate, readDate); 106 } 107 108 @Override 109 protected ContentDispositionField newContentDisposition( 110 String dispositionType, Map<String, String> parameters) { 111 return Fields.contentDisposition(dispositionType, parameters); 112 } 113 114 @Override 115 protected ContentTypeField newContentType(String mimeType, 116 Map<String, String> parameters) { 117 return Fields.contentType(mimeType, parameters); 118 } 119 120 @Override 121 protected ContentTransferEncodingField newContentTransferEncoding( 122 String contentTransferEncoding) { 123 return Fields.contentTransferEncoding(contentTransferEncoding); 124 } 125 126 @Override 127 protected String calcTransferEncoding(ContentTransferEncodingField f) { 128 return ContentTransferEncodingFieldImpl.getEncoding(f); 129 } 130 131 @Override 132 protected String calcMimeType(ContentTypeField child, ContentTypeField parent) { 133 return ContentTypeFieldImpl.getMimeType(child, parent); 134 } 135 136 @Override 137 protected String calcCharset(ContentTypeField contentType) { 138 return ContentTypeFieldImpl.getCharset(contentType); 139 } 140 141}