这几天写了一个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;
}
}
* @(#)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"));
}
}
* @(#)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", 0, 10)); // 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(227, 22));
jLabel1.setSize(new java.awt.Dimension(227, 22));
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(0, 40) + "....") : 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(0, 100) + "....") : 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);
}
}
* @(#)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", 0, 10)); // 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(227, 22));
jLabel1.setSize(new java.awt.Dimension(227, 22));
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(0, 40) + "....") : 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(0, 100) + "....") : 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(0, 0, 0, 0));
jCheckBox1.setMargin(new java.awt.Insets(0, 0, 0, 0));
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(132, 132, 132))
);
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(16, 16, 16)
.add(jLabel2))
.add(jPanel1Layout.createSequentialGroup()
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPasswordField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)))
.add(17, 17, 17)
.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(0, 0, 0, 0));
jCheckBox3.setMargin(new java.awt.Insets(0, 0, 0, 0));
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(18, 18, 18)
.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(14, 14, 14)
.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(20, 20, 20))
);
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(18, 18, 18)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel6)
.add(jLabel7)
.add(jLabel8))
.add(18, 18, 18)
.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(18, 18, 18)
.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(15, 15, 15)
.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(14, 14, 14)
.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(45, 45, 45)
.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
}
* @(#)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(0, 0, 0, 0));
jCheckBox1.setMargin(new java.awt.Insets(0, 0, 0, 0));
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(132, 132, 132))
);
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(16, 16, 16)
.add(jLabel2))
.add(jPanel1Layout.createSequentialGroup()
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jPasswordField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)))
.add(17, 17, 17)
.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(0, 0, 0, 0));
jCheckBox3.setMargin(new java.awt.Insets(0, 0, 0, 0));
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(18, 18, 18)
.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(14, 14, 14)
.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(20, 20, 20))
);
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(18, 18, 18)
.add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel6)
.add(jLabel7)
.add(jLabel8))
.add(18, 18, 18)
.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(18, 18, 18)
.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(15, 15, 15)
.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(14, 14, 14)
.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(45, 45, 45)
.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) {
}
}
* @(#)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 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", 993, null,
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(null, new 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());
}
}
}
* @(#)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", 993, null,
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(null, new 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>
}
* @(#)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;
}
}
* @(#)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>
}
* @(#)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>
}
厄。。。。。。。