• NetBeans的Gmail插件!


    这几天写了一个NetBeans的插件——Gmail Notifier : -)。偶的Ubuntu上不了网。。。。只能在Windows下测试了。。。。

    先看下解图:

    OK,源代码:

    /*
     * @(#)GmailNotifierAction.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 18, 2008, 7:47:18 PM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier;

    import org.openide.util.HelpCtx;
    import org.openide.util.NbBundle;
    import org.openide.util.actions.CallableSystemAction;

    /**
     * Gmail Notifier Action.
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.0.0, May 18, 2008
     
    */
    public final class GmailNotifierAction extends CallableSystemAction {

        
    private static final long serialVersionUID = 1L;
        GmailNotifierPanel gChecker 
    = new GmailNotifierPanel();

        
    public void performAction() {
            gChecker.forceCheck();
        }

        
    public String getName() {
            
    return NbBundle.getMessage(GmailNotifierAction.class,
                    
    "CTL_GmailNotifierAction");
        }

        
    public HelpCtx getHelpCtx() {
            
    return HelpCtx.DEFAULT_HELP;
        }

        @Override
        
    protected boolean asynchronous() {
            
    return false;
        }

        @Override
        
    public java.awt.Component getToolbarPresenter() {
            
    return gChecker;
        }
    }
    /*
     * @(#)GmailNotifierOptionsCategory.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 18, 2008, 11:25:57 PM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier;

    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import org.netbeans.spi.options.OptionsCategory;
    import org.netbeans.spi.options.OptionsPanelController;
    import org.openide.util.NbBundle;
    import org.openide.util.Utilities;

    /**
     * Gmail Notifier settings panel's category.
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.0.1, May 18, 2008
     
    */
    public class GmailNotifierOptionsCategory extends OptionsCategory {

        
    public OptionsPanelController create() {
            
    return new GmailNotifierSettingsPanelController();
        }

        
    public String getCategoryName() {
            
    return NbBundle.getMessage(GmailNotifierOptionsCategory.class,
                    
    "OptionsCategory_Name_Gmailnotifier");
        }

        
    public String getTitle() {
            
    return NbBundle.getMessage(GmailNotifierOptionsCategory.class,
                    
    "OptionsCategory_Title_Gmailnotifier");
        }

        @Override
        
    public Icon getIcon() {
            
    return new ImageIcon(Utilities.loadImage(
                    
    "cn/edu/ynu/sei/gmailnotifier/gm-logo-settings.png"));
        }
    }
    /*
     * @(#)GmailNotifierPanel.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 18, 2008, 9:10:24 PM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier;

    import java.applet.Applet;
    import java.applet.AudioClip;
    import java.net.URL;
    import cn.edu.ynu.sei.gmailnotifier.common.GmailSetting;
    import cn.edu.ynu.sei.gmailnotifier.common.GmailSettingManager;
    import cn.edu.ynu.sei.gmailnotifier.common.GmailBox;
    import cn.edu.ynu.sei.gmailnotifier.common.GmailBoxManager;
    import java.awt.event.MouseEvent;
    import java.util.Timer;
    import java.util.TimerTask;
    import org.netbeans.api.progress.ProgressHandle;
    import org.netbeans.api.progress.ProgressHandleFactory;
    import org.openide.util.RequestProcessor;

    /**
     * Gmail checker panel.
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.2.7, May 21, 2008
     
    */
    public class GmailNotifierPanel extends javax.swing.JPanel {

        
    private static final long serialVersionUID = 1L;
        
    //<editor-fold defaultstate="collapsed" desc="variables-consts">
        private GmailBox mailBox = null;
        
    private GmailBoxManager gmHelper = null;
        
    private GmailSetting settings = null;
        
    private GmailSettingManager settingsManager = null;
        
    private int subjectCount = 0;
        
    private Timer mailNotifierTimer;
        
    private Timer showSubjectIntervalTimer;
        
    private String connectingTo = "<html><b>Connecting To Gmail...</b></html>";
        
    private String retrivingUserCountInfo =
                
    "<html><b>Retrieving Usage and Count Information...</b></html>";
        
    // TODO private String usagePercent = "Usage Percent Is : ";
        private String newMailsCount = "Total New Mails Is : ";
        
    private String noActiveConnection =
                
    "<html><b>No Active Connection or Connection Is Not Usable...</b></html>";
        
    private String initiateString =
                
    "<html>Gmail checker Module.... <b>Disconnected</b></HTML>";
        
    private String tooltipString =
                
    "<html><b>Left</b> click will open the Gmail in your web browser<br> " +
                
    "<b>Right</b> click will check your new mails<br> Have Fun :-) </html>";
        
    private String Retriving_emails_info =
                
    "<html><b>Retrieving e-mail Headers...</b></html>";
        
    //</editor-fold>

        
    /**
         * Check mail box.
         * 
    @return
         
    */
        
    public boolean doCheckMail() {
            
    //<editor-fold defaultstate="collapsed" desc="runnables for gmHelper calling">
            Runnable connectRun = new Runnable() {

                
    public void run() {
                    
    if (gmHelper.connect()) {
                        mailBox 
    = gmHelper.getMailBox();
                    } 
    else {
                        jLabel1.setText(noActiveConnection);
                    }
                }
            };

            Runnable newSubjectsCount 
    = new Runnable() {

                
    public void run() {
                    subjectCount 
    = mailBox.getSubjectsCount();
                    
    if (subjectCount > 0) {
                        playSound(
    "notify");
                    }
                }
            };
            
    //</editor-fold>

            ProgressHandle ProgHandl 
    = ProgressHandleFactory.createHandle(
                    connectingTo);
            jLabel1.setText(connectingTo);
            ProgHandl.start(
    99);
            RequestProcessor.getDefault().post(connectRun).waitFinished();

            jLabel1.setText(retrivingUserCountInfo);
            
            ProgHandl.progress(retrivingUserCountInfo, 
    33);
            RequestProcessor.getDefault().post(newSubjectsCount).waitFinished();

            
    if (!gmHelper.isConnected()) {
                jLabel1.setText(noActiveConnection);
                setIcon(
    "gm-logo-disabled");
                ProgHandl.finish();
                
    return false;
            } 
    else {
                jLabel1.setText(Retriving_emails_info);
                
    if (subjectCount > 0) {
                    setIcon(
    "gm-logo-new");
                } 
    else {
                     setIcon(
    "gm-logo");
                }
                
    // TODO always 33% ? :-)
                ProgHandl.progress(Retriving_emails_info, 33);
                ProgHandl.progress(
    33);
                ProgHandl.finish();
                
    return true;
            }
        }

        
    /**
         * Initialize a gmail manager
         * 
    @see {@link #gmHelper}
         
    */
        
    private void newGmailManager() {
            gmHelper 
    = new GmailBoxManager(settings.getUserName(), settings.getPassword(), settings.getProxy(), settings.getPort());
        }

        
    /**
         * Reset information to gmail manager.
         
    */
        
    private void resetGmailManager() {
            gmHelper.userName 
    = settings.getUserName();
            gmHelper.userPassword 
    = settings.getPassword();
            gmHelper.proxyHost 
    = settings.getProxy();
            gmHelper.port 
    = settings.getPort();
        }

        
    /**
         * Display mails information.
         
    */
        
    private void showMailsInfo() {
            setCount(mailBox.getSubjectsCount());
            showSubjectIntervalTimer 
    = new java.util.Timer();
            showSubjectIntervalTimer.scheduleAtFixedRate(
    new TimerTask() {

                
    private int currentSubjectNo;

                
    public void run() {
                    
    if (currentSubjectNo < subjectCount) {
                        jLabel1.setText(
    "<html><b>" +
                                (currentSubjectNo 
    + 1+ "</b> :" +
                                getSubjectSnip(currentSubjectNo) 
    + "</html>");
                        currentSubjectNo
    ++;
                    } 
    else {
                        showSubjectIntervalTimer.cancel();
                        setCount(mailBox.getSubjectsCount());
                        mailBox 
    = gmHelper.getMailBox();
                    }

                }
            }, settings.getDisplayRotationInterval() 
    * 1000,
                    settings.getDisplayRotationInterval() 
    * 1000);
        }

        
    /**
         * Getting start check mail.
         * 
    @param delayBeforeStartCheck delay(second) before getting start check
         
    */
        
    public void startCheck(int delayBeforeStartCheck) {
            settings 
    = settingsManager.retrieveSettings();
            mailBox 
    = new GmailBox();
            
    if (gmHelper == null) {
                newGmailManager();
            } 
    else {
                resetGmailManager();
            }

            mailNotifierTimer 
    = new java.util.Timer();
            mailNotifierTimer.scheduleAtFixedRate(
    new TimerTask() {

                
    public void run() {
                    subjectCount 
    = 0;
                    
    if (doCheckMail()) {
                        showMailsInfo();
                    }
                }
            }, delayBeforeStartCheck 
    * 1000,
                    settings.getCheckMailInterval() 
    * 60 * 1000);
        }

        
    /**
         * Default constructor.
         
    */
        
    public GmailNotifierPanel() {
            initComponents();
            jLabel1.setText(initiateString);
            jLabel1.setToolTipText(tooltipString);
            settingsManager 
    = new GmailSettingManager();
            settings 
    = settingsManager.retrieveSettings();
            startCheck(settings.getDelayBeforeFirstCheck());
        }

        
    /**
         * Play sound.
         * 
    @param soundName sound file name
         
    */
        
    private void playSound(String soundName) {
            
    if (settings.isVoiceOn()) {
                AudioClip Clip;
                URL Url;
                
    try {
                    Url 
    = getClass().getResource(
                            
    "/cn/edu/ynu/sei/gmailnotifier/" +
                            soundName 
    + ".wav");
                    Clip 
    = Applet.newAudioClip(Url);
                    Clip.play();
                } 
    catch (Exception e) {
                    System.err.println(e.getMessage());
                }
            }
        }

        
    /**
         * Set mail count for display.
         * 
    @param count mail count
         
    */
        
    private void setCount(int count) {
            
    this.jLabel1.setText("<html>" + newMailsCount +
                    
    " <b><font color="blue">" + count + "</font></b></html>");
        }

        
    /**
         * Set the label's icon.
         * 
    @param iconName icon name
         
    */
        
    private void setIcon(String iconName) {
            jLabel1.setIcon(
    new javax.swing.ImageIcon(getClass().getResource("/cn/edu/ynu/sei/gmailnotifier/" + iconName + ".png"))); // NOI18N

        }

        
    /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         
    */
        
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {

            jLabel1 
    = new javax.swing.JLabel();

            setAlignmentY(
    0.0F);
            setOpaque(
    false);

            jLabel1.setFont(
    new java.awt.Font("Tahoma"010)); // NOI18N
            jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
            jLabel1.setIcon(
    new javax.swing.ImageIcon(getClass().getResource("/cn/edu/ynu/sei/gmailnotifier/gm-logo-disabled.png"))); // NOI18N
            org.openide.awt.Mnemonics.setLocalizedText(jLabel1, "<html>Gmail Notifier Module.... <b>Disconnected</b></html>");
            jLabel1.setToolTipText(
    "");
            jLabel1.setVerticalAlignment(javax.swing.SwingConstants.TOP);
            jLabel1.setAlignmentY(
    0.0F);
            jLabel1.setAutoscrolls(
    true);
            jLabel1.setDoubleBuffered(
    true);
            jLabel1.setIconTextGap(
    2);
            jLabel1.setOpaque(
    false);
            jLabel1.setPreferredSize(
    new java.awt.Dimension(22722));
            jLabel1.setSize(
    new java.awt.Dimension(22722));
            jLabel1.addMouseListener(
    new java.awt.event.MouseAdapter() {
                
    public void mouseClicked(java.awt.event.MouseEvent evt) {
                    jLabel1MouseClicked(evt);
                }
                
    public void mouseEntered(java.awt.event.MouseEvent evt) {
                    jLabel1MouseEntered(evt);
                }
            });

            org.jdesktop.layout.GroupLayout layout 
    = new org.jdesktop.layout.GroupLayout(this);
            
    this.setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(jLabel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 
    237, Short.MAX_VALUE)
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(jLabel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 
    24, Short.MAX_VALUE)
            );
        }
    // </editor-fold>                        

        
    /**
         * Get new mails subject snip.
         * 
    @param subjectNo subject number
         * 
    @return mail subject snip
         
    */
        
    private String getSubjectSnip(int subjectNo) {
            String subj 
    = mailBox.getMails().get(subjectNo).getSubject();
            
    return subj.length() > 40 ? (subj.substring(040+ "....") : subj;
        }

        
    // TODO getContentSnip
        /**
         * Get new mails content snip.
         * 
    @param subjectNo subject number
         * 
    @return mail content snip
         
    */
        
    private String getContentSnip(int subjectNo) {
            String cont 
    = mailBox.getMails().get(subjectNo).getContent();
            
    return cont.length() > 100 ? (cont.substring(0100+ "....") : cont;
        }

        
    private void jLabel1MouseClicked(java.awt.event.MouseEvent evt) {                                     
            
    // left clicked
            if (evt.getModifiers() == MouseEvent.BUTTON1_MASK) {
                GmailBoxManager.openURL(
    "http://www.gmail.com");
            }
            
    // right clicked
            if (evt.getModifiers() == MouseEvent.BUTTON3_MASK) {
                forceCheck();
            }
        }                                    

    private void jLabel1MouseEntered(java.awt.event.MouseEvent evt) {                                     
        
    if (mailBox.getSubjectsCount() != 0) {
            StringBuilder snips 
    = new StringBuilder();
            
    for (int i = 0; i < subjectCount; i++) {
                snips.append(
    "<html><b>" + (i + 1+ "</b>: " +
                        
    "<font color="blue">" +
                        getSubjectSnip(i) 
    +
                        
    "</font><br>");
            
    //snips.append("   " + getContentSnip(i) + "<br>");
            
    //snips.append("---<br>");
            }
            snips.append(
    "</html>");
            jLabel1.setToolTipText(snips.toString());
        } 
    else {
            jLabel1.setToolTipText(tooltipString);
        }
    }                                    

        
    // Variables declaration - do not modify                     
        public javax.swing.JLabel jLabel1;
        
    // End of variables declaration                   

        
    /**
         * Check mail inbox by force.
         
    */
        
    public void forceCheck() {
            
    if (showSubjectIntervalTimer != null) {
                showSubjectIntervalTimer.cancel();
            }
            
    if (mailNotifierTimer != null) {
                mailNotifierTimer.cancel();
            }
            startCheck(
    0);
        }
    }
    /*
     * @(#)GmailNotifierSettingsPanel.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 18, 2008, 11:25:57 PM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier;

    import cn.edu.ynu.sei.gmailnotifier.common.GmailSetting;
    import javax.swing.SpinnerNumberModel;

    /**
     * Gmail Notifier settings panel.
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.0.2, May 21, 2008
     
    */
    public class GmailNotifierSettingsPanel extends javax.swing.JPanel {

        
    private static final long serialVersionUID = 1L;
        
    public boolean isChanged = false;

        
    /**
         * Default constructor.
         
    */
        
    public GmailNotifierSettingsPanel() {
            initComponents();
        }

        
    /**
         * Set all settings in UI.
         * 
    @param setting gmail settings
         
    */
        
    public void populateUI(GmailSetting setting) {
            
    this.jTextField1.setText(setting.getUserName());
            
    this.jPasswordField1.setText(setting.getPassword());
            
    this.jCheckBox1.setSelected(setting.isVoiceOn());

            
    this.jSpinner1.setValue(new Integer(setting.getDisplayRotationInterval()));
            
    this.jSpinner2.setValue(new Integer(setting.getCheckMailInterval()));
            
    this.jSpinner3.setValue(new Integer(setting.getDisplayRotationInterval()));

            
    this.jCheckBox3.setSelected(setting.isUseProxy());
            
    this.jTextField2.setText(setting.getProxy());
            
    this.jTextField3.setText(String.valueOf(setting.getPort()));
            isChanged 
    = true;
        }

        
    /**
         * Retieve all settings.
         * 
    @return gmail settings
         
    */
        
    public GmailSetting returnSetting() {
            
    return new GmailSetting(jTextField1.getText(), new String(
                    jPasswordField1.getPassword()),
                    jCheckBox3.isSelected(), jTextField2.getText(),
                    Integer.parseInt(jTextField3.getText()),
                    ((Integer) jSpinner1.getValue()).intValue(),
                    ((Integer) jSpinner2.getValue()).intValue(),
                    ((Integer) jSpinner3.getValue()).intValue(),
                    jCheckBox1.isSelected());
        }

        
    /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         
    */
        
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {

            jPanel1 
    = new javax.swing.JPanel();
            jTextField1 
    = new javax.swing.JTextField();
            jPasswordField1 
    = new javax.swing.JPasswordField();
            jCheckBox1 
    = new javax.swing.JCheckBox();
            jLabel1 
    = new javax.swing.JLabel();
            jLabel2 
    = new javax.swing.JLabel();
            jPanel2 
    = new javax.swing.JPanel();
            jPanel3 
    = new javax.swing.JPanel();
            jTextField2 
    = new javax.swing.JTextField();
            jLabel9 
    = new javax.swing.JLabel();
            jLabel10 
    = new javax.swing.JLabel();
            jTextField3 
    = new javax.swing.JTextField();
            jCheckBox3 
    = new javax.swing.JCheckBox();
            jSpinner1 
    = new javax.swing.JSpinner();
            jSpinner2 
    = new javax.swing.JSpinner();
            jSpinner3 
    = new javax.swing.JSpinner();
            jLabel3 
    = new javax.swing.JLabel();
            jLabel4 
    = new javax.swing.JLabel();
            jLabel5 
    = new javax.swing.JLabel();
            jLabel6 
    = new javax.swing.JLabel();
            jLabel7 
    = new javax.swing.JLabel();
            jLabel8 
    = new javax.swing.JLabel();

            jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
    "General Options"));

            jTextField1.addPropertyChangeListener(
    new java.beans.PropertyChangeListener() {
                
    public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    GmailNotifierSettingsPanel.
    this.propertyChange(evt);
                }
            });

            jPasswordField1.addPropertyChangeListener(
    new java.beans.PropertyChangeListener() {
                
    public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    GmailNotifierSettingsPanel.
    this.propertyChange(evt);
                }
            });

            jCheckBox1.setText(
    "Enable sounds");
            jCheckBox1.setBorder(javax.swing.BorderFactory.createEmptyBorder(
    0000));
            jCheckBox1.setMargin(
    new java.awt.Insets(0000));
            jCheckBox1.addPropertyChangeListener(
    new java.beans.PropertyChangeListener() {
                
    public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    GmailNotifierSettingsPanel.
    this.propertyChange(evt);
                }
            });

            jLabel1.setText(
    "Username");

            jLabel2.setText(
    "Password");

            org.jdesktop.layout.GroupLayout jPanel1Layout 
    = new org.jdesktop.layout.GroupLayout(jPanel1);
            jPanel1.setLayout(jPanel1Layout);
            jPanel1Layout.setHorizontalGroup(
                jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(jPanel1Layout.createSequentialGroup()
                    .addContainerGap()
                    .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                        .add(jPanel1Layout.createSequentialGroup()
                            .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                .add(jLabel2)
                                .add(jLabel1))
                            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                            .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, 
    false)
                                .add(jPasswordField1)
                                .add(org.jdesktop.layout.GroupLayout.TRAILING, jTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 
    208, Short.MAX_VALUE)))
                        .add(jCheckBox1))
                    .add(
    132132132))
            );
            jPanel1Layout.setVerticalGroup(
                jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(jPanel1Layout.createSequentialGroup()
                    .addContainerGap()
                    .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(jLabel1)
                        .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                    .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                        .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel1Layout.createSequentialGroup()
                            .add(
    161616)
                            .add(jLabel2))
                        .add(jPanel1Layout.createSequentialGroup()
                            .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                            .add(jPasswordField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 
    30, Short.MAX_VALUE)))
                    .add(
    171717)
                    .add(jCheckBox1))
            );

            jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(
    "Advanced Options"));

            jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(
    "Proxy Settings"));
            jPanel3.setName(
    "Proxy Settings"); // NOI18N

            jTextField2.addPropertyChangeListener(
    new java.beans.PropertyChangeListener() {
                
    public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    GmailNotifierSettingsPanel.
    this.propertyChange(evt);
                }
            });

            jLabel9.setText(
    "Host:");

            jLabel10.setText(
    "Port:");

            jTextField3.addPropertyChangeListener(
    new java.beans.PropertyChangeListener() {
                
    public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    GmailNotifierSettingsPanel.
    this.propertyChange(evt);
                }
            });

            jCheckBox3.setText(
    "Connect via proxy");
            jCheckBox3.setBorder(javax.swing.BorderFactory.createEmptyBorder(
    0000));
            jCheckBox3.setMargin(
    new java.awt.Insets(0000));
            jCheckBox3.addPropertyChangeListener(
    new java.beans.PropertyChangeListener() {
                
    public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    GmailNotifierSettingsPanel.
    this.propertyChange(evt);
                }
            });

            org.jdesktop.layout.GroupLayout jPanel3Layout 
    = new org.jdesktop.layout.GroupLayout(jPanel3);
            jPanel3.setLayout(jPanel3Layout);
            jPanel3Layout.setHorizontalGroup(
                jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(jPanel3Layout.createSequentialGroup()
                    .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                        .add(jCheckBox3)
                        .add(jPanel3Layout.createSequentialGroup()
                            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                .add(jLabel9)
                                .add(jLabel10))
                            .add(
    181818)
                            .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, 
    false)
                                .add(jTextField3)
                                .add(jTextField2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 
    142, Short.MAX_VALUE))))
                    .addContainerGap(
    190, Short.MAX_VALUE))
            );
            jPanel3Layout.setVerticalGroup(
                jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel3Layout.createSequentialGroup()
                    .addContainerGap()
                    .add(jCheckBox3)
                    .add(
    141414)
                    .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(jTextField2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(jLabel9))
                    .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                    .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(jTextField3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(jLabel10))
                    .add(
    202020))
            );

            jSpinner1.setModel(
    new SpinnerNumberModel(
                
    new Integer(15),
                
    new Integer(0),
                
    null,
                
    new Integer(5)
            ));
            jSpinner1.addPropertyChangeListener(
    new java.beans.PropertyChangeListener() {
                
    public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    GmailNotifierSettingsPanel.
    this.propertyChange(evt);
                }
            });

            jSpinner2.setModel(
    new SpinnerNumberModel(
                
    new Integer(3),
                
    new Integer(1),
                
    new Integer(15),
                
    new Integer(1)
            ));
            jSpinner2.addPropertyChangeListener(
    new java.beans.PropertyChangeListener() {
                
    public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    GmailNotifierSettingsPanel.
    this.propertyChange(evt);
                }
            });

            jSpinner3.setModel(
    new SpinnerNumberModel(
                
    new Integer(15),
                
    new Integer(0),
                
    null,
                
    new Integer(5)
            ));
            jSpinner3.addPropertyChangeListener(
    new java.beans.PropertyChangeListener() {
                
    public void propertyChange(java.beans.PropertyChangeEvent evt) {
                    GmailNotifierSettingsPanel.
    this.propertyChange(evt);
                }
            });

            jLabel3.setText(
    "Seconds");

            jLabel4.setText(
    "Minutes");

            jLabel5.setText(
    "Seconds");

            jLabel6.setText(
    "Delay before first mail check:");

            jLabel7.setText(
    "Mail check interval:");

            jLabel8.setText(
    "Rotation delay:");

            org.jdesktop.layout.GroupLayout jPanel2Layout 
    = new org.jdesktop.layout.GroupLayout(jPanel2);
            jPanel2.setLayout(jPanel2Layout);
            jPanel2Layout.setHorizontalGroup(
                jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(jPanel2Layout.createSequentialGroup()
                    .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                        .add(jPanel2Layout.createSequentialGroup()
                            .add(
    181818)
                            .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                .add(jLabel6)
                                .add(jLabel7)
                                .add(jLabel8))
                            .add(
    181818)
                            .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                .add(jSpinner1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 
    93, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(jSpinner2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 
    93, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                                .add(jSpinner3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 
    93, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                            .add(
    181818)
                            .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                                .add(jLabel4)
                                .add(jLabel3)
                                .add(jLabel5)))
                        .add(jPanel2Layout.createSequentialGroup()
                            .addContainerGap()
                            .add(jPanel3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                    .addContainerGap())
            );
            jPanel2Layout.setVerticalGroup(
                jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(jPanel2Layout.createSequentialGroup()
                    .addContainerGap()
                    .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(jLabel6)
                        .add(jSpinner1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(jLabel3))
                    .add(
    151515)
                    .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(jSpinner2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(jLabel4)
                        .add(jLabel7))
                    .add(
    141414)
                    .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(jSpinner3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(jLabel5)
                        .add(jLabel8))
                    .add(
    454545)
                    .add(jPanel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 
    120, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(
    53, Short.MAX_VALUE))
            );

            jPanel3.getAccessibleContext().setAccessibleName(
    "");

            org.jdesktop.layout.GroupLayout layout 
    = new org.jdesktop.layout.GroupLayout(this);
            
    this.setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .addContainerGap()
                    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                        .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 
    406, Short.MAX_VALUE)
                        .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .addContainerGap()
                    .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                    .add(jPanel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addContainerGap())
            );
        }
    // </editor-fold>                        

        
    /**
         * Property change event handle.
         * 
    @param evt property chang evnt
         
    */
        
    private void propertyChange(java.beans.PropertyChangeEvent evt) {                                
            isChanged 
    = true;
        }                               
        
    // Variables declaration - do not modify                     
        private javax.swing.JCheckBox jCheckBox1;
        
    private javax.swing.JCheckBox jCheckBox3;
        
    private javax.swing.JLabel jLabel1;
        
    private javax.swing.JLabel jLabel10;
        
    private javax.swing.JLabel jLabel2;
        
    private javax.swing.JLabel jLabel3;
        
    private javax.swing.JLabel jLabel4;
        
    private javax.swing.JLabel jLabel5;
        
    private javax.swing.JLabel jLabel6;
        
    private javax.swing.JLabel jLabel7;
        
    private javax.swing.JLabel jLabel8;
        
    private javax.swing.JLabel jLabel9;
        
    private javax.swing.JPanel jPanel1;
        
    private javax.swing.JPanel jPanel2;
        
    private javax.swing.JPanel jPanel3;
        
    private javax.swing.JPasswordField jPasswordField1;
        
    private javax.swing.JSpinner jSpinner1;
        
    private javax.swing.JSpinner jSpinner2;
        
    private javax.swing.JSpinner jSpinner3;
        
    private javax.swing.JTextField jTextField1;
        
    private javax.swing.JTextField jTextField2;
        
    private javax.swing.JTextField jTextField3;
        
    // End of variables declaration                   
    }
    /*
     * @(#)GmailNotifierSettingsPanelController.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 18, 2008, 11:25:57 PM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier;

    import cn.edu.ynu.sei.gmailnotifier.common.GmailSettingManager;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.beans.PropertyChangeListener;
    import javax.swing.JComponent;
    import org.netbeans.spi.options.OptionsPanelController;
    import org.openide.DialogDescriptor;
    import org.openide.DialogDisplayer;
    import org.openide.util.HelpCtx;
    import org.openide.util.Lookup;

    /**
     * Gmail Notifier settings panel's controller.
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.0.3, May 21, 2008
     
    */
    public class GmailNotifierSettingsPanelController extends OptionsPanelController {

        
    private GmailNotifierSettingsPanel settingPanel =
                
    new GmailNotifierSettingsPanel();
        
    private GmailSettingManager settingManager = new GmailSettingManager();
        
    private String sureTocancle =
                
    "<html><b>do you want to save the changes that you made" +
                
    " into Gmail setting Dialog ?</b><html>";

        
    public void applyChanges() {
            
    if (settingPanel.isChanged) {
                settingManager.storeSettings(settingPanel.returnSetting());
                settingPanel.isChanged 
    = false;
            }
        }

        
    public void cancel() {
            
    if (settingPanel.isChanged) {
                DialogDescriptor ddesc 
    = new DialogDescriptor((Object) sureTocancle,
                        
    "Changes will lost",
                        
    true, DialogDescriptor.YES_NO_OPTION,
                        DialogDescriptor.CANCEL_OPTION, 
    new ActionListener() {

                    
    public void actionPerformed(ActionEvent e) {
                        
    if (e.getActionCommand().equalsIgnoreCase("yes")) {
                            settingManager.storeSettings(
                                    settingPanel.returnSetting());
                        }
                    }
                });
                DialogDisplayer.getDefault().createDialog(ddesc).setVisible(
    true);
            }
        }

        
    public boolean isValid() {
            
    return true;
        }

        
    public boolean isChanged() {
            
    return true;
        }

        
    public JComponent getComponent(Lookup masterLookup) {
            
    return settingPanel;
        }

        
    public HelpCtx getHelpCtx() {
            
    return HelpCtx.DEFAULT_HELP;
        }

        
    public void update() {
            settingPanel.populateUI(settingManager.retrieveSettings());
        }

        
    public void addPropertyChangeListener(PropertyChangeListener l) {
        }

        
    public void removePropertyChangeListener(PropertyChangeListener l) {
        }
    }
    /*
     * @(#)GmailBox.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 19, 2008, 10:6:39 AM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier.common;

    import java.util.ArrayList;
    import java.util.List;

    /**
     * Gmail mail box information. 
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.0.5, May 21, 2008
     
    */
    public class GmailBox {

        
    private List<Mail> mails = new ArrayList<Mail>();

        
    /**
         * Default consturctor.
         
    */
        
    public GmailBox() {
        }

        
    /**
         * Constructor with parameters.
         * 
    @param newMailCount new mail count
         
    */
        
    public GmailBox(List<Mail> mails) {
            
    this.setMails(mails);
        }

        
    //<editor-fold defaultstate="collapsed" desc="Getters & Setters">
        public List<Mail> getMails() {
            
    return mails;
        }

        
    public int getSubjectsCount() {
            
    return mails.size();
        }

        
    public void setMails(List<Mail> mails) {
            
    if (mails != null) {
                
    this.mails = mails;
            }
        }
        
    //</editor-fold>
    }
    /*
     * @(#)GmailBox.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 17, 2008, 7:17:34 PM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier.common;

    import java.lang.reflect.Method;
    import java.security.Security;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Properties;
    import java.util.Set;
    import javax.mail.Folder;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.Store;
    import javax.mail.URLName;
    import javax.swing.JOptionPane;

    /**
     * Gmail mail box manager. 
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.2.6, May 21, 2008
     
    */
    public class GmailBoxManager {

        
    public String userName = "User name";
        
    public String userPassword = "Password";
        
    public String proxyHost = "No Proxy";
        
    public int port = 0;
        
    private static Store store;

        
    /**
         * Constructor with parameters.
         * 
    @param userName user name
         * 
    @param userPassword user password
         * 
    @param proxyHost proxy host
         * 
    @param port proxy port
         
    */
        
    public GmailBoxManager(String userName, String userPassword,
                String proxyHost, 
    int port) {
            
    this.userPassword = userPassword;
            
    this.userName = userName;
            
    this.proxyHost = proxyHost;
            
    this.port = port;
        }

        
    /**
         * Connect to the mail box.
         * 
    @return if connect successfully, return <code>true</code>,
         * otherwise, return <code>false</code>
         
    */
        
    public boolean connect() {
            
    if (!proxyHost.equalsIgnoreCase("No Proxy")) {
                
    // TODO setProxy(proxyHost, port);
            } else {
                
    if (store == null || !store.isConnected()) {
                    Security.addProvider(
    new com.sun.net.ssl.internal.ssl.Provider());
                    
    final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
                    Properties props 
    = System.getProperties();
                    props.setProperty(
    "mail.pop3.socketFactory.class", SSL_FACTORY);
                    props.setProperty(
    "mail.pop3.socketFactory.fallback""false");
                    props.setProperty(
    "mail.pop3.port""995");
                    props.setProperty(
    "mail.pop3.socketFactory.port""995");
                    props.setProperty(
    "mail.imap.socketFactory.class", SSL_FACTORY);
                    props.setProperty(
    "mail.imap.socketFactory.fallback""false");
                    props.setProperty(
    "mail.imap.port""993");
                    props.setProperty(
    "mail.imap.socketFactory.port""993");

                    Session session 
    = Session.getDefaultInstance(props, null);
                    session.setDebug(
    false); // TODO reset debug flag

                    URLName urln 
    = new URLName("imap""imap.gmail.com"993null,
                            userName,
                            userPassword);
                    
    // TODO available POP3s!
    //        URLName urln = new URLName("pop3s", "pop.gmail.com", 995, null,
    //                userName, userPassword);
                    try {
                        store 
    = session.getStore(urln);
                    } 
    catch (javax.mail.NoSuchProviderException ex) {
                        System.err.println(ex.getMessage());
                        
    return false;
                    }
                    
    try {
                        store.connect();
                    } 
    catch (MessagingException ex) {
                        System.err.println(ex.getMessage());
                        
    return false;
                    }
                }
            }

            
    return true;
        }

        
    /**
         * Is connected mail box?
         * 
    @return if connected, return <code>true</code>,
         * otherwise, return <code>false</code>
         
    */
        
    public boolean isConnected() {
            
    return store != null ? store.isConnected() : false;
        }

        
    /**
         * Get the new mail box information.
         * 
    @return mail box
         
    */
        
    public GmailBox getMailBox() {
            
    if (store == null || !store.isConnected()) {
                connect();
            }
            
    // TODO   int usagePercent=0;
            int newMailCount = 0;
            List
    <Mail> mails = new ArrayList<Mail>();
            
    try {
                Folder inbox 
    = store.getFolder("Inbox");
                inbox.open(Folder.READ_ONLY);
                newMailCount 
    = inbox.getUnreadMessageCount();

                
    if (newMailCount != 0) {
                    Message[] messages 
    = inbox.getMessages(1, newMailCount);
                    
    // we only fucus on mail, not message, so using Set 
                    
    // to ignore the duplicate subject messages
                    Set<String> subjects = new HashSet<String>();
                    
    for (int i = 0; i < messages.length; i++) {
                        String subject 
    = messages[i].getSubject();
                        
    // TODO parse the mail body
                        
    // String content = messages[i].getContent();
                        
    // Only subject
                        if (subject == null) {
                            subject 
    = "no subject";
                        }
                        subjects.add(subject);
                    }
                    
    for (String sub : subjects) {
                         mails.add(
    new Mail(sub, ""/* content */));
                    }
                    
    return new GmailBox(mails);
                } 
    else {
                    System.err.println(
    "No any new mail!");
                }
            } 
    catch (Exception ex) {
                System.err.println(ex.getMessage());
            }

            
    // return empty mail box
            return new GmailBox();
        }

        
    /**
         * Open the url in system's web browser.
         * 
    @param url the specified url to open
         
    */
        @SuppressWarnings(value 
    = {"unchcked"})
        
    public static void openURL(String url) {
            String osName 
    = System.getProperty("os.name");
            
    try {
                
    if (osName.startsWith("Mac OS")) {
                    Class fileMgr 
    = Class.forName("com.apple.eio.FileManager");
                    @SuppressWarnings(
    "unchecked")
                    Method openURL 
    = fileMgr.getDeclaredMethod("openURL",
                            
    new Class[]{String.class});
                    openURL.invoke(
    nullnew Object[]{url});
                } 
    else if (osName.startsWith("Windows")) {
                    Runtime.getRuntime().exec(
    "rundll32 url.dll,FileProtocolHandler " +
                            url);
                } 
    else {
                    
    //assume Unix or Linux
                    String[] browsers = {
                        
    "firefox""opera""konqueror",
                        
    "epiphany""mozilla""netscape"
                    };
                    String browser 
    = null;
                    
    for (int count = 0;
                            count 
    < browsers.length && browser == null;
                            count
    ++) {
                        
    if (Runtime.getRuntime().exec(
                                
    new String[]{"which", browsers[count]}).waitFor() ==
                                
    0) {
                            browser 
    = browsers[count];
                        }

                    }
                    
    if (browser == null) {
                        
    throw new Exception("Could not find web browser");
                    } 
    else {
                        Runtime.getRuntime().exec(
    new String[]{browser, url});
                    }
                }
            } 
    catch (Exception e) {
                JOptionPane.showMessageDialog(
    null,
                        
    "Error attempting to launch web browser" + ": " + e.getLocalizedMessage());
            }
        }
    }
    /*
     * @(#)GmailSetting.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 19, 2008, 9:17:35 AM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier.common;

    import java.io.Serializable;

    /**
     * Gmail Notifier settins. 
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.0.5, May 21, 2008
     * 
    @see Serializable
     
    */
    public class GmailSetting implements Serializable {

        
    private static final long serialVersionUID = 1L;
        
    private String userName = "User name";
        
    private String password = "Password";
        
    private boolean useProxy;
        
    private String Proxy = "No Proxy";
        
    private int port;
        
    private int checkMailInterval = 5;        // minute

        
    private int displayRotationInterval = 5// second

        
    private int delayBeforeFirstCheck = 15;  // second

        
    private boolean voiceOn;

        
    /**
         * Constructor with parameters.
         * 
    @param userName user name
         * 
    @param password user password
         * 
    @param useProxy using proxy?
         * 
    @param proxy proxy host setting ("192.168.110.65")
         * 
    @param port  proxy port setting (808)
         * 
    @param delayBeforeFirstCheck delay before first check after netbeans luanched
         * 
    @param checkInterval check mail interval
         * 
    @param rotationInterval rotation display interval
         * 
    @param voiceOn play sound when retrieving mails
         
    */
        
    public GmailSetting(String userName, String password,
                            
    boolean useProxy, String proxy, int port,
                            
    int delayBeforeFirstCheck, int checkInterval,
                            
    int rotationInterval,
                            
    boolean voiceOn) {
            
    this.setUserName(userName);
            
    this.setPassword(password);
            
    this.setCheckMailInterval(checkInterval);
            
    this.setDisplayRotationInterval(rotationInterval);
            
    this.setPort(port);
            
    this.setVoiceOn(voiceOn);
            
    this.setProxy(proxy);
            
    this.setDelayBeforeFirstCheck(delayBeforeFirstCheck);
            
    this.setUseProxy(useProxy);
        }

        
    /**
         * Default constructor.
         
    */
        
    public GmailSetting() {
        }

        
    //<editor-fold defaultstate="collapsed" desc="getters & setters">
        public String getProxy() {
            
    return Proxy;
        }

        
    public void setProxy(String Proxy) {
            
    this.Proxy = Proxy;
        }

        
    public int getCheckMailInterval() {
            
    return checkMailInterval;
        }

        
    public void setCheckMailInterval(int checkMailInterval) {
            
    this.checkMailInterval = checkMailInterval;
        }

        
    public int getDelayBeforeFirstCheck() {
            
    return delayBeforeFirstCheck;
        }

        
    public void setDelayBeforeFirstCheck(int delayBeforeFirstCheck) {
            
    this.delayBeforeFirstCheck = delayBeforeFirstCheck;
        }

        
    public int getDisplayRotationInterval() {
            
    return displayRotationInterval;
        }

        
    public void setDisplayRotationInterval(int displayRotationInterval) {
            
    this.displayRotationInterval = displayRotationInterval;
        }

        
    public String getPassword() {
            
    return password;
        }

        
    public void setPassword(String password) {
            
    this.password = password;
        }

        
    public int getPort() {
            
    return port;
        }

        
    public void setPort(int port) {
            
    this.port = port;
        }

        
    public boolean isUseProxy() {
            
    return useProxy;
        }

        
    public void setUseProxy(boolean useProxy) {
            
    this.useProxy = useProxy;
        }

        
    public String getUserName() {
            
    return userName;
        }

        
    public void setUserName(String userName) {
            
    this.userName = userName;
        }

        
    public boolean isVoiceOn() {
            
    return voiceOn;
        }

        
    public void setVoiceOn(boolean voiceOn) {
            
    this.voiceOn = voiceOn;
        }
        
    //</editor-fold>
    }
    /*
     * @(#)GmailSettingManager.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 19, 2008, 9:18:48 PM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier.common;

    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import org.openide.filesystems.FileLock;
    import org.openide.filesystems.FileObject;
    import org.openide.filesystems.Repository;

    /**
     * Gmail Notifier settins manager. 
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.0.8, May 21, 2008
     
    */
    public class GmailSettingManager {

        FileObject folderObject 
    = null;
        FileObject SettingFile 
    = null;
        GmailSetting gSetting 
    = new GmailSetting();
        FileLock lock 
    = null;

       
    /**
        * Default constructor.
        
    */
        
    public GmailSettingManager() {
            folderObject 
    = Repository.getDefault().getDefaultFileSystem().getRoot().
                    getFileObject(
    "GmailNotifierSettings");
            
    if (folderObject == null) {
                
    try {
                    folderObject 
    = Repository.getDefault().getDefaultFileSystem().
                            getRoot().createFolder(
    "GmailNotifierSettings");
                    storeSettings(gSetting);
                } 
    catch (IOException ex) {
                    ex.printStackTrace();
                
    // TODO file can not be created , do something about it
                }
            }
        }

        
    /**
         * Store the gmail notifier settings.
         * 
    @param GmailSettings gmail settings
         * 
    @return if store successfully, return <code>true</code>,
         * otherwise, return <code>false</code>
         
    */
        
    public boolean storeSettings(GmailSetting settings) {
            
    try {
                
    if (folderObject.getFileObject("GmailNotifier""Cfg"== null) {
                    SettingFile 
    = folderObject.createData("GmailNotifier""Cfg");
                }
                SettingFile 
    = folderObject.getFileObject("GmailNotifier""Cfg");

                lock 
    = SettingFile.lock();
                
    // serialize
                ObjectOutputStream objectOutStr = new ObjectOutputStream(
                        SettingFile.getOutputStream(lock));

                objectOutStr.writeObject(settings);
                objectOutStr.close();
                lock.releaseLock();
            } 
    catch (IOException ex) {
                
    // TODO file can not be created , do something about it
                ex.printStackTrace();
                
    return false;
            }
            
    return true;
        }

        
    /**
         * Retrieve gmail notifier settings.
         * 
    @return gmail settings
         
    */
        
    public GmailSetting retrieveSettings() {
            SettingFile 
    = folderObject.getFileObject("GmailNotifier""Cfg");
            
    try {
                
    // unserialize
                ObjectInputStream objectInStr = new ObjectInputStream(SettingFile.
                        getInputStream());
                gSetting 
    = (GmailSetting) objectInStr.readObject();
                objectInStr.close();
            } 
    catch (IOException ex) {
                ex.printStackTrace();
                
    return null;
            } 
    catch (ClassNotFoundException ex) {
                ex.printStackTrace();
                
    return null;
            }
            
    return gSetting;
        }
    }
    /*
     * @(#)GmailBox.java
     * Author: 88250 <DL88250@gmail.com>, 
    http://blog.csdn.net/DL88250
     * Created on May 21, 2008, 11:15:50 AM
     * 
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
     * (at your option) any later version.
     * 
     * This program 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 Library General Public License for more details.
     * 
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     
    */
    package cn.edu.ynu.sei.gmailnotifier.common;

    /**
     * A mail message description. It contains the following information: 
     * <p>
     * <ol>
     * <li>Subject</li>
     * <li>Content (snip)</li>
     * </ol>
     * </p>
     * 
    @author 88250 <DL88250@gmail.com>, http://blog.csdn.net/DL88250
     * 
    @version 1.0.0.0, May 21, 2008
     
    */
    public class Mail {

        
    private String subject;
        
    private String content;

        
    /**
         * Constructor with parameters.
         * 
    @param subject mail subject
         * 
    @param content mail content
         
    */
        
    public Mail(String subject, String content) {
            
    this.subject = subject;
            
    this.content = content;
        }

        
    //<editor-fold defaultstate="collapsed" desc="Getters & Setters">
        public String getContent() {
            
    return content;
        }

        
    public void setContent(String content) {
            
    this.content = content;
        }

        
    public String getSubject() {
            
    return subject;
        }

        
    public void setSubject(String subject) {
            
    this.subject = subject;
        }
        
    //</editor-fold>
    }

    厄。。。。。。。

  • 相关阅读:
    二维数组实现01背包
    一维数组实现01背包
    js实现最长子串算法
    mysql__存储过程
    mysql 分页查询 limit
    转:严重: Exception loading sessions from persistent storage
    struts2---ValueStack对象
    struts2----ognl
    什么是JavaBean?
    EL表达式
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6470260.html
Copyright © 2020-2023  润新知