You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by no...@apache.org on 2009/08/19 10:31:47 UTC

svn commit: r805697 - in /labs/hupa/src/main/java/org/apache/hupa: client/mvp/ client/widgets/ server/guice/ server/handler/ shared/rpc/

Author: norman
Date: Wed Aug 19 08:31:47 2009
New Revision: 805697

URL: http://svn.apache.org/viewvc?rev=805697&view=rev
Log:
Add support for creating new folders..

Added:
    labs/hupa/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java
    labs/hupa/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java
Modified:
    labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
    labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java
    labs/hupa/src/main/java/org/apache/hupa/client/widgets/EditableTreeItem.java
    labs/hupa/src/main/java/org/apache/hupa/client/widgets/IMAPTreeItem.java
    labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java

Modified: labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java?rev=805697&r1=805696&r2=805697&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java Wed Aug 19 08:31:47 2009
@@ -44,6 +44,7 @@
 import org.apache.hupa.shared.events.LoadMessagesEvent;
 import org.apache.hupa.shared.events.LoginEvent;
 import org.apache.hupa.shared.events.LoginEventHandler;
+import org.apache.hupa.shared.rpc.CreateFolder;
 import org.apache.hupa.shared.rpc.DeleteFolder;
 import org.apache.hupa.shared.rpc.EmptyResult;
 import org.apache.hupa.shared.rpc.FetchFolders;
@@ -87,6 +88,7 @@
 		public HasEnable getDeleteEnable();
 		public HasEnable getNewEnable();
 		public void deleteSelectedFolder();
+		public void createFolder(EditHandler handler);
 	}
 
 	protected void loadTreeItems() {
@@ -264,6 +266,35 @@
 			}
 			
 		});
+		
+		display.getNewClick().addClickHandler(new ClickHandler() {
+
+			public void onClick(ClickEvent event) {
+				display.createFolder(new EditHandler() {
+
+					public void onEditEvent(EditEvent event) {
+						final IMAPTreeItem item = (IMAPTreeItem)event.getSource();
+						final String newValue = (String) event.getNewValue();
+						if (event.getEventType().equals(EditEvent.EventType.Stop)) {
+							dispatcher.execute(new CreateFolder(user.getSessionId(),new IMAPFolder(newValue.trim())),  new AsyncCallback<EmptyResult>() {
+
+								public void onFailure(Throwable caught) {
+									GWT.log("Error while create folder",caught);
+									item.cancelEdit();
+								}
+
+								public void onSuccess(EmptyResult result) {
+									// Nothing todo
+								}
+								
+							});
+						}
+					}
+					
+				});
+			}
+			
+		});
 	}
 
 	@Override

Modified: labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java?rev=805697&r1=805696&r2=805697&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java Wed Aug 19 08:31:47 2009
@@ -30,6 +30,8 @@
 import org.apache.hupa.client.dnd.PagingScrollTableRowDragController;
 import org.apache.hupa.client.mvp.IMAPFolderPresenter.Display;
 import org.apache.hupa.client.widgets.ConfirmDialogBox;
+import org.apache.hupa.client.widgets.EditEvent;
+import org.apache.hupa.client.widgets.EditHandler;
 import org.apache.hupa.client.widgets.EditableTree;
 import org.apache.hupa.client.widgets.HasDialog;
 import org.apache.hupa.client.widgets.HasEnable;
@@ -333,5 +335,47 @@
 			}
 		}
 	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#createFolder(org.apache.hupa.client.widgets.EditHandler)
+	 */
+	public void createFolder(EditHandler handler) {
+		IMAPTreeItem selected = (IMAPTreeItem)folderTree.getSelectedItem();
+		IMAPFolder oldFolder = (IMAPFolder) selected.getUserObject();
+		
+		// Generate a new folder with a whitespace as name, this is needed as workaround 
+		IMAPFolder folder = new IMAPFolder(oldFolder.getFullName() + oldFolder.getDelimiter() +" ");
+		folder.setDelimiter(oldFolder.getDelimiter());
+
+		final IMAPTreeItem newItem = new IMAPTreeItem(folder);
+		
+		// add the new item as child
+		folderTree.getSelectedItem().addItem(newItem);
+		newItem.addEditHandler(handler);
+		newItem.addEditHandler(new EditHandler() {
+
+			public void onEditEvent(EditEvent event) {
+				if (event.getEventType().equals(EditEvent.EventType.Cancel)) {
+					// remove the folder 
+					newItem.remove();
+				} else if (event.getEventType().equals(EditEvent.EventType.Stop)) {
+					// Select the new created folder and fire an event
+					folderTree.setSelectedItem(newItem, true);
+				}
+				
+			}
+			
+		});
+		// Expand the parent 
+		folderTree.getSelectedItem().setState(true,false);
+		
+		// Select the new folder  and start editing it
+		folderTree.setSelectedItem(newItem, false);
+		newItem.startEdit();
+		
+		// reset the text of the new item (remove the whitespace)
+		newItem.setText("");
+	}
 	
 }

Modified: labs/hupa/src/main/java/org/apache/hupa/client/widgets/EditableTreeItem.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/widgets/EditableTreeItem.java?rev=805697&r1=805696&r2=805697&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/widgets/EditableTreeItem.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/widgets/EditableTreeItem.java Wed Aug 19 08:31:47 2009
@@ -79,7 +79,8 @@
 
 	@Override
 	public void setText(String text) {
-		setWidget(new Label(text));
+		editBox.setText(text);
+		((HasText)normalItem).setText(text);
 	}
 
 

Modified: labs/hupa/src/main/java/org/apache/hupa/client/widgets/IMAPTreeItem.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/widgets/IMAPTreeItem.java?rev=805697&r1=805696&r2=805697&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/widgets/IMAPTreeItem.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/widgets/IMAPTreeItem.java Wed Aug 19 08:31:47 2009
@@ -22,8 +22,8 @@
 import org.apache.hupa.shared.data.IMAPFolder;
 
 public class IMAPTreeItem extends EditableTreeItem {	
-	private String oldFullName;
-	private String oldName;
+	protected String oldFullName;
+	protected String oldName;
 
 	public IMAPTreeItem(IMAPFolder folder) {
 		setUserObject(folder);
@@ -131,13 +131,18 @@
 	
 	@Override
 	public void stopEdit() {
-		String newFolderName = editBox.getText();
-		String newFullFolderName = oldFullName.substring(0, oldFullName.length() - oldName.length())  + newFolderName; 
-		IMAPFolder folder = ((IMAPFolder) getUserObject());
-		folder.setFullName(newFullFolderName);
-		showItem(getFolderName(folder));
+		if (editBox.getText().length() < 1) {
+			// Empty folder name is not allowed!
+			cancelEdit();
+		} else {
+			String newFolderName = editBox.getText();
+			String newFullFolderName = oldFullName.substring(0, oldFullName.length() - oldName.length())  + newFolderName; 
+			IMAPFolder folder = ((IMAPFolder) getUserObject());
+			folder.setFullName(newFullFolderName);
+			showItem(getFolderName(folder));
 
-		manager.fireEvent(new EditEvent(EditEvent.EventType.Stop,oldFullName,newFullFolderName));
+			manager.fireEvent(new EditEvent(EditEvent.EventType.Stop,oldFullName,newFullFolderName));
+		}
 
 	}
 }

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=805697&r1=805696&r2=805697&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 Wed Aug 19 08:31:47 2009
@@ -27,6 +27,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.hupa.server.FileItemRegistry;
 import org.apache.hupa.server.IMAPStoreCache;
+import org.apache.hupa.server.handler.CreateFolderHandler;
 import org.apache.hupa.server.handler.DeleteFolderHandler;
 import org.apache.hupa.server.handler.DeleteMessageHandler;
 import org.apache.hupa.server.handler.ExposeMessageHandler;
@@ -72,6 +73,7 @@
 		bindHandler(MoveMessageHandler.class);
 		bindHandler(RenameFolderHandler.class);
 		bindHandler(DeleteFolderHandler.class);
+		bindHandler(CreateFolderHandler.class);
 		bind(FileItemRegistry.class).in(Singleton.class);
 		bind(IMAPStoreCache.class).in(Singleton.class);
 		bind(Log.class).toProvider(LogProvider.class).in(Singleton.class);

Added: labs/hupa/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java?rev=805697&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java Wed Aug 19 08:31:47 2009
@@ -0,0 +1,96 @@
+/****************************************************************
+ * 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.handler;
+
+import javax.mail.Folder;
+import javax.servlet.http.HttpSession;
+
+import net.customware.gwt.dispatch.server.ExecutionContext;
+import net.customware.gwt.dispatch.shared.ActionException;
+
+import org.apache.commons.logging.Log;
+import org.apache.hupa.server.IMAPStoreCache;
+import org.apache.hupa.shared.data.IMAPFolder;
+import org.apache.hupa.shared.data.User;
+import org.apache.hupa.shared.rpc.CreateFolder;
+import org.apache.hupa.shared.rpc.EmptyResult;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.sun.mail.imap.IMAPStore;
+
+/**
+ * Handle creation of folders
+ * 
+ *
+ */
+public class CreateFolderHandler extends AbstractSessionHandler<CreateFolder, EmptyResult>{
+
+	@Inject
+	public CreateFolderHandler(IMAPStoreCache cache, Log logger,
+			Provider<HttpSession> sessionProvider) {
+		super(cache, logger, sessionProvider);
+	}
+
+	@Override
+	protected EmptyResult executeInternal(CreateFolder action,
+			ExecutionContext context) throws ActionException {
+		User user = getUser(action.getSessionId());
+		IMAPFolder folder = action.getFolder();
+		
+		try {
+			IMAPStore store = cache.get(user);
+			Folder f = store.getFolder(folder.getFullName());
+			if (f.create(Folder.HOLDS_MESSAGES)) {
+				logger.info("Successfully create folder " + folder + " for user " + user);
+				return new EmptyResult();
+			} else {
+				logger.info("Unable to create folder " + folder + " for user " + user);
+				throw new ActionException("Unable to create folder " + folder + " for user " + user);
+
+			}
+		} catch (Exception e) {
+			logger.error("Error while creating folder " + folder + " for user " + user, e);
+			throw new ActionException("Error while creating folder " + folder + " for user " + user, e);
+
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see net.customware.gwt.dispatch.server.ActionHandler#getActionType()
+	 */
+	public Class<CreateFolder> getActionType() {
+		return CreateFolder.class;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see net.customware.gwt.dispatch.server.ActionHandler#rollback(net.customware.gwt.dispatch.shared.Action, net.customware.gwt.dispatch.shared.Result, net.customware.gwt.dispatch.server.ExecutionContext)
+	 */
+	public void rollback(CreateFolder arg0, EmptyResult arg1,
+			ExecutionContext arg2) throws ActionException {
+		// TODO Auto-generated method stub
+		
+	}
+
+
+
+}

Added: labs/hupa/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java?rev=805697&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java Wed Aug 19 08:31:47 2009
@@ -0,0 +1,44 @@
+/****************************************************************
+ * 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.rpc;
+
+import org.apache.hupa.shared.data.IMAPFolder;
+
+public class CreateFolder extends Session<EmptyResult>{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -4966856616698265177L;
+	private IMAPFolder folder;
+
+	public CreateFolder(String sessionId, IMAPFolder folder) {
+		super(sessionId);
+		this.folder = folder;
+	}
+
+	protected CreateFolder() {
+	}
+	
+	public IMAPFolder getFolder() {
+		return folder;
+	}
+	
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org