/***********************************************************************
 * Copyright (c) 2000-2006 The Apache Software Foundation.             *
 * All rights reserved.                                                *
 * ------------------------------------------------------------------- *
 * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0                      *
 *                                                                     *
 * Unless required by applicable law or agreed to in writing, software *
 * distributed under the License is distributed on an "AS IS" BASIS,   *
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or     *
 * implied.  See the License for the specific language governing       *
 * permissions and limitations under the License.                      *
 ***********************************************************************/

package org.apache.james.transport.mailets;

import javax.mail.internet.MimeMessage ;

import org.apache.mailet.GenericMailet ;
import org.apache.mailet.Mail ;

/**
 * Adds a specified header and value to the message.
 *
 * Sample configuration:
 *
 * <mailet match="All" class="AddHeader">
 *   <name>X-MailetHeader</name>
 *   <value>TheHeaderValue</value>
 * </mailet>
 *
 * @version 1.0.0, 2002-09-11
 */
public class SetMimeHeader
       extends GenericMailet {

    /**
     * The name of the header to be added.
     */
    private String headerName;

    /**
     * The value to be set for the header.
     */
    private String headerValue;

    /**
     * Initialize the mailet.
     */
    public void init() {
        headerName = getInitParameter("name");
        headerValue = getInitParameter("value");
    }

    /**
     * Takes the message and adds a header to it.
     *
     * @param mail the mail being processed
     *
     * @throws MessagingException if an error arises during message processing
     */
    public void service(Mail mail) {
        try {
            MimeMessage message = mail.getMessage () ;

            //Set the header name and value (supplied at init time).
            message.setHeader(headerName, headerValue);
            message.saveChanges();
        } catch (javax.mail.MessagingException me) {
            log (me.getMessage());
        }
    }

    /**
     * Return a string describing this mailet.
     *
     * @return a string describing this mailet
     */
    public String getMailetInfo() {
        return "SetMimeHeader Mailet" ;
    }

}


@@ -1208,16 +1208,54 @@
 ilets;%0A%0A
+import javax.mail.MessagingException;%0A
 import j
@@ -1920,16 +1920,42 @@
 d init()
+ throws MessagingException
  %7B%0A     
@@ -2041,24 +2041,298 @@
 r(%22value%22);%0A
+        %0A        // Check if needed config values are used%0A        if (headerName == null %7C%7C headerName.equals(%22%22) %7C%7C headerValue == null%0A                %7C%7C headerValue.equals(%22%22)) %7B%0A            throw new MessagingException(%22Please configure a name and a value%22);%0A        %7D%0A
     %7D%0A%0A    /

Throw MessagingException if needed config values missed. See JAMES-560