1 /************************************************************************ 2 * Copyright (c) 1999-2006 The Apache Software Foundation. * 3 * All rights reserved. * 4 * ------------------------------------------------------------------- * 5 * Licensed under the Apache License, Version 2.0 (the "License"); you * 6 * may not use this file except in compliance with the License. You * 7 * may obtain a copy of the License at: * 8 * * 9 * http://www.apache.org/licenses/LICENSE-2.0 * 10 * * 11 * Unless required by applicable law or agreed to in writing, software * 12 * distributed under the License is distributed on an "AS IS" BASIS, * 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * 14 * implied. See the License for the specific language governing * 15 * permissions and limitations under the License. * 16 ***********************************************************************/ 17 18 package org.apache.james.mailrepository; 19 20 import org.apache.avalon.cornerstone.services.store.Store; 21 import org.apache.avalon.framework.activity.Initializable; 22 import org.apache.avalon.framework.configuration.Configurable; 23 import org.apache.avalon.framework.configuration.Configuration; 24 import org.apache.avalon.framework.configuration.ConfigurationException; 25 import org.apache.avalon.framework.logger.AbstractLogEnabled; 26 import org.apache.avalon.framework.service.ServiceException; 27 import org.apache.avalon.framework.service.ServiceManager; 28 import org.apache.avalon.framework.service.Serviceable; 29 import org.apache.james.services.SpoolRepository; 30 import org.apache.mailet.Mail; 31 32 import javax.mail.MessagingException; 33 34 import java.util.Collection; 35 import java.util.Iterator; 36 37 /*** 38 * This is a wrapper for the various implementations of SpoolRepositories. 39 * This does select the real spool repository via the select method of the 40 * provided Store. 41 * 42 * <p>The select method requires a configuration object with the form: 43 * <br><spoolrepository destinationURL="file://path-to-root-dir-for-repository" 44 * <br> type="SPOOL"> 45 * <br></spoolrepository> 46 * 47 * @version This is $Revision: 165416 $ 48 */ 49 public class MailStoreSpoolRepository 50 extends AbstractLogEnabled 51 implements Serviceable, Initializable, Configurable, SpoolRepository { 52 53 /*** 54 * The wrapped spoolRepository 55 */ 56 private SpoolRepository spoolRep; 57 58 /*** 59 * The providing mailStore 60 */ 61 private Store mailStore; 62 63 /*** 64 * The repository configuration 65 */ 66 private Configuration configuration; 67 68 /*** 69 * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager) 70 */ 71 public void service(ServiceManager serviceManager) throws ServiceException { 72 mailStore = (Store) serviceManager.lookup(Store.ROLE); 73 } 74 75 76 /*** 77 * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration) 78 */ 79 public void configure(Configuration conf) throws ConfigurationException { 80 this.configuration = conf; 81 } 82 83 /*** 84 * @see org.apache.avalon.framework.activity.Initializable#initialize() 85 */ 86 public void initialize() throws Exception { 87 try { 88 spoolRep = (SpoolRepository) mailStore.select(configuration); 89 } catch (Exception e) { 90 getLogger().error("Cannot open private SpoolRepository"); 91 throw e; 92 } 93 if (getLogger().isInfoEnabled()) { 94 getLogger().info("SpoolRepository opened: " 95 + spoolRep.hashCode()); 96 } 97 } 98 99 /*** 100 * @see org.apache.james.services.SpoolRepository#accept() 101 */ 102 public Mail accept() throws InterruptedException { 103 return spoolRep.accept(); 104 } 105 106 /*** 107 * @see org.apache.james.services.SpoolRepository#accept(long) 108 */ 109 public Mail accept(final long delay) throws InterruptedException { 110 return spoolRep.accept(delay); 111 } 112 113 /*** 114 * @see org.apache.james.services.SpoolRepository#accept(org.apache.james.services.SpoolRepository.AcceptFilter) 115 */ 116 public Mail accept(SpoolRepository.AcceptFilter filter) throws InterruptedException { 117 return spoolRep.accept(filter); 118 } 119 120 /*** 121 * @see org.apache.james.services.MailRepository#store(org.apache.james.core.MailImpl) 122 */ 123 public void store(Mail mc) throws MessagingException { 124 spoolRep.store(mc); 125 } 126 127 /*** 128 * @see org.apache.james.services.MailRepository#list() 129 */ 130 public Iterator list() throws MessagingException { 131 return spoolRep.list(); 132 } 133 134 /*** 135 * @see org.apache.james.services.MailRepository#retrieve(java.lang.String) 136 */ 137 public Mail retrieve(String key) throws MessagingException { 138 return spoolRep.retrieve(key); 139 } 140 141 /*** 142 * @see org.apache.james.services.MailRepository#remove(org.apache.james.core.MailImpl) 143 */ 144 public void remove(Mail mail) throws MessagingException { 145 spoolRep.remove(mail); 146 } 147 148 /*** 149 * @see org.apache.james.services.MailRepository#remove(java.util.Collection) 150 */ 151 public void remove(Collection mails) throws MessagingException { 152 spoolRep.remove(mails); 153 } 154 155 /*** 156 * @see org.apache.james.services.MailRepository#remove(java.lang.String) 157 */ 158 public void remove(String key) throws MessagingException { 159 spoolRep.remove(key); 160 } 161 162 /*** 163 * @see org.apache.james.services.MailRepository#lock(java.lang.String) 164 */ 165 public boolean lock(String key) throws MessagingException { 166 return spoolRep.lock(key); 167 } 168 169 /*** 170 * @see org.apache.james.services.MailRepository#unlock(java.lang.String) 171 */ 172 public boolean unlock(String key) throws MessagingException { 173 return spoolRep.unlock(key); 174 } 175 176 }