001: /**
002: * Copyright (c) 2003-2007, David A. Czarnecki
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms, with or without
006: * modification, are permitted provided that the following conditions are met:
007: *
008: * Redistributions of source code must retain the above copyright notice, this list of conditions and the
009: * following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
011: * following disclaimer in the documentation and/or other materials provided with the distribution.
012: * Neither the name of "David A. Czarnecki" and "blojsom" nor the names of its contributors may be used to
013: * endorse or promote products derived from this software without specific prior written permission.
014: * Products derived from this software may not be called "blojsom", nor may "blojsom" appear in their name,
015: * without prior written permission of David A. Czarnecki.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
018: * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
019: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
020: * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
021: * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
022: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
025: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
026: * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
027: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
028: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
029: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
030: */package org.blojsom.plugin.notification;
031:
032: import org.apache.commons.logging.Log;
033: import org.apache.commons.logging.LogFactory;
034: import org.apache.commons.mail.EmailException;
035: import org.apache.commons.mail.HtmlEmail;
036:
037: import java.net.URL;
038: import java.util.Iterator;
039: import java.util.List;
040:
041: public abstract class AbstractNotification implements Notification {
042:
043: private Log _logger;
044:
045: protected String charEncoding;
046:
047: protected URL emailTemplate;
048:
049: protected String mailServer;
050:
051: protected String contentType;
052:
053: /**
054: * Create a new abstract notification
055: *
056: * @param emailTemplate E-mail template
057: * @param charEncoding Character encoding
058: * @param mailServer Mail server name
059: * @param contentType Content type
060: */
061: public AbstractNotification(URL emailTemplate, String charEncoding,
062: String mailServer, String contentType) {
063: _logger = LogFactory.getLog(AbstractNotification.class);
064: if (emailTemplate == null) {
065: throw new IllegalArgumentException(
066: "The emailTemplate argument cannot be null. Cannot send notification email.");
067: } else {
068: this .charEncoding = charEncoding;
069: this .emailTemplate = emailTemplate;
070: this .mailServer = mailServer;
071: this .contentType = contentType;
072: }
073: }
074:
075: /**
076: * Send the e-mail
077: *
078: * @throws EmailException If there is an error sending the e-mail
079: */
080: public void send() throws EmailException {
081: try {
082: HtmlEmail mail = new HtmlEmail();
083: if (getRecipients() != null) {
084: String recipient;
085: for (Iterator iter = getRecipients().iterator(); iter
086: .hasNext(); mail.addTo(recipient))
087: recipient = (String) iter.next();
088:
089: }
090: if (getCarbonCopyRecipients() != null) {
091: String cc;
092: for (Iterator iter = getCarbonCopyRecipients()
093: .iterator(); iter.hasNext(); mail.addHeader(
094: "Cc", cc))
095: cc = (String) iter.next();
096:
097: }
098: if (getBlindCarbonCopyRecipients() != null) {
099: String bcc;
100: for (Iterator iter = getBlindCarbonCopyRecipients()
101: .iterator(); iter.hasNext(); mail.addHeader(
102: "Bcc", bcc))
103: bcc = (String) iter.next();
104:
105: }
106: mail.setFrom(getSender());
107: mail.setSubject(getSubject());
108: mail.setHtmlMsg(getMessage());
109: mail.setHostName(mailServer);
110: mail.send();
111: _logger.info((new StringBuffer()).append("Email sent to ")
112: .append(getRecipients().toString()).toString());
113: } catch (Exception e) {
114: throw new EmailException("Could not send the email", e);
115: }
116: }
117:
118: /**
119: * Retrieve the sender
120: *
121: * @return Sender
122: */
123: protected abstract String getSender();
124:
125: /**
126: * Retrieve the list of recipients
127: *
128: * @return Recipients
129: */
130: protected abstract List getRecipients();
131:
132: /**
133: * Retrieve the e-mail message content
134: *
135: * @return E-mail message
136: * @throws Exception If there is an error getting the content
137: */
138: protected abstract String getMessage() throws Exception;
139:
140: /**
141: * Retrieve the subject
142: *
143: * @return Subject
144: */
145: protected abstract String getSubject();
146:
147: /**
148: * Retrieve the list of CC recipients
149: *
150: * @return List of CC recipients
151: */
152: protected abstract List getCarbonCopyRecipients();
153:
154: /**
155: * Retrieve the list of BCC recipients
156: *
157: * @return List of BCC recipients
158: */
159: protected abstract List getBlindCarbonCopyRecipients();
160:
161: /**
162: * Encode regex characters in a string
163: *
164: * @param string Input
165: * @return Encoded regex characters
166: */
167: protected String encodeRegexCharacters(String string) {
168: return string.replaceAll("\\$", "$");
169: }
170:
171: /**
172: * Retrieve the e-mail template
173: *
174: * @return E-mail template
175: */
176: protected URL getEmailTemplate() {
177: return emailTemplate;
178: }
179: }
|