File Source: Bookmarks.java

         /* 
    P/P   *  Method: org.apache.roller.weblogger.ui.struts2.editor.Bookmarks$FolderPathComparator__static_init
          */
     1  /*
     2   * Licensed to the Apache Software Foundation (ASF) under one or more
     3   *  contributor license agreements.  The ASF licenses this file to You
     4   * under the Apache License, Version 2.0 (the "License"); you may not
     5   * use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.  For additional information regarding
    15   * copyright in this work, please see the NOTICE file in the top level
    16   * directory of this distribution.
    17   */
    18  
    19  package org.apache.roller.weblogger.ui.struts2.editor;
    20  
    21  import java.util.Collections;
    22  import java.util.Comparator;
    23  import java.util.LinkedList;
    24  import java.util.List;
    25  import java.util.Set;
    26  import java.util.TreeSet;
    27  import org.apache.commons.lang.StringUtils;
    28  import org.apache.commons.logging.Log;
    29  import org.apache.commons.logging.LogFactory;
    30  import org.apache.roller.weblogger.WebloggerException;
    31  import org.apache.roller.weblogger.business.BookmarkManager;
    32  import org.apache.roller.weblogger.business.WebloggerFactory;
    33  import org.apache.roller.weblogger.pojos.WeblogBookmark;
    34  import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
    35  import org.apache.roller.weblogger.pojos.WeblogPermission;
    36  import org.apache.roller.weblogger.ui.struts2.util.UIAction;
    37  import org.apache.roller.weblogger.util.cache.CacheManager;
    38  
    39  
    40  /**
    41   * List bookmarks and folders and allow for moving them around and deleting them.
    42   */
    43  public class Bookmarks extends UIAction {
    44      
             /* 
    P/P       *  Method: org.apache.roller.weblogger.ui.struts2.editor.Bookmarks__static_init
              * 
              *  Postconditions:
              *    init'ed(log)
              */
    45      private static Log log = LogFactory.getLog(Bookmarks.class);
    46      
    47      // the id of folder being viewed
    48      private String folderId = null;
    49      
    50      // the folder being viewed
    51      private WeblogBookmarkFolder folder = null;
    52      
    53      // the list of folders to move/delete
    54      private String[] selectedFolders = null;
    55      
    56      // the list of bookmarks to move/delete
    57      private String[] selectedBookmarks = null;
    58      
    59      // the target folder to move items to
    60      private String targetFolderId = null;
    61      
    62      // all folders from the action weblog
    63      private Set allFolders = Collections.EMPTY_SET;
    64      
    65      // path of folders representing selected folders hierarchy
    66      private List folderPath = Collections.EMPTY_LIST;
    67      
    68      
             /* 
    P/P       *  Method: void org.apache.roller.weblogger.ui.struts2.editor.Bookmarks()
              * 
              *  Presumptions:
              *    init'ed(java.util.Collections.EMPTY_LIST)
              *    init'ed(java.util.Collections.EMPTY_SET)
              * 
              *  Postconditions:
              *    this.actionName == &"bookmarks"
              *    this.allFolders == java.util.Collections.EMPTY_SET
              *    (soft) init'ed(this.allFolders)
              *    this.desiredMenu == &"editor"
              *    this.folder == null
              *    this.folderId == null
              *    this.selectedBookmarks == null
              *    this.selectedFolders == null
              *    this.targetFolderId == null
              *    this.folderPath == java.util.Collections.EMPTY_LIST
              *    ...
              */
    69      public Bookmarks() {
    70          this.actionName = "bookmarks";
    71          this.desiredMenu = "editor";
    72          this.pageTitle = "bookmarksForm.rootTitle";
    73      }
    74      
    75      
    76      // admin perms required
    77      public short requiredWeblogPermissions() {
                 /* 
    P/P           *  Method: short requiredWeblogPermissions()
                  * 
                  *  Presumptions:
                  *    init'ed(org.apache.roller.weblogger.pojos.WeblogPermission.ADMIN)
                  * 
                  *  Postconditions:
                  *    return_value == org.apache.roller.weblogger.pojos.WeblogPermission.ADMIN
                  *    (soft) init'ed(return_value)
                  */
    78          return WeblogPermission.ADMIN;
    79      }
    80      
    81      
    82      public void myPrepare() {
    83          try {
                     /* 
    P/P               *  Method: void myPrepare()
                      * 
                      *  Preconditions:
                      *    (soft) log != null
                      *    (soft) init'ed(this.folderId)
                      * 
                      *  Presumptions:
                      *    org.apache.roller.weblogger.business.Weblogger:getBookmarkManager(...)@84 != null
                      *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@84 != null
                      * 
                      *  Postconditions:
                      *    possibly_updated(this.folder)
                      * 
                      *  Test Vectors:
                      *    java.lang.String:equals(...)@85: {1}, {0}
                      *    org.apache.commons.lang.StringUtils:isEmpty(...)@85: {1}, {0}
                      */
    84              BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
    85              if(!StringUtils.isEmpty(getFolderId()) && 
    86                      !"/".equals(getFolderId())) {
    87                  setFolder(bmgr.getFolder(getFolderId()));
    88              } else {
    89                  setFolder(bmgr.getRootFolder(getActionWeblog()));
    90              }
    91          } catch (WebloggerException ex) {
    92              log.error("Error looking up folder", ex);
    93          }
    94      }
    95      
    96      
    97      /**
    98       * Present the bookmarks and subfolders available in the folder specified
    99       * by the request.
   100       */
   101      public String execute() {
   102          
   103          // build list of folders for display
                 /* 
    P/P           *  Method: String execute()
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  *    (soft) this.folder != null
                  *    (soft) init'ed(this.folderId)
                  * 
                  *  Presumptions:
                  *    java.util.Iterator:next(...)@110 != null
                  *    org.apache.roller.weblogger.business.BookmarkManager:getAllFolders(...)@109 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getBookmarkManager(...)@108 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@108 != null
                  *    org.apache.roller.weblogger.pojos.WeblogBookmarkFolder:getId(...)@111 != null
                  * 
                  *  Postconditions:
                  *    return_value == &"list"
                  *    this.allFolders == One-of{old this.allFolders, &new TreeSet(execute#1)}
                  *    this.folderPath == One-of{old this.folderPath, &new LinkedList(execute#3)}
                  *    new LinkedList(execute#3) num objects <= 1
                  *    new TreeSet(execute#1) num objects == 1
                  * 
                  *  Test Vectors:
                  *    java.lang.String:equals(...)@111: {1}, {0}
                  *    java.util.Iterator:hasNext(...)@110: {0}, {1}
                  *    java.util.TreeSet:size(...)@133: {-231..0}, {1..232-1}
                  *    org.apache.roller.weblogger.pojos.WeblogBookmarkFolder:getParent(...)@117: Addr_Set{null}, Inverse{null}
                  */
   104          TreeSet allFolders = new TreeSet(new FolderPathComparator());
   105          
   106          try {
   107              // Build list of all folders, except for current one, sorted by path.
   108              BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
   109              List<WeblogBookmarkFolder> folders = bmgr.getAllFolders(getActionWeblog());
   110              for(WeblogBookmarkFolder fd : folders) {
   111                  if (!fd.getId().equals(getFolderId())) {
   112                      allFolders.add(fd);
   113                  }
   114              }
   115              
   116              // build folder path
   117              WeblogBookmarkFolder parent = getFolder().getParent();
   118              if(parent != null) {
   119                  List folderPath = new LinkedList();
   120                  folderPath.add(0, getFolder());
   121                  while (parent != null) {
   122                      folderPath.add(0, parent);
   123                      parent = parent.getParent();
   124                  }
   125                  setFolderPath(folderPath);
   126              }
   127          } catch (WebloggerException ex) {
   128              log.error("Error building folders list", ex);
   129              // TODO: i18n
   130              addError("Error building folders list");
   131          }
   132          
   133          if (allFolders.size() > 0) {
   134              setAllFolders(allFolders);
   135          }
   136  
   137          return LIST;
   138      }
   139      
   140      
   141      /**
   142       * Delete folders and bookmarks.
   143       */
   144      public String delete() {
   145          
                 /* 
    P/P           *  Method: String delete()
                  * 
                  *  Preconditions:
                  *    log != null
                  *    (soft) this.folder != null
                  *    (soft) init'ed(this.folderId)
                  *    (soft) init'ed(this.selectedBookmarks)
                  *    (soft) this.selectedBookmarks.length <= 232-1
                  *    (soft) init'ed(this.selectedBookmarks[...])
                  *    (soft) init'ed(this.selectedFolders)
                  *    (soft) this.selectedFolders.length <= 232-1
                  *    (soft) init'ed(this.selectedFolders[...])
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getBookmarkManager(...)@146 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@146 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@173 != null
                  * 
                  *  Postconditions:
                  *    return_value == &"list"
                  *    this.allFolders == One-of{old this.allFolders, &new TreeSet(execute#1)}
                  *    this.folderPath == One-of{old this.folderPath, &new LinkedList(execute#3)}
                  *    new LinkedList(execute#3) num objects <= 1
                  *    new TreeSet(execute#1) num objects == 1
                  * 
                  *  Test Vectors:
                  *    this.selectedBookmarks: Addr_Set{null}, Inverse{null}
                  *    this.selectedFolders: Addr_Set{null}, Inverse{null}
                  */
   146          BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
   147          
   148          log.debug("Deleting selected folders and bookmarks.");
   149          
   150          try {
   151              String folders[] = getSelectedFolders();
   152              if (null != folders) {
   153                  log.debug("Processing delete of "+folders.length+" folders.");
   154                  for (int i = 0; i < folders.length; i++) {
   155                      log.debug("Deleting folder - "+folders[i]);
   156                      WeblogBookmarkFolder fd = bmgr.getFolder(folders[i]);
   157                      bmgr.removeFolder(fd); // removes child folders and bookmarks too
   158                  }
   159              }
   160              
   161              WeblogBookmark bookmark = null;
   162              String bookmarks[] = getSelectedBookmarks();
   163              if (null != bookmarks) {
   164                  log.debug("Processing delete of "+bookmarks.length+" bookmarks.");
   165                  for (int j = 0; j < bookmarks.length; j++) {
   166                      log.debug("Deleting bookmark - "+bookmarks[j]);
   167                      bookmark = bmgr.getBookmark(bookmarks[j]);
   168                      bmgr.removeBookmark(bookmark);
   169                  }
   170              }
   171              
   172              // flush changes
   173              WebloggerFactory.getWeblogger().flush();
   174              
   175              // notify caches
   176              CacheManager.invalidate(getActionWeblog());
   177              
   178          } catch (WebloggerException ex) {
   179              log.error("Error doing folder/bookmark deletes", ex);
   180              // TODO: i18n
   181              addError("Error doing folder/bookmark deletes");
   182          }
   183          
   184          return execute();
   185      }
   186      
   187      
   188      /**
   189       * Move folders and bookmarks to a new folder.
   190       */
   191      public String move() {
   192          
   193          try {
                     /* 
    P/P               *  Method: String move()
                      * 
                      *  Preconditions:
                      *    log != null
                      *    (soft) this.folder != null
                      *    (soft) init'ed(this.folderId)
                      *    (soft) init'ed(this.selectedBookmarks)
                      *    (soft) this.selectedBookmarks.length <= 232-1
                      *    (soft) init'ed(this.selectedBookmarks[...])
                      *    (soft) init'ed(this.selectedFolders)
                      *    (soft) this.selectedFolders.length <= 232-1
                      *    (soft) init'ed(this.selectedFolders[...])
                      *    (soft) init'ed(this.targetFolderId)
                      * 
                      *  Presumptions:
                      *    org.apache.roller.weblogger.business.BookmarkManager:getBookmark(...)@220 != null
                      *    org.apache.roller.weblogger.business.BookmarkManager:getFolder(...)@200 != null
                      *    org.apache.roller.weblogger.business.BookmarkManager:getFolder(...)@203 != null
                      *    org.apache.roller.weblogger.business.Weblogger:getBookmarkManager(...)@194 != null
                      *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@194 != null
                      *    ...
                      * 
                      *  Postconditions:
                      *    return_value == &"list"
                      *    this.allFolders == One-of{old this.allFolders, &new TreeSet(execute#1)}
                      *    this.folderPath == One-of{old this.folderPath, &new LinkedList(execute#3)}
                      *    new LinkedList(execute#3) num objects <= 1
                      *    new TreeSet(execute#1) num objects == 1
                      * 
                      *  Test Vectors:
                      *    this.selectedBookmarks: Addr_Set{null}, Inverse{null}
                      *    this.selectedFolders: Addr_Set{null}, Inverse{null}
                      *    java.lang.String:equals(...)@206: {1}, {0}
                      *    org.apache.roller.weblogger.pojos.WeblogBookmarkFolder:descendentOf(...)@206: {1}, {0}
                      */
   194              BookmarkManager bmgr = WebloggerFactory.getWeblogger().getBookmarkManager();
   195              
   196              log.debug("Moving folders and bookmarks to folder - "+getTargetFolderId());
   197              
   198              // Move folders to new parent folder.
   199              String folders[] = getSelectedFolders();
   200              WeblogBookmarkFolder parent = bmgr.getFolder(getTargetFolderId());
   201              if (null != folders) {
   202                  for (int i = 0; i < folders.length; i++) {
   203                      WeblogBookmarkFolder fd = bmgr.getFolder(folders[i]);
   204                      
   205                      // Don't move folder into itself.
   206                      if (!fd.getId().equals(parent.getId()) && 
   207                              !parent.descendentOf(fd)) {
   208                          bmgr.moveFolder(fd, parent);
   209                      } else {
   210                          addMessage("bookmarksForm.warn.notMoving", fd.getName());
   211                      }
   212                  }
   213              }
   214              
   215              // Move bookmarks to new parent folder.
   216              String bookmarks[] = getSelectedBookmarks();
   217              if (null != bookmarks) {
   218                  for (int j = 0; j < bookmarks.length; j++) {
   219                      // maybe we should be using folder.addBookmark()?
   220                      WeblogBookmark bd = bmgr.getBookmark(bookmarks[j]);
   221                      bd.setFolder(parent);
   222                      bmgr.saveBookmark(bd);
   223                  }
   224              }
   225              
   226              // flush changes
   227              WebloggerFactory.getWeblogger().flush();
   228              
   229              // notify caches
   230              CacheManager.invalidate(getActionWeblog());
   231              
   232          } catch (WebloggerException e) {
   233              log.error("Error doing folder/bookmark move", e);
   234              addError("bookmarksForm.error.move");
   235          }
   236          
   237          return execute();
   238      }
   239      
   240      
             /* 
    P/P       *  Method: void org.apache.roller.weblogger.ui.struts2.editor.Bookmarks$FolderPathComparator(Bookmarks$1)
              */
   241      private static final class FolderPathComparator implements Comparator {
   242          public int compare(Object o1, Object o2) {
                     /* 
    P/P               *  Method: int compare(Object, Object)
                      * 
                      *  Preconditions:
                      *    o1 != null
                      *    o2 != null
                      * 
                      *  Presumptions:
                      *    org.apache.roller.weblogger.pojos.WeblogBookmarkFolder:getPath(...)@245 != null
                      * 
                      *  Postconditions:
                      *    init'ed(return_value)
                      */
   243              WeblogBookmarkFolder f1 = (WeblogBookmarkFolder)o1;
   244              WeblogBookmarkFolder f2 = (WeblogBookmarkFolder)o2;
   245              return f1.getPath().compareTo(f2.getPath());
   246          }
   247      }
   248      
   249  
   250      public String getFolderId() {
                 /* 
    P/P           *  Method: String getFolderId()
                  * 
                  *  Preconditions:
                  *    init'ed(this.folderId)
                  * 
                  *  Postconditions:
                  *    return_value == this.folderId
                  *    init'ed(return_value)
                  */
   251          return folderId;
   252      }
   253  
   254      public void setFolderId(String folderId) {
                 /* 
    P/P           *  Method: void setFolderId(String)
                  * 
                  *  Postconditions:
                  *    this.folderId == folderId
                  *    init'ed(this.folderId)
                  */
   255          this.folderId = folderId;
   256      }
   257  
   258      public String[] getSelectedFolders() {
                 /* 
    P/P           *  Method: String[] getSelectedFolders()
                  * 
                  *  Preconditions:
                  *    init'ed(this.selectedFolders)
                  * 
                  *  Postconditions:
                  *    return_value == this.selectedFolders
                  *    init'ed(return_value)
                  */
   259          return selectedFolders;
   260      }
   261  
   262      public void setSelectedFolders(String[] folders) {
                 /* 
    P/P           *  Method: void setSelectedFolders(String[])
                  * 
                  *  Postconditions:
                  *    this.selectedFolders == folders
                  *    init'ed(this.selectedFolders)
                  */
   263          this.selectedFolders = folders;
   264      }
   265  
   266      public String[] getSelectedBookmarks() {
                 /* 
    P/P           *  Method: String[] getSelectedBookmarks()
                  * 
                  *  Preconditions:
                  *    init'ed(this.selectedBookmarks)
                  * 
                  *  Postconditions:
                  *    return_value == this.selectedBookmarks
                  *    init'ed(return_value)
                  */
   267          return selectedBookmarks;
   268      }
   269  
   270      public void setSelectedBookmarks(String[] bookmarks) {
                 /* 
    P/P           *  Method: void setSelectedBookmarks(String[])
                  * 
                  *  Postconditions:
                  *    this.selectedBookmarks == bookmarks
                  *    init'ed(this.selectedBookmarks)
                  */
   271          this.selectedBookmarks = bookmarks;
   272      }
   273  
   274      public String getTargetFolderId() {
                 /* 
    P/P           *  Method: String getTargetFolderId()
                  * 
                  *  Preconditions:
                  *    init'ed(this.targetFolderId)
                  * 
                  *  Postconditions:
                  *    return_value == this.targetFolderId
                  *    init'ed(return_value)
                  */
   275          return targetFolderId;
   276      }
   277  
   278      public void setTargetFolderId(String targetFolderId) {
                 /* 
    P/P           *  Method: void setTargetFolderId(String)
                  * 
                  *  Postconditions:
                  *    this.targetFolderId == targetFolderId
                  *    init'ed(this.targetFolderId)
                  */
   279          this.targetFolderId = targetFolderId;
   280      }
   281  
   282      public Set getAllFolders() {
                 /* 
    P/P           *  Method: Set getAllFolders()
                  * 
                  *  Preconditions:
                  *    init'ed(this.allFolders)
                  * 
                  *  Postconditions:
                  *    return_value == this.allFolders
                  *    init'ed(return_value)
                  */
   283          return allFolders;
   284      }
   285  
   286      public void setAllFolders(Set allFolders) {
                 /* 
    P/P           *  Method: void setAllFolders(Set)
                  * 
                  *  Postconditions:
                  *    this.allFolders == allFolders
                  *    init'ed(this.allFolders)
                  */
   287          this.allFolders = allFolders;
   288      }
   289  
   290      public WeblogBookmarkFolder getFolder() {
                 /* 
    P/P           *  Method: WeblogBookmarkFolder getFolder()
                  * 
                  *  Preconditions:
                  *    init'ed(this.folder)
                  * 
                  *  Postconditions:
                  *    return_value == this.folder
                  *    init'ed(return_value)
                  */
   291          return folder;
   292      }
   293  
   294      public void setFolder(WeblogBookmarkFolder folder) {
                 /* 
    P/P           *  Method: void setFolder(WeblogBookmarkFolder)
                  * 
                  *  Postconditions:
                  *    this.folder == folder
                  *    init'ed(this.folder)
                  */
   295          this.folder = folder;
   296      }
   297  
   298      public List getFolderPath() {
                 /* 
    P/P           *  Method: List getFolderPath()
                  * 
                  *  Preconditions:
                  *    init'ed(this.folderPath)
                  * 
                  *  Postconditions:
                  *    return_value == this.folderPath
                  *    init'ed(return_value)
                  */
   299          return folderPath;
   300      }
   301  
   302      public void setFolderPath(List folderPath) {
                 /* 
    P/P           *  Method: void setFolderPath(List)
                  * 
                  *  Postconditions:
                  *    this.folderPath == folderPath
                  *    init'ed(this.folderPath)
                  */
   303          this.folderPath = folderPath;
   304      }
   305      
   306  }








SofCheck Inspector Build Version : 2.18479
Bookmarks.java 2009-Jan-02 14:25:12
Bookmarks.class 2009-Sep-04 03:12:45
Bookmarks$1.class 2009-Sep-04 03:12:45
Bookmarks$FolderPathComparator.class 2009-Sep-04 03:12:45