Package org.apache.roller.weblogger.ui.struts2.editor

Source Code of org.apache.roller.weblogger.ui.struts2.editor.Bookmarks

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  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.  For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/

package org.apache.roller.weblogger.ui.struts2.editor;

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.BookmarkManager;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.pojos.WeblogBookmark;
import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
import org.apache.roller.weblogger.pojos.WeblogPermission;
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.
*/
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;
    }
   
}
TOP

Related Classes of org.apache.roller.weblogger.ui.struts2.editor.Bookmarks

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.