Author: fred
Date: 2007-04-26 14:10:20 +0000 (Thu, 26 Apr 2007)
New Revision: 12982

Modified:
   trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java
   trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java
Log:
Fix cut/paste bug in the bookmarks editor

Modified: trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java   
2007-04-26 12:58:09 UTC (rev 12981)
+++ trunk/freenet/src/freenet/clients/http/BookmarkEditorToadlet.java   
2007-04-26 14:10:20 UTC (rev 12982)
@@ -34,7 +34,7 @@
                super(client);
                this.core = core;
                this.bookmarkManager = core.bookmarkManager;
-               this.cutedPath = "";
+               this.cutedPath = null;
        }

        private void addCategoryToList(BookmarkCategory cat, String path, 
HTMLNode list)
@@ -51,7 +51,7 @@

                        actions.addChild("a", "href", "?action=del&bookmark=" + 
itemPath).addChild("img", new String[] {"src", "alt", "title"}, new String[] 
{"/static/icon/delete.png", "delete", "Delete"});

-                       if("".equals(cutedPath))
+                       if(cutedPath == null)
                                actions.addChild("a", "href", 
"?action=cut&bookmark=" + itemPath).addChild("img", new String[] {"src", "alt", 
"title"}, new String[] {"/static/icon/cut.png", "cut", "Cut"});

                        if(i != 0)
@@ -81,7 +81,7 @@

                        actions.addChild("a", "href", 
"?action=addCat&bookmark=" + catPath).addChild("img", new String[] {"src", 
"alt", "title"}, new String[] {"/static/icon/folder-new.png", "add category", 
"Add category"});

-                       if("".equals(cutedPath))
+                       if(cutedPath == null)
                                actions.addChild("a", "href", 
"?action=cut&bookmark=" + catPath).addChild("img", new String[] {"src", "alt", 
"title"}, new String[] {"/static/icon/cut.png", "cut", "Cut"});

                        if(i != 0)
@@ -90,7 +90,7 @@
                        if(i != cats.size() -1)
                                actions.addChild("a", "href", 
"?action=down&bookmark=" + catPath).addChild("img", new String[] {"src", "alt", 
"title"}, new String[] {"/static/icon/go-down.png", "down", "Go down"});

-                       if(! "".equals(cutedPath) && ! 
catPath.equals(cutedPath))
+                       if(cutedPath != null && ! catPath.startsWith(cutedPath) 
&& ! catPath.equals(bookmarkManager.parentPath(cutedPath)))
                                actions.addChild("a", "href", 
"?action=paste&bookmark=" + catPath).addChild("img", new String[] {"src", 
"alt", "title"}, new String[] {"/static/icon/paste.png", "paste", "Paste"});

                        subCat.addChild(actions);
@@ -108,7 +108,7 @@
                actions.addChild("a", "href", 
"?action=addItem&bookmark=/").addChild("img", new String[] {"src", "alt", 
"title"}, new String[] {"/static/icon/bookmark-new.png", "add bookmark", "Add 
bookmark"});
                actions.addChild("a", "href", 
"?action=addCat&bookmark=/").addChild("img", new String[] {"src", "alt", 
"title"}, new String[] {"/static/icon/folder-new.png", "add category", "Add 
category"});

-               if(! "".equals(cutedPath))
+               if(cutedPath != null && ! 
"/".equals(bookmarkManager.parentPath(cutedPath)))
                        actions.addChild("a", "href", 
"?action=paste&bookmark=/").addChild("img", new String[] {"src", "alt", 
"title"}, new String[] {"/static/icon/paste.png", "paste", "Paste"});

                root.addChild(actions);
@@ -158,11 +158,10 @@

                                cutedPath = bookmarkPath;

-                       } else if ("paste".equals(action) && ! 
"".equals(cutedPath)) {
-                               bookmarkManager.addBookmark(bookmarkPath, 
bookmarkManager.getBookmarkByPath(cutedPath), false);
-                               bookmarkManager.removeBookmark(cutedPath, true);
+                       } else if ("paste".equals(action) && cutedPath != null) 
{

-                               cutedPath = "";
+                               bookmarkManager.moveBookmark(cutedPath, 
bookmarkPath, true);
+                               cutedPath = null;

                        } else if (action.equals("edit") || 
action.equals("addItem") || action.equals("addCat")) {

@@ -204,7 +203,7 @@

                }

-               if(! "".equals(cutedPath)) {
+               if(cutedPath != null) {
                        HTMLNode infoBox = 
content.addChild(ctx.getPageMaker().getInfobox("infobox-normal", "Cut/Paste"));
                        infoBox.addChild("#","Click on a paste icon or 
cancel.");
                        HTMLNode cancelForm = 
ctx.addFormChild(infoBox.addChild("p"), "", "cancelCutForm");
@@ -247,7 +246,7 @@
                                successBox.addChild("p", "The bookmark has been 
deleted successfully");

                        } else if (req.isPartSet("cancelCut")) {
-                               cutedPath = "";
+                               cutedPath = null;

                        } else if (action.equals("edit") || 
action.equals("addItem") || action.equals("addCat")) {


Modified: trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java        
2007-04-26 12:58:09 UTC (rev 12981)
+++ trunk/freenet/src/freenet/clients/http/bookmark/BookmarkManager.java        
2007-04-26 14:10:20 UTC (rev 12982)
@@ -245,8 +245,9 @@
       throw new NullPointerException ();
     else {
       parent.addBookmark (b);
-      bookmarks.put (parentPath + b.getName () +
-                    ((b instanceof BookmarkCategory) ? "/" : ""), b);
+      putPaths(parentPath + b.getName () + ((b instanceof BookmarkCategory) ? 
"/" : ""), b);
+      
+  
     }
     if (store)
         node.storeConfig ();
@@ -266,7 +267,19 @@
     }

   }
-
+  
+  public void moveBookmark(String bookmarkPath, String newParentPath, boolean 
store) {
+       Bookmark b = getBookmarkByPath(bookmarkPath);
+       addBookmark(newParentPath, b, false);
+       
+       getCategoryByPath(parentPath(bookmarkPath)).removeBookmark(b);
+       removePaths(bookmarkPath);
+       
+       if (store)
+               node.storeConfig ();
+       
+  }
+  
   public void removeBookmark (String path, boolean store) {
     Bookmark bookmark = getBookmarkByPath (path);
     if (bookmark == null)
@@ -332,7 +345,30 @@
       return cat;
     }
   }
+  
+    private void putPaths(String path, Bookmark b) {

+    bookmarks.put(path , b);
+    System.out.println("PUT " + path);
+    if(b instanceof BookmarkCategory) {  
+         for(int i=0; i < ((BookmarkCategory) b).size(); i++) {
+                Bookmark child = ((BookmarkCategory) b).get(i);
+                putPaths(path + child.getName () + (child instanceof 
BookmarkItem ? "" : "/"), child);
+         }
+      }
+
+  }
+  
+    private void removePaths(String path) {
+       if(getBookmarkByPath(path) instanceof BookmarkCategory){
+               BookmarkCategory cat = getCategoryByPath(path);
+               for (int i=0; i < cat.size(); i++) {
+                       removePaths(path +cat.get(i).getName() + (cat.get(i) 
instanceof BookmarkCategory ? "/" : ""));
+               }
+       }
+       bookmarks.remove(path);
+  }
+
   public void clear () {

     removeBookmark ("/", false);


Reply via email to