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 }