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: ****************************************************************/package org.apache.james.services;
019:
020: import org.apache.mailet.Mail;
021:
022: /**
023: * Interface for a Repository for Spooling Mails.
024: * A spool repository is a transitory repository which should empty itself
025: * if inbound deliveries stop.
026: *
027: * @version 1.0.0, 24/04/1999
028: */
029: public interface SpoolRepository extends MailRepository {
030:
031: /**
032: * The component role used by components implementing this service
033: */
034: String ROLE = "org.apache.james.services.SpoolRepository";
035:
036: /**
037: * Implementations of AcceptFilter can be used to select which mails a SpoolRepository
038: * implementation returns from its accept (AcceptFilter) method
039: **/
040: public static interface AcceptFilter {
041: /**
042: * This method is called by accept(Filter) to determine if the message is
043: * ready for delivery.
044: *
045: * @param key message key
046: * @param state the state of the message
047: * @param lastUpdated the last time the message was written to the spool
048: * @param errorMessage the current errorMessage
049: * @return true if the message is ready for delivery
050: **/
051: boolean accept(String key, String state, long lastUpdated,
052: String errorMessage);
053:
054: /**
055: * This method allows the filter to determine how long the thread should wait for a
056: * message to get ready for delivery, when currently there are none.
057: * @return the time to wait for a message to get ready for delivery
058: **/
059: long getWaitTime();
060: }
061:
062: /**
063: * Define a STREAM repository. Streams are stored in the specified
064: * destination.
065: */
066: String SPOOL = "SPOOL";
067:
068: /**
069: * Returns an arbitrarily selected mail deposited in this Repository.
070: * Usage: SpoolManager calls accept() to see if there are any unprocessed
071: * mails in the spool repository.
072: *
073: * @return the mail
074: */
075: Mail accept() throws InterruptedException;
076:
077: /**
078: * Returns an arbitrarily select mail deposited in this Repository that
079: * is either ready immediately for delivery, or is younger than it's last_updated plus
080: * the number of failed attempts times the delay time.
081: * Usage: RemoteDeliverySpool calls accept() with some delay and should block until an
082: * unprocessed mail is available.
083: *
084: * @return the mail
085: */
086: Mail accept(long delay) throws InterruptedException;
087:
088: /**
089: * Returns an arbitrarily select mail deposited in this Repository for
090: * which the supplied filter's accept method returns true.
091: * Usage: RemoteDeliverySpool calls accept(filter) with some a filter which determines
092: * based on number of retries if the mail is ready for processing.
093: * If no message is ready the method will block until one is, the amount of time to block is
094: * determined by calling the filters getWaitTime method.
095: *
096: * @return the mail
097: */
098: Mail accept(AcceptFilter filter) throws InterruptedException;
099:
100: }
|