You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by do...@apache.org on 2013/09/12 05:55:55 UTC

svn commit: r1522274 - in /james/hupa/trunk/client/src/main/java/org/apache/hupa/client: activity/ mapper/ place/ ui/

Author: dongxu
Date: Thu Sep 12 03:55:54 2013
New Revision: 1522274

URL: http://svn.apache.org/r1522274
Log:
make reload message content work, use the same place with folder list, while separated with slash, that looks like Gmail's

Modified:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageContentActivity.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopBarActivity.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/AppPlaceHistoryMapper.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/CachingWestActivityMapper.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/MessageContentActivityMapper.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FoldersTreeViewModel.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java Thu Sep 12 03:55:54 2013
@@ -869,7 +869,7 @@ public class IMAPMessageListActivity ext
     }
 	public IMAPMessageListActivity with(MailFolderPlace place) {
 		this.user = place.getUser();
-		this.folder = place.getFolder();
+//		this.folder = place.getFolder();
 		this.searchValue = place.getSearchValue();
 <<<<<<< HEAD
 <<<<<<< HEAD

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java Thu Sep 12 03:55:54 2013
@@ -487,7 +487,7 @@ public class LoginActivity extends Abstr
 			public void onSuccess(User response) {
 				RootLayoutPanel.get().clear();
 				RootLayoutPanel.get().add(hupaLayout.get());
-				placeController.goTo(new MailFolderPlace());
+				placeController.goTo(new MailFolderPlace(response.getSettings().getDraftsFolderName()));
 				eventBus.fireEvent(new LoginEvent(response));
 			}
 			@Override

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageContentActivity.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageContentActivity.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageContentActivity.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageContentActivity.java Thu Sep 12 03:55:54 2013
@@ -21,6 +21,7 @@ package org.apache.hupa.client.activity;
 
 <<<<<<< HEAD
 <<<<<<< HEAD
+<<<<<<< HEAD
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -165,35 +166,65 @@ public class MessageContentActivity exte
 =======
 import org.apache.hupa.client.place.IMAPMessagePlace;
 >>>>>>> make message content work as expected partly
+=======
+import org.apache.hupa.client.place.MailFolderPlace;
+import org.apache.hupa.client.rf.GetMessageDetailsRequest;
+>>>>>>> make reload message content work, use the same place with folder list, while separated with slash, that looks like Gmail's
 import org.apache.hupa.client.ui.WidgetDisplayable;
-import org.apache.hupa.shared.domain.MessageDetails;
+import org.apache.hupa.shared.domain.GetMessageDetailsAction;
+import org.apache.hupa.shared.domain.GetMessageDetailsResult;
+import org.apache.hupa.shared.domain.ImapFolder;
 
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.user.client.ui.AcceptsOneWidget;
 import com.google.inject.Inject;
+import com.google.web.bindery.requestfactory.shared.Receiver;
 
 public class MessageContentActivity extends AppBaseActivity {
-	
-	MessageDetails messageDetails;
+
+	private String fullName;
+	private String uid;
 
 	@Override
 	public void start(AcceptsOneWidget container, EventBus eventBus) {
-		display.fillMessageContent(messageDetails.getText());
+		if (uid != null && uid.matches("\\d+")) {
+			GetMessageDetailsRequest req = requestFactory
+					.messageDetailsRequest();
+			GetMessageDetailsAction action = req
+					.create(GetMessageDetailsAction.class);
+			final ImapFolder f = req.create(ImapFolder.class);
+			f.setFullName(fullName);
+			action.setFolder(f);
+			action.setUid(Long.parseLong(uid));
+			req.get(action).fire(new Receiver<GetMessageDetailsResult>() {
+				@Override
+				public void onSuccess(GetMessageDetailsResult response) {
+					display.fillMessageContent(response.getMessageDetails()
+							.getText());
+
+				}
+			});
+		}
 		container.setWidget(display.asWidget());
 	}
 
 	@Inject private Displayable display;
+<<<<<<< HEAD
 	
 <<<<<<< HEAD
 	public interface Displayable extends WidgetDisplayable {}
 >>>>>>> integrate all of the views to their corresponding activities and mappers
 =======
+=======
+
+>>>>>>> make reload message content work, use the same place with folder list, while separated with slash, that looks like Gmail's
 	public interface Displayable extends WidgetDisplayable {
 		void fillMessageContent(String messageContent);
 	}
-	
-	public MessageContentActivity with(IMAPMessagePlace messageContentPlace){
-		messageDetails = messageContentPlace.getMessageDetails();
+
+	public MessageContentActivity with(MailFolderPlace place) {
+		this.fullName = place.getFullName();
+		this.uid = place.getMessageId();
 		return this;
 	}
 >>>>>>> make message content work as expected partly

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java Thu Sep 12 03:55:54 2013
@@ -21,6 +21,7 @@ package org.apache.hupa.client.activity;
 
 <<<<<<< HEAD
 <<<<<<< HEAD
+<<<<<<< HEAD
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
@@ -246,28 +247,20 @@ import org.apache.hupa.client.place.IMAP
 import org.apache.hupa.client.place.MailFolderPlace;
 import org.apache.hupa.client.rf.GetMessageDetailsRequest;
 >>>>>>> prepare for message content panel
+=======
+import org.apache.hupa.client.place.MailFolderPlace;
+>>>>>>> make reload message content work, use the same place with folder list, while separated with slash, that looks like Gmail's
 import org.apache.hupa.client.ui.WidgetDisplayable;
-import org.apache.hupa.shared.data.MessageImpl.IMAPFlag;
-import org.apache.hupa.shared.domain.GetMessageDetailsAction;
-import org.apache.hupa.shared.domain.GetMessageDetailsResult;
+import org.apache.hupa.shared.data.ImapFolderImpl;
 import org.apache.hupa.shared.domain.ImapFolder;
-import org.apache.hupa.shared.domain.Message;
-import org.apache.hupa.shared.domain.User;
-import org.apache.hupa.shared.events.ExpandMessageEvent;
-import org.apache.hupa.shared.events.ExpandMessageEventHandler;
-import org.apache.hupa.shared.events.LoginEvent;
-import org.apache.hupa.shared.events.LoginEventHandler;
 
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.user.client.ui.AcceptsOneWidget;
 import com.google.inject.Inject;
-import com.google.web.bindery.requestfactory.shared.Receiver;
 
 public class MessageListActivity extends AppBaseActivity {
 
-	// @Inject private Provider<IMAPMessagePlace> messagePlaceProvider;
-	private User user;
-	private String searchValue;
+	@Inject private Displayable display;
 
 	@Override
 	public void start(AcceptsOneWidget container, EventBus eventBus) {
@@ -276,62 +269,15 @@ public class MessageListActivity extends
 	}
 
 	private void bindTo(EventBus eventBus) {
-		eventBus.addHandler(LoginEvent.TYPE, new LoginEventHandler() {
-			public void onLogin(LoginEvent event) {
-				user = event.getUser();
-				searchValue = null;
-			}
-		});
-		eventBus.addHandler(ExpandMessageEvent.TYPE, new ExpandMessageEventHandler() {
-			public void onExpandMessage(ExpandMessageEvent event) {
-				// final boolean decreaseUnseen;
-				final Message message = event.getMessage();
-				// check if the message was already seen in the past
-				if (event.getMessage().getFlags().contains(IMAPFlag.SEEN) == false) {
-					// decreaseUnseen = true;//TODO 1209
-				} else {
-					// decreaseUnseen = false;
-				}
-
-				GetMessageDetailsRequest req = requestFactory.messageDetailsRequest();
-				GetMessageDetailsAction action = req.create(GetMessageDetailsAction.class);
-				final ImapFolder f = req.create(ImapFolder.class);
-				// event.getFolder().setFolderTo(f);
-				cloneFolder(f, event.getFolder());
-				action.setFolder(f);
-				action.setUid(message.getUid());
-				req.get(action).fire(new Receiver<GetMessageDetailsResult>() {
-					@Override
-					public void onSuccess(GetMessageDetailsResult response) {
-						/*
-						 * TODO if (decreaseUnseen) { eventBus.fireEvent(new
-						 * DecreaseUnseenEvent(user, folder)); }
-						 */
-						placeController.goTo(new IMAPMessagePlace(String.valueOf(message.getUid())).with(user, f,
-								message, response.getMessageDetails()));
-
-					}
-				});
-			}
-		});
-	}
-	
-	public MessageListActivity with(MailFolderPlace place){
-		display.setFolder(place.getFolder());
-		return this;
 	}
 
-	private void cloneFolder(ImapFolder desc, ImapFolder src) {
-		desc.setChildren(src.getChildren());
-		desc.setDelimiter(src.getDelimiter());
-		desc.setFullName(src.getFullName());
-		desc.setMessageCount(src.getMessageCount());
-		desc.setName(src.getName());
-		desc.setSubscribed(src.getSubscribed());
-		desc.setUnseenMessageCount(src.getUnseenMessageCount());
+	public MessageListActivity with(MailFolderPlace place) {
+		display.setFolder(new ImapFolderImpl(place.getFullName()));
+		return this;
 	}
 
 <<<<<<< HEAD
+<<<<<<< HEAD
 	@Inject private Displayable display;
 <<<<<<< HEAD
 	
@@ -343,6 +289,8 @@ public class MessageListActivity extends
 	private Displayable display;
 >>>>>>> make message content work as expected partly
 
+=======
+>>>>>>> make reload message content work, use the same place with folder list, while separated with slash, that looks like Gmail's
 	public interface Displayable extends WidgetDisplayable {
 		void setFolder(ImapFolder folder);
 	}

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopBarActivity.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopBarActivity.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopBarActivity.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopBarActivity.java Thu Sep 12 03:55:54 2013
@@ -165,7 +165,7 @@ public class TopBarActivity extends AppB
 	@Override
 	public void start(AcceptsOneWidget container, EventBus eventBus) {
 		container.setWidget(display.asWidget());
-		bindTo(eventBus);
+		bindTo(this.eventBus);
 	}
 
 <<<<<<< HEAD

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/AppPlaceHistoryMapper.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/AppPlaceHistoryMapper.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/AppPlaceHistoryMapper.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/AppPlaceHistoryMapper.java Thu Sep 12 03:55:54 2013
@@ -22,7 +22,6 @@ package org.apache.hupa.client.mapper;
 import org.apache.hupa.client.place.DefaultPlace;
 import org.apache.hupa.client.place.IMAPMessagePlace;
 import org.apache.hupa.client.place.MailFolderPlace;
-import org.apache.hupa.client.place.MessagePlace;
 import org.apache.hupa.client.place.MessageSendPlace;
 
 import com.google.gwt.place.shared.PlaceHistoryMapper;
@@ -30,7 +29,6 @@ import com.google.gwt.place.shared.WithT
 
 @WithTokenizers({
     DefaultPlace.Tokenizer.class,
-    MessagePlace.Tokenizer.class,
     MailFolderPlace.Tokenizer.class,
     MessageSendPlace.Tokenizer.class,
     IMAPMessagePlace.Tokenizer.class

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/CachingWestActivityMapper.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/CachingWestActivityMapper.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/CachingWestActivityMapper.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/CachingWestActivityMapper.java Thu Sep 12 03:55:54 2013
@@ -40,7 +40,7 @@ public class CachingWestActivityMapper i
 			@Override
 			public Place filter(Place place) {
 				return (place instanceof DefaultPlace || place instanceof MailFolderPlace) ? place
-						: new MailFolderPlace();
+						: new MailFolderPlace("");
 			}
 		};
 

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/MessageContentActivityMapper.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/MessageContentActivityMapper.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/MessageContentActivityMapper.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mapper/MessageContentActivityMapper.java Thu Sep 12 03:55:54 2013
@@ -30,14 +30,18 @@ import com.google.gwt.core.client.RunAsy
 =======
 =======
 import org.apache.hupa.client.place.DefaultPlace;
-import org.apache.hupa.client.place.IMAPMessagePlace;
 import org.apache.hupa.client.place.MailFolderPlace;
+<<<<<<< HEAD
 >>>>>>> prepare for message content panel
+=======
+import org.apache.hupa.client.rf.HupaRequestFactory;
+>>>>>>> make reload message content work, use the same place with folder list, while separated with slash, that looks like Gmail's
 
 import com.google.gwt.activity.shared.Activity;
 import com.google.gwt.activity.shared.ActivityMapper;
 >>>>>>> integrate all of the views to their corresponding activities and mappers
 import com.google.gwt.place.shared.Place;
+import com.google.gwt.place.shared.PlaceController;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
@@ -68,10 +72,14 @@ public class MessageContentActivityMappe
 		};
 =======
 public class MessageContentActivityMapper implements ActivityMapper {
+
+	@Inject protected PlaceController placeController;
+	@Inject protected HupaRequestFactory requestFactory;
 	private final Provider<MessageContentActivity> messageContentActivityProvider;
 
 	@Inject
-	public MessageContentActivityMapper(Provider<MessageContentActivity> messageContentActivityProvider) {
+	public MessageContentActivityMapper(
+			Provider<MessageContentActivity> messageContentActivityProvider) {
 		this.messageContentActivityProvider = messageContentActivityProvider;
 	}
 
@@ -85,10 +93,9 @@ public class MessageContentActivityMappe
 =======
 		if (place instanceof DefaultPlace)
 			return null;
-		else if (place instanceof MailFolderPlace)
-			return null;
-		else if (place instanceof IMAPMessagePlace) {
-			return messageContentActivityProvider.get().with((IMAPMessagePlace) place);
+		else if (place instanceof MailFolderPlace) {
+			return messageContentActivityProvider.get().with(
+					(MailFolderPlace) place);
 		}
 		return null;
 >>>>>>> make message content work as expected partly

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java Thu Sep 12 03:55:54 2013
@@ -108,6 +108,10 @@ public class IMAPMessagePlace extends Ab
 	public IMAPMessagePlace(String token) {
 		this.messageId = token;
 	}
+	
+	public IMAPMessagePlace(MessageDetails messageDetails){
+		this.messageDetails = messageDetails;
+	}
 
 	public Message getMessage() {
 		return message;
@@ -199,10 +203,7 @@ public class IMAPMessagePlace extends Ab
 
 		@Override
 		public String getToken(IMAPMessagePlace place) {
-			return place.getMessageId();
-//			System.out.println(place);
-//			System.out.println(place.getMessage());
-//			return String.valueOf(place.getMessage().getUid());
+			return place.getMessageDetails().getMessageId();
 		}
 	}
 
@@ -217,6 +218,7 @@ public class IMAPMessagePlace extends Ab
 
 <<<<<<< HEAD
 <<<<<<< HEAD
+<<<<<<< HEAD
 =======
 >>>>>>> 
 =======
@@ -227,4 +229,6 @@ public class IMAPMessagePlace extends Ab
 	}
 
 >>>>>>> prepare for message content panel
+=======
+>>>>>>> make reload message content work, use the same place with folder list, while separated with slash, that looks like Gmail's
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailFolderPlace.java Thu Sep 12 03:55:54 2013
@@ -19,8 +19,8 @@
 
 package org.apache.hupa.client.place;
 
-import org.apache.hupa.shared.data.ImapFolderImpl;
 import org.apache.hupa.shared.domain.ImapFolder;
+import org.apache.hupa.shared.domain.MessageDetails;
 import org.apache.hupa.shared.domain.User;
 
 import com.google.gwt.place.shared.PlaceTokenizer;
@@ -28,74 +28,66 @@ import com.google.gwt.place.shared.Prefi
 
 public class MailFolderPlace extends AbstractPlace {
 
-	// this can remove the colon ":"
-	private static final String PREFIX = "folder";
 	private User user;
-	private String folderName = "";
+	private String searchValue;
+	private String uid;
+	private MessageDetails messageDetails;
+	private String fullName;
+
+	public MailFolderPlace(String token) {
+		if (token.contains("/")
+				&& token.substring(token.lastIndexOf("/") + 1).matches("\\d+")) {
+			fullName = token.substring(0, token.lastIndexOf("/"));
+			uid = token.substring(token.lastIndexOf("/") + 1);
+		} else {
+			fullName = token;
+		}
+	}
+
+	public MessageDetails getMessageDetails() {
+		return messageDetails;
+	}
 
-	public String getFolderName() {
-		return folderName;
+	public String getMessageId() {
+		return uid;
 	}
 
-	/**
-	 * equality test based on Class type, to let different instance of this
-	 * Place class to be equals for CachingActivityMapper test on Place equality
-	 * 
-	 * @param otherPlace
-	 *            the place to compare with
-	 * @return true if this place and otherPlace are of the same Class type
-	 */
-	@Override
-	public boolean equals(Object otherPlace) {
-		return this == otherPlace;// || (otherPlace != null && getClass() ==
-									// otherPlace.getClass());
-	}
-
-	@Override
-	public int hashCode() {
-		return PREFIX.hashCode();
-	}
-
-	public MailFolderPlace with(String folderName) {
-		this.folderName = folderName;
-		this.folder = new ImapFolderImpl();
-		folder.setFullName(folderName);
-		return this;
-	}
-
-	public MailFolderPlace with(ImapFolder folder) {
-		this.folder = folder;
-		this.folderName = folder.getName();
-		return this;
+	public String getFullName() {
+		return fullName;
 	}
 
 	public User getUser() {
 		return user;
 	}
 
-	@Prefix(PREFIX)
+	public String getSearchValue() {
+		return searchValue;
+	}
+
+	// the main place use empty string such that colon'd disappear
+	@Prefix("")
 	public static class Tokenizer implements PlaceTokenizer<MailFolderPlace> {
 
 		@Override
 		public MailFolderPlace getPlace(String token) {
-			// TODO create place from token rather than with methods such that we can get place we want.
-			return new MailFolderPlace().with(token);
+			return new MailFolderPlace(token);
 		}
 
 		@Override
 		public String getToken(MailFolderPlace place) {
-			return place.getFolderName();
+			String token = place.getFullName();
+			if (place.getMessageId() != null
+					&& place.getMessageId().length() > 0) {
+				token += "/" + place.getMessageId();
+			}
+			return token;
 		}
 	}
 
-	private ImapFolder folder;
-	private String searchValue;
-
-	public ImapFolder getFolder() {
-		return folder;
-	}
-
-	public String getSearchValue() {
-		return searchValue;
+	public static void main(String[] args) {
+		System.out.println("123a".matches("\\d+"));
+		// String lll = "test/asdf/123";
+		// System.out.println(lll.substring(lll.lastIndexOf("/")+1));
+		// System.out.println(lll.substring(0, lll.lastIndexOf("/")));
 	}
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FoldersTreeViewModel.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FoldersTreeViewModel.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FoldersTreeViewModel.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/FoldersTreeViewModel.java Thu Sep 12 03:55:54 2013
@@ -51,8 +51,9 @@ public class FoldersTreeViewModel implem
 	@Inject private HupaRequestFactory rf;
 	@Inject private EventBus eventBus;
 	@Inject private PlaceController placeController;
-	@Inject private Provider<MailFolderPlace> folderPlaceProvider;
-	protected User user;
+	// @Inject private Provider<MailFolderPlace> folderPlaceProvider;
+	private User user;
+	private ImapFolder currentFolder;
 
 	public FoldersTreeViewModel() {
 
@@ -63,10 +64,11 @@ public class FoldersTreeViewModel implem
 					public void onSelectionChange(SelectionChangeEvent event) {
 						SingleSelectionModel<ImapFolder> selectionModel = (SingleSelectionModel<ImapFolder>) event
 								.getSource();
+						currentFolder = selectionModel.getSelectedObject();
 						eventBus.fireEvent(new LoadMessagesEvent(user,
 								selectionModel.getSelectedObject()));
-						placeController.goTo(folderPlaceProvider.get().with(
-								selectionModel.getSelectedObject()));
+						placeController.goTo(new MailFolderPlace(selectionModel
+								.getSelectedObject().getFullName()));
 					}
 				});
 	}
@@ -97,13 +99,20 @@ public class FoldersTreeViewModel implem
 				}
 			}
 
+			// TODO is this a click event?
 			@Override
 			public void onBrowserEvent(Context context, Element parent,
 					ImapFolder value, NativeEvent event,
 					ValueUpdater<ImapFolder> valueUpdater) {
-				eventBus.fireEvent(new LoadMessagesEvent(user, value));
-				placeController.goTo(folderPlaceProvider.get().with(
-						value.getName()));
+				if (clickSameFolder(value)) {
+					eventBus.fireEvent(new LoadMessagesEvent(user, value));
+					placeController.goTo(new MailFolderPlace(value
+							.getFullName()));
+				}
+			}
+
+			private boolean clickSameFolder(ImapFolder value) {
+				return value == currentFolder;
 			}
 		}, selectionModel, null);
 	}

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java?rev=1522274&r1=1522273&r2=1522274&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java Thu Sep 12 03:55:54 2013
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.hupa.client.activity.MessageListActivity;
+<<<<<<< HEAD
 import org.apache.hupa.shared.domain.Message;
 
 import com.google.gwt.core.client.GWT;
@@ -59,15 +60,20 @@ import java.util.List;
 
 >>>>>>> add click handler to every message row
 import org.apache.hupa.client.activity.MessageListActivity;
+=======
+import org.apache.hupa.client.place.MailFolderPlace;
+>>>>>>> make reload message content work, use the same place with folder list, while separated with slash, that looks like Gmail's
 import org.apache.hupa.client.rf.FetchMessagesRequest;
+import org.apache.hupa.client.rf.GetMessageDetailsRequest;
 import org.apache.hupa.client.rf.HupaRequestFactory;
 import org.apache.hupa.shared.data.ImapFolderImpl;
 import org.apache.hupa.shared.domain.FetchMessagesAction;
 import org.apache.hupa.shared.domain.FetchMessagesResult;
+import org.apache.hupa.shared.domain.GetMessageDetailsAction;
+import org.apache.hupa.shared.domain.GetMessageDetailsResult;
 import org.apache.hupa.shared.domain.ImapFolder;
 import org.apache.hupa.shared.domain.Message;
 import org.apache.hupa.shared.domain.User;
-import org.apache.hupa.shared.events.ExpandMessageEvent;
 import org.apache.hupa.shared.events.LoadMessagesEvent;
 import org.apache.hupa.shared.events.LoadMessagesEventHandler;
 import org.apache.hupa.shared.events.LoginEvent;
@@ -78,6 +84,7 @@ import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.place.shared.PlaceController;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.user.cellview.client.DataGrid;
@@ -94,7 +101,6 @@ public class MessageListView extends Com
 
 	@UiField(provided = true) DataGrid<Message> grid;
 	private HupaRequestFactory requestFactory;
-	private EventBus eventBus;
 	private ImapFolder folder;
 	private String searchValue;
 	private User user;
@@ -103,14 +109,13 @@ public class MessageListView extends Com
 	@Inject
 	public MessageListView(final EventBus eventBus,
 			final HupaRequestFactory requestFactory,
-			final MessagesCellTable table) {
+			final PlaceController placeController, final MessagesCellTable table) {
 		this.requestFactory = requestFactory;
-		this.eventBus = eventBus;
 		grid = table;
 		initWidget(binder.createAndBindUi(this));
 		grid.addCellPreviewHandler(new Handler<Message>() {
 			@Override
-			public void onCellPreview(CellPreviewEvent<Message> event) {
+			public void onCellPreview(final CellPreviewEvent<Message> event) {
 				if (hasClickedButFirstCol(event)) {
 					List<Message> displayedItems = table.getVisibleItems();
 					for (Message msg : displayedItems) {
@@ -118,9 +123,26 @@ public class MessageListView extends Com
 					}
 					table.getSelectionModel().setSelected(event.getValue(),
 							true);
-					MessageListView.this.eventBus
-							.fireEvent(new ExpandMessageEvent(user, folder,
-									event.getValue()));
+					GetMessageDetailsRequest req = requestFactory
+							.messageDetailsRequest();
+					GetMessageDetailsAction action = req
+							.create(GetMessageDetailsAction.class);
+					final ImapFolder f = req.create(ImapFolder.class);
+					f.setFullName(folder.getFullName());
+					action.setFolder(f);
+					action.setUid(event.getValue().getUid());
+					req.get(action).fire(
+							new Receiver<GetMessageDetailsResult>() {
+								@Override
+								public void onSuccess(
+										GetMessageDetailsResult response) {
+									placeController.goTo(new MailFolderPlace(f
+											.getFullName()
+											+ "/"
+											+ event.getValue().getUid()));
+
+								}
+							});
 				}
 			}
 
@@ -172,39 +194,26 @@ public class MessageListView extends Com
 		FetchMessagesRequest messagesRequest = requestFactory.messagesRequest();
 		FetchMessagesAction action = messagesRequest
 				.create(FetchMessagesAction.class);
-		final ImapFolder folder1 = messagesRequest.create(ImapFolder.class);
-		// folder1.setChildren(folder.getChildren());
-		// folder1.setDelimiter(folder.getDelimiter());
-		folder1.setFullName(folder.getFullName());
-		// folder1.setMessageCount(folder.getMessageCount());
-		// folder1.setName(folder.getName());
-		// folder1.setSubscribed(folder.getSubscribed());
-		// folder1.setUnseenMessageCount(folder.getUnseenMessageCount());
-		action.setFolder(folder1);
+		final ImapFolder f = messagesRequest.create(ImapFolder.class);
+		f.setFullName(folder.getFullName());
+		action.setFolder(f);
 		action.setOffset(grid.getPageSize());
 		action.setSearchString(searchValue);
 		action.setStart(start);
 		messagesRequest.fetch(action).fire(new Receiver<FetchMessagesResult>() {
 
 			@Override
-			public void onFailure(ServerFailure error) {
-				if (error.isFatal()) {
-					throw new RuntimeException(error.getMessage());
-				}
-			}
-
-			@Override
 			public void onSuccess(final FetchMessagesResult result) {
 				assert result != null;
-				// folder.setMessageCount(result.getRealCount());// TODO if do
-				// this, there will be auto bean has been frozen.
-				// folder.setUnseenMessageCount(result.getRealUnreadCount());
 				grid.setRowCount(result.getRealCount());
 				grid.setRowData(start, result.getMessages());
+			}
 
-				// pager.setPageStart(start);
-				// eventBus.fireEvent(new MessagesReceivedEvent(folder1,
-				// result.getMessages()));
+			@Override
+			public void onFailure(ServerFailure error) {
+				if (error.isFatal()) {
+					throw new RuntimeException(error.getMessage());
+				}
 			}
 		});
 	}



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org