Author: norman
Date: Tue Aug 18 19:51:45 2009
New Revision: 805553

URL: http://svn.apache.org/viewvc?rev=805553&view=rev
Log:
Renaming Folders is working now!

Modified:
    labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.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

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=805553&r1=805552&r2=805553&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 
Tue Aug 18 19:51:45 2009
@@ -32,6 +32,8 @@
 import net.customware.gwt.presenter.client.widget.WidgetDisplay;
 import net.customware.gwt.presenter.client.widget.WidgetPresenter;
 
+import org.apache.hupa.client.widgets.EditEvent;
+import org.apache.hupa.client.widgets.EditHandler;
 import org.apache.hupa.client.widgets.IMAPTreeItem;
 import org.apache.hupa.shared.data.IMAPFolder;
 import org.apache.hupa.shared.data.User;
@@ -40,8 +42,10 @@
 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.EmptyResult;
 import org.apache.hupa.shared.rpc.FetchFolders;
 import org.apache.hupa.shared.rpc.FetchFoldersResult;
+import org.apache.hupa.shared.rpc.RenameFolder;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -50,6 +54,7 @@
 import com.google.gwt.event.logical.shared.HasSelectionHandlers;
 import com.google.gwt.event.logical.shared.SelectionEvent;
 import com.google.gwt.event.logical.shared.SelectionHandler;
+import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.TreeItem;
 import com.google.inject.Inject;
 
@@ -103,8 +108,31 @@
                for (int i = 0; i < list.size(); i++) {
                        IMAPFolder iFolder = list.get(i);
                        
-                       IMAPTreeItem record = new IMAPTreeItem(iFolder);
-                       
+                       final IMAPTreeItem record = new IMAPTreeItem(iFolder);
+                       record.addEditHandler(new EditHandler() {
+
+                               public void onEditEvent(EditEvent event) {
+                                       
if(event.getEventType().equals(EditEvent.EventType.Stop)) {
+                                               IMAPFolder iFolder = new 
IMAPFolder((String)event.getOldValue());
+                                               final String newName = 
(String)event.getNewValue();
+                                               if 
(iFolder.getFullName().equalsIgnoreCase(newName) == false) {
+                                                       dispatcher.execute(new 
RenameFolder(user.getSessionId(), iFolder, newName), new 
AsyncCallback<EmptyResult>() {
+
+                                                               public void 
onFailure(Throwable caught) {
+                                                                       
record.cancelEdit();
+                                                               }       
+
+                                                               public void 
onSuccess(EmptyResult result) {
+                                                                       
folder.setFullName(newName);
+                                                               }
+                                                               
+                                                       });
+                                               }
+
+                                       }
+                               }
+                               
+                       });
                        record.setUserObject(iFolder);
 
                        List<IMAPFolder> childFolders = 
iFolder.getChildIMAPFolders();

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=805553&r1=805552&r2=805553&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 
Tue Aug 18 19:51:45 2009
@@ -26,19 +26,18 @@
 import com.google.gwt.event.dom.client.KeyDownHandler;
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.HasText;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.TreeItem;
 import com.google.gwt.user.client.ui.Widget;
 
 public class EditableTreeItem extends TreeItem implements 
HasEditable,HasEditHandlers{
-       protected boolean isEdit = false;
        protected TextBox editBox = new TextBox();
-       protected Label item = new Label();;
-       protected String itemText;
-       HandlerManager manager = new HandlerManager(this);
+       protected String oldValue;
+       private Widget normalItem = new Label();
+       protected HandlerManager manager = new HandlerManager(this);
        public EditableTreeItem() {
-               setWidget(item);
                editBox.setWidth("100px");
                editBox.addKeyDownHandler(new KeyDownHandler() {
 
@@ -68,20 +67,23 @@
                        }
                        
                });
+               super.setWidget(normalItem);
        }
+       
+
        @Override
        public void setText(String text) {
-               item.setText(text);
-               itemText = text;
+               setWidget(new Label(text));
        }
 
+
        @Override
        public void setWidget(Widget newWidget) {
-               if (newWidget instanceof Label) {
-                       item = (Label)newWidget;
+               if (newWidget instanceof HasText) {
+                       normalItem = newWidget;
                        super.setWidget(newWidget);
                } else {
-                       throw new IllegalArgumentException("Widget need to 
extend Label");
+                       throw new IllegalArgumentException("Widget need to 
implement HasText");
                }
        }
 
@@ -90,26 +92,15 @@
         * @see org.apache.hupa.client.widgets.HasEditable#cancelEdit()
         */
        public void cancelEdit() {
-               cancelEdit(itemText);
+               showItem(oldValue);
+               manager.fireEvent(new 
EditEvent(EditEvent.EventType.Start,oldValue,null));
        }
-       
-       /**
-        * Cancel the edit and set the text of the TreeItem to the given value
-        * 
-        * @param text
-        */
-       protected void cancelEdit(String text) {
-               setWidget(item);
-               item.setText(text);
-               isEdit = false;
-       }
-
        /*
         * (non-Javadoc)
         * @see org.apache.hupa.client.widgets.HasEditable#isEdit()
         */
        public boolean isEdit() {
-               return isEdit;
+               return getWidget().equals(editBox);
        }
 
        /*
@@ -117,51 +108,36 @@
         * @see org.apache.hupa.client.widgets.HasEditable#startEdit()
         */
        public void startEdit() {
-               editBox.setText(item.getText());
-               editBox.setFocus(true);
-               editBox.setCursorPos(item.getText().length());
-               super.setWidget(editBox);
-               isEdit = true;
+               oldValue = getText();
+               showEditBox(oldValue);
+               manager.fireEvent(new 
EditEvent(EditEvent.EventType.Start,oldValue,null));
        }
        
-       /**
-        * Start editing the TreeItem.
-        * 
-        * @param startValue
-        */
-       protected void startEdit(String startValue) {
-               itemText = startValue;
-               editBox.setText(startValue);
-               editBox.setCursorPos(startValue.length());
-               super.setWidget(editBox);
-               isEdit = true;
+       protected void showEditBox(String value) {
+               editBox.setText(value);
+               editBox.setCursorPos(value.length());
                editBox.setFocus(true);
+               super.setWidget(editBox);
        }
+       
 
        /*
         * (non-Javadoc)
         * @see org.apache.hupa.client.widgets.HasEditable#stopEdit()
         */
        public void stopEdit() {
-               stopEdit(editBox.getText().trim());
-       }
-       
-       /**
-        * Stop edit and set the text of the TreeItem to the given value
-        * 
-        * @param newValue
-        */
-       protected void stopEdit(String newValue) {
-               item.setText(newValue);
-               setWidget(item);
-               editBox.setText("");            
-               isEdit = false;
+               showItem(editBox.getText());
+               manager.fireEvent(new 
EditEvent(EditEvent.EventType.Stop,oldValue,editBox.getText()));
        }
 
+       public void showItem(String text) {
+               ((HasText)normalItem).setText(text);
+               setWidget(normalItem);
+       }
        
        @Override
        public String getText() {
-               return item.getText();
+               return ((HasText)normalItem).getText();
        }
        
        public HandlerRegistration addEditHandler(EditHandler handler) {

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=805553&r1=805552&r2=805553&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 
Tue Aug 18 19:51:45 2009
@@ -22,10 +22,12 @@
 import org.apache.hupa.shared.data.IMAPFolder;
 
 public class IMAPTreeItem extends EditableTreeItem {   
+       private String oldFullName;
+       private String oldName;
+
        public IMAPTreeItem(IMAPFolder folder) {
                setUserObject(folder);
-               setFolderText(folder);
-       
+               setFolderText(folder);  
        }
 
        /*
@@ -110,14 +112,30 @@
 
        @Override
        public void startEdit() {
-               startEdit(((IMAPFolder)getUserObject()).getName());
+               IMAPFolder folder = (IMAPFolder) getUserObject();
+               oldFullName = folder.getFullName();
+               oldName = folder.getName();
+               showEditBox(oldName);
+               manager.fireEvent(new 
EditEvent(EditEvent.EventType.Start,oldFullName,null));
        }
        
-       public void stopEdit() {
-               stopEdit(editBox.getText().trim() + " (" + ((IMAPFolder) 
getUserObject()).getUnseeMessageCount() +")");
+       public void cancelEdit() {
+               IMAPFolder folder = ((IMAPFolder) getUserObject());
+               folder.setFullName(oldFullName);
+               showItem(getFolderName(folder));
+
+               manager.fireEvent(new 
EditEvent(EditEvent.EventType.Cancel,oldFullName,null));
+
        }
        
-       public void cancelEdit() {
-               cancelEdit(getFolderName((IMAPFolder)getUserObject()));
+       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));
+
+               manager.fireEvent(new 
EditEvent(EditEvent.EventType.Stop,oldFullName,newFullFolderName));
+
        }
 }



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

Reply via email to