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