/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.monitor.alerts;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.StringTokenizer;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.management.Notification;
import javax.naming.InitialContext;
import org.jboss.monitor.JBossMonitorNotification;
import org.jboss.util.Strings;
/**
* Comment
*
* @author <a href="mailto:bill@jboss.org">Bill Burke</a>
* @version $Revision: 81038 $
*
**/
public class EmailAlertListener extends JBossAlertListener implements EmailAlertListenerMBean
{
protected String messageTemplate;
protected String subjectTemplate;
protected String fromString;
protected Address from;
protected String replyToString;
protected Address replyTo;
protected Address[] to;
protected HashSet toSet = new HashSet();
public void handleNotification(Notification notification,
Object handback)
{
if (!(notification instanceof JBossMonitorNotification)) return;
Map substitutions = ((JBossMonitorNotification) notification).substitutionMap();
String message = Strings.subst(messageTemplate, substitutions, "%(", ")");
String subject = Strings.subst(subjectTemplate, substitutions, "%(", ")");
try
{
Session session = (Session) new InitialContext().lookup("java:/Mail");
// create a message
//
Address replyToList[] = { replyTo };
Message newMessage = new MimeMessage(session);
newMessage.setFrom(from);
newMessage.setReplyTo(replyToList);
newMessage.setRecipients(Message.RecipientType.TO, to);
newMessage.setSubject(subject);
newMessage.setSentDate(new java.util.Date());
newMessage.setText(message);
// Send newMessage
//
Transport transport = session.getTransport();
transport.connect();
transport.sendMessage(newMessage, to);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public String getTo()
{
Iterator it = toSet.iterator();
String output = "";
while (it.hasNext())
{
output += it.next();
if (it.hasNext()) output += ",";
}
return output;
}
protected void updateTo() throws AddressException
{
Iterator it = toSet.iterator();
Address[] newTo = new Address[toSet.size()];
for (int i = 0; it.hasNext(); i++)
{
String address = (String)it.next();
newTo[i] = new InternetAddress(address);
}
to = newTo;
}
public void setTo(String t) throws AddressException
{
StringTokenizer tokenizer = new StringTokenizer(t, ",");
while (tokenizer.hasMoreTokens())
{
String token = tokenizer.nextToken().trim();
toSet.add(token);
}
updateTo();
}
public void addToAddress(String newAddress) throws AddressException
{
toSet.add(newAddress);
updateTo();
}
public void removeToAddress(String removeAddress) throws AddressException
{
toSet.remove(removeAddress);
updateTo();
}
public String getFrom()
{
return fromString;
}
public void setFrom(String f) throws AddressException
{
fromString = f;
from = new InternetAddress(f);
}
public String getReplyTo()
{
return replyToString;
}
public void setReplyTo(String f) throws AddressException
{
replyToString = f;
replyTo = new InternetAddress(f);
}
public String getMessageTemplate()
{
return messageTemplate;
}
public void setMessageTemplate(String messageTemplate)
{
this.messageTemplate = messageTemplate;
}
public String getSubjectTemplate()
{
return subjectTemplate;
}
public void setSubjectTemplate(String messageTemplate)
{
this.subjectTemplate = messageTemplate;
}
}