mirror of
https://github.com/moparisthebest/davmail
synced 2024-12-13 11:12:22 -05:00
Caldav: initial edit notification implementation
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1513 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
8df9595020
commit
af6afe9042
@ -22,8 +22,10 @@ import davmail.BundleMessage;
|
||||
import davmail.Settings;
|
||||
import davmail.exception.DavMailAuthenticationException;
|
||||
import davmail.exception.DavMailException;
|
||||
import davmail.exception.WebdavNotAvailableException;
|
||||
import davmail.http.DavGatewayHttpClientFacade;
|
||||
import davmail.http.DavGatewayOTPPrompt;
|
||||
import davmail.ui.NotificationDialog;
|
||||
import davmail.util.StringUtil;
|
||||
import org.apache.commons.httpclient.*;
|
||||
import org.apache.commons.httpclient.methods.GetMethod;
|
||||
@ -191,6 +193,8 @@ public abstract class ExchangeSession {
|
||||
BundleMessage message = new BundleMessage("EXCEPTION_CONNECT", exc.getClass().getName(), exc.getMessage());
|
||||
ExchangeSession.LOGGER.error(message);
|
||||
throw new DavMailException("EXCEPTION_DAVMAIL_CONFIGURATION", message);
|
||||
} catch (WebdavNotAvailableException exc) {
|
||||
throw exc;
|
||||
} catch (IOException exc) {
|
||||
LOGGER.error(BundleMessage.formatLog("EXCEPTION_EXCHANGE_LOGIN_FAILED", exc));
|
||||
throw new DavMailException("EXCEPTION_EXCHANGE_LOGIN_FAILED", exc);
|
||||
@ -2206,22 +2210,37 @@ public abstract class ExchangeSession {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// reset body
|
||||
description = "";
|
||||
|
||||
String status = vCalendar.getAttendeeStatus();
|
||||
if (status != null) {
|
||||
writer.writeHeader("Subject", BundleMessage.format(status) + vEventSubject);
|
||||
} else {
|
||||
writer.writeHeader("Subject", subject);
|
||||
// notify only organizer
|
||||
String to = recipients.organizer;
|
||||
String cc = null;
|
||||
String notificationSubject = (status != null)?(BundleMessage.format(status) + vEventSubject):subject;
|
||||
description = "";
|
||||
// Allow end user notification edit
|
||||
if (Settings.getBooleanProperty("davmail.caldavEditNotifications")) {
|
||||
// create notification edit dialog
|
||||
NotificationDialog notificationDialog = new NotificationDialog(recipients.organizer,
|
||||
null, notificationSubject);
|
||||
if (!notificationDialog.getSendNotification()) {
|
||||
LOGGER.debug("Notification canceled by user");
|
||||
return null;
|
||||
}
|
||||
// get description from dialog
|
||||
to = notificationDialog.getTo();
|
||||
cc = notificationDialog.getCc();
|
||||
notificationSubject = notificationDialog.getSubject();
|
||||
description = notificationDialog.getBody();
|
||||
}
|
||||
|
||||
// notify only organizer
|
||||
writer.writeHeader("To", recipients.organizer);
|
||||
// do not send notification if no recipients found
|
||||
if (recipients.organizer == null) {
|
||||
if (to == null || to.length() == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
writer.writeHeader("To", to);
|
||||
writer.writeHeader("Cc", cc);
|
||||
writer.writeHeader("Subject", notificationSubject);
|
||||
|
||||
}
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
StringBuilder logBuffer = new StringBuilder("Sending notification");
|
||||
|
178
src/java/davmail/ui/NotificationDialog.java
Normal file
178
src/java/davmail/ui/NotificationDialog.java
Normal file
@ -0,0 +1,178 @@
|
||||
/*
|
||||
* DavMail POP/IMAP/SMTP/CalDav/LDAP Exchange Gateway
|
||||
* Copyright (C) 2010 Mickael Guessant
|
||||
*
|
||||
* 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 2
|
||||
* 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
package davmail.ui;
|
||||
|
||||
import davmail.BundleMessage;
|
||||
import davmail.ui.browser.DesktopBrowser;
|
||||
import davmail.ui.tray.DavGatewayTray;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* Edit Caldav scheduling notifications.
|
||||
*/
|
||||
public class NotificationDialog extends JDialog {
|
||||
|
||||
protected boolean sendNotification = false;
|
||||
|
||||
protected JTextField toField;
|
||||
protected JTextField ccField;
|
||||
protected JTextField subjectField;
|
||||
protected JEditorPane bodyField;
|
||||
|
||||
protected void addRecipientComponent(JPanel panel, String label, JTextField textField, String toolTipText) {
|
||||
JLabel fieldLabel = new JLabel(label);
|
||||
fieldLabel.setHorizontalAlignment(SwingConstants.RIGHT);
|
||||
fieldLabel.setVerticalAlignment(SwingConstants.CENTER);
|
||||
textField.setMaximumSize(textField.getPreferredSize());
|
||||
JPanel innerPanel = new JPanel();
|
||||
innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS));
|
||||
innerPanel.setAlignmentX(Component.RIGHT_ALIGNMENT);
|
||||
innerPanel.add(fieldLabel);
|
||||
innerPanel.add(textField);
|
||||
panel.add(innerPanel);
|
||||
if (toolTipText != null) {
|
||||
fieldLabel.setToolTipText(toolTipText);
|
||||
textField.setToolTipText(toolTipText);
|
||||
}
|
||||
}
|
||||
|
||||
public NotificationDialog(String to, String cc, String subject) {
|
||||
setModal(true);
|
||||
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
|
||||
setTitle(BundleMessage.format("UI_CALDAV_NOTIFICATION"));
|
||||
setIconImage(DavGatewayTray.getFrameIcon());
|
||||
|
||||
JPanel mainPanel = new JPanel();
|
||||
// add help (F1 handler)
|
||||
mainPanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F1"),
|
||||
"help");
|
||||
mainPanel.getActionMap().put("help", new AbstractAction() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
DesktopBrowser.browse("http://davmail.sourceforge.net");
|
||||
}
|
||||
});
|
||||
|
||||
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
|
||||
mainPanel.add(getRecipientsPanel());
|
||||
mainPanel.add(getBodyPanel());
|
||||
|
||||
JPanel recipientsPanel = getRecipientsPanel();
|
||||
if (to != null) {
|
||||
toField.setText(to);
|
||||
}
|
||||
if (cc != null) {
|
||||
ccField.setText(cc);
|
||||
}
|
||||
if (subject != null) {
|
||||
subjectField.setText(subject);
|
||||
}
|
||||
add(BorderLayout.NORTH, recipientsPanel);
|
||||
JPanel bodyPanel = getBodyPanel();
|
||||
add(BorderLayout.CENTER, bodyPanel);
|
||||
bodyField.setPreferredSize(recipientsPanel.getPreferredSize());
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
JButton cancel = new JButton(BundleMessage.format("UI_BUTTON_CANCEL"));
|
||||
JButton send = new JButton(BundleMessage.format("UI_BUTTON_SEND"));
|
||||
|
||||
send.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent evt) {
|
||||
sendNotification = true;
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
cancel.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(ActionEvent evt) {
|
||||
// nothing to do, just hide
|
||||
setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
buttonPanel.add(send);
|
||||
buttonPanel.add(cancel);
|
||||
|
||||
add(BorderLayout.SOUTH, buttonPanel);
|
||||
|
||||
pack();
|
||||
setResizable(true);
|
||||
// center frame
|
||||
setLocation(getToolkit().getScreenSize().width / 2 -
|
||||
getSize().width / 2,
|
||||
getToolkit().getScreenSize().height / 2 -
|
||||
getSize().height / 2);
|
||||
bodyField.requestFocus();
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
protected JPanel getRecipientsPanel() {
|
||||
JPanel recipientsPanel = new JPanel();
|
||||
recipientsPanel.setLayout(new BoxLayout(recipientsPanel, BoxLayout.Y_AXIS));
|
||||
recipientsPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
|
||||
|
||||
toField = new JTextField("", 40);
|
||||
ccField = new JTextField("", 40);
|
||||
subjectField = new JTextField("", 40);
|
||||
|
||||
addRecipientComponent(recipientsPanel, BundleMessage.format("UI_TO"), toField,
|
||||
BundleMessage.format("UI_TO_HELP"));
|
||||
addRecipientComponent(recipientsPanel, BundleMessage.format("UI_CC"), ccField,
|
||||
BundleMessage.format("UI_CC"));
|
||||
addRecipientComponent(recipientsPanel, BundleMessage.format("UI_SUBJECT"), subjectField,
|
||||
BundleMessage.format("UI_SUBJECT_HELP"));
|
||||
return recipientsPanel;
|
||||
}
|
||||
|
||||
protected JPanel getBodyPanel() {
|
||||
JPanel bodyPanel = new JPanel();
|
||||
bodyPanel.setBorder(BorderFactory.createTitledBorder(BundleMessage.format("UI_NOTIFICATION_BODY")));
|
||||
|
||||
bodyField = new JEditorPane();
|
||||
//HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
|
||||
//bodyField.setEditorKit(htmlEditorKit);
|
||||
//bodyField.setContentType("text/html");
|
||||
|
||||
bodyPanel.add(new JScrollPane(bodyField));
|
||||
return bodyPanel;
|
||||
}
|
||||
|
||||
public boolean getSendNotification() {
|
||||
return sendNotification;
|
||||
}
|
||||
|
||||
public String getTo() {
|
||||
return toField.getText();
|
||||
}
|
||||
|
||||
public String getCc() {
|
||||
return ccField.getText();
|
||||
}
|
||||
|
||||
public String getSubject() {
|
||||
return subjectField.getText();
|
||||
}
|
||||
|
||||
public String getBody() {
|
||||
return bodyField.getText();
|
||||
}
|
||||
}
|
@ -262,3 +262,12 @@ TENTATIVE=Tentative:
|
||||
DECLINED=Declined:
|
||||
UI_ENABLE_EWS=Enable EWS
|
||||
UI_ENABLE_EWS_HELP=Enable EWS mode on Exchange 2010 or Exchange 2007 with Webdav disabled
|
||||
UI_CALDAV_NOTIFICATION=DavMail: Caldav scheduling notification
|
||||
UI_BUTTON_SEND=Send
|
||||
UI_TO=To:
|
||||
UI_TO_HELP=Recipients
|
||||
UI_CC=Cc:
|
||||
UI_CC_HELP=Copy recipients
|
||||
UI_SUBJECT=Subject:
|
||||
UI_SUBJECT_HELP=Caldav notification subject
|
||||
UI_NOTIFICATION_BODY=Caldav notification comment
|
||||
|
@ -261,3 +261,12 @@ TENTATIVE=Provisoire :
|
||||
DECLINED=Refusé :
|
||||
UI_ENABLE_EWS=Activer EWS
|
||||
UI_ENABLE_EWS_HELP=Activer le mode EWS sur Exchange 2010 ou Exchange 2007 sans support Webdav
|
||||
UI_CALDAV_NOTIFICATION=DavMail : Notification Caldav
|
||||
UI_BUTTON_SEND=Envoyer
|
||||
UI_SUBJECT=Sujet :
|
||||
UI_SUBJECT_HELP=Sujet notification Caldav
|
||||
UI_TO=Pour :
|
||||
UI_TO_HELP=Destinataires
|
||||
UI_NOTIFICATION_BODY=Commentaire notification Caldav
|
||||
UI_CC=Copie à :
|
||||
UI_CC_HELP=Destinataires en copie
|
||||
|
36
src/test/davmail/ui/TestNotificationDialog.java
Normal file
36
src/test/davmail/ui/TestNotificationDialog.java
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* DavMail POP/IMAP/SMTP/CalDav/LDAP Exchange Gateway
|
||||
* Copyright (C) 2010 Mickael Guessant
|
||||
*
|
||||
* 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 2
|
||||
* 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
package davmail.ui;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Test Notification Frame
|
||||
*/
|
||||
public class TestNotificationDialog extends TestCase {
|
||||
public void testCreateNotificationFrame() throws IOException, ClassNotFoundException, UnsupportedLookAndFeelException, IllegalAccessException, InstantiationException {
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||
NotificationDialog notificationDialog = new NotificationDialog("to", "cc", "subject");
|
||||
notificationDialog.setVisible(true);
|
||||
System.out.println(notificationDialog.getSendNotification());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user