jtmailinglist.java
来自「Java Pattern Oriented Framework (Jt) 是为了」· Java 代码 · 共 392 行
JAVA
392 行
package Jt.wizard;
import Jt.*;
import Jt.DAO.JtDAOAdapter;
import Jt.DAO.JtDAOStrategy;
import Jt.examples.hibernate.Member;
import java.util.*;
/**
* Handles a mailing list
*/
public class JtMailingList extends JtObject {
private static final long serialVersionUID = 1L;
public static final String JtCLASS_NAME = JtMailingList.class.getName();
private String subject;
private String filename;
private String attachment;
private String testEmail = "test@hotmail.com";
private String query = "select * from roster where email_flag=1 AND status >= 0 ;";
private boolean debug = true;
boolean test = false;
private JtFactory factory = new JtFactory ();
private JtMail mailAdapter = (JtMail) factory.createObject (JtMail.JtCLASS_NAME);
private JtDAOStrategy daoStrategy;
private boolean initted = false;
private String emailContent;
public boolean isDebug() {
return debug;
}
public void setDebug(boolean debug) {
this.debug = debug;
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
public String getTestEmail() {
return testEmail;
}
public void setTestEmail(String testEmail) {
this.testEmail = testEmail;
}
public JtMail getMailAdapter() {
return mailAdapter;
}
public void setMailAdapter(JtMail mailAdapter) {
this.mailAdapter = mailAdapter;
}
public boolean isTest() {
return test;
}
public void setTest(boolean test) {
this.test = test;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
// File message
public void setFilename (String filename) {
this.filename = filename;
}
public String getFilename() {
return filename;
}
// Attachment
public void setAttachment (String attachment) {
this.attachment = attachment;
}
public String getAttachment() {
return attachment;
}
private boolean updateDatabase (Member member) {
JtMessage msg = new JtMessage ();
Exception ex;
if (daoStrategy == null)
return (false);
if (member != null)
member.setEmail_flag(0);
msg = new JtMessage (JtDAOAdapter.JtUPDATE);
msg.setMsgContent(member);
factory.sendMessage (daoStrategy, msg);
ex = (Exception) daoStrategy.getObjException();
if (ex == null)
return (true);
else
return (false);
}
// Propagate Exception
private Exception propagateException (JtObject obj)
{
Exception ex;
if (obj == null)
return null;
ex = (Exception) obj.getObjException();
if (ex != null)
this.setObjException(ex);
return (ex);
}
private void initialize () {
JtFile file;
if (!test) {
if (subject == null || subject.equals("")) {
handleError ("Subject attribute needs to be set.");
return;
}
if (filename == null) {
handleError ("filename attribute needs to be set.");
return;
}
}
daoStrategy = (JtDAOStrategy) factory.createObject (JtDAOStrategy.JtCLASS_NAME);
//mailAdapter = (JtMail) factory.createObject (JtMail.JtCLASS_NAME);
mailAdapter.setSubject (subject);
if (!test) {
file = (JtFile) factory.createObject (JtFile.JtCLASS_NAME);
file.setName(filename);
emailContent = (String) factory.sendMessage (file, new JtMessage (JtFile.JtCONVERT_TO_STRING));
propagateException (file);
}
}
// Activate object
public void broadcastEmail () {
JtMessage msg = new JtMessage ();
List members;
Iterator iterator;
Member member;
if (daoStrategy == null)
return;
if (query == null || query.equals ("")) {
handleError ("Query attribute needs to be set");
return;
}
msg.setMsgId (JtDAOAdapter.JtEXECUTE_QUERY);
msg.setMsgContent(query);
msg.setMsgData(new Member ());
members = (List) factory.sendMessage (daoStrategy, msg);
if (members == null)
return;
iterator = members.iterator();
while (iterator.hasNext()) {
factory.sendMessage (daoStrategy, new JtMessage (JtDAOAdapter.JtBEGIN_TRANSACTION));
member = (Member) iterator.next();
if (!sendEmail (member.getEmail(), emailContent, subject)) {
factory.sendMessage (daoStrategy, new JtMessage (JtDAOAdapter.JtROLLBACK));
continue;
}
if (!debug) {
if (!updateDatabase (member)) {
factory.sendMessage (daoStrategy, new JtMessage (JtDAOAdapter.JtROLLBACK));
continue;
}
}
factory.sendMessage (daoStrategy, new JtMessage (JtDAOAdapter.JtCOMMIT));
sleep (2); // Pause for a couple of seconds
}
}
// Send email
private boolean sendEmail (String to, String msg, String subject)
{
Exception e;
if (mailAdapter == null)
return (false);
handleTrace ("sendEmail:" + to + ":" + subject);
mailAdapter.setMessage(msg);
mailAdapter.setTo(to);
mailAdapter.setSubject(subject);
if (attachment != null)
mailAdapter.setAttachment(attachment);
if (debug) {
handleTrace ("sendEmail: just a test ....\n");
return (true);
}
handleTrace ("sendmail: sending message ....");
factory.sendMessage (mailAdapter, new JtMessage (JtObject.JtACTIVATE));
propagateException (mailAdapter);
e = (Exception) mailAdapter.getObjException();
if (e != null) {
handleTrace ("sendEmail: exception detected:"
+ e);
return (false);
}
return (true);
}
// Sleep for a period of time
private void sleep (long interval)
{
if (interval == 0L)
return;
try {
Thread.sleep (interval);
} catch (Exception ex) {
handleException (ex);
}
}
// Reset Exceptions
private void resetExceptions ()
{
this.setObjException(null);
}
// Process message
public Object processMessage (Object ev) {
JtMessage e = (JtMessage) ev;
String msgid;
if (e == null)
return (null);
msgid = (String) e.getMsgId ();
if (msgid == null)
return null;
if (!initted) {
initialize ();
initted = true;
}
if (msgid.equals (JtObject.JtACTIVATE)) {
resetExceptions ();
if (test) {
sendEmail (testEmail, "This is a test email.", "Test email");
return (null);
}
broadcastEmail ();
return (null);
}
return (null);
}
public static void main (String[] args) {
JtMailingList r;
int i;
JtFactory factory = new JtFactory ();
String password;
JtKeyboard keyboard;
r = (JtMailingList) factory.createObject (JtMailingList.JtCLASS_NAME);
i = 0;
while (i < args.length) {
if (args[i].equals ("-d"))
r.setDebug(false);
if (args[i].equals ("-test")) {
r.setTest (true);
r.setDebug(false);
}
if (args[i].equals ("-s"))
if (i + 1 < args.length)
r.setSubject (args[i + 1]);
else {
System.out.println
("Usage: java JtMailingList [-d] [-s subject]");
System.exit (1);
}
//if (args[i].equals ("-retry"))
// r.retry = true;
i++;
}
if (args.length == 2 && args[1].equals ("-d"))
r.setDebug(false);
keyboard = (JtKeyboard) factory.createObject (JtKeyboard.JtCLASS_NAME);
factory.setValue (keyboard, "prompt", "Password:");
password = (String) factory.sendMessage (keyboard, new JtMessage (JtObject.JtACTIVATE));
r.getMailAdapter().setPassword(password);
r.setFilename("/tmp/test.txt");
r.setQuery("select * from roster where email_flag=1 AND status >= 0 ;");
factory.sendMessage(r, new JtMessage (JtObject.JtACTIVATE));
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?