1 package org.wcb.common.component; 2 3 import org.wcb.autohome.AutoHomeAdminSession; 4 import org.wcb.autohome.implementations.EmailHeaderBean; 5 import org.wcb.common.EmailAuthenticator; 6 7 import javax.swing.*; 8 import java.awt.*; 9 import java.awt.event.ActionListener; 10 import java.awt.event.ActionEvent; 11 12 /*** 13 * Copyright (C) 1999 Walter Bogaardt 14 * 15 * This library is free software; you can redistribute it and/or 16 * modify it under the terms of the GNU Lesser General Public 17 * License as published by the Free Software Foundation; either 18 * version 2 of the License, or (at your option) any later version. 19 * 20 * This library is distributed in the hope that it will be useful, 21 * but WITHOUT ANY WARRANTY; without even the implied warranty of 22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23 * Lesser General Public License for more details. 24 * 25 * You should have received a copy of the GNU Lesser General Public 26 * License along with this library; if not, write to the Free Software 27 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 28 * 29 * Project: Alice X10 Home Automation 30 * Filename: $Id: EmailPanel.java,v 1.5 2004/02/27 01:29:53 wbogaardt Exp $<BR> 31 * Abstract: Used to display a panel that the user can edit their email settings 32 * 33 * $Log: EmailPanel.java,v $ 34 * Revision 1.5 2004/02/27 01:29:53 wbogaardt 35 * modified classes so they conform to Checkstyle format in readability 36 * 37 * Revision 1.4 2004/02/04 01:15:38 wbogaardt 38 * changed password from texfield to password field and reoganized order of configruation 39 * 40 * Revision 1.3 2004/02/02 23:41:31 wbogaardt 41 * refactored email so that properties are maintained in bean object and added allowing username and password 42 * authentication for email servers that require it. 43 * 44 * Revision 1.2 2004/01/31 07:40:26 wbogaardt 45 * modified layout managers for the panel so that it uses the java standard layoutsrather than the FormLayout api. 46 * The purpose is to reduce dependency on non-standard layout api. 47 * 48 */ 49 public class EmailPanel extends JPanel implements ActionListener { 50 51 private JRadioButton neverRb, eachEventRb, hourlyRb, dailyRb; 52 private JTextField emailToTf, emailFromTf, emailSMTPTf, usernameTf; 53 private JPasswordField passwordTf; 54 private JCheckBox jCkRequiresAuth; 55 56 /*** 57 * Default construct to setup the email panel. 58 */ 59 public EmailPanel() { 60 this.setup(); 61 } 62 63 /*** 64 * Gives outside classes the ability to save settings from the 65 * email panel. 66 */ 67 public void saveSettings() 68 { 69 EmailHeaderBean bean = new EmailHeaderBean(emailToTf.getText(), emailFromTf.getText(), emailSMTPTf.getText()); 70 bean.setEmailNoticeFreq(this.getEmailFrequency()); 71 if (jCkRequiresAuth.isSelected()) 72 { 73 EmailAuthenticator auth = new EmailAuthenticator(usernameTf.getText(), 74 new String(passwordTf.getPassword())); 75 bean.setEmailAuthenticator(auth); 76 } 77 AutoHomeAdminSession.getInstance().setEmailInformation(bean); 78 } 79 80 /*** 81 * Sets up the components on the panel. 82 */ 83 private void setup() { 84 emailToTf = new JTextField(20); 85 emailFromTf = new JTextField(20); 86 emailSMTPTf = new JTextField(20); 87 jCkRequiresAuth = new JCheckBox("Requires Authentication"); 88 jCkRequiresAuth.addActionListener(this); 89 usernameTf = new JTextField(20); 90 passwordTf = new JPasswordField(20); 91 ButtonGroup timeGrp = new ButtonGroup(); 92 neverRb = new JRadioButton("Never"); 93 eachEventRb = new JRadioButton("Every Event"); 94 hourlyRb = new JRadioButton("Hourly"); 95 dailyRb = new JRadioButton("Daily"); 96 timeGrp.add(neverRb); 97 timeGrp.add(eachEventRb); 98 timeGrp.add(hourlyRb); 99 timeGrp.add(dailyRb); 100 101 GridBagConstraints gridBagConstraints; 102 setLayout(new java.awt.GridBagLayout()); 103 setBorder(new javax.swing.border.TitledBorder("EmailNotification")); 104 gridBagConstraints = new GridBagConstraints(); 105 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 106 add(new JLabel("TO:"), gridBagConstraints); 107 108 gridBagConstraints = new GridBagConstraints(); 109 gridBagConstraints.gridwidth = 2; 110 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 111 add(emailToTf, gridBagConstraints); 112 113 gridBagConstraints = new GridBagConstraints(); 114 gridBagConstraints.gridx = 0; 115 gridBagConstraints.gridy = 1; 116 add(new JLabel("SMTP HOST"), gridBagConstraints); 117 118 gridBagConstraints = new GridBagConstraints(); 119 gridBagConstraints.gridx = 1; 120 gridBagConstraints.gridy = 1; 121 gridBagConstraints.gridwidth = 2; 122 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 123 add(emailSMTPTf, gridBagConstraints); 124 125 gridBagConstraints = new GridBagConstraints(); 126 gridBagConstraints.gridx = 0; 127 gridBagConstraints.gridy = 2; 128 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 129 add(new JLabel("From:"), gridBagConstraints); 130 131 gridBagConstraints = new GridBagConstraints(); 132 gridBagConstraints.gridx = 1; 133 gridBagConstraints.gridy = 2; 134 gridBagConstraints.gridwidth = 2; 135 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 136 add(emailFromTf, gridBagConstraints); 137 138 gridBagConstraints = new GridBagConstraints(); 139 gridBagConstraints.gridx = 0; 140 gridBagConstraints.gridy = 3; 141 gridBagConstraints.gridwidth = 3; 142 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 143 add(jCkRequiresAuth, gridBagConstraints); 144 145 gridBagConstraints = new GridBagConstraints(); 146 gridBagConstraints.gridx = 0; 147 gridBagConstraints.gridy = 4; 148 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 149 add(new JLabel("User name:"), gridBagConstraints); 150 151 gridBagConstraints = new GridBagConstraints(); 152 gridBagConstraints.gridx = 1; 153 gridBagConstraints.gridy = 4; 154 gridBagConstraints.gridwidth = 2; 155 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 156 add(usernameTf, gridBagConstraints); 157 158 gridBagConstraints = new GridBagConstraints(); 159 gridBagConstraints.gridx = 0; 160 gridBagConstraints.gridy = 5; 161 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 162 add(new JLabel("Password:"), gridBagConstraints); 163 164 gridBagConstraints = new GridBagConstraints(); 165 gridBagConstraints.gridx = 1; 166 gridBagConstraints.gridy = 5; 167 gridBagConstraints.gridwidth = 2; 168 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 169 add(passwordTf, gridBagConstraints); 170 171 gridBagConstraints = new GridBagConstraints(); 172 gridBagConstraints.gridx = 0; 173 gridBagConstraints.gridy = 6; 174 gridBagConstraints.gridwidth = 2; 175 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; 176 add(new JLabel("Send notice"), gridBagConstraints); 177 178 gridBagConstraints = new GridBagConstraints(); 179 gridBagConstraints.gridx = 0; 180 gridBagConstraints.gridy = 7; 181 add(neverRb, gridBagConstraints); 182 183 gridBagConstraints = new GridBagConstraints(); 184 gridBagConstraints.gridx = 1; 185 gridBagConstraints.gridy = 7; 186 add(eachEventRb, gridBagConstraints); 187 188 gridBagConstraints = new GridBagConstraints(); 189 gridBagConstraints.gridx = 2; 190 gridBagConstraints.gridy = 7; 191 add(hourlyRb, gridBagConstraints); 192 193 gridBagConstraints = new GridBagConstraints(); 194 gridBagConstraints.gridx = 3; 195 gridBagConstraints.gridy = 7; 196 add(dailyRb, gridBagConstraints); 197 this.showFileSettings(); 198 } 199 200 /*** 201 * Used to set up the email panel based on what was last saved. 202 */ 203 private void showFileSettings() { 204 EmailHeaderBean bean = AutoHomeAdminSession.getInstance().getEmailInformation(); 205 EmailAuthenticator auth = bean.getEmailAuthenticator(); 206 emailToTf.setText(bean.getEmailToAddress()); 207 emailFromTf.setText(bean.getEmailFromAddress()); 208 emailSMTPTf.setText(bean.getEmailHost()); 209 if (auth != null) 210 { 211 jCkRequiresAuth.setSelected(true); 212 usernameTf.setText(auth.getPasswordAuthentication().getUserName()); 213 passwordTf.setText(auth.getPasswordAuthentication().getPassword()); 214 } 215 if (jCkRequiresAuth.isSelected()) 216 { 217 usernameTf.setEnabled(true); 218 passwordTf.setEnabled(true); 219 } 220 else 221 { 222 usernameTf.setEnabled(false); 223 passwordTf.setEnabled(false); 224 } 225 226 String frequency = bean.getEmailNoticeFreq(); 227 if (frequency.equalsIgnoreCase("never")) 228 { 229 neverRb.setSelected(true); 230 } 231 if (frequency.equalsIgnoreCase("everytime")) 232 { 233 eachEventRb.setSelected(true); 234 } 235 if (frequency.equalsIgnoreCase("hourly")) 236 { 237 hourlyRb.setSelected(true); 238 } 239 if (frequency.equalsIgnoreCase("daily")) 240 { 241 dailyRb.setSelected(true); 242 } 243 } 244 245 /*** 246 * gets the selected email frequency 247 * notification radio box and returns a string 248 * value for that selected box. 249 * @return email frequency text. 250 */ 251 private String getEmailFrequency() { 252 if (eachEventRb.isSelected()) 253 { 254 return "everytime"; 255 } 256 if (hourlyRb.isSelected()) 257 { 258 return "hourly"; 259 } 260 if (dailyRb.isSelected()) 261 { 262 return "daily"; 263 } 264 else 265 { 266 return "never"; 267 } 268 } 269 270 /*** 271 * This allows the panel to control its own actions such 272 * as enabling the password and username text fields if the 273 * authorization required check box is marked 274 * @param ae Event taking place on the check box component 275 */ 276 public void actionPerformed(ActionEvent ae) { 277 Object src = ae.getSource(); 278 if (src.equals(jCkRequiresAuth)) 279 { 280 if (jCkRequiresAuth.isSelected()) 281 { 282 usernameTf.setEnabled(true); 283 passwordTf.setEnabled(true); 284 } 285 else 286 { 287 usernameTf.setEnabled(false); 288 passwordTf.setEnabled(false); 289 } 290 } 291 } 292 }