Author: norman
Date: Sun Jul 26 17:18:09 2009
New Revision: 797956
URL: http://svn.apache.org/viewvc?rev=797956&view=rev
Log:
Sending emails with attachments now work like expected
Added:
labs/hupa/src/main/java/org/apache/hupa/server/FileItemRegistry.java
Removed:
labs/hupa/src/main/java/org/apache/hupa/server/AttachmentStore.java
labs/hupa/src/main/java/org/apache/hupa/server/FileAttachmentStore.java
Modified:
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendPresenter.java
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendView.java
labs/hupa/src/main/java/org/apache/hupa/server/SendMessageHandler.java
labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java
labs/hupa/src/main/java/org/apache/hupa/server/servlet/UploadAttachmentServlet.java
Modified:
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendPresenter.java
URL:
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendPresenter.java?rev=797956&r1=797955&r2=797956&view=diff
==============================================================================
---
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendPresenter.java
(original)
+++
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendPresenter.java
Sun Jul 26 17:18:09 2009
@@ -21,6 +21,7 @@
import java.util.ArrayList;
+import org.apache.hupa.shared.data.MessageAttachment;
import org.apache.hupa.shared.data.MessageHeader;
import org.apache.hupa.shared.data.IMAPUser;
import org.apache.hupa.shared.data.MessageContent;
@@ -67,6 +68,7 @@
public HasText getSubjectText();
public HasText getMessageText();
public HasClickHandlers getSendClick();
+ public ArrayList<String> getAttachments();
}
@Override
@@ -121,7 +123,14 @@
header.setSubject(display.getSubjectText().getText());
content.setText(display.getMessageText().getText());
-
+ ArrayList<MessageAttachment> attachList
= new ArrayList<MessageAttachment>();
+ ArrayList<String> aList =
display.getAttachments();
+ for (int i = 0; i < aList.size();i++) {
+ MessageAttachment attachment =
new MessageAttachment();
+
attachment.setName(aList.get(i));
+ attachList.add(attachment);
+ }
+
content.setIMAPMessageAttachments(attachList);
message.setHeader(header);
message.setMessageContent(content);
dispatcher.execute(new
SendMessage(user,message), new AsyncCallback<EmptyResult>() {
Modified:
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendView.java
URL:
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendView.java?rev=797956&r1=797955&r2=797956&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendView.java
(original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageSendView.java
Sun Jul 26 17:18:09 2009
@@ -19,6 +19,8 @@
package org.apache.hupa.client.mvp;
+import java.util.ArrayList;
+
import eu.maydu.gwt.validation.client.DefaultValidationProcessor;
import eu.maydu.gwt.validation.client.ValidationAction;
import eu.maydu.gwt.validation.client.ValidationProcessor;
@@ -28,7 +30,9 @@
import eu.maydu.gwt.validation.client.actions.StyleAction;
import eu.maydu.gwt.validation.client.i18n.ValidationMessages;
import eu.maydu.gwt.validation.client.validators.standard.NotEmptyValidator;
+import gwtupload.client.IUploader;
import gwtupload.client.MultiUploader;
+import gwtupload.client.Uploader;
import org.apache.hupa.client.HupaConstants;
import org.apache.hupa.client.widgets.UploadProgress;
@@ -39,6 +43,8 @@
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasText;
@@ -58,13 +64,14 @@
private TextBox cc = new TextBox();
private TextBox bcc = new TextBox();
private TextBox subject = new TextBox();
-
+ private ArrayList<String> attachments = new ArrayList<String>();
private MultiUploader uploader = new MultiUploader(new
UploadProgress());
private TextArea text = new TextArea();
private Button sendButton = new Button(constants.sendButton());
private ValidationMessages vMessages = new ValidationMessages();
private ValidationProcessor validator = new DefaultValidationProcessor(
vMessages);
+
public IMAPMessageSendView() {
VerticalPanel mPanel = new VerticalPanel();
mPanel.setWidth("100%");
@@ -132,6 +139,15 @@
text.setWidth("100%");
text.setHeight("400px");
text.setVisibleLines(50);
+
+ uploader.setOnFinishHandler(new ValueChangeHandler<IUploader>()
{
+
+ public void onValueChange(ValueChangeEvent<IUploader>
event) {
+ attachments.add(((Uploader)
event.getValue()).fileInput
+ .getFilename());
+ }
+
+ });
/*
* uploader.setOnFinishHandler(new
ValueChangeHandler<IUploader>() {
* public void onValueChange(ValueChangeEvent<IUploader> event)
{
@@ -272,4 +288,8 @@
}
}
+
+ public ArrayList<String> getAttachments() {
+ return attachments;
+ }
}
Added: labs/hupa/src/main/java/org/apache/hupa/server/FileItemRegistry.java
URL:
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/FileItemRegistry.java?rev=797956&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/FileItemRegistry.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/server/FileItemRegistry.java Sun
Jul 26 17:18:09 2009
@@ -0,0 +1,38 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.server;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.fileupload.FileItem;
+
+public class FileItemRegistry {
+
+ public Map<String,FileItem> map = new HashMap<String, FileItem>();
+
+ public void add(FileItem item) {
+ map.put(item.getName(), item);
+ }
+
+ public FileItem get(String name) {
+ return map.get(name);
+ }
+}
Modified: labs/hupa/src/main/java/org/apache/hupa/server/SendMessageHandler.java
URL:
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/SendMessageHandler.java?rev=797956&r1=797955&r2=797956&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/SendMessageHandler.java
(original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/SendMessageHandler.java Sun
Jul 26 17:18:09 2009
@@ -19,43 +19,54 @@
package org.apache.hupa.server;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Properties;
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
import javax.mail.MessagingException;
+import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeMessage.RecipientType;
+import net.customware.gwt.dispatch.server.ActionHandler;
+import net.customware.gwt.dispatch.server.ExecutionContext;
+import net.customware.gwt.dispatch.shared.ActionException;
+
+import org.apache.commons.fileupload.FileItem;
import org.apache.commons.logging.Log;
+import org.apache.hupa.shared.data.MessageAttachment;
import org.apache.hupa.shared.data.SMTPMessage;
import org.apache.hupa.shared.rpc.EmptyResult;
import org.apache.hupa.shared.rpc.SendMessage;
import com.google.inject.Inject;
-import net.customware.gwt.dispatch.server.ActionHandler;
-import net.customware.gwt.dispatch.server.ExecutionContext;
-import net.customware.gwt.dispatch.shared.ActionException;
-
public class SendMessageHandler implements
ActionHandler<SendMessage, EmptyResult> {
private Log logger;
- private AttachmentStore store;
+ private FileItemRegistry registry;
@Inject
- public SendMessageHandler(Log logger,AttachmentStore store) {
+ public SendMessageHandler(Log logger, FileItemRegistry registry) {
this.logger = logger;
- this.store = store;
+ this.registry = registry;
}
-
- public EmptyResult execute(SendMessage action, ExecutionContext arg1)
+
+ public EmptyResult execute(SendMessage action, ExecutionContext context)
throws ActionException {
try {
+
Properties props = new Properties();
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
@@ -68,27 +79,55 @@
message.addRecipient(RecipientType.TO, new
InternetAddress(to
.get(i)));
}
-
+
ArrayList<String> cc = m.getHeader().getCc();
for (int i = 0; i < cc.size(); i++) {
message.addRecipient(RecipientType.CC, new
InternetAddress(cc
.get(i)));
}
message.setSubject(m.getHeader().getSubject());
- message.setText(m.getMessageContent().getText());
+
+ ArrayList<MessageAttachment> attachments =
m.getMessageContent()
+ .getIMAPMessageAttachments();
+ if (attachments == null || attachments.isEmpty()) {
+
message.setText(m.getMessageContent().getText());
+ } else {
+ // create the message part
+ MimeBodyPart messageBodyPart = new
MimeBodyPart();
+
+ // fill message
+
messageBodyPart.setText(m.getMessageContent().getText());
+
+ Multipart multipart = new MimeMultipart();
+ multipart.addBodyPart(messageBodyPart);
+
+ for (int i = 0; i < attachments.size(); i++) {
+ FileItem fItem =
registry.get(attachments.get(i).getName());
+ // Part two is attachment
+ messageBodyPart = new MimeBodyPart();
+ DataSource source = new
FileItemDataStore(fItem);
+ messageBodyPart.setDataHandler(new
DataHandler(source));
+
messageBodyPart.setFileName(fItem.getName());
+ multipart.addBodyPart(messageBodyPart);
+ }
+ // Put parts in message
+ message.setContent(multipart);
+
+ }
message.saveChanges();
-
+
Transport transport = session.getTransport("smtp");
- transport.connect("myblog.kicks-ass.org", 25,
action.getUser().getName(), action.getUser().getPassword());
+ transport.connect("myblog.kicks-ass.org", 25,
action.getUser()
+ .getName(),
action.getUser().getPassword());
transport.sendMessage(message,
message.getAllRecipients());
} catch (AddressException e) {
- logger.error("Error while parsing recipient",e);
+ logger.error("Error while parsing recipient", e);
throw new ActionException("Error while parsing
recipient");
} catch (MessagingException e) {
- logger.error("Error while sending Message",e);
- throw new ActionException("Error while sending
Message");
- }
+ logger.error("Error while sending message", e);
+ throw new ActionException("Error while sending
message");
+ }
return new EmptyResult();
}
@@ -101,4 +140,30 @@
}
+ private class FileItemDataStore implements DataSource {
+
+ private FileItem item;
+
+ public FileItemDataStore(FileItem item) {
+ this.item = item;
+ }
+
+ public String getContentType() {
+ return item.getContentType();
+ }
+
+ public InputStream getInputStream() throws IOException {
+ return item.getInputStream();
+ }
+
+ public String getName() {
+ return item.getName();
+ }
+
+ public OutputStream getOutputStream() throws IOException {
+ return null;
+ }
+
+ }
+
}
Modified: labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java
URL:
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java?rev=797956&r1=797955&r2=797956&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java
(original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java Sun
Jul 26 17:18:09 2009
@@ -22,12 +22,11 @@
import net.customware.gwt.dispatch.server.guice.ActionHandlerModule;
import org.apache.commons.logging.Log;
-import org.apache.hupa.server.AttachmentStore;
import org.apache.hupa.server.DeleteMessageHandler;
import org.apache.hupa.server.ExposeMessageHandler;
import org.apache.hupa.server.FetchFoldersHandler;
import org.apache.hupa.server.FetchMessagesHandler;
-import org.apache.hupa.server.FileAttachmentStore;
+import org.apache.hupa.server.FileItemRegistry;
import org.apache.hupa.server.IMAPStoreCache;
import org.apache.hupa.server.LoginUserHandler;
import org.apache.hupa.server.LogoutUserHandler;
@@ -58,7 +57,7 @@
bindHandler(SendMessageHandler.class);
bindHandler(NoopHandler.class);
-
bind(AttachmentStore.class).to(FileAttachmentStore.class).in(Singleton.class);
+ bind(FileItemRegistry.class).in(Singleton.class);
bind(IMAPStoreCache.class).in(Singleton.class);
bind(Log.class).toProvider(LogProvider.class).in(Singleton.class);
bind(DownloadAttachmentServlet.class).in(Singleton.class);
Modified:
labs/hupa/src/main/java/org/apache/hupa/server/servlet/UploadAttachmentServlet.java
URL:
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/servlet/UploadAttachmentServlet.java?rev=797956&r1=797955&r2=797956&view=diff
==============================================================================
---
labs/hupa/src/main/java/org/apache/hupa/server/servlet/UploadAttachmentServlet.java
(original)
+++
labs/hupa/src/main/java/org/apache/hupa/server/servlet/UploadAttachmentServlet.java
Sun Jul 26 17:18:09 2009
@@ -19,33 +19,43 @@
package org.apache.hupa.server.servlet;
-import gwtupload.server.UploadAction;
-
import java.io.IOException;
import java.util.Vector;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
import org.apache.commons.fileupload.FileItem;
-import org.apache.hupa.server.AttachmentStore;
+import org.apache.hupa.server.FileItemRegistry;
import com.google.inject.Inject;
-public class UploadAttachmentServlet extends UploadAction{
+import gwtupload.server.UploadServlet;
+
+public class UploadAttachmentServlet extends UploadServlet{
- private AttachmentStore store;
+ private FileItemRegistry registry;
@Inject
- public UploadAttachmentServlet(AttachmentStore store) {
- this.store = store;
+ public UploadAttachmentServlet(FileItemRegistry registry) {
+ this.registry = registry;
}
-
+ @SuppressWarnings("unchecked")
@Override
- public String doAction(Vector<FileItem> sessionFiles) throws
IOException {
- for (int i = 0; i < sessionFiles.size(); i++) {
- FileItem item = sessionFiles.get(i);
- store.add(item.getName(), item.getInputStream());
- }
- return null;
+ protected void doPost(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException,
IOException {
+ super.doPost(request, response);
+ Vector<FileItem> sessionFiles = (Vector<FileItem>)
request.getSession().getAttribute(ATTR_FILES);
+
+ // add fileItems to the registry
+ for (int i =0; i < sessionFiles.size(); i++) {
+ registry.add(sessionFiles.get(i));
+
+ }
}
+
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]