You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by gh...@apache.org on 2012/03/04 17:18:43 UTC

svn commit: r1296827 - in /roller/trunk: weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/ weblogger-web/src/main/resources/ weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/ weblogger-webapp/src/main/webapp/theme/scripts/

Author: ghuber
Date: Sun Mar  4 16:18:43 2012
New Revision: 1296827

URL: http://svn.apache.org/viewvc?rev=1296827&view=rev
Log:
Some testing...

Modified:
    roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkAdd.java
    roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java
    roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java
    roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderAdd.java
    roller/trunk/weblogger-web/src/main/resources/ApplicationResources.properties
    roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp
    roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp
    roller/trunk/weblogger-webapp/src/main/webapp/theme/scripts/roller.js

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkAdd.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkAdd.java?rev=1296827&r1=1296826&r2=1296827&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkAdd.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/BookmarkAdd.java Sun Mar  4 16:18:43 2012
@@ -116,6 +116,9 @@ public class BookmarkAdd extends UIActio
             // TODO: i18n
             addMessage("bookmark added");
             
+            // Set for next action
+            getBean().setId(newBookmark.getId());
+            
             return SUCCESS;
             
         } catch(Exception ex) {

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java?rev=1296827&r1=1296826&r2=1296827&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Bookmarks.java Sun Mar  4 16:18:43 2012
@@ -36,271 +36,285 @@ import org.apache.roller.weblogger.pojos
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
 
-
 /**
- * List bookmarks and folders and allow for moving them around and deleting them.
+ * List bookmarks and folders and allow for moving them around and deleting
+ * them.
  */
 public class Bookmarks extends UIAction {
-    
-    private static Log log = LogFactory.getLog(Bookmarks.class);
-    
-    // the id of folder being viewed
-    private String folderId = null;
-    
-    // the folder being viewed
-    private WeblogBookmarkFolder folder = null;
-    
-    // the list of folders to move/delete
-    private String[] selectedFolders = null;
-    
-    // the list of bookmarks to move/delete
-    private String[] selectedBookmarks = null;
-    
-    // the target folder to move items to
-    private String targetFolderId = null;
-    
-    // all folders from the action weblog
-    private Set allFolders = Collections.EMPTY_SET;
-    
-    // path of folders representing selected folders hierarchy
-    private List folderPath = Collections.EMPTY_LIST;
-    
-    
-    public Bookmarks() {
-        this.actionName = "bookmarks";
-        this.desiredMenu = "editor";
-        this.pageTitle = "bookmarksForm.rootTitle";
-    }
-    
-    
-    // admin perms required
-    public List<String> requiredWeblogPermissionActions() {
-        return Collections.singletonList(WeblogPermission.ADMIN);
-    }
-    
-    
-    public void myPrepare() {
-        try {
-            BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
-            if(!StringUtils.isEmpty(getFolderId()) && 
-                    !"/".equals(getFolderId())) {
-                setFolder(bmgr.getFolder(getFolderId()));
-            } else {
-                setFolder(bmgr.getRootFolder(getActionWeblog()));
-            }
-        } catch (WebloggerException ex) {
-            log.error("Error looking up folder", ex);
-        }
-    }
-    
-    
-    /**
-     * Present the bookmarks and subfolders available in the folder specified
-     * by the request.
-     */
-    public String execute() {
-        
-        // build list of folders for display
-        TreeSet allFolders = new TreeSet(new FolderPathComparator());
-        
-        try {
-            // Build list of all folders, except for current one, sorted by path.
-            BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
-            List<WeblogBookmarkFolder> folders = bmgr.getAllFolders(getActionWeblog());
-            for(WeblogBookmarkFolder fd : folders) {
-                if (!fd.getId().equals(getFolderId())) {
-                    allFolders.add(fd);
-                }
-            }
-            
-            // build folder path
-            WeblogBookmarkFolder parent = getFolder().getParent();
-            if(parent != null) {
-                List folderPath = new LinkedList();
-                folderPath.add(0, getFolder());
-                while (parent != null) {
-                    folderPath.add(0, parent);
-                    parent = parent.getParent();
-                }
-                setFolderPath(folderPath);
-            }
-        } catch (WebloggerException ex) {
-            log.error("Error building folders list", ex);
-            // TODO: i18n
-            addError("Error building folders list");
-        }
-        
-        if (allFolders.size() > 0) {
-            setAllFolders(allFolders);
-        }
-
-        return LIST;
-    }
-    
-    
-    /**
-     * Delete folders and bookmarks.
-     */
-    public String delete() {
-        
-        BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
-        
-        log.debug("Deleting selected folders and bookmarks.");
-        
-        try {
-            String folders[] = getSelectedFolders();
-            if (null != folders) {
-                log.debug("Processing delete of "+folders.length+" folders.");
-                for (int i = 0; i < folders.length; i++) {
-                    log.debug("Deleting folder - "+folders[i]);
-                    WeblogBookmarkFolder fd = bmgr.getFolder(folders[i]);
-                    bmgr.removeFolder(fd); // removes child folders and bookmarks too
-                }
-            }
-            
-            WeblogBookmark bookmark = null;
-            String bookmarks[] = getSelectedBookmarks();
-            if (null != bookmarks) {
-                log.debug("Processing delete of "+bookmarks.length+" bookmarks.");
-                for (int j = 0; j < bookmarks.length; j++) {
-                    log.debug("Deleting bookmark - "+bookmarks[j]);
-                    bookmark = bmgr.getBookmark(bookmarks[j]);
-                    bmgr.removeBookmark(bookmark);
-                }
-            }
-            
-            // flush changes
-            WebloggerFactory.getWeblogger().flush();
-            
-            // notify caches
-            CacheManager.invalidate(getActionWeblog());
-            
-        } catch (WebloggerException ex) {
-            log.error("Error doing folder/bookmark deletes", ex);
-            // TODO: i18n
-            addError("Error doing folder/bookmark deletes");
-        }
-        
-        return execute();
-    }
-    
-    
-    /**
-     * Move folders and bookmarks to a new folder.
-     */
-    public String move() {
-        
-        try {
-            BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
-            
-            log.debug("Moving folders and bookmarks to folder - "+getTargetFolderId());
-            
-            // Move folders to new parent folder.
-            String folders[] = getSelectedFolders();
-            WeblogBookmarkFolder parent = bmgr.getFolder(getTargetFolderId());
-            if (null != folders) {
-                for (int i = 0; i < folders.length; i++) {
-                    WeblogBookmarkFolder fd = bmgr.getFolder(folders[i]);
-                    
-                    // Don't move folder into itself.
-                    if (!fd.getId().equals(parent.getId()) && 
-                            !parent.descendentOf(fd)) {
-                        bmgr.moveFolder(fd, parent);
-                    } else {
-                        addMessage("bookmarksForm.warn.notMoving", fd.getName());
-                    }
-                }
-            }
-            
-            // Move bookmarks to new parent folder.
-            String bookmarks[] = getSelectedBookmarks();
-            if (null != bookmarks) {
-                for (int j = 0; j < bookmarks.length; j++) {
-                    // maybe we should be using folder.addBookmark()?
-                    WeblogBookmark bd = bmgr.getBookmark(bookmarks[j]);
-                    bd.setFolder(parent);
-                    bmgr.saveBookmark(bd);
-                }
-            }
-            
-            // flush changes
-            WebloggerFactory.getWeblogger().flush();
-            
-            // notify caches
-            CacheManager.invalidate(getActionWeblog());
-            
-        } catch (WebloggerException e) {
-            log.error("Error doing folder/bookmark move", e);
-            addError("bookmarksForm.error.move");
-        }
-        
-        return execute();
-    }
-    
-    
-    private static final class FolderPathComparator implements Comparator {
-        public int compare(Object o1, Object o2) {
-            WeblogBookmarkFolder f1 = (WeblogBookmarkFolder)o1;
-            WeblogBookmarkFolder f2 = (WeblogBookmarkFolder)o2;
-            return f1.getPath().compareTo(f2.getPath());
-        }
-    }
-    
-
-    public String getFolderId() {
-        return folderId;
-    }
-
-    public void setFolderId(String folderId) {
-        this.folderId = folderId;
-    }
-
-    public String[] getSelectedFolders() {
-        return selectedFolders;
-    }
-
-    public void setSelectedFolders(String[] folders) {
-        this.selectedFolders = folders;
-    }
-
-    public String[] getSelectedBookmarks() {
-        return selectedBookmarks;
-    }
-
-    public void setSelectedBookmarks(String[] bookmarks) {
-        this.selectedBookmarks = bookmarks;
-    }
-
-    public String getTargetFolderId() {
-        return targetFolderId;
-    }
-
-    public void setTargetFolderId(String targetFolderId) {
-        this.targetFolderId = targetFolderId;
-    }
-
-    public Set getAllFolders() {
-        return allFolders;
-    }
-
-    public void setAllFolders(Set allFolders) {
-        this.allFolders = allFolders;
-    }
-
-    public WeblogBookmarkFolder getFolder() {
-        return folder;
-    }
-
-    public void setFolder(WeblogBookmarkFolder folder) {
-        this.folder = folder;
-    }
-
-    public List getFolderPath() {
-        return folderPath;
-    }
-
-    public void setFolderPath(List folderPath) {
-        this.folderPath = folderPath;
-    }
-    
+
+	private static Log log = LogFactory.getLog(Bookmarks.class);
+
+	// the id of folder being viewed
+	private String folderId = null;
+
+	// the folder being viewed
+	private WeblogBookmarkFolder folder = null;
+
+	// the list of folders to move/delete
+	private String[] selectedFolders = null;
+
+	// the list of bookmarks to move/delete
+	private String[] selectedBookmarks = null;
+
+	// the target folder to move items to
+	private String targetFolderId = null;
+
+	// all folders from the action weblog
+	private Set allFolders = Collections.EMPTY_SET;
+
+	// path of folders representing selected folders hierarchy
+	private List folderPath = Collections.EMPTY_LIST;
+
+	public Bookmarks() {
+		this.actionName = "bookmarks";
+		this.desiredMenu = "editor";
+		this.pageTitle = "bookmarksForm.rootTitle";
+	}
+
+	// admin perms required
+	public List<String> requiredWeblogPermissionActions() {
+		return Collections.singletonList(WeblogPermission.ADMIN);
+	}
+
+	public void myPrepare() {
+		try {
+			BookmarkManager bmgr = WebloggerFactory.getWeblogger()
+					.getBookmarkManager();
+			if (!StringUtils.isEmpty(getFolderId())
+					&& !"/".equals(getFolderId())) {
+				setFolder(bmgr.getFolder(getFolderId()));
+			} else {
+				setFolder(bmgr.getRootFolder(getActionWeblog()));
+			}
+		} catch (WebloggerException ex) {
+			log.error("Error looking up folder", ex);
+		}
+	}
+
+	/**
+	 * Present the bookmarks and subfolders available in the folder specified by
+	 * the request.
+	 */
+	public String execute() {
+
+		// build list of folders for display
+		TreeSet allFolders = new TreeSet(new FolderPathComparator());
+
+		try {
+			// Build list of all folders, except for current one, sorted by
+			// path.
+			BookmarkManager bmgr = WebloggerFactory.getWeblogger()
+					.getBookmarkManager();
+			List<WeblogBookmarkFolder> folders = bmgr
+					.getAllFolders(getActionWeblog());
+			for (WeblogBookmarkFolder fd : folders) {
+				if (getFolderId() == null && fd.getParent() == null) {
+					// Root folder so do not show the root /
+				} else if (!fd.getId().equals(getFolderId())) {
+					allFolders.add(fd);
+				}
+			}
+
+			// build folder path
+			WeblogBookmarkFolder parent = getFolder().getParent();
+			if (parent != null) {
+				List folderPath = new LinkedList();
+				folderPath.add(0, getFolder());
+				while (parent != null) {
+					folderPath.add(0, parent);
+					parent = parent.getParent();
+				}
+				setFolderPath(folderPath);
+			}
+		} catch (WebloggerException ex) {
+			log.error("Error building folders list", ex);
+			// TODO: i18n
+			addError("Error building folders list");
+		}
+
+		if (allFolders.size() > 0) {
+			setAllFolders(allFolders);
+		}
+
+		return LIST;
+	}
+
+	/**
+	 * Delete folders and bookmarks.
+	 */
+	public String delete() {
+
+		BookmarkManager bmgr = WebloggerFactory.getWeblogger()
+				.getBookmarkManager();
+
+		log.debug("Deleting selected folders and bookmarks.");
+
+		try {
+			String folders[] = getSelectedFolders();
+			if (null != folders && folders.length > 0) {
+				if (log.isDebugEnabled())
+					log.debug("Processing delete of " + folders.length
+							+ " folders.");
+				for (int i = 0; i < folders.length; i++) {
+					if (log.isDebugEnabled())
+						log.debug("Deleting folder - " + folders[i]);
+					WeblogBookmarkFolder fd = bmgr.getFolder(folders[i]);
+					if (fd != null) {
+						bmgr.removeFolder(fd); // removes child folders and
+						// bookmarks too
+					}
+				}
+			}
+
+			WeblogBookmark bookmark = null;
+			String bookmarks[] = getSelectedBookmarks();
+			if (null != bookmarks && bookmarks.length > 0) {
+				if (log.isDebugEnabled())
+					log.debug("Processing delete of " + bookmarks.length
+							+ " bookmarks.");
+				for (int j = 0; j < bookmarks.length; j++) {
+					if (log.isDebugEnabled())
+						log.debug("Deleting bookmark - " + bookmarks[j]);
+					bookmark = bmgr.getBookmark(bookmarks[j]);
+					if (bookmark != null) {
+						bmgr.removeBookmark(bookmark);
+					}
+
+				}
+			}
+
+			// flush changes
+			WebloggerFactory.getWeblogger().flush();
+
+			// notify caches
+			CacheManager.invalidate(getActionWeblog());
+
+		} catch (WebloggerException ex) {
+			log.error("Error doing folder/bookmark deletes", ex);
+			// TODO: i18n
+			addError("Error doing folder/bookmark deletes");
+		}
+
+		return execute();
+	}
+
+	/**
+	 * Move folders and bookmarks to a new folder.
+	 */
+	public String move() {
+
+		try {
+			BookmarkManager bmgr = WebloggerFactory.getWeblogger()
+					.getBookmarkManager();
+
+			if (log.isDebugEnabled())
+				log.debug("Moving folders and bookmarks to folder - "
+						+ getTargetFolderId());
+
+			// Move folders to new parent folder.
+			String folders[] = getSelectedFolders();
+			WeblogBookmarkFolder parent = bmgr.getFolder(getTargetFolderId());
+			if (null != folders && folders.length > 0) {
+				for (int i = 0; i < folders.length; i++) {
+					WeblogBookmarkFolder fd = bmgr.getFolder(folders[i]);
+
+					// Don't move folder into itself.
+					if (!fd.getId().equals(parent.getId())
+							&& !parent.descendentOf(fd)) {
+						bmgr.moveFolder(fd, parent);
+					} else {
+						addMessage("bookmarksForm.warn.notMoving", fd.getName());
+					}
+				}
+			}
+
+			// Move bookmarks to new parent folder.
+			String bookmarks[] = getSelectedBookmarks();
+			if (null != bookmarks && bookmarks.length > 0) {
+				for (int j = 0; j < bookmarks.length; j++) {
+					// maybe we should be using folder.addBookmark()?
+					WeblogBookmark bd = bmgr.getBookmark(bookmarks[j]);
+					bd.setFolder(parent);
+					bmgr.saveBookmark(bd);
+				}
+			}
+
+			// flush changes
+			WebloggerFactory.getWeblogger().flush();
+
+			// notify caches
+			CacheManager.invalidate(getActionWeblog());
+
+		} catch (WebloggerException e) {
+			log.error("Error doing folder/bookmark move", e);
+			addError("bookmarksForm.error.move");
+		}
+
+		return execute();
+	}
+
+	private static final class FolderPathComparator implements Comparator {
+		public int compare(Object o1, Object o2) {
+			WeblogBookmarkFolder f1 = (WeblogBookmarkFolder) o1;
+			WeblogBookmarkFolder f2 = (WeblogBookmarkFolder) o2;
+			return f1.getPath().compareTo(f2.getPath());
+		}
+	}
+
+	public String getFolderId() {
+		return folderId;
+	}
+
+	public void setFolderId(String folderId) {
+		this.folderId = folderId;
+	}
+
+	public String[] getSelectedFolders() {
+		return selectedFolders;
+	}
+
+	public void setSelectedFolders(String[] folders) {
+		this.selectedFolders = folders;
+	}
+
+	public String[] getSelectedBookmarks() {
+		return selectedBookmarks;
+	}
+
+	public void setSelectedBookmarks(String[] bookmarks) {
+		this.selectedBookmarks = bookmarks;
+	}
+
+	public String getTargetFolderId() {
+		return targetFolderId;
+	}
+
+	public void setTargetFolderId(String targetFolderId) {
+		this.targetFolderId = targetFolderId;
+	}
+
+	public Set getAllFolders() {
+		return allFolders;
+	}
+
+	public void setAllFolders(Set allFolders) {
+		this.allFolders = allFolders;
+	}
+
+	public WeblogBookmarkFolder getFolder() {
+		return folder;
+	}
+
+	public void setFolder(WeblogBookmarkFolder folder) {
+		this.folder = folder;
+	}
+
+	public List getFolderPath() {
+		return folderPath;
+	}
+
+	public void setFolderPath(List folderPath) {
+		this.folderPath = folderPath;
+	}
+
 }

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java?rev=1296827&r1=1296826&r2=1296827&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/Categories.java Sun Mar  4 16:18:43 2012
@@ -34,184 +34,186 @@ import org.apache.roller.weblogger.pojos
 import org.apache.roller.weblogger.pojos.WeblogPermission;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 
-
 /**
  * Manage weblog categories.
  */
 public class Categories extends UIAction {
-    
-    private static Log log = LogFactory.getLog(Categories.class);
-    
-    // the id of the category we are viewing
-    private String categoryId = null;
-    
-    // the category we are viewing
-    private WeblogCategory category = null;
-    
-    // list of category ids to move
-    private String[] selectedCategories = null;
-    
-    // category id of the category to move to
-    private String targetCategoryId = null;
-    
-    // all categories from the action weblog
-    private Set allCategories = Collections.EMPTY_SET;
-    
-    // path of categories representing selected categories hierarchy
-    private List categoryPath = Collections.EMPTY_LIST;
-    
-    
-    public Categories() {
-        this.actionName = "categories";
-        this.desiredMenu = "editor";
-        this.pageTitle = "categoriesForm.rootTitle";
-    }
-    
-    
-    // author perms required
-    public List<String> requiredWeblogPermissionActions() {
-        return Collections.singletonList(WeblogPermission.POST);
-    }
-    
-    
-    public void myPrepare() {
-        try {
-            WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-            if(!StringUtils.isEmpty(getCategoryId()) && 
-                    !"/".equals(getCategoryId())) {
-                setCategory(wmgr.getWeblogCategory(getCategoryId()));
-            } else {
-                setCategory(wmgr.getRootWeblogCategory(getActionWeblog()));
-            }
-        } catch (WebloggerException ex) {
-            log.error("Error looking up category", ex);
-        }
-    }
-    
-    
-    public String execute() {
-        
-        // build list of categories for display
-        TreeSet allCategories = new TreeSet(new WeblogCategoryPathComparator());
-        
-        try {
-            // Build list of all categories, except for current one, sorted by path.
-            WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-            List<WeblogCategory> cats = wmgr.getWeblogCategories(getActionWeblog(), true);
-            for(WeblogCategory cat : cats) {
-                if (!cat.getId().equals(getCategoryId())) {
-                    allCategories.add(cat);
-                }
-            }
-            
-            // build category path
-            WeblogCategory parent = getCategory().getParent();
-            if(parent != null) {
-                List categoryPath = new LinkedList();
-                categoryPath.add(0, getCategory());
-                while (parent != null) {
-                    categoryPath.add(0, parent);
-                    parent = parent.getParent();
-                }
-                setCategoryPath(categoryPath);
-            }
-        } catch (WebloggerException ex) {
-            log.error("Error building categories list", ex);
-            // TODO: i18n
-            addError("Error building categories list");
-        }
-        
-        if (allCategories.size() > 0) {
-            setAllCategories(allCategories);
-        }
-        
-        return LIST;
-    }
-    
-    
-    public String move() {
-        
-        try {
-            WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-            
-            log.debug("Moving categories to category - "+getTargetCategoryId());
-            
-            // Move subCategories to new category.
-            String[] cats = getSelectedCategories();
-            WeblogCategory parent = wmgr.getWeblogCategory(getTargetCategoryId());
-            if(cats != null) {
-                for (int i = 0; i < cats.length; i++) {
-                    WeblogCategory cd =
-                            wmgr.getWeblogCategory(cats[i]);
-                    
-                    // Don't move category into itself.
-                    if (!cd.getId().equals(parent.getId()) && 
-                            !parent.descendentOf(cd)) {
-                        wmgr.moveWeblogCategory(cd, parent);
-                    } else {
-                        addMessage("categoriesForm.warn.notMoving", cd.getName());
-                    }
-                }
-                
-                // flush changes
-                WebloggerFactory.getWeblogger().flush();
-            }
-            
-        } catch (WebloggerException ex) {
-            log.error("Error moving categories", ex);
-            addError("categoriesForm.error.move");
-        }
-        
-        return execute();
-    }
-    
-
-    public String getCategoryId() {
-        return categoryId;
-    }
-
-    public void setCategoryId(String categoryId) {
-        this.categoryId = categoryId;
-    }
-
-    public WeblogCategory getCategory() {
-        return category;
-    }
-
-    public void setCategory(WeblogCategory category) {
-        this.category = category;
-    }
-
-    public String[] getSelectedCategories() {
-        return selectedCategories;
-    }
-
-    public void setSelectedCategories(String[] selectedCategories) {
-        this.selectedCategories = selectedCategories;
-    }
-
-    public String getTargetCategoryId() {
-        return targetCategoryId;
-    }
-
-    public void setTargetCategoryId(String targetCategoryId) {
-        this.targetCategoryId = targetCategoryId;
-    }
-
-    public Set getAllCategories() {
-        return allCategories;
-    }
-
-    public void setAllCategories(Set allCategories) {
-        this.allCategories = allCategories;
-    }
-
-    public List getCategoryPath() {
-        return categoryPath;
-    }
-
-    public void setCategoryPath(List categoryPath) {
-        this.categoryPath = categoryPath;
-    }
-    
+
+	private static Log log = LogFactory.getLog(Categories.class);
+
+	// the id of the category we are viewing
+	private String categoryId = null;
+
+	// the category we are viewing
+	private WeblogCategory category = null;
+
+	// list of category ids to move
+	private String[] selectedCategories = null;
+
+	// category id of the category to move to
+	private String targetCategoryId = null;
+
+	// all categories from the action weblog
+	private Set allCategories = Collections.EMPTY_SET;
+
+	// path of categories representing selected categories hierarchy
+	private List categoryPath = Collections.EMPTY_LIST;
+
+	public Categories() {
+		this.actionName = "categories";
+		this.desiredMenu = "editor";
+		this.pageTitle = "categoriesForm.rootTitle";
+	}
+
+	// author perms required
+	public List<String> requiredWeblogPermissionActions() {
+		return Collections.singletonList(WeblogPermission.POST);
+	}
+
+	public void myPrepare() {
+		try {
+			WeblogEntryManager wmgr = WebloggerFactory.getWeblogger()
+					.getWeblogEntryManager();
+			if (!StringUtils.isEmpty(getCategoryId())
+					&& !"/".equals(getCategoryId())) {
+				setCategory(wmgr.getWeblogCategory(getCategoryId()));
+			} else {
+				setCategory(wmgr.getRootWeblogCategory(getActionWeblog()));
+			}
+		} catch (WebloggerException ex) {
+			log.error("Error looking up category", ex);
+		}
+	}
+
+	public String execute() {
+
+		// build list of categories for display
+		TreeSet allCategories = new TreeSet(new WeblogCategoryPathComparator());
+
+		try {
+			// Build list of all categories, except for current one, sorted by
+			// path.
+			WeblogEntryManager wmgr = WebloggerFactory.getWeblogger()
+					.getWeblogEntryManager();
+			List<WeblogCategory> cats = wmgr.getWeblogCategories(
+					getActionWeblog(), true);
+			for (WeblogCategory cat : cats) {
+				if (getCategoryId() == null && cat.getParent() == null) {
+					// Root folder so do not show the root /
+				} else if (!cat.getId().equals(getCategoryId())) {
+					allCategories.add(cat);
+				}
+			}
+
+			// build category path
+			WeblogCategory parent = getCategory().getParent();
+			if (parent != null) {
+				List categoryPath = new LinkedList();
+				categoryPath.add(0, getCategory());
+				while (parent != null) {
+					categoryPath.add(0, parent);
+					parent = parent.getParent();
+				}
+				setCategoryPath(categoryPath);
+			}
+		} catch (WebloggerException ex) {
+			log.error("Error building categories list", ex);
+			// TODO: i18n
+			addError("Error building categories list");
+		}
+
+		if (allCategories.size() > 0) {
+			setAllCategories(allCategories);
+		}
+
+		return LIST;
+	}
+
+	public String move() {
+
+		try {
+			WeblogEntryManager wmgr = WebloggerFactory.getWeblogger()
+					.getWeblogEntryManager();
+
+			log.debug("Moving categories to category - "
+					+ getTargetCategoryId());
+
+			// Move subCategories to new category.
+			String[] cats = getSelectedCategories();
+			WeblogCategory parent = wmgr
+					.getWeblogCategory(getTargetCategoryId());
+			if (cats != null) {
+				for (int i = 0; i < cats.length; i++) {
+					WeblogCategory cd = wmgr.getWeblogCategory(cats[i]);
+
+					// Don't move category into itself.
+					if (!cd.getId().equals(parent.getId())
+							&& !parent.descendentOf(cd)) {
+						wmgr.moveWeblogCategory(cd, parent);
+					} else {
+						addMessage("categoriesForm.warn.notMoving",
+								cd.getName());
+					}
+				}
+
+				// flush changes
+				WebloggerFactory.getWeblogger().flush();
+			}
+
+		} catch (WebloggerException ex) {
+			log.error("Error moving categories", ex);
+			addError("categoriesForm.error.move");
+		}
+
+		return execute();
+	}
+
+	public String getCategoryId() {
+		return categoryId;
+	}
+
+	public void setCategoryId(String categoryId) {
+		this.categoryId = categoryId;
+	}
+
+	public WeblogCategory getCategory() {
+		return category;
+	}
+
+	public void setCategory(WeblogCategory category) {
+		this.category = category;
+	}
+
+	public String[] getSelectedCategories() {
+		return selectedCategories;
+	}
+
+	public void setSelectedCategories(String[] selectedCategories) {
+		this.selectedCategories = selectedCategories;
+	}
+
+	public String getTargetCategoryId() {
+		return targetCategoryId;
+	}
+
+	public void setTargetCategoryId(String targetCategoryId) {
+		this.targetCategoryId = targetCategoryId;
+	}
+
+	public Set getAllCategories() {
+		return allCategories;
+	}
+
+	public void setAllCategories(Set allCategories) {
+		this.allCategories = allCategories;
+	}
+
+	public List getCategoryPath() {
+		return categoryPath;
+	}
+
+	public void setCategoryPath(List categoryPath) {
+		this.categoryPath = categoryPath;
+	}
+
 }

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderAdd.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderAdd.java?rev=1296827&r1=1296826&r2=1296827&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderAdd.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/FolderAdd.java Sun Mar  4 16:18:43 2012
@@ -120,6 +120,9 @@ public class FolderAdd extends UIAction 
             // TODO: i18n
             addMessage("folder added");
             
+            // Set for next action
+            getBean().setId(newFolder.getId());
+            
             return SUCCESS;
             
         } catch(Exception ex) {

Modified: roller/trunk/weblogger-web/src/main/resources/ApplicationResources.properties
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/resources/ApplicationResources.properties?rev=1296827&r1=1296826&r2=1296827&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/resources/ApplicationResources.properties (original)
+++ roller/trunk/weblogger-web/src/main/resources/ApplicationResources.properties Sun Mar  4 16:18:43 2012
@@ -92,7 +92,7 @@ bookmarksForm.folder=Bookmark Folder
 bookmarksForm.priority=Priority
 bookmarksForm.edit=Edit
 bookmarksForm.edit.tip=Click to edit this folder or bookmark
-bookmarksForm.move=Move selected
+bookmarksForm.move=Move
 bookmarksForm.move.confirm=Move selected bookmarks?
 bookmarksForm.name=Name
 bookmarksForm.path=Path
@@ -103,6 +103,7 @@ bookmarksForm.warn.notMoving=Can''t move
 children 
 bookmarksForm.error.move=Error performing move, parent to child moves not allowed
 bookmarksForm.importBookmarks=Import bookmarks via OPML
+bookmarksForm.noresults=There are currently no folders or bookmarks
 
 # --------------------------------------------------------- Bookmarks import.jsp
 
@@ -155,6 +156,7 @@ Category.error.nameNull=Name is a requir
 Category.error.nameSize=Name cannot be more than 255 characters
 Category.error.descriptionSize=Description cannot be more than 255 characters
 Category.error.imageBad=The image url you entered is not valid
+categoriesForm.noresults=There are currently no categories
 
 
 # ----------------------------------------------------------- CategoriesForm.jsp

Modified: roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp?rev=1296827&r1=1296826&r2=1296827&view=diff
==============================================================================
--- roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp (original)
+++ roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Bookmarks.jsp Sun Mar  4 16:18:43 2012
@@ -19,16 +19,7 @@
 
 <%-- JavaScript for bookmarks table --%> 
 <script type="text/javascript">
-<!-- 
-function setChecked(val) 
-{
-    len = document.bookmarks.elements.length;
-    var i=0;
-    for( i=0 ; i<len ; i++) 
-    {
-        document.bookmarks.elements[i].checked=val;
-    }
-}
+// <!-- 
 function onDelete() 
 {
     if ( confirm("<s:text name='bookmarksForm.delete.confirm' />") ) 
@@ -45,7 +36,7 @@ function onMove() 
         document.bookmarks.submit();
     }
 }
-//-->
+// -->
 </script>
 
 <s:if test="folderPath.isEmpty">
@@ -79,29 +70,21 @@ function onMove() 
     <s:hidden name="weblog" />
     <s:hidden name="folderId" /> 
     
-    <%-- Select-all button --%>
-    <input type="button" value="<s:text name="bookmarksForm.checkAll"/>" onclick="setChecked(1)" />
-    
-    <%-- Select-none button --%>
-    <input type="button" value="<s:text name="bookmarksForm.checkNone"/>" onclick="setChecked(0)" />
-    
-    <%-- Delete-selected button --%>
-    <input type="button" value="<s:text name="bookmarksForm.delete"/>" onclick="onDelete()" /> 
-    
-    <s:if test="!allFolders.isEmpty">
+    <s:if test="!allFolders.isEmpty && ( folder.folders.size > 0 || folder.bookmarks.size > 0)">
+        
         <%-- Move-selected button --%>
-        <s:submit type="button" action="bookmarks!move" key="bookmarksForm.move" onclick="onMove()" />
+        <s:submit type="button" action="bookmarks!move" key="bookmarksForm.move" onclick="onMove();return false;" />
         
         <%-- Move-to combo-box --%>
         <s:select name="targetFolderId" list="allFolders" listKey="id" listValue="path" />
+        
+        <br /><br />
+        
     </s:if>
-    
-    <p />
-    
     <table class="rollertable">
-        
+    
         <tr class="rHeaderTr">
-            <th class="rollertable" width="5%">&nbsp;</th>
+            <th class="rollertable" width="5%"><input name="control" type="checkbox" onclick="toggleFunctionAll(this.checked);"/></th>
             <th class="rollertable" width="5%">&nbsp;</th>
             <th class="rollertable" width="30%"><s:text name="bookmarksForm.name" /></th>
             <th class="rollertable" width="45%"><s:text name="bookmarksForm.description" /></th>
@@ -110,6 +93,8 @@ function onMove() 
             <th class="rollertable" width="5%"><s:text name="bookmarksForm.visitLink" /></th>
         </tr>
         
+        <s:if test="folder.folders.size > 0 || folder.bookmarks.size > 0">
+        
         <%-- Folders --%>
         <s:iterator id="folder" value="folder.folders" status="rowstatus">
             <s:if test="#rowstatus.odd == true">
@@ -119,7 +104,7 @@ function onMove() 
                 <tr class="rollertable_even">
             </s:else>
                 
-                <td class="rollertable">
+                <td class="rollertable center" style="vertical-align:middle">
                     <input type="checkbox" name="selectedFolders" value="<s:property value="#folder.id"/>" />
                 </td>
                 
@@ -161,7 +146,7 @@ function onMove() 
                 <tr class="rollertable_even">
             </s:else>
                 
-                <td class="rollertable">
+                <td class="rollertable center" style="vertical-align:middle">
                     <input type="checkbox" name="selectedBookmarks" value="<s:property value="#bookmark.id"/>" />
                 </td>
                 
@@ -200,6 +185,19 @@ function onMove() 
             </tr>
         </s:iterator>
         
+        </s:if>
+        <s:else>
+            <tr>
+                <td style="vertical-align:middle" colspan="7"><s:text name="bookmarksForm.noresults" /></td>
+            </tr>
+        </s:else>
     </table>
     
+    <s:if test="folder.folders.size > 0 || folder.bookmarks.size > 0">
+        <div class="control">
+            <%-- Delete-selected button --%>
+            <input type="button" value="<s:text name="bookmarksForm.delete"/>" onclick="onDelete()" /> 
+        </div>
+    </s:if>
+
 </s:form>

Modified: roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp?rev=1296827&r1=1296826&r2=1296827&view=diff
==============================================================================
--- roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp (original)
+++ roller/trunk/weblogger-webapp/src/main/webapp/WEB-INF/jsps/editor/Categories.jsp Sun Mar  4 16:18:43 2012
@@ -19,17 +19,8 @@
 
 <%-- JavaScript for categories table --%> 
 <script type="text/javascript">
-<!-- 
-function setChecked(val) 
-{
-    len = document.categories.elements.length;
-    var i=0;
-    for( i=0 ; i<len ; i++) 
-    {
-        document.categories.elements[i].checked=val;
-    }
-}
-function onMove() 
+// <!-- 
+function onMove()
 {
     if ( confirm("<s:text name='categoriesForm.move.confirm' />") ) 
     {
@@ -71,33 +62,31 @@ function onMove() 
     <s:hidden name="weblog" />
     <s:hidden name="categoryId" /> 
     
-    <%-- Select-all button --%>
-    <input type="button" value="<s:text name='categoriesForm.checkAll' />" onclick="setChecked(1)" /></input>
-    
-    <%-- Select-none button --%>
-    <input type="button" value="<s:text name='categoriesForm.checkNone' />" onclick="setChecked(0)" /></input>
+    <s:if test="!allCategories.isEmpty">
     
-    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        <%-- Move-selected button --%>
+        <s:submit value="%{getText('categoriesForm.move')}" onclick="onMove();return false;" />
     
-    <%-- Move-selected button --%>
-    <s:submit value="%{getText('categoriesForm.move')}" onclick="onMove()" />
+        <%-- Move-to combo-box --%>
+        <s:select name="targetCategoryId" list="allCategories" listKey="id" listValue="path" />
     
-    <%-- Move-to combo-box --%>
-    <s:select name="targetCategoryId" list="allCategories" listKey="id" listValue="path" />
+        <br /><br />
     
-    <p />
+    </s:if>
     
     <table class="rollertable">
         
         <tr class="rollertable">
-            <th class="rollertable" width="5%">&nbsp;</td>
-            <th class="rollertable" width="5%">&nbsp;</td>
-            <th class="rollertable" width="30%"><s:text name="categoriesForm.name" /></td>
-            <th class="rollertable" width="45%"><s:text name="categoriesForm.description" /></td>
-            <th class="rollertable" width="5%"><s:text name="categoriesForm.edit" /></td>
-            <th class="rollertable" width="5%"><s:text name="categoriesForm.remove" /></td>
+            <th class="rollertable" width="5%"><input type="checkbox" name="control" onclick="toggleFunctionAll(this.checked);"/></th>
+            <th class="rollertable" width="5%">&nbsp;</th>
+            <th class="rollertable" width="30%"><s:text name="categoriesForm.name" /></th>
+            <th class="rollertable" width="45%"><s:text name="categoriesForm.description" /></th>
+            <th class="rollertable" width="5%"><s:text name="categoriesForm.edit" /></th>
+            <th class="rollertable" width="5%"><s:text name="categoriesForm.remove" /></th>
         </tr>
         
+        <s:if test="AllCategories != null && !AllCategories.isEmpty">
+        
         <%-- Categories --%>
         <s:iterator id="category" value="category.weblogCategories" status="rowstatus">
             <s:if test="#rowstatus.odd == true">
@@ -107,7 +96,7 @@ function onMove() 
                 <tr class="rollertable_even">
             </s:else>
             
-                <td class="rollertable">
+                <td class="rollertable center" style="vertical-align:middle">
                     <input type="checkbox" name="selectedCategories" value="<s:property value="#category.id"/>" />
                 </td>
                 
@@ -144,6 +133,13 @@ function onMove() 
             </tr>
         </s:iterator>
         
+        </s:if>
+        <s:else>
+            <tr>
+                <td style="vertical-align:middle" colspan="6"><s:text name="categoriesForm.noresults" /></td>
+            </tr>
+        </s:else>
+        
     </table>
     
 </s:form>

Modified: roller/trunk/weblogger-webapp/src/main/webapp/theme/scripts/roller.js
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-webapp/src/main/webapp/theme/scripts/roller.js?rev=1296827&r1=1296826&r2=1296827&view=diff
==============================================================================
--- roller/trunk/weblogger-webapp/src/main/webapp/theme/scripts/roller.js (original)
+++ roller/trunk/weblogger-webapp/src/main/webapp/theme/scripts/roller.js Sun Mar  4 16:18:43 2012
@@ -180,11 +180,23 @@ function isblank(s) {
 window.defaultStatus=document.title;
 
 // Toggle check boxes
+function toggleFunctionAll(toggle) {
+	var inputs = document.getElementsByTagName('input');
+	for(var i = 0; i < inputs.length ; i++) {
+		if(inputs[i].name != "control" && inputs[i].type == 'checkbox' && inputs[i].disabled == false ) {
+			if (inputs[i].checked == true){
+				inputs[i].checked = !inputs[i].checked;
+			} else{
+				inputs[i].checked = toggle;
+			}
+		}
+	}
+}
 function toggleFunction(toggle,name) {;
 	var inputs = document.getElementsByName(name);
 	for(var i = 0; i < inputs.length ; i++) {
 		if(inputs[i].type == 'checkbox' && inputs[i].disabled == false) {
-			if (inputs[i].checked==true){
+			if (inputs[i].checked == true){
 				inputs[i].checked = !inputs[i].checked;
 			} else{
 				inputs[i].checked = toggle;