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    
020    package org.apache.james.fetchmail;
021    
022    import javax.mail.Folder;
023    import javax.mail.MessagingException;
024    import javax.mail.Store;
025    
026    /**
027     * Class <code>StoreProcessor</code> connects to a message store, gets the
028     * target Folder and delegates its processing to <code>FolderProcessor</code>.
029     */
030    public class StoreProcessor extends ProcessorAbstract {
031        /**
032         * Constructor for StoreProcessor.
033         * 
034         * @param account
035         */
036        protected StoreProcessor(Account account) {
037            super(account);
038        }
039    
040        /**
041         * Method process connects to a Folder in a Message Store, creates a
042         * <code>FolderProcessor</code> and runs it to process the messages in the
043         * Folder.
044         * 
045         * @see org.apache.james.fetchmail.ProcessorAbstract#process()
046         */
047        public void process() throws MessagingException {
048            Store store = null;
049            Folder folder = null;
050    
051            StringBuilder logMessageBuffer = new StringBuilder("Starting fetching mail from server '");
052            logMessageBuffer.append(getHost());
053            logMessageBuffer.append("' for user '");
054            logMessageBuffer.append(getUser());
055            logMessageBuffer.append("' in folder '");
056            logMessageBuffer.append(getJavaMailFolderName());
057            logMessageBuffer.append("'");
058            getLogger().info(logMessageBuffer.toString());
059    
060            try {
061                // Get a Store object
062                store = getSession().getStore(getJavaMailProviderName());
063    
064                // Connect
065                if (getHost() != null || getUser() != null || getPassword() != null)
066                    store.connect(getHost(), getUser(), getPassword());
067                else
068                    store.connect();
069    
070                // Get the Folder
071                folder = store.getFolder(getJavaMailFolderName());
072                if (folder == null)
073                    getLogger().error(getFetchTaskName() + " No default folder");
074    
075                // Process the Folder
076                new FolderProcessor(folder, getAccount()).process();
077    
078            } catch (MessagingException ex) {
079                getLogger().error("A MessagingException has terminated processing of this Folder", ex);
080            } finally {
081                try {
082                    if (null != store && store.isConnected())
083                        store.close();
084                } catch (MessagingException ex) {
085                    getLogger().error("A MessagingException occured while closing the Store", ex);
086                }
087                logMessageBuffer = new StringBuilder("Finished fetching mail from server '");
088                logMessageBuffer.append(getHost());
089                logMessageBuffer.append("' for user '");
090                logMessageBuffer.append(getUser());
091                logMessageBuffer.append("' in folder '");
092                logMessageBuffer.append(getJavaMailFolderName());
093                logMessageBuffer.append("'");
094                getLogger().info(logMessageBuffer.toString());
095            }
096        }
097    
098    }