noel        2003/02/05 22:25:59

  Modified:    src/java/org/apache/james/fetchmail FetchMail.java
                        FetchScheduler.java FetchScheduler.xinfo
                        ReaderInputStream.java
  Log:
  crlf conversion
  
  Revision  Changes    Path
  1.2       +367 -367  jakarta-james/src/java/org/apache/james/fetchmail/FetchMail.java
  
  Index: FetchMail.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-james/src/java/org/apache/james/fetchmail/FetchMail.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FetchMail.java    5 Feb 2003 04:31:40 -0000       1.1
  +++ FetchMail.java    6 Feb 2003 06:25:58 -0000       1.2
  @@ -1,367 +1,367 @@
  -/*
  - * Copyright (C) The Apache Software Foundation. All rights reserved.
  - *
  - * This software is published under the terms of the Apache Software License
  - * version 1.1, a copy of which has been included with this distribution in
  - * the LICENSE file.
  - */
  -package org.apache.james.fetchmail;
  -
  -import java.io.IOException;
  -import java.io.InputStream;
  -import java.net.SocketException;
  -import java.util.Enumeration;
  -import java.util.Vector;
  -import java.util.*;
  -import java.io.*;
  -import javax.mail.*;
  -import javax.mail.event.*;
  -import javax.mail.internet.*;
  -import javax.activation.*;
  -
  -import org.apache.avalon.cornerstone.services.scheduler.Target;
  -import org.apache.avalon.framework.component.ComponentException;
  -import org.apache.avalon.framework.component.ComponentManager;
  -import org.apache.avalon.framework.component.Composable;
  -import org.apache.avalon.framework.component.DefaultComponentManager;
  -import org.apache.avalon.framework.configuration.Configurable;
  -import org.apache.avalon.framework.configuration.Configuration;
  -import org.apache.avalon.framework.configuration.ConfigurationException;
  -import org.apache.avalon.framework.logger.AbstractLogEnabled;
  -import org.apache.commons.net.pop3.POP3Client;
  -import org.apache.commons.net.pop3.POP3MessageInfo;
  -import org.apache.james.services.MailServer;
  -import org.apache.mailet.*;
  -import org.apache.james.core.MailImpl;
  -
  -/**
  - *
  - * A class which fetches mail from a single account and inserts it
  - * into the incoming spool
  - *
  - * $Id$
  - *
  - */
  -public class FetchMail extends AbstractLogEnabled implements Configurable, Target {
  -    /**
  -     * The MailServer service
  -     */
  -    private MailServer server;
  -    /**
  -     * The user to send the fetched mail to
  -     */
  -    private MailAddress recipient;
  -
  -    /**
  -     * Don't parse header looking for recipient
  -     */
  -    private boolean ignoreOriginalRecipient;
  -    /**
  -     * The unique, identifying name for this task
  -     */
  -    private String fetchTaskName;
  -    /**
  -     * The POP3 server host name for this fetch task
  -     */
  -    private String popHost;
  -    /**
  -     * The POP3 user name for this fetch task
  -     */
  -    private String popUser;
  -    /**
  -     * The POP3 user password for this fetch task
  -     */
  -    private String popPass;
  -
  -    /**
  -     * Flag to determine if you want to leave messages on server
  -     * If so unseen messages will be marked as seen
  -     */
  -    private boolean popLeaveOnServer = false;
  -
  -
  -    /**
  -     * The name of the javamail provider we want to user (pop3,imap,nntp,etc...)
  -     *
  -     */
  -    private String javaMailProviderName = "pop3";
  -
  -    /**
  -     * The name of the folder to fetch from the javamail provider
  -     *
  -     */
  -    private String javaMailFolderName = "INBOX";
  -
  -
  -    /**
  -     * @see 
org.apache.avalon.cornerstone.services.scheduler.Target#targetTriggered(String)
  -     */
  -    private boolean fetching = false;
  -
  -
  -    public void targetTriggered(String arg0) {
  -
  -        //
  -        // if we are already fetching then just return
  -        if (fetching) return;
  -        fetching = true;
  -
  -
  -        if (getLogger().isDebugEnabled()) {
  -            getLogger().debug(fetchTaskName + " fetcher starting fetch");
  -        }
  -
  -        Store store = null;
  -        Session session = null;
  -        Folder folder = null;
  -
  -
  -        // Get a Properties object
  -        Properties props = System.getProperties();
  -
  -        // Get a Session object
  -        session = Session.getDefaultInstance(props, null);
  -        //  session.setDebug(debug);
  -
  -        // Get a Store object
  -        try {
  -            store = session.getStore(javaMailProviderName);
  -
  -            // Connect
  -            if (popHost != null || popUser != null || popPass != null)
  -                store.connect(popHost, popUser, popPass);
  -            else
  -                store.connect();
  -
  -            // Open the Folder
  -            folder = store.getFolder(javaMailFolderName);
  -            if (folder == null) {
  -                getLogger().debug(fetchTaskName + " No default folder");
  -            }
  -
  -
  -            //    // try to open read/write and if that fails try read-only
  -            try {
  -                folder.open(Folder.READ_WRITE);
  -            } catch (MessagingException ex) {
  -                try {
  -                    folder.open(Folder.READ_ONLY);
  -                } catch (MessagingException ex2) {
  -                    getLogger().debug(fetchTaskName + " Failed to open folder!");
  -                    store.close();
  -                }
  -            }
  -
  -            int totalMessages = folder.getMessageCount();
  -            if (totalMessages == 0) {
  -                getLogger().debug(fetchTaskName + " Empty folder");
  -                folder.close(false);
  -                store.close();
  -                fetching = false;
  -                return;
  -            }
  -
  -            Message[] msgs = folder.getMessages();
  -            Message[] received = new Message[folder.getUnreadMessageCount()];
  -
  -            // Use a suitable FetchProfile
  -            FetchProfile fp = new FetchProfile();
  -            fp.add(FetchProfile.Item.ENVELOPE);
  -            fp.add(FetchProfile.Item.CONTENT_INFO);
  -            fp.add(FetchProfile.Item.FLAGS);
  -            fp.add("X-Mailer");
  -
  -            folder.fetch(msgs, fp);
  -
  -            int j = 0;
  -            for (int i = 0; i < msgs.length; i++) {
  -                Flags flags = msgs[i].getFlags();
  -                MimeMessage message = (MimeMessage) msgs[i];
  -
  -                if (!msgs[i].isSet(Flags.Flag.SEEN)) {
  -
  -                    //
  -                    // saved recieved messages for furthe processing...
  -                    received[j++] = msgs[i];
  -                    Collection recipients = new ArrayList(1);
  -
  -                    try {
  -                        if (!ignoreOriginalRecipient) {
  -                            String er = getEnvelopeRecipient(message);
  -                            if (er != null) {
  -                                recipients.add(new MailAddress(er));
  -                                getLogger().info("Using original envelope recipient 
as new envelope recipient");
  -                            } else {
  -                                Address[] to = message.getAllRecipients();
  -                                if (to.length == 1) {
  -                                    recipients.add(new
  -                                            MailAddress((InternetAddress) to[0]));
  -                                    getLogger().info("Using To: header address as 
new envelope recipient");
  -                                } else {
  -                                    getLogger().info("Using configured recipient as 
new envelope recipient");
  -                                    recipients.add(recipient);
  -                                }
  -                            }
  -                        } else {
  -                            getLogger().info("Using configured recipient as new 
envelope recipient");
  -                            recipients.add(recipient);
  -                        }
  -                    } catch (ParseException pe) {
  -                        recipients.add(recipient);
  -                    }
  -
  -                    MailImpl mail = new MailImpl(server.getId(), new
  -                            MailAddress((InternetAddress) message.getFrom()[0]), 
recipients, message);
  -
  -                    // Lets see if this mail has been bouncing by counting
  -                    // the   X-fetched-from headers
  -                    // if it is then move it to the ERROR repository
  -                    Enumeration enum = message.getMatchingHeaderLines(new
  -                            String[]{"X-fetched-from"});
  -                    int count = 1;
  -                    while (enum.hasMoreElements()) {
  -                        Object o = enum.nextElement();
  -                        count++;
  -                    }
  -                    if (count > 3) {
  -                        mail.setState(mail.ERROR);
  -                        mail.setErrorMessage("This mail from FetchMail task " + 
fetchTaskName + " seems to be bounceing!");
  -                        getLogger().error("A message from FetchMail task " + 
fetchTaskName + " seems to be bounceing! Moved to Error repository");
  -                    }
  -
  -                    // Send to spooler
  -                    try {
  -                        server.sendMail(mail);
  -                        getLogger().debug("Spooled message to " +
  -                                recipients.toString());
  -
  -                        //
  -                        // logging if needed
  -                        getLogger().debug("Sent message " + msgs[i].toString());
  -
  -                    } catch (MessagingException innerE) {
  -                        getLogger().error("can't insert message " + 
msgs[i].toString());
  -                    } /*catch (IOException ioE) {
  -                    getLogger().error("can't convert message to a mime message " + 
ioE.getMessage());
  -                    }*/
  -                }
  -            }
  -            if (popLeaveOnServer) {
  -                Flags f = new Flags();
  -                f.add(Flags.Flag.SEEN);
  -                folder.setFlags(received, f, true);
  -                folder.close(false);
  -            } else {
  -                Flags f = new Flags();
  -                f.add(Flags.Flag.DELETED);
  -
  -                folder.setFlags(received, f, true);
  -                folder.close(true);
  -            }
  -
  -            store.close();
  -        } catch (MessagingException ex) {
  -            getLogger().debug(fetchTaskName + ex.getMessage());
  -        }
  -        fetching = false;
  -    }
  -
  -    /**
  -     * @see 
org.apache.avalon.framework.component.Composable#compose(ComponentManager)
  -     */
  -    public void compose(final ComponentManager componentManager) throws 
ComponentException {
  -        try {
  -            server = (MailServer) componentManager.lookup(MailServer.ROLE);
  -        } catch (ClassCastException cce) {
  -            StringBuffer errorBuffer =
  -                    new StringBuffer(128).append("Component 
").append(MailServer.ROLE).append(
  -                            "does not implement the required interface.");
  -            throw new ComponentException(errorBuffer.toString());
  -        }
  -    }
  -
  -
  -    /**
  -     * Try and parse the "for" parameter from a Received header
  -     * Maybe not the most accurate parsing in the world but it should do
  -     * I opted not to use ORO (maybe I should have)
  -     */
  -    private String getEnvelopeRecipient(MimeMessage msg) {
  -        try {
  -            Enumeration enum = msg.getMatchingHeaderLines(new 
String[]{"Received"});
  -            while (enum.hasMoreElements()) {
  -                String received = (String) enum.nextElement();
  -
  -                int nextSearchAt = 0;
  -                int i = 0;
  -                int start = 0;
  -                int end = 0;
  -                boolean hasBracket = false;
  -                boolean usableAddress = false;
  -                while (!usableAddress && (i != -1)) {
  -                    hasBracket = false;
  -                    i = received.indexOf("for ", nextSearchAt);
  -                    if (i > 0) {
  -                        start = i + 4;
  -                        end = 0;
  -                        nextSearchAt = start;
  -                        for (int c = start; c < received.length(); c++) {
  -                            char ch = received.charAt(c);
  -                            switch (ch) {
  -                                case '<':
  -                                    hasBracket = true;
  -                                    continue;
  -                                case '@':
  -                                    usableAddress = true;
  -                                    continue;
  -                                case ' ':
  -                                    end = c;
  -                                    break;
  -                                case ';':
  -                                    end = c;
  -                                    break;
  -                            }
  -                            if (end > 0)
  -                                break;
  -                        }
  -                    }
  -                }
  -                if (usableAddress) {
  -                    // lets try and grab the email address
  -                    String mailFor = received.substring(start, end);
  -
  -                    // strip the <> around the address if there are any
  -                    if (mailFor.startsWith("<") && mailFor.endsWith(">"))
  -                        mailFor = mailFor.substring(1, (mailFor.length() - 1));
  -
  -                    return mailFor;
  -                }
  -            }
  -        } catch (MessagingException me) {
  -            getLogger().info("No Recieved headers found");
  -        }
  -        return null;
  -    }
  -
  -    /**
  -     * @see 
org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
  -     */
  -    public void configure(Configuration conf) throws ConfigurationException {
  -        this.popHost = conf.getChild("host").getValue();
  -        this.popUser = conf.getChild("user").getValue();
  -        this.popPass = conf.getChild("password").getValue();
  -        this.fetchTaskName = conf.getAttribute("name");
  -        this.javaMailProviderName = 
conf.getChild("javaMailProviderName").getValue();
  -        this.javaMailFolderName = conf.getChild("javaMailFolderName").getValue();
  -        try {
  -            this.recipient = new 
MailAddress(conf.getChild("recipient").getValue());
  -        } catch (ParseException pe) {
  -            throw new ConfigurationException("Invalid recipient address 
specified");
  -        }
  -        this.ignoreOriginalRecipient = 
conf.getChild("recipient").getAttributeAsBoolean("ignorercpt-header");
  -        this.popLeaveOnServer = conf.getChild("leaveonserver").getValueAsBoolean();
  -        if (getLogger().isDebugEnabled()) {
  -            getLogger().info("Configured FetchMail fetch task " + fetchTaskName);
  -        }
  -    }
  -}
  +/*
  + * Copyright (C) The Apache Software Foundation. All rights reserved.
  + *
  + * This software is published under the terms of the Apache Software License
  + * version 1.1, a copy of which has been included with this distribution in
  + * the LICENSE file.
  + */
  +package org.apache.james.fetchmail;
  +
  +import java.io.IOException;
  +import java.io.InputStream;
  +import java.net.SocketException;
  +import java.util.Enumeration;
  +import java.util.Vector;
  +import java.util.*;
  +import java.io.*;
  +import javax.mail.*;
  +import javax.mail.event.*;
  +import javax.mail.internet.*;
  +import javax.activation.*;
  +
  +import org.apache.avalon.cornerstone.services.scheduler.Target;
  +import org.apache.avalon.framework.component.ComponentException;
  +import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.component.Composable;
  +import org.apache.avalon.framework.component.DefaultComponentManager;
  +import org.apache.avalon.framework.configuration.Configurable;
  +import org.apache.avalon.framework.configuration.Configuration;
  +import org.apache.avalon.framework.configuration.ConfigurationException;
  +import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +import org.apache.commons.net.pop3.POP3Client;
  +import org.apache.commons.net.pop3.POP3MessageInfo;
  +import org.apache.james.services.MailServer;
  +import org.apache.mailet.*;
  +import org.apache.james.core.MailImpl;
  +
  +/**
  + *
  + * A class which fetches mail from a single account and inserts it
  + * into the incoming spool
  + *
  + * $Id$
  + *
  + */
  +public class FetchMail extends AbstractLogEnabled implements Configurable, Target {
  +    /**
  +     * The MailServer service
  +     */
  +    private MailServer server;
  +    /**
  +     * The user to send the fetched mail to
  +     */
  +    private MailAddress recipient;
  +
  +    /**
  +     * Don't parse header looking for recipient
  +     */
  +    private boolean ignoreOriginalRecipient;
  +    /**
  +     * The unique, identifying name for this task
  +     */
  +    private String fetchTaskName;
  +    /**
  +     * The POP3 server host name for this fetch task
  +     */
  +    private String popHost;
  +    /**
  +     * The POP3 user name for this fetch task
  +     */
  +    private String popUser;
  +    /**
  +     * The POP3 user password for this fetch task
  +     */
  +    private String popPass;
  +
  +    /**
  +     * Flag to determine if you want to leave messages on server
  +     * If so unseen messages will be marked as seen
  +     */
  +    private boolean popLeaveOnServer = false;
  +
  +
  +    /**
  +     * The name of the javamail provider we want to user (pop3,imap,nntp,etc...)
  +     *
  +     */
  +    private String javaMailProviderName = "pop3";
  +
  +    /**
  +     * The name of the folder to fetch from the javamail provider
  +     *
  +     */
  +    private String javaMailFolderName = "INBOX";
  +
  +
  +    /**
  +     * @see 
org.apache.avalon.cornerstone.services.scheduler.Target#targetTriggered(String)
  +     */
  +    private boolean fetching = false;
  +
  +
  +    public void targetTriggered(String arg0) {
  +
  +        //
  +        // if we are already fetching then just return
  +        if (fetching) return;
  +        fetching = true;
  +
  +
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug(fetchTaskName + " fetcher starting fetch");
  +        }
  +
  +        Store store = null;
  +        Session session = null;
  +        Folder folder = null;
  +
  +
  +        // Get a Properties object
  +        Properties props = System.getProperties();
  +
  +        // Get a Session object
  +        session = Session.getDefaultInstance(props, null);
  +        //  session.setDebug(debug);
  +
  +        // Get a Store object
  +        try {
  +            store = session.getStore(javaMailProviderName);
  +
  +            // Connect
  +            if (popHost != null || popUser != null || popPass != null)
  +                store.connect(popHost, popUser, popPass);
  +            else
  +                store.connect();
  +
  +            // Open the Folder
  +            folder = store.getFolder(javaMailFolderName);
  +            if (folder == null) {
  +                getLogger().debug(fetchTaskName + " No default folder");
  +            }
  +
  +
  +            //    // try to open read/write and if that fails try read-only
  +            try {
  +                folder.open(Folder.READ_WRITE);
  +            } catch (MessagingException ex) {
  +                try {
  +                    folder.open(Folder.READ_ONLY);
  +                } catch (MessagingException ex2) {
  +                    getLogger().debug(fetchTaskName + " Failed to open folder!");
  +                    store.close();
  +                }
  +            }
  +
  +            int totalMessages = folder.getMessageCount();
  +            if (totalMessages == 0) {
  +                getLogger().debug(fetchTaskName + " Empty folder");
  +                folder.close(false);
  +                store.close();
  +                fetching = false;
  +                return;
  +            }
  +
  +            Message[] msgs = folder.getMessages();
  +            Message[] received = new Message[folder.getUnreadMessageCount()];
  +
  +            // Use a suitable FetchProfile
  +            FetchProfile fp = new FetchProfile();
  +            fp.add(FetchProfile.Item.ENVELOPE);
  +            fp.add(FetchProfile.Item.CONTENT_INFO);
  +            fp.add(FetchProfile.Item.FLAGS);
  +            fp.add("X-Mailer");
  +
  +            folder.fetch(msgs, fp);
  +
  +            int j = 0;
  +            for (int i = 0; i < msgs.length; i++) {
  +                Flags flags = msgs[i].getFlags();
  +                MimeMessage message = (MimeMessage) msgs[i];
  +
  +                if (!msgs[i].isSet(Flags.Flag.SEEN)) {
  +
  +                    //
  +                    // saved recieved messages for furthe processing...
  +                    received[j++] = msgs[i];
  +                    Collection recipients = new ArrayList(1);
  +
  +                    try {
  +                        if (!ignoreOriginalRecipient) {
  +                            String er = getEnvelopeRecipient(message);
  +                            if (er != null) {
  +                                recipients.add(new MailAddress(er));
  +                                getLogger().info("Using original envelope recipient 
as new envelope recipient");
  +                            } else {
  +                                Address[] to = message.getAllRecipients();
  +                                if (to.length == 1) {
  +                                    recipients.add(new
  +                                            MailAddress((InternetAddress) to[0]));
  +                                    getLogger().info("Using To: header address as 
new envelope recipient");
  +                                } else {
  +                                    getLogger().info("Using configured recipient as 
new envelope recipient");
  +                                    recipients.add(recipient);
  +                                }
  +                            }
  +                        } else {
  +                            getLogger().info("Using configured recipient as new 
envelope recipient");
  +                            recipients.add(recipient);
  +                        }
  +                    } catch (ParseException pe) {
  +                        recipients.add(recipient);
  +                    }
  +
  +                    MailImpl mail = new MailImpl(server.getId(), new
  +                            MailAddress((InternetAddress) message.getFrom()[0]), 
recipients, message);
  +
  +                    // Lets see if this mail has been bouncing by counting
  +                    // the   X-fetched-from headers
  +                    // if it is then move it to the ERROR repository
  +                    Enumeration enum = message.getMatchingHeaderLines(new
  +                            String[]{"X-fetched-from"});
  +                    int count = 1;
  +                    while (enum.hasMoreElements()) {
  +                        Object o = enum.nextElement();
  +                        count++;
  +                    }
  +                    if (count > 3) {
  +                        mail.setState(mail.ERROR);
  +                        mail.setErrorMessage("This mail from FetchMail task " + 
fetchTaskName + " seems to be bounceing!");
  +                        getLogger().error("A message from FetchMail task " + 
fetchTaskName + " seems to be bounceing! Moved to Error repository");
  +                    }
  +
  +                    // Send to spooler
  +                    try {
  +                        server.sendMail(mail);
  +                        getLogger().debug("Spooled message to " +
  +                                recipients.toString());
  +
  +                        //
  +                        // logging if needed
  +                        getLogger().debug("Sent message " + msgs[i].toString());
  +
  +                    } catch (MessagingException innerE) {
  +                        getLogger().error("can't insert message " + 
msgs[i].toString());
  +                    } /*catch (IOException ioE) {
  +                    getLogger().error("can't convert message to a mime message " + 
ioE.getMessage());
  +                    }*/
  +                }
  +            }
  +            if (popLeaveOnServer) {
  +                Flags f = new Flags();
  +                f.add(Flags.Flag.SEEN);
  +                folder.setFlags(received, f, true);
  +                folder.close(false);
  +            } else {
  +                Flags f = new Flags();
  +                f.add(Flags.Flag.DELETED);
  +
  +                folder.setFlags(received, f, true);
  +                folder.close(true);
  +            }
  +
  +            store.close();
  +        } catch (MessagingException ex) {
  +            getLogger().debug(fetchTaskName + ex.getMessage());
  +        }
  +        fetching = false;
  +    }
  +
  +    /**
  +     * @see 
org.apache.avalon.framework.component.Composable#compose(ComponentManager)
  +     */
  +    public void compose(final ComponentManager componentManager) throws 
ComponentException {
  +        try {
  +            server = (MailServer) componentManager.lookup(MailServer.ROLE);
  +        } catch (ClassCastException cce) {
  +            StringBuffer errorBuffer =
  +                    new StringBuffer(128).append("Component 
").append(MailServer.ROLE).append(
  +                            "does not implement the required interface.");
  +            throw new ComponentException(errorBuffer.toString());
  +        }
  +    }
  +
  +
  +    /**
  +     * Try and parse the "for" parameter from a Received header
  +     * Maybe not the most accurate parsing in the world but it should do
  +     * I opted not to use ORO (maybe I should have)
  +     */
  +    private String getEnvelopeRecipient(MimeMessage msg) {
  +        try {
  +            Enumeration enum = msg.getMatchingHeaderLines(new String[]{"Received"});
  +            while (enum.hasMoreElements()) {
  +                String received = (String) enum.nextElement();
  +
  +                int nextSearchAt = 0;
  +                int i = 0;
  +                int start = 0;
  +                int end = 0;
  +                boolean hasBracket = false;
  +                boolean usableAddress = false;
  +                while (!usableAddress && (i != -1)) {
  +                    hasBracket = false;
  +                    i = received.indexOf("for ", nextSearchAt);
  +                    if (i > 0) {
  +                        start = i + 4;
  +                        end = 0;
  +                        nextSearchAt = start;
  +                        for (int c = start; c < received.length(); c++) {
  +                            char ch = received.charAt(c);
  +                            switch (ch) {
  +                                case '<':
  +                                    hasBracket = true;
  +                                    continue;
  +                                case '@':
  +                                    usableAddress = true;
  +                                    continue;
  +                                case ' ':
  +                                    end = c;
  +                                    break;
  +                                case ';':
  +                                    end = c;
  +                                    break;
  +                            }
  +                            if (end > 0)
  +                                break;
  +                        }
  +                    }
  +                }
  +                if (usableAddress) {
  +                    // lets try and grab the email address
  +                    String mailFor = received.substring(start, end);
  +
  +                    // strip the <> around the address if there are any
  +                    if (mailFor.startsWith("<") && mailFor.endsWith(">"))
  +                        mailFor = mailFor.substring(1, (mailFor.length() - 1));
  +
  +                    return mailFor;
  +                }
  +            }
  +        } catch (MessagingException me) {
  +            getLogger().info("No Recieved headers found");
  +        }
  +        return null;
  +    }
  +
  +    /**
  +     * @see 
org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
  +     */
  +    public void configure(Configuration conf) throws ConfigurationException {
  +        this.popHost = conf.getChild("host").getValue();
  +        this.popUser = conf.getChild("user").getValue();
  +        this.popPass = conf.getChild("password").getValue();
  +        this.fetchTaskName = conf.getAttribute("name");
  +        this.javaMailProviderName = 
conf.getChild("javaMailProviderName").getValue();
  +        this.javaMailFolderName = conf.getChild("javaMailFolderName").getValue();
  +        try {
  +            this.recipient = new MailAddress(conf.getChild("recipient").getValue());
  +        } catch (ParseException pe) {
  +            throw new ConfigurationException("Invalid recipient address specified");
  +        }
  +        this.ignoreOriginalRecipient = 
conf.getChild("recipient").getAttributeAsBoolean("ignorercpt-header");
  +        this.popLeaveOnServer = conf.getChild("leaveonserver").getValueAsBoolean();
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().info("Configured FetchMail fetch task " + fetchTaskName);
  +        }
  +    }
  +}
  
  
  
  1.2       +115 -115  
jakarta-james/src/java/org/apache/james/fetchmail/FetchScheduler.java
  
  Index: FetchScheduler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-james/src/java/org/apache/james/fetchmail/FetchScheduler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FetchScheduler.java       5 Feb 2003 04:31:40 -0000       1.1
  +++ FetchScheduler.java       6 Feb 2003 06:25:58 -0000       1.2
  @@ -1,115 +1,115 @@
  -/*
  - * Copyright (C) The Apache Software Foundation. All rights reserved.
  - *
  - * This software is published under the terms of the Apache Software License
  - * version 1.1, a copy of which has been included with this distribution in
  - * the LICENSE file.
  - */
  -package org.apache.james.fetchmail;
  -
  -import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
  -import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
  -import org.apache.avalon.framework.activity.Disposable;
  -import org.apache.avalon.framework.activity.Initializable;
  -import org.apache.avalon.framework.component.Component;
  -import org.apache.avalon.framework.component.ComponentException;
  -import org.apache.avalon.framework.component.ComponentManager;
  -import org.apache.avalon.framework.component.Composable;
  -import org.apache.avalon.framework.component.DefaultComponentManager;
  -import org.apache.avalon.framework.configuration.Configurable;
  -import org.apache.avalon.framework.configuration.Configuration;
  -import org.apache.avalon.framework.configuration.ConfigurationException;
  -import org.apache.avalon.framework.logger.AbstractLogEnabled;
  -import org.apache.james.services.MailServer;
  -
  -import java.util.ArrayList;
  -import java.util.Iterator;
  -
  -/**
  - *  A class to instantiate and schedule a set of mail fetching tasks
  - *
  - * $Id$
  - *
  - *  @see org.apache.james.fetchmail.FetchMail#configure(Configuration) FetchMail
  - *  
  - */
  -public class FetchScheduler
  -    extends AbstractLogEnabled
  -    implements Component, Composable, Configurable, Initializable, Disposable {
  -
  -    /**
  -     * Configuration object for this service
  -     */
  -    private Configuration conf;
  -
  -    /**
  -     * The component manager that allows access to the system services
  -     */
  -    private ComponentManager compMgr;
  -
  -    /**
  -     * The scheduler service that is used to trigger fetch tasks.
  -     */
  -    private TimeScheduler scheduler;
  -
  -    /**
  -     * Whether this service is enabled.
  -     */
  -    private volatile boolean enabled = false;
  -
  -    private ArrayList theFetchTaskNames = new ArrayList();
  -
  -    /**
  -     * @see 
org.apache.avalon.framework.component.Composable#compose(ComponentManager)
  -     */
  -    public void compose(ComponentManager comp) throws ComponentException {
  -        compMgr = comp;
  -    }
  -
  -    /**
  -     * @see 
org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
  -     */
  -    public void configure(Configuration conf) throws ConfigurationException {
  -        this.conf = conf;
  -    }
  -
  -    /**
  -     * @see org.apache.avalon.framework.activity.Initializable#initialize()
  -     */
  -    public void initialize() throws Exception {
  -        enabled = conf.getAttributeAsBoolean("enabled", false);
  -        if (enabled) {
  -            scheduler = (TimeScheduler) compMgr.lookup(TimeScheduler.ROLE);
  -            Configuration[] fetchConfs = conf.getChildren("fetch");
  -            for (int i = 0; i < fetchConfs.length; i++) {
  -                FetchMail fetcher = new FetchMail();
  -                Configuration fetchConf = fetchConfs[i];
  -                String fetchTaskName = fetchConf.getAttribute("name");
  -                fetcher.enableLogging(getLogger().getChildLogger(fetchTaskName));
  -                fetcher.compose(compMgr);
  -                fetcher.configure(fetchConf);
  -                Integer interval = new 
Integer(fetchConf.getChild("interval").getValue());
  -                PeriodicTimeTrigger fetchTrigger = new PeriodicTimeTrigger(0, 
interval.intValue());
  -                scheduler.addTrigger(fetchTaskName, fetchTrigger, fp);
  -                theFetchTaskNames.add(fetchTaskName);
  -            }
  -            getLogger().info("FetchMail Started");
  -        } else {
  -            getLogger().info("FetchMail Disabled");
  -        }
  -    }
  -
  -    /**
  -     * @see org.apache.avalon.framework.activity.Disposable#dispose()
  -     */
  -    public void dispose() {
  -        if (enabled) {
  -            getLogger().info( "FetchMail dispose..." );
  -            Iterator nameIterator = theFetchTaskNames.iterator();
  -            while (nameIterator.hasNext()) {
  -                scheduler.removeTrigger((String)nameIterator.next());
  -            }
  -            getLogger().info( "FetchMail ...dispose end" );
  -        }
  -   }
  -}
  +/*
  + * Copyright (C) The Apache Software Foundation. All rights reserved.
  + *
  + * This software is published under the terms of the Apache Software License
  + * version 1.1, a copy of which has been included with this distribution in
  + * the LICENSE file.
  + */
  +package org.apache.james.fetchmail;
  +
  +import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
  +import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
  +import org.apache.avalon.framework.activity.Disposable;
  +import org.apache.avalon.framework.activity.Initializable;
  +import org.apache.avalon.framework.component.Component;
  +import org.apache.avalon.framework.component.ComponentException;
  +import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.component.Composable;
  +import org.apache.avalon.framework.component.DefaultComponentManager;
  +import org.apache.avalon.framework.configuration.Configurable;
  +import org.apache.avalon.framework.configuration.Configuration;
  +import org.apache.avalon.framework.configuration.ConfigurationException;
  +import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +import org.apache.james.services.MailServer;
  +
  +import java.util.ArrayList;
  +import java.util.Iterator;
  +
  +/**
  + *  A class to instantiate and schedule a set of mail fetching tasks
  + *
  + * $Id$
  + *
  + *  @see org.apache.james.fetchmail.FetchMail#configure(Configuration) FetchMail
  + *  
  + */
  +public class FetchScheduler
  +    extends AbstractLogEnabled
  +    implements Component, Composable, Configurable, Initializable, Disposable {
  +
  +    /**
  +     * Configuration object for this service
  +     */
  +    private Configuration conf;
  +
  +    /**
  +     * The component manager that allows access to the system services
  +     */
  +    private ComponentManager compMgr;
  +
  +    /**
  +     * The scheduler service that is used to trigger fetch tasks.
  +     */
  +    private TimeScheduler scheduler;
  +
  +    /**
  +     * Whether this service is enabled.
  +     */
  +    private volatile boolean enabled = false;
  +
  +    private ArrayList theFetchTaskNames = new ArrayList();
  +
  +    /**
  +     * @see 
org.apache.avalon.framework.component.Composable#compose(ComponentManager)
  +     */
  +    public void compose(ComponentManager comp) throws ComponentException {
  +        compMgr = comp;
  +    }
  +
  +    /**
  +     * @see 
org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
  +     */
  +    public void configure(Configuration conf) throws ConfigurationException {
  +        this.conf = conf;
  +    }
  +
  +    /**
  +     * @see org.apache.avalon.framework.activity.Initializable#initialize()
  +     */
  +    public void initialize() throws Exception {
  +        enabled = conf.getAttributeAsBoolean("enabled", false);
  +        if (enabled) {
  +            scheduler = (TimeScheduler) compMgr.lookup(TimeScheduler.ROLE);
  +            Configuration[] fetchConfs = conf.getChildren("fetch");
  +            for (int i = 0; i < fetchConfs.length; i++) {
  +                FetchMail fetcher = new FetchMail();
  +                Configuration fetchConf = fetchConfs[i];
  +                String fetchTaskName = fetchConf.getAttribute("name");
  +                fetcher.enableLogging(getLogger().getChildLogger(fetchTaskName));
  +                fetcher.compose(compMgr);
  +                fetcher.configure(fetchConf);
  +                Integer interval = new 
Integer(fetchConf.getChild("interval").getValue());
  +                PeriodicTimeTrigger fetchTrigger = new PeriodicTimeTrigger(0, 
interval.intValue());
  +                scheduler.addTrigger(fetchTaskName, fetchTrigger, fp);
  +                theFetchTaskNames.add(fetchTaskName);
  +            }
  +            getLogger().info("FetchMail Started");
  +        } else {
  +            getLogger().info("FetchMail Disabled");
  +        }
  +    }
  +
  +    /**
  +     * @see org.apache.avalon.framework.activity.Disposable#dispose()
  +     */
  +    public void dispose() {
  +        if (enabled) {
  +            getLogger().info( "FetchMail dispose..." );
  +            Iterator nameIterator = theFetchTaskNames.iterator();
  +            while (nameIterator.hasNext()) {
  +                scheduler.removeTrigger((String)nameIterator.next());
  +            }
  +            getLogger().info( "FetchMail ...dispose end" );
  +        }
  +   }
  +}
  
  
  
  1.2       +23 -23    
jakarta-james/src/java/org/apache/james/fetchmail/FetchScheduler.xinfo
  
  Index: FetchScheduler.xinfo
  ===================================================================
  RCS file: 
/home/cvs/jakarta-james/src/java/org/apache/james/fetchmail/FetchScheduler.xinfo,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FetchScheduler.xinfo      5 Feb 2003 04:31:40 -0000       1.1
  +++ FetchScheduler.xinfo      6 Feb 2003 06:25:58 -0000       1.2
  @@ -1,23 +1,23 @@
  -<?xml version="1.0"?>
  -
  -<blockinfo>
  -
  -  <!-- section to describe block -->
  -  <block>
  -    <version>1.0</version>
  -  </block>
  -
  -  <!-- services that are offered by this block -->
  -  <services>
  -    <service name="org.apache.avalon.framework.component.Component" version="1.0"/>
  -  </services>
  -
  -  <dependencies>
  -    <dependency>
  -      <service name="org.apache.james.services.MailServer" version="1.0"/>
  -    </dependency>
  -    <dependency> 
  -      <service 
name="org.apache.avalon.cornerstone.services.scheduler.TimeScheduler" version="1.0"/>
  -    </dependency> 
  -  </dependencies>  
  -</blockinfo>
  +<?xml version="1.0"?>
  +
  +<blockinfo>
  +
  +  <!-- section to describe block -->
  +  <block>
  +    <version>1.0</version>
  +  </block>
  +
  +  <!-- services that are offered by this block -->
  +  <services>
  +    <service name="org.apache.avalon.framework.component.Component" version="1.0"/>
  +  </services>
  +
  +  <dependencies>
  +    <dependency>
  +      <service name="org.apache.james.services.MailServer" version="1.0"/>
  +    </dependency>
  +    <dependency> 
  +      <service 
name="org.apache.avalon.cornerstone.services.scheduler.TimeScheduler" version="1.0"/>
  +    </dependency> 
  +  </dependencies>  
  +</blockinfo>
  
  
  
  1.2       +33 -33    
jakarta-james/src/java/org/apache/james/fetchmail/ReaderInputStream.java
  
  Index: ReaderInputStream.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-james/src/java/org/apache/james/fetchmail/ReaderInputStream.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ReaderInputStream.java    5 Feb 2003 04:31:40 -0000       1.1
  +++ ReaderInputStream.java    6 Feb 2003 06:25:58 -0000       1.2
  @@ -1,33 +1,33 @@
  -/**
  - * ReaderInputStream.java
  - * 
  - * Copyright (C) 24-Sep-2002 The Apache Software Foundation. All rights reserved.
  - *
  - * This software is published under the terms of the Apache Software License
  - * version 1.1, a copy of which has been included with this distribution in
  - * the LICENSE file. 
  - *
  - */
  -package org.apache.james.fetchmail;
  -import java.io.IOException;
  -import java.io.InputStream;
  -import java.io.Reader;
  -/**
  - * 
  - * Simple class to allow a cast from a java.io.Reader to a java.io.InputStream
  - * 
  - * $Id$
  - * 
  - */
  -public class ReaderInputStream extends InputStream {
  -    private Reader reader = null;
  -    public ReaderInputStream(Reader reader) {
  -        this.reader = reader;
  -    }
  -    /**
  -     * @see java.io.InputStream#read()
  -     */
  -    public int read() throws IOException {
  -        return reader.read();
  -    }
  -}
  +/**
  + * ReaderInputStream.java
  + * 
  + * Copyright (C) 24-Sep-2002 The Apache Software Foundation. All rights reserved.
  + *
  + * This software is published under the terms of the Apache Software License
  + * version 1.1, a copy of which has been included with this distribution in
  + * the LICENSE file. 
  + *
  + */
  +package org.apache.james.fetchmail;
  +import java.io.IOException;
  +import java.io.InputStream;
  +import java.io.Reader;
  +/**
  + * 
  + * Simple class to allow a cast from a java.io.Reader to a java.io.InputStream
  + * 
  + * $Id$
  + * 
  + */
  +public class ReaderInputStream extends InputStream {
  +    private Reader reader = null;
  +    public ReaderInputStream(Reader reader) {
  +        this.reader = reader;
  +    }
  +    /**
  +     * @see java.io.InputStream#read()
  +     */
  +    public int read() throws IOException {
  +        return reader.read();
  +    }
  +}
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to