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.transport.mailets;
019:
020: import org.apache.mailet.GenericMailet;
021: import org.apache.mailet.Mail;
022: import org.apache.mailet.MailAddress;
023:
024: import javax.mail.MessagingException;
025:
026: /**
027: * An abstract implementation of a listserv manager. This mailet reads the
028: * address to find the command.
029: */
030: public abstract class GenericListservManager extends GenericMailet {
031:
032: /**
033: * Adds an address to the listserv. Returns whether command was
034: * successful.
035: */
036: public abstract boolean addAddress(MailAddress address);
037:
038: /**
039: * Removes an address from the listserv. Returns whether command
040: * was successful.
041: */
042: public abstract boolean removeAddress(MailAddress address);
043:
044: /**
045: * Indicates whether an address already exists on the listserv. Returns
046: * whether the address exists.
047: */
048: public abstract boolean existsAddress(MailAddress address);
049:
050: /**
051: * Processes the message. Checks which command was sent based on the
052: * recipient address, and does the appropriate action.
053: */
054: public final void service(Mail mail) throws MessagingException {
055: if (mail.getRecipients().size() != 1) {
056: getMailetContext()
057: .bounce(mail,
058: "You can only send one command at a time to this listserv manager.");
059: return;
060: }
061: MailAddress address = (MailAddress) mail.getRecipients()
062: .iterator().next();
063: if (address.getUser().endsWith("-off")) {
064: if (existsAddress(mail.getSender())) {
065: if (removeAddress(mail.getSender())) {
066: getMailetContext().bounce(mail,
067: "Successfully removed from listserv.");
068: } else {
069: getMailetContext()
070: .bounce(mail,
071: "Unable to remove you from listserv for some reason.");
072: }
073: } else {
074: getMailetContext().bounce(mail,
075: "You are not subscribed to this listserv.");
076: }
077: } else if (address.getUser().endsWith("-on")) {
078: if (existsAddress(mail.getSender())) {
079: getMailetContext().bounce(mail,
080: "You are already subscribed to this listserv.");
081: } else {
082: if (addAddress(mail.getSender())) {
083: getMailetContext().bounce(mail,
084: "Successfully added to listserv.");
085: } else {
086: getMailetContext()
087: .bounce(mail,
088: "Unable to add you to the listserv for some reason");
089: }
090: }
091: } else {
092: getMailetContext()
093: .bounce(
094: mail,
095: "Could not understand the command you sent to this listserv manager.\r\n"
096: + "Valid commands are <listserv>-on@domain.com and <listserv>-off@domain.com");
097: }
098: //Kill the command message
099: mail.setState(Mail.GHOST);
100: }
101: }
|