Package org.apache.cocoon.generation

Source Code of org.apache.cocoon.generation.IMAPGenerator

package org.apache.cocoon.generation;

import java.io.IOException;
import java.util.Map;
import java.util.Properties;

import javax.mail.AuthenticationFailedException;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;

import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.environment.SourceResolver;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

/**
* Generates an XML listing of messages from an IMAP mail server.
*
* <p>You <b>must</b> configure this generator with "host", "user", and "pass" parameters
* which specifies the mail server host, the user to login as, and the password to use,
* respectively.  Beware that these passwords will be sent cleartext since the Generator
* does not use an SSL-enabled IMAP connection.</p>
*
* <p>Also beware that storing sensitive data, (such as mail usernames and passwords) can
* be very dangerous, so please be very careful in the method by which you send the user
* and password parameters to the generator.</p>
*
* Instructions: get the JavaMail API jar from http://java.sun.com/products/javamail/, and
* the JAF activation.jar from http://java.sun.com/beans/glasgow/jaf.html.  Put mail.jar
* and activation.jar in xml-cocoon2/lib/local/, and recompile.  These jars could actually be
* moved to lib/optional and added to jars.xml in the future.
*
* TODO Refactor all of this to use the MailCommandManager, etc...
*
* @author <a href="mailto:tony@apache.org">Tony Collen</a>
* @version CVS $Id: IMAPGenerator.java,v 1.5 2003/12/22 13:38:22 joerg Exp $
*/
public class IMAPGenerator extends AbstractGenerator {
   
    static final String URI = "http://apache.org/cocoon/imap/1.0/";
    static final String PREFIX = "imap";

    private String host;
    private String user;
    private String pass;
   
    private Properties props = new Properties();
    private Message message[] = null;
   
    public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par)
        throws ProcessingException, SAXException, IOException {
   
        // TODO: the default values should be something else...
        this.host = par.getParameter("host", "none");
        this.user = par.getParameter("user", "none");
        this.pass = par.getParameter("pass", "none");

        if (this.host.equals("none") ||
            this.user.equals("none") ||
            this.pass.equals("none")) {

            throw new ProcessingException("You must configure this generator with host, user, and pass parameters.");
        }
    }
   
    public void generate()
    throws SAXException, ProcessingException {
   
        try {
            Session sess = Session.getDefaultInstance(this.props, null);
            Store st = sess.getStore("imap");

            AttributesImpl attr = new AttributesImpl();

            log("Connecting to IMAP server @ " + this.host);
            st.connect(this.host, this.user, this.pass);

            log("Attempting to open default folder");
            Folder f = st.getFolder("inbox");

            f.open(Folder.READ_WRITE);

            log("Downloading message list from folder");
            this.message = f.getMessages();

            int i = 0;

            log("Starting XML generation");
            this.contentHandler.startDocument();
            this.contentHandler.startPrefixMapping(PREFIX, URI);

            start("imap", attr);

            start("messages", attr);

            for (i = 0; i < this.message.length; i++) {

            // loop through the messages and output XML.
            // TODO: actually use the attributes...

            start("msg", attr);

            start("subject", attr);
            data( this.message[i].getSubject() );
            end("subject");

            start("from", attr);
            data( this.message[i].getFrom()[0].toString() );
            end("from");

            start("sentDate", attr);
            data( this.message[i].getSentDate().toString() );
            end("sentDate");

            start("num", attr);
            data( Integer.toString( this.message[i].getMessageNumber() ) );
            end("num");

            end("msg");
            }

            end("messages");
            end("imap");

            this.contentHandler.endPrefixMapping(PREFIX);
            this.contentHandler.endDocument();

            log("Finished generating XML");

        } catch (AuthenticationFailedException afe) {
            throw new ProcessingException("Failed to authenticate with the IMAP server.");
        } catch (Exception e) {

            // TODO: be more specific when catching this exception...
            throw new ProcessingException( e.toString() );
        }
    }

    /**
     * Recycle the generator by removing references
     */
    public void recycle() {

        this.host = null;
        this.user = null;
        this.pass = null;

        this.props = null;
        this.message = null;

        super.recycle();

    }

    private void start(String name, AttributesImpl attr)
    throws SAXException
    {
        super.contentHandler.startElement(URI, name, PREFIX + ":" + name, attr);
        attr.clear();
    }

    private void end(String name)
    throws SAXException
    {
        super.contentHandler.endElement(URI, name, PREFIX + ":" + name);
    }
   
    private void data(String data)
    throws SAXException
    {
        super.contentHandler.characters( data.toCharArray(), 0, data.length() );
    }
   
    private void log(String msg)
    {
        if (this.getLogger().isDebugEnabled()) {
            this.getLogger().debug(msg);
        }
    }
   
}
TOP

Related Classes of org.apache.cocoon.generation.IMAPGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.