Author: norman
Date: Tue Sep 22 17:48:01 2009
New Revision: 817743

URL: http://svn.apache.org/viewvc?rev=817743&view=rev
Log:
Add support for mark messages as seen/unseen (HUPA-11)

Added:
    
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEvent.java
    
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEventHandler.java
Modified:
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.java
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java
    
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.java?rev=817743&r1=817742&r2=817743&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.java 
(original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.java 
Tue Sep 22 17:48:01 2009
@@ -108,4 +108,7 @@
        public String rawTitle();
        
        public String deleteAll();
+       
+       public String markSeen();
+       public String markUnseen();
 }

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties?rev=817743&r1=817742&r2=817743&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties
 (original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaConstants.properties
 Tue Sep 22 17:48:01 2009
@@ -64,3 +64,5 @@
 rawTitle=Raw message view
 deleteAll=Delete all messages
 sessionTimedOut=Your session is timed out. Please login again!
+markSeen=Mark seen
+markUnseen=Mark unseen

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java?rev=817743&r1=817742&r2=817743&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
 (original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
 Tue Sep 22 17:48:01 2009
@@ -41,6 +41,8 @@
 import org.apache.hupa.shared.events.DecreaseUnseenEventHandler;
 import org.apache.hupa.shared.events.ExpandMessageEvent;
 import org.apache.hupa.shared.events.ExpandMessageEventHandler;
+import org.apache.hupa.shared.events.IncreaseUnseenEvent;
+import org.apache.hupa.shared.events.IncreaseUnseenEventHandler;
 import org.apache.hupa.shared.events.LoadMessagesEvent;
 import org.apache.hupa.shared.events.NewMessageEvent;
 import org.apache.hupa.shared.events.NewMessageEventHandler;
@@ -226,6 +228,14 @@
                        }
                        
                }));
+               registerHandler(eventBus.addHandler(IncreaseUnseenEvent.TYPE, 
new IncreaseUnseenEventHandler() {
+
+                       public void onIncreaseUnseenEvent(IncreaseUnseenEvent 
event) {
+                               
display.increaseUnseenMessageCount(event.getFolder(),event.getAmount());
+                       }
+
+                       
+               }));
                registerHandler(display.getTree().addSelectionHandler(new 
SelectionHandler<TreeItem>() {
 
                        public void onSelection(SelectionEvent<TreeItem> event) 
{

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java?rev=817743&r1=817742&r2=817743&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
 (original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
 Tue Sep 22 17:48:01 2009
@@ -33,16 +33,20 @@
 import org.apache.hupa.shared.data.IMAPFolder;
 import org.apache.hupa.shared.data.Message;
 import org.apache.hupa.shared.data.User;
+import org.apache.hupa.shared.data.Message.IMAPFlag;
 import org.apache.hupa.shared.events.DecreaseUnseenEvent;
 import org.apache.hupa.shared.events.ExpandMessageEvent;
+import org.apache.hupa.shared.events.IncreaseUnseenEvent;
 import org.apache.hupa.shared.events.MoveMessageEvent;
 import org.apache.hupa.shared.events.MoveMessageEventHandler;
 import org.apache.hupa.shared.events.NewMessageEvent;
 import org.apache.hupa.shared.rpc.DeleteAllMessages;
 import org.apache.hupa.shared.rpc.DeleteMessageByUid;
 import org.apache.hupa.shared.rpc.DeleteMessageResult;
+import org.apache.hupa.shared.rpc.EmptyResult;
 import org.apache.hupa.shared.rpc.MoveMessage;
 import org.apache.hupa.shared.rpc.MoveMessageResult;
+import org.apache.hupa.shared.rpc.SetFlag;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -82,6 +86,8 @@
                public void deselectAllMessages();
                public HasClickHandlers getSelectAllClick();
                public HasClickHandlers getSelectNoneClick();
+               public HasClickHandlers getMarkSeenClick();
+               public HasClickHandlers getMarkUnseenClick();
                public void redraw();
        }
 
@@ -199,6 +205,77 @@
                        }
                        
                }));
+               registerHandler(display.getMarkSeenClick().addClickHandler( new 
ClickHandler() {
+                       public void onClick(ClickEvent event) {
+                               final ArrayList<Message> selectedMessages = new 
ArrayList<Message>(display.getSelectedMessages());
+                               ArrayList<Long> uids = new ArrayList<Long>();
+                               for (int i = 0; i < selectedMessages.size(); 
i++) {
+                                       Message m = selectedMessages.get(i);
+                                       if 
(m.getFlags().contains(IMAPFlag.SEEN) == false) {
+                                               uids.add(m.getUid());
+                                       } else {
+                                               selectedMessages.remove(m);
+                                       }
+                               }
+                               dispatcher.execute(new 
SetFlag(user.getSessionId(), folder, IMAPFlag.SEEN, true, uids), new 
SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
+                                       public void onFailure(Throwable caught) 
{
+                                               GWT.log("ERR=", caught);
+                                       }
+
+                                       public void onSuccess(EmptyResult 
result) {
+                                               
GWT.log("S="+selectedMessages.size(), null);
+                                               for (int i = 0; i < 
selectedMessages.size(); i++) {
+                                                       Message m = 
selectedMessages.get(i);
+                                                       if 
(m.getFlags().contains(IMAPFlag.SEEN) == false) {
+                                                               
m.getFlags().add(IMAPFlag.SEEN);
+                                                       }
+                                               }
+                                               display.redraw();
+                                               eventBus.fireEvent(new 
DecreaseUnseenEvent(user, folder,selectedMessages.size()));
+                                                                               
                
+                                       }
+
+                               }, eventBus, user));
+                       }
+
+               }));
+               
+               
registerHandler(display.getMarkUnseenClick().addClickHandler(new ClickHandler() 
{
+
+                       public void onClick(ClickEvent event) {
+                               final ArrayList<Message> selectedMessages = new 
ArrayList<Message>(display.getSelectedMessages());
+                               ArrayList<Long> uids = new ArrayList<Long>();
+                               for (int i = 0; i < selectedMessages.size(); 
i++) {
+                                       Message m = selectedMessages.get(i);
+                                       if 
(m.getFlags().contains(IMAPFlag.SEEN)) {
+                                               uids.add(m.getUid());
+                                       } else {
+                                               selectedMessages.remove(m);
+                                       }
+                               }
+                               
+                               dispatcher.execute(new 
SetFlag(user.getSessionId(), folder, IMAPFlag.SEEN, false, uids), new 
SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
+                                       public void onFailure(Throwable caught) 
{
+                                               GWT.log("ERR=", caught);
+                                       }
+
+                                       public void onSuccess(EmptyResult 
result) {
+                                               for (int i = 0; i < 
selectedMessages.size(); i++) {
+                                                       Message m = 
selectedMessages.get(i);
+                                                       if 
(m.getFlags().contains(IMAPFlag.SEEN)) {
+                                                               
m.getFlags().remove(IMAPFlag.SEEN);
+                                                       }
+                                               }
+                                               display.redraw();
+                                               eventBus.fireEvent(new 
IncreaseUnseenEvent(user, folder,selectedMessages.size()));
+                                                                               
                
+                                       }
+
+                               }, eventBus, user));
+                       }
+                       
+                       
+               }));
                
                display.addTableListener(tableListener);
                isBound = true;

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java?rev=817743&r1=817742&r2=817743&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
 (original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
 Tue Sep 22 17:48:01 2009
@@ -111,6 +111,8 @@
        private Button deleteAllMailButton = new Button(constants.deleteAll());
        private ConfirmDialogBox confirmBox = new ConfirmDialogBox();
        private ConfirmDialogBox confirmDeleteAllBox = new ConfirmDialogBox();
+       private Button markSeenButton = new Button(constants.markSeen());
+       private Button markUnSeenButton = new Button(constants.markUnseen());
 
        private ListBox pageBox = new ListBox();
        private Hyperlink allLink = new Hyperlink(constants.all(),"");  
@@ -206,7 +208,11 @@
                buttonBar.add(navigatorBar);
                buttonBar.add(deleteAllMailButton);
                
-
+               ButtonBar markButtonBar = new ButtonBar();
+               markButtonBar.add(markSeenButton);
+               markButtonBar.add(markUnSeenButton);
+               buttonBar.add(markButtonBar);
+               
                pageBox.addItem("20");
                pageBox.addItem("50");
                pageBox.addItem("100");
@@ -734,4 +740,20 @@
        public HasClickHandlers getDeleteAllClick() {
                return deleteAllMailButton;
        }
+
+       /*
+        * (non-Javadoc)
+        * @see 
org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getMarkSeenClick()
+        */
+       public HasClickHandlers getMarkSeenClick() {
+               return markSeenButton;
+       }
+
+       /*
+        * (non-Javadoc)
+        * @see 
org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getMarkUnseenClick()
+        */
+       public HasClickHandlers getMarkUnseenClick() {
+               return markUnSeenButton;
+       }
 }

Modified: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java?rev=817743&r1=817742&r2=817743&view=diff
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java
 (original)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java
 Tue Sep 22 17:48:01 2009
@@ -43,20 +43,24 @@
                Flag[] flagArray = flags.getSystemFlags();
                for (int i = 0; i < flagArray.length; i++) {
                        Flag flag = flagArray[i];
-                       if (flag.equals(Flag.SEEN)) {
-                               fList.add(IMAPFlag.SEEN);
-                       } else if (flag.equals(Flag.RECENT)) {
-                               fList.add(IMAPFlag.RECENT);
-                       } else if (flag.equals(Flag.ANSWERED)) {
-                               fList.add(IMAPFlag.ANSWERED);
-                       } else if (flag.equals(Flag.DELETED)) {
-                               fList.add(IMAPFlag.DELETED);
-                       }
+                       fList.add(convert(flag));
                }
                return fList;
                
        }
        
+       public static IMAPFlag convert(Flag flag) {
+               if (flag.equals(Flag.SEEN)) {
+                       return IMAPFlag.SEEN;
+               } else if (flag.equals(Flag.RECENT)) {
+                       return IMAPFlag.RECENT;
+               } else if (flag.equals(Flag.ANSWERED)) {
+                       return IMAPFlag.ANSWERED;
+               } else if (flag.equals(Flag.DELETED)) {
+                       return IMAPFlag.DELETED;
+               }
+               throw new IllegalArgumentException("Flag not supported");
+       }
        /**
         * Convert the given ArrayList of IMAPFlags to a Flags object
         * 
@@ -66,22 +70,25 @@
        public static Flags convert(ArrayList<IMAPFlag> imapFlags) {
                Flags iFlags = new Flags();
                for ( int i = 0; i< imapFlags.size(); i++) {
-                       Flag f = null;
                        IMAPFlag flag = imapFlags.get(i);
-                       if (flag.equals(IMAPFlag.SEEN)) {
-                               f = Flag.SEEN;
-                       } else if (flag.equals(IMAPFlag.RECENT)) {
-                               f = Flag.RECENT;
-                       } else if (flag.equals(IMAPFlag.ANSWERED)) {
-                               f = Flag.ANSWERED;
-                       } else if (flag.equals(IMAPFlag.DELETED)) {
-                               f = Flag.DELETED;
-                       }
-                       if (f != null) {
-                               iFlags.add(f);
-                       }
+                       
+                       iFlags.add(convert(flag));
+                       
                }
                return iFlags;
        }
 
+       public static Flag convert(IMAPFlag flag) {
+               if (flag.equals(IMAPFlag.SEEN)) {
+                       return Flag.SEEN;
+               } else if (flag.equals(IMAPFlag.RECENT)) {
+                       return Flag.RECENT;
+               } else if (flag.equals(IMAPFlag.ANSWERED)) {
+                       return Flag.ANSWERED;
+               } else if (flag.equals(IMAPFlag.DELETED)) {
+                       return Flag.DELETED;
+               }
+               throw new IllegalArgumentException("Flag not supported");
+
+       }
 }

Modified: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java?rev=817743&r1=817742&r2=817743&view=diff
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java
 (original)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java
 Tue Sep 22 17:48:01 2009
@@ -25,6 +25,7 @@
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.MessagingException;
+import javax.mail.Flags.Flag;
 import javax.servlet.http.HttpSession;
 
 import net.customware.gwt.dispatch.server.ExecutionContext;
@@ -63,8 +64,11 @@
                                f.open(Folder.READ_WRITE);
                        }
                        Message[] msgs = f.getMessagesByUID(toArray(uids));
-                       Flags flags = JavamailUtil.convert(action.getFlags());
-                       f.setFlags(msgs, flags, true);
+                       Flag flag = JavamailUtil.convert(action.getFlag());
+                       Flags flags = new Flags();
+                       flags.add(flag);
+                       
+                       f.setFlags(msgs, flags, action.getValue());
                        f.close(false);
                        return new EmptyResult();
                } catch (MessagingException e) {

Added: 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEvent.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEvent.java?rev=817743&view=auto
==============================================================================
--- 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEvent.java
 (added)
+++ 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEvent.java
 Tue Sep 22 17:48:01 2009
@@ -0,0 +1,67 @@
+/****************************************************************
+ * 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.shared.events;
+
+import org.apache.hupa.shared.data.IMAPFolder;
+import org.apache.hupa.shared.data.User;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+public class IncreaseUnseenEvent extends GwtEvent<IncreaseUnseenEventHandler>{
+
+       public final static Type<IncreaseUnseenEventHandler> TYPE = new 
Type<IncreaseUnseenEventHandler>();
+       private User user;
+       private IMAPFolder folder;
+       private int amount;
+       
+       public IncreaseUnseenEvent(User user, IMAPFolder folder) {
+               this(user, folder, 1);
+       }
+       
+       public IncreaseUnseenEvent(User user, IMAPFolder folder, int amount) {
+               this.user =user;
+               this.folder = folder;
+               this.amount = amount;
+       }
+       
+       public IMAPFolder getFolder() {
+               return folder;
+       }
+       
+       public User getUser() {
+               return user;
+       }
+       
+       public int getAmount() {
+               return amount;
+       }
+       
+       @Override
+       protected void dispatch(IncreaseUnseenEventHandler handler) {
+               handler.onIncreaseUnseenEvent(this);
+               
+       }
+
+       @Override
+       public 
com.google.gwt.event.shared.GwtEvent.Type<IncreaseUnseenEventHandler> 
getAssociatedType() {
+               return TYPE;
+       }
+
+}

Added: 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEventHandler.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEventHandler.java?rev=817743&view=auto
==============================================================================
--- 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEventHandler.java
 (added)
+++ 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/IncreaseUnseenEventHandler.java
 Tue Sep 22 17:48:01 2009
@@ -0,0 +1,27 @@
+/****************************************************************
+ * 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.shared.events;
+
+import com.google.gwt.event.shared.EventHandler;
+
+public interface IncreaseUnseenEventHandler extends EventHandler{
+
+       public void onIncreaseUnseenEvent(IncreaseUnseenEvent event);
+}

Modified: 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java?rev=817743&r1=817742&r2=817743&view=diff
==============================================================================
--- 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java 
(original)
+++ 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java 
Tue Sep 22 17:48:01 2009
@@ -30,17 +30,18 @@
         * 
         */
        private static final long serialVersionUID = 662741801793895357L;
-       private ArrayList<IMAPFlag> flags;
+       private IMAPFlag flag;
        private ArrayList<Long> uids;
        private IMAPFolder folder;
-
-       public SetFlag(String session, IMAPFolder folder, ArrayList<IMAPFlag> 
flags, ArrayList<Long> uids) {
+       private boolean value;
+       
+       public SetFlag(String session, IMAPFolder folder, IMAPFlag flag, 
boolean value, ArrayList<Long> uids) {
                super(session);
-               this.flags = flags;
+               this.flag = flag;
+               this.value = value;
                this.uids = uids;
                this.folder = folder;
        }
-       
        protected SetFlag() {
                
        }
@@ -49,8 +50,11 @@
                return folder;
        }
        
-       public ArrayList<IMAPFlag> getFlags() {
-               return flags;
+       public boolean getValue() {
+               return value;
+       }
+       public IMAPFlag getFlag() {
+               return flag;
        }
        
        public ArrayList<Long> getUids() {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to