fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode

git-svn-id: https://svn.apache.org/repos/asf/james/hupa/trunk@1522431 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java b/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java
index ab49d6f..3fca85c 100644
--- a/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java
+++ b/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java
@@ -294,13 +294,17 @@
 >>>>>>> fixed issue#82, make display message first and then mark etc.
 import org.apache.hupa.shared.domain.DeleteMessageByUidAction;
 import org.apache.hupa.shared.domain.DeleteMessageResult;
+import org.apache.hupa.shared.domain.GenericResult;
 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.MoveMessageAction;
 import org.apache.hupa.shared.domain.User;
 import org.apache.hupa.shared.events.DeleteClickEvent;
 import org.apache.hupa.shared.events.DeleteClickEventHandler;
+import org.apache.hupa.shared.events.MoveMessageEvent;
+import org.apache.hupa.shared.events.MoveMessageEventHandler;
 import org.apache.hupa.shared.events.RefreshMessagesEvent;
 import org.apache.hupa.shared.events.RefreshMessagesEventHandler;
 import org.apache.hupa.shared.events.RefreshUnreadEvent;
@@ -320,7 +324,7 @@
 	@Inject private ToolBarActivity.Displayable toolBar;
 	@Inject private TopBarActivity.Displayable topBar;
 	private String folderName;
-//	private String searchValue;
+	// private String searchValue;
 	private User user;
 
 	@Override
@@ -377,15 +381,15 @@
 		return "click".equals(event.getNativeEvent().getType()) && 0 != event.getColumn();
 	}
 
-	private void bindTo(EventBus eventBus) {
+	private void bindTo(final EventBus eventBus) {
 		eventBus.addHandler(DeleteClickEvent.TYPE, new DeleteClickEventHandler() {
 			@Override
 			public void onDeleteClickEvent(DeleteClickEvent event) {
 				deleteSelectedMessages();
 			}
 		});
-		
-		eventBus.addHandler(RefreshMessagesEvent.TYPE, new RefreshMessagesEventHandler(){
+
+		eventBus.addHandler(RefreshMessagesEvent.TYPE, new RefreshMessagesEventHandler() {
 			@Override
 			public void onRefresh(RefreshMessagesEvent event) {
 				display.setSearchValue(event.getSearchValue());
@@ -393,6 +397,56 @@
 			}
 		});
 
+		eventBus.addHandler(MoveMessageEvent.TYPE, new MoveMessageEventHandler() {
+
+			@Override
+			public void onMoveMessageHandler(final MoveMessageEvent event) {
+				hc.showTopLoading("Moving...");
+				MoveMessageRequest req = rf.moveMessageRequest();
+				ImapFolder f = req.create(ImapFolder.class);
+				ImapFolder newF = req.create(ImapFolder.class);
+
+				String fullName = null;
+				if (pc.getWhere() instanceof FolderPlace) {
+					fullName = ((FolderPlace) pc.getWhere()).getToken();
+				} else {
+					fullName = ((MessagePlace) pc.getWhere()).getTokenWrapper().getFolder();
+				}
+				f.setFullName(fullName);
+				newF.setFullName(event.getNewFolder().getFullName());
+				MoveMessageAction action = req.create(MoveMessageAction.class);
+
+				final List<Long> uids = display.getSelectedMessagesIds();
+				if(uids.isEmpty() || uids.size() > 1){//TODO can move more than one message once.
+					hc.hideTopLoading();
+					hc.showNotice("Please select one and only one message", 10000);
+					return;
+				}
+				action.setMessageUid(uids.get(0));
+				action.setNewFolder(newF);
+				action.setOldFolder(f);
+				req.move(action).fire(new Receiver<GenericResult>() {
+
+					@Override
+					public void onSuccess(GenericResult response) {
+						display.refresh();
+						eventBus.fireEvent(new RefreshUnreadEvent());
+						hc.hideTopLoading();
+						hc.showNotice("The conversation has been moved to \"" + event.getNewFolder() + "\"", 10000);
+					}
+
+					@Override
+					public void onFailure(ServerFailure error) {
+						super.onFailure(error);
+						hc.hideTopLoading();
+						hc.showNotice(error.getMessage(), 10000);
+					}
+
+				});
+			}
+
+		});
+
 	}
 
 	public MessageListActivity with(String folderName) {
diff --git a/client/src/main/java/org/apache/hupa/client/activity/MessageListFooterActivity.java b/client/src/main/java/org/apache/hupa/client/activity/MessageListFooterActivity.java
index de705a5..58f7f6f 100644
--- a/client/src/main/java/org/apache/hupa/client/activity/MessageListFooterActivity.java
+++ b/client/src/main/java/org/apache/hupa/client/activity/MessageListFooterActivity.java
@@ -21,11 +21,15 @@
 
 <<<<<<< HEAD
 <<<<<<< HEAD
+<<<<<<< HEAD
+=======
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 import org.apache.hupa.shared.data.ImapFolderImpl;
 import org.apache.hupa.shared.events.MoveMessageEvent;
 
 import com.google.gwt.event.dom.client.ChangeEvent;
 import com.google.gwt.event.dom.client.ChangeHandler;
+<<<<<<< HEAD
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.user.cellview.client.SimplePager;
 import com.google.gwt.user.client.ui.AcceptsOneWidget;
@@ -40,11 +44,18 @@
 import com.google.gwt.user.client.ui.AcceptsOneWidget;
 >>>>>>> integrate all of the views to their corresponding activities and mappers
 =======
+=======
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.user.cellview.client.SimplePager;
 import com.google.gwt.user.client.ui.AcceptsOneWidget;
+import com.google.gwt.user.client.ui.HasVisibility;
 import com.google.gwt.user.client.ui.IsWidget;
+<<<<<<< HEAD
 >>>>>>> replace with IsWidget
+=======
+import com.google.gwt.user.client.ui.ListBox;
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 import com.google.inject.Inject;
 
 public class MessageListFooterActivity extends AppBaseActivity {
@@ -53,6 +64,9 @@
 	public void start(AcceptsOneWidget container, EventBus eventBus) {
 		container.setWidget(display.asWidget());
 <<<<<<< HEAD
+<<<<<<< HEAD
+=======
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 		bindTo(eventBus);
 	}
 
@@ -67,8 +81,11 @@
 				}
 			}
 		});
+<<<<<<< HEAD
 =======
 >>>>>>> integrate all of the views to their corresponding activities and mappers
+=======
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 	}
 
 	@Inject private Displayable display;
@@ -90,6 +107,8 @@
 	public interface Displayable extends IsWidget {
 >>>>>>> replace with IsWidget
 		SimplePager getPager();
+		HasVisibility getLabelsPanel();
+		ListBox getLabels();
 	}
 >>>>>>> try to rearrange the places and history managment.
 }
diff --git a/client/src/main/java/org/apache/hupa/client/ui/LabelListView.java b/client/src/main/java/org/apache/hupa/client/ui/LabelListView.java
index 70f73d6..e5cdb20 100644
--- a/client/src/main/java/org/apache/hupa/client/ui/LabelListView.java
+++ b/client/src/main/java/org/apache/hupa/client/ui/LabelListView.java
@@ -194,11 +194,9 @@
 import org.apache.hupa.client.rf.HupaRequestFactory;
 import org.apache.hupa.shared.domain.ImapFolder;
 
-import com.google.gwt.cell.client.AbstractCell;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.HasClickHandlers;
-import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
@@ -267,27 +265,6 @@
 				}
 			});
 
-	static class LabelCell extends AbstractCell<LabelNode> {
-
-		public LabelCell() {
-		}
-
-		@Override
-		public void render(com.google.gwt.cell.client.Cell.Context context, LabelNode value, SafeHtmlBuilder sb) {
-			if (value == null) {
-				return;
-			}
-
-			if (value.getFolder().getSubscribed()) {
-				sb.appendHtmlConstant(value.getNameForDisplay());
-			} else {
-				sb.appendHtmlConstant("<span style='color:gray;'>");
-				sb.appendHtmlConstant(value.getNameForDisplay());
-				sb.appendHtmlConstant("</span>");
-			}
-		}
-	}
-
 	public class ImapLabelListDataProvider extends AsyncDataProvider<LabelNode> implements HasRefresh {
 
 		private HupaRequestFactory rf;
diff --git a/client/src/main/java/org/apache/hupa/client/ui/MessageListFooterView.java b/client/src/main/java/org/apache/hupa/client/ui/MessageListFooterView.java
index fec278b..e3ed964 100644
--- a/client/src/main/java/org/apache/hupa/client/ui/MessageListFooterView.java
+++ b/client/src/main/java/org/apache/hupa/client/ui/MessageListFooterView.java
@@ -21,6 +21,9 @@
 
 <<<<<<< HEAD
 <<<<<<< HEAD
+<<<<<<< HEAD
+=======
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 import java.util.ArrayList;
 import java.util.List;
 
@@ -35,6 +38,7 @@
 import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HasVisibility;
+<<<<<<< HEAD
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.SimplePanel;
@@ -129,21 +133,88 @@
 import com.google.gwt.user.cellview.client.SimplePager;
 import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
 import com.google.gwt.user.client.ui.Composite;
+=======
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.inject.Inject;
+import com.google.web.bindery.requestfactory.shared.Receiver;
+import com.google.web.bindery.requestfactory.shared.ServerFailure;
 
 public class MessageListFooterView extends Composite implements MessageListFooterActivity.Displayable {
 
-	@UiField(provided = true)
-	SimplePager simplePager;
+	@UiField(provided = true) SimplePager simplePager;
+
+	@UiField ListBox labels;
+	@UiField SimplePanel labelsPanel;
+	private List<LabelNode> folderNodes = new ArrayList<LabelNode>();
+
+	private static final String ROOT_PATH = "imap_root";
 
 	@Inject
-	public MessageListFooterView(final MessagesCellTable table) {
+	public MessageListFooterView(final MessagesCellTable table, final HupaRequestFactory rf) {
 		SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class);
 		simplePager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true);
 		simplePager.setDisplay(table);
-//		simplePager.setRangeLimited(false);
+		// simplePager.setRangeLimited(false);
 		initWidget(binder.createAndBindUi(this));
+
+		rf.fetchFoldersRequest().fetch(null, Boolean.TRUE).fire(new Receiver<List<ImapFolder>>() {
+
+			private String INTENTS = "&nbsp;&nbsp;&nbsp;&nbsp;";
+
+			@Override
+			public void onSuccess(List<ImapFolder> response) {
+				folderNodes.clear();
+				if (response == null || response.size() == 0) {
+				} else {
+					for (ImapFolder folder : response) {
+						fillCellList(folderNodes, folder, LabelNode.ROOT, "");
+					}
+				}
+
+				makeParentList();
+			}
+
+			private void fillCellList(List<LabelNode> folderNodes, ImapFolder curFolder, LabelNode parent,
+					String intents) {
+				LabelNode labelNode = new LabelNode();
+				labelNode.setFolder(curFolder);
+				labelNode.setName(curFolder.getName());
+				labelNode.setNameForDisplay(intents + curFolder.getName());
+				labelNode.setParent(parent);
+				labelNode.setPath(curFolder.getFullName());
+				folderNodes.add(labelNode);
+				if ("inbox".equalsIgnoreCase(curFolder.getName())) {
+					// if(selectionModel.getSelectedObject() == null){
+					// selectionModel.setSelected(labelNode, true);
+					// }
+				}
+				if (curFolder.getHasChildren()) {
+					for (ImapFolder subFolder : curFolder.getChildren()) {
+						fillCellList(folderNodes, subFolder, labelNode, intents + INTENTS);
+					}
+				}
+			}
+
+			@Override
+			public void onFailure(ServerFailure error) {
+				if (error.isFatal()) {
+					throw new RuntimeException(error.getMessage());
+				}
+			}
+
+		});
+	}
+
+	private void makeParentList() {
+		labels.clear();
+		labels.addItem("Move to...", ROOT_PATH);
+		for (LabelNode folderNode : this.folderNodes) {
+			labels.addItem(folderNode.getNameForDisplay().replace("&nbsp;&nbsp;", ". "), folderNode.getPath());
+		}
+
 	}
 
 <<<<<<< HEAD
@@ -175,6 +246,9 @@
 	}
 
 <<<<<<< HEAD
+<<<<<<< HEAD
+=======
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 	@Override
 	public HasVisibility getLabelsPanel() {
 		return labelsPanel;
@@ -185,8 +259,11 @@
 		return labels;
 	}
 
+<<<<<<< HEAD
 =======
 >>>>>>> make login page as one part of the overall layout & splite layout to little one
 =======
 >>>>>>> try to rearrange the places and history managment.
+=======
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 }
diff --git a/client/src/main/java/org/apache/hupa/client/ui/MessageListFooterView.ui.xml b/client/src/main/java/org/apache/hupa/client/ui/MessageListFooterView.ui.xml
index 389feaf..84e42fa 100644
--- a/client/src/main/java/org/apache/hupa/client/ui/MessageListFooterView.ui.xml
+++ b/client/src/main/java/org/apache/hupa/client/ui/MessageListFooterView.ui.xml
@@ -24,6 +24,7 @@
 		<c:SimplePager ui:field="simplePager" />
 		<g:SimplePanel ui:field="labelsPanel" addStyleNames="{style.moveMessage}">
 			<g:ListBox ui:field="labels"></g:ListBox>
+<<<<<<< HEAD
 		</g:SimplePanel>
 	</g:HorizontalPanel>
 =======
@@ -48,6 +49,8 @@
 =======
 		<g:SimplePanel addStyleNames="{style.moveMessage}">
 			<g:HTML>Hello</g:HTML>
+=======
+>>>>>>> fixed issue#85, can move one message now in DEMO mode, while not test in Gmail mode
 		</g:SimplePanel>
 	</g:HorizontalPanel>
 >>>>>>> remove deprecated code
diff --git a/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java b/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java
index 8d788a8..1b1e75f 100644
--- a/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java
+++ b/client/src/main/java/org/apache/hupa/client/ui/MessagesCellTable.java
@@ -838,7 +838,7 @@
         dataProvider.updateRowData(range.getStart(), sortedList);

 	}

 	

-	private String parseFolderName(final PlaceController pc) {

+	public String parseFolderName(final PlaceController pc) {

 		Place place = pc.getWhere();

 		if (place instanceof FolderPlace) {

 			folderName = ((FolderPlace) place).getToken();

diff --git a/shared/src/main/java/org/apache/hupa/shared/events/MoveMessageEvent.java b/shared/src/main/java/org/apache/hupa/shared/events/MoveMessageEvent.java
index 9e49c47..5837c68 100644
--- a/shared/src/main/java/org/apache/hupa/shared/events/MoveMessageEvent.java
+++ b/shared/src/main/java/org/apache/hupa/shared/events/MoveMessageEvent.java
@@ -119,7 +119,11 @@
         this.message = message;

     }

 

-    public User getUser() {

+    public MoveMessageEvent(ImapFolder newFolder) {

+    	this.newFolder = newFolder;

+	}

+

+	public User getUser() {

         return user;

     }