
package org.apache.james.transport.mailets;

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

import org.apache.james.util.XMLResources;

import javax.mail.Address;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class XMLTest extends GenericMailet {
    private String[] resourceGroups = {
        "subscribeConfirm",
        "unsubscribeConfirm",
        "error",
        "unsubscribe",
        "subscribe",
        "admincommands",
        "info",
        "footer",
        "footer_html",
        "header"
    };

    private XMLResources[] xmlResources = new XMLResources[resourceGroups.length];

    public void init() throws javax.mail.MessagingException {
        java.io.File xmlFile = null;
        try {
            xmlFile = new java.io.File(getInitParameter("resources"));

            java.util.Map parameters = new java.util.HashMap();
            parameters.put("LIST_NAME", getInitParameter("LIST_NAME"));
            parameters.put("DOMAIN_NAME", getInitParameter("DOMAIN_NAME"));

            for (int i = 0; i < xmlResources.length; i++) {
                xmlResources[i] = new XMLResources();
                xmlResources[i].init(xmlFile, resourceGroups[i], "", parameters);
            }
        } catch (Exception e) {
            log(e.getMessage(), e);
            throw new javax.mail.MessagingException("Can't initialize:", e);
        }
    }

    public void service(Mail mail) throws javax.mail.MessagingException {
        MimeMessage response = (MimeMessage)mail.getMessage().reply(false);
        if (response.getFrom() == null) {
            response.setFrom(((MailAddress)mail.getRecipients().iterator().next()).toInternetAddress());
        }

        if (response.getAllRecipients() == null) {
            response.setRecipients(MimeMessage.RecipientType.TO, mail.getSender().toString());
        }

        response.setSubject("XML Resource Test");

        java.util.Map parameters = new java.util.HashMap();
        parameters.put("SENDER_ADDR", response.getAllRecipients()[0].toString());
        parameters.put("ERROR_MESSAGE", getInitParameter("ERROR_MESSAGE"));
        parameters.put("MEMBER_LIST", getInitParameter("MEMBER_LIST"));

        StringBuffer msgText = new StringBuffer(8192);
        for (int i = 0; i < xmlResources.length; i++) {
            msgText.append(resourceGroups[i]).append(": ").append(xmlResources[i].getString("text", parameters)).append("\r\n");
        }

        response.setText(msgText.toString());

        response.saveChanges();
        getMailetContext().sendMail(response);
        mail.setState(Mail.GHOST);
    }

    public String getMailetInfo() {
        return "XMLResource Test Mailet";
    }
}
