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 + -
显示快捷键?