ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/client/alerters/EMail__Alerter.java
Revision: 1.23
Committed: Sun May 13 01:47:44 2001 UTC (23 years ago) by tdb
Branch: MAIN
Changes since 1.22: +14 -3 lines
Log Message:
A small bug had crept in here. The _name attribute was always being returned as
it stood in the skeleton class (when accessed by a method written in the
skeleton class, but called on an extending class). This is solved by adding an
accessor.
This will result in configuration being looked up for the relevant name, as
opposed to always the name of the abstract class.

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.org.iscream.client.alerters;
3
4 //---IMPORTS---
5 import uk.org.iscream.client.*;
6 import uk.org.iscream.core.*;
7 import uk.org.iscream.util.*;
8 import uk.org.iscream.componentmanager.*;
9 import java.io.*;
10 import java.util.StringTokenizer;
11
12
13 /**
14 * This alerter delivers alerts using e-mail.
15 *
16 * @author $Author: ajm4 $
17 * @version $Id: EMail__Alerter.java,v 1.22 2001/03/23 01:09:51 ajm4 Exp $
18 */
19 public class EMail__Alerter extends AlerterSkeleton {
20
21 //---FINAL ATTRIBUTES---
22
23 /**
24 * The current CVS revision of this class
25 */
26 public final String REVISION = "$Revision: 1.22 $";
27
28 /**
29 * A description of this alerter
30 */
31 public final String DESC = "Sends alerts over e-mail.";
32
33 //---STATIC METHODS---
34
35 //---CONSTRUCTORS---
36
37 //---PUBLIC METHODS---
38
39 /**
40 * Implements the abstract method from the skeleton class.
41 * This method will attempt to send an alert
42 * message using the configured email configuration.
43 *
44 * @param alert the alert to send
45 */
46 public void sendAlert(Alert alert) {
47 // get the subject and replace fields
48 String subject;
49 try {
50 subject = _cp.getProperty(_name, "Alerter.EMail.subject");
51 } catch (PropertyNotFoundException e) {
52 subject = NOT_CONFIGURED;
53 _logger.write(toString(), Logger.WARNING, "Alerter.EMail.subject value unavailable using default of " + subject);
54 }
55 subject = processAlertMessage(subject, alert);
56
57 // get the message body and replace fields
58 String message;
59 try {
60 message = _cp.getProperty(_name, "Alerter.EMail.message");
61 } catch (PropertyNotFoundException e) {
62 message = NOT_CONFIGURED;
63 _logger.write(toString(), Logger.WARNING, "Alerter.EMail.message value unavailable using default of " + message);
64 }
65 message = processAlertMessage(message, alert);
66
67 // attempt to send the actual message
68 try {
69 // create SMTP message
70 Smtp smtp = new Smtp(_cp.getProperty(_name, "Alerter.EMail.smtpServer"));
71 // set our sender
72 smtp.setSender(_cp.getProperty(_name, "Alerter.EMail.sender"));
73
74 // list of destination addresses
75 String destList = _cp.getProperty("Host."+alert.getSource(), "Alerter.EMail.destList");
76
77 // set the to: list
78 StringTokenizer st = new StringTokenizer(destList, ";");
79 while (st.hasMoreTokens()) {
80 smtp.setTo(st.nextToken());
81 }
82
83 // prepare to print the message
84 PrintWriter out = smtp.getOutputStream();
85 out.println("Subject: "+subject+"\n");
86
87 // send the message
88 out.println(message);
89 smtp.sendMessage();
90 smtp.close();
91 _logger.write(toString(), Logger.DEBUG, "Sending " + _name + " at "+ Alert.alertLevels[alert.getLevel()] + " level");
92 }
93 catch(IOException e) {
94 _logger.write(toString(), Logger.ERROR, "Error whilst sending message: "+e);
95 }
96 catch(PropertyNotFoundException e) {
97 _logger.write(toString(), Logger.ERROR, "Error obtaining essential configuration: "+e);
98 }
99 }
100
101 /**
102 * Overrides the {@link java.lang.Object#toString() Object.toString()}
103 * method to provide clean logging (every class should have this).
104 *
105 * This uses the uk.org.iscream.util.NameFormat class
106 * to format the toString()
107 *
108 * @return the name of this class and its CVS revision
109 */
110 public String toString() {
111 return FormatName.getName(
112 _name,
113 getClass().getName(),
114 REVISION);
115 }
116
117 /**
118 * Return the String representation of what the alerter does
119 *
120 * @return the description
121 */
122 public String getDescription(){
123 return DESC;
124 }
125
126 //---PRIVATE METHODS---
127
128 //---ACCESSOR/MUTATOR METHODS---
129
130 /**
131 * Returns the "friendly" name of this class. This
132 * is simply an accessor for _name, required due to
133 * inheritance issues with extending AlerterSkeleton.
134 *
135 * @return the friendly name
136 */
137 protected String getFName() {
138 return _name;
139 }
140
141 //---ATTRIBUTES---
142
143 /**
144 * This is the friendly identifier of the
145 * component this class is running in.
146 * eg, a Filter may be called "filter1",
147 * If this class does not have an owning
148 * component, a name from the configuration
149 * can be placed here. This name could also
150 * be changed to null for utility classes.
151 */
152 protected String _name = "EMail";
153
154 //---STATIC ATTRIBUTES---
155
156 }