File Source: SiteModel.java

     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.rendering.model;
    20  
    21  import java.util.ArrayList;
    22  import java.util.Calendar;
    23  import java.util.Date;
    24  import java.util.HashMap;
    25  import java.util.Iterator;
    26  import java.util.List;
    27  import java.util.Map;
    28  import org.apache.commons.lang.StringUtils;
    29  import org.apache.commons.logging.Log;
    30  import org.apache.commons.logging.LogFactory;
    31  import org.apache.roller.weblogger.WebloggerException;
    32  import org.apache.roller.weblogger.business.URLStrategy;
    33  import org.apache.roller.weblogger.business.Weblogger;
    34  import org.apache.roller.weblogger.business.WebloggerFactory;
    35  import org.apache.roller.weblogger.business.UserManager;
    36  import org.apache.roller.weblogger.business.WeblogManager;
    37  import org.apache.roller.weblogger.pojos.WeblogHitCount;
    38  import org.apache.roller.weblogger.pojos.WeblogPermission;
    39  import org.apache.roller.weblogger.pojos.StatCount;
    40  import org.apache.roller.weblogger.pojos.ThemeTemplate;
    41  import org.apache.roller.weblogger.pojos.User;
    42  import org.apache.roller.weblogger.pojos.WeblogEntry;
    43  import org.apache.roller.weblogger.pojos.Weblog;
    44  import org.apache.roller.weblogger.pojos.wrapper.UserWrapper;
    45  import org.apache.roller.weblogger.pojos.wrapper.WeblogEntryWrapper;
    46  import org.apache.roller.weblogger.pojos.wrapper.WeblogWrapper;
    47  import org.apache.roller.weblogger.ui.rendering.pagers.CommentsPager;
    48  import org.apache.roller.weblogger.ui.rendering.pagers.Pager;
    49  import org.apache.roller.weblogger.ui.rendering.pagers.UsersPager;
    50  import org.apache.roller.weblogger.ui.rendering.pagers.WeblogEntriesListPager;
    51  import org.apache.roller.weblogger.ui.rendering.pagers.WeblogsPager;
    52  import org.apache.roller.weblogger.ui.rendering.util.WeblogFeedRequest;
    53  import org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest;
    54  import org.apache.roller.weblogger.ui.rendering.util.WeblogRequest;
    55  
    56  
    57  /**
    58   * Page model that provides access to site-wide users, weblogs and entries.
    59   */
         /* 
    P/P   *  Method: void org.apache.roller.weblogger.ui.rendering.model.SiteModel()
          * 
          *  Postconditions:
          *    this.feedRequest == null
          *    this.pageLink == null
          *    this.urlStrategy == null
          *    this.weblog == null
          *    this.weblogRequest == null
          *    this.pageNum == 0
          *    this.tags == &new ArrayList(SiteModel#1)
          *    new ArrayList(SiteModel#1) num objects == 1
          */
    60  public class SiteModel implements Model {
    61      
             /* 
    P/P       *  Method: org.apache.roller.weblogger.ui.rendering.model.SiteModel__static_init
              * 
              *  Postconditions:
              *    init'ed(log)
              */
    62      private static Log log = LogFactory.getLog(SiteModel.class);   
    63      
    64      private Weblog weblog = null;
    65      private WeblogRequest weblogRequest = null;
    66      private WeblogFeedRequest feedRequest = null;
    67      private List tags = new ArrayList();
    68      private String pageLink = null;
    69      private int pageNum = 0;
    70      
    71      private URLStrategy urlStrategy = null;
    72      
    73      
    74      public String getModelName() {
                 /* 
    P/P           *  Method: String getModelName()
                  * 
                  *  Postconditions:
                  *    return_value == &"site"
                  */
    75          return "site";
    76      }
    77      
    78      public void init(Map initData) throws WebloggerException {
    79          
    80          // we expect the init data to contain a weblogRequest object
                 /* 
    P/P           *  Method: void init(Map)
                  * 
                  *  Preconditions:
                  *    initData != null
                  * 
                  *  Presumptions:
                  *    java.util.Map:get(...)@81 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@100 != null
                  * 
                  *  Postconditions:
                  *    possibly_updated(this.feedRequest)
                  *    possibly_updated(this.pageLink)
                  *    possibly_updated(this.pageNum)
                  *    possibly_updated(this.tags)
                  *    init'ed(this.urlStrategy)
                  *    init'ed(this.weblog)
                  *    (soft) this.weblogRequest != null
                  * 
                  *  Test Vectors:
                  *    java.util.Map:get(...)@98: Inverse{null}, Addr_Set{null}
                  *    org.apache.roller.weblogger.ui.rendering.util.WeblogFeedRequest:instanceof(...)@91: {0}, {1}
                  *    org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:instanceof(...)@86: {0}, {1}
                  */
    81          this.weblogRequest = (WeblogRequest) initData.get("parsedRequest");
    82          if(this.weblogRequest == null) {
    83              throw new WebloggerException("expected weblogRequest from init data");
    84          }
    85          
    86          if (weblogRequest instanceof WeblogPageRequest) {
    87              ThemeTemplate weblogPage = ((WeblogPageRequest)weblogRequest).getWeblogPage();
    88              pageLink = (weblogPage != null) ? weblogPage.getLink() : null;
    89              pageNum = ((WeblogPageRequest)weblogRequest).getPageNum();
    90              tags = ((WeblogPageRequest)weblogRequest).getTags();
    91          } else if (weblogRequest instanceof WeblogFeedRequest) {
    92              this.feedRequest = (WeblogFeedRequest) weblogRequest;
    93              tags = feedRequest.getTags();
    94              pageNum = feedRequest.getPage();
    95          }
    96          
    97          // look for url strategy
    98          urlStrategy = (URLStrategy) initData.get("urlStrategy");
    99          if(urlStrategy == null) {
   100              urlStrategy = WebloggerFactory.getWeblogger().getUrlStrategy();
   101          }
   102          
   103          // extract weblog object
   104          weblog = weblogRequest.getWeblog();
   105      }
   106      
   107      //----------------------------------------------------------------- Pagers
   108      
   109      /**
   110       * Get pager ofWeblogEntry objects across all weblogs, in reverse chrono order by pubTime.
   111       * @param sinceDays Limit to past X days in past (or -1 for no limit)
   112       * @param length    Max number of results to return
   113       */
   114      public Pager getWeblogEntriesPager(int sinceDays, int length) {
   115          
                 /* 
    P/P           *  Method: Pager getWeblogEntriesPager(int, int)
                  * 
                  *  Preconditions:
                  *    init'ed(this.feedRequest)
                  *    init'ed(this.pageNum)
                  *    init'ed(this.tags)
                  *    this.urlStrategy != null
                  *    init'ed(this.weblog)
                  *    this.weblogRequest != null
                  *    (soft) length <= 232-2
                  *    (soft) org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesListPager.log != null
                  *    (soft) sinceDays <= 231
                  *    (soft) init'ed(this.pageLink)
                  * 
                  *  Postconditions:
                  *    return_value == &new WeblogEntriesListPager(getWeblogEntriesPager#1)
                  *    new ArrayList(getItems#1) num objects == 1
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1) num objects == 1
                  *    return_value.entries == &new ArrayList(getItems#1)
                  *    init'ed(return_value.lastUpdated)
                  *    return_value.length == length
                  *    (soft) return_value.length <= 232-2
                  *    init'ed(return_value.locale)
                  *    init'ed(return_value.more)
                  *    return_value.page == One-of{0, this.pageNum}
                  *    ...
                  * 
                  *  Test Vectors:
                  *    this.feedRequest: Addr_Set{null}, Inverse{null}
                  */
   116          String pagerUrl = null;
   117          
   118          if (feedRequest != null) {
   119              pagerUrl = urlStrategy.getWeblogFeedURL(weblog, 
   120                      weblogRequest.getLocale(), feedRequest.getType(),
   121                      feedRequest.getFormat(), feedRequest.getWeblogCategoryName(), null,
   122                      feedRequest.getTags(), feedRequest.isExcerpts(), true);
   123          } else {        
   124              pagerUrl = urlStrategy.getWeblogPageURL(weblog, 
   125                  weblogRequest.getLocale(), pageLink, 
   126                  null, null, null, tags, 0, false);
   127          }
   128          
   129          return new WeblogEntriesListPager(
   130              urlStrategy,
   131              pagerUrl, null, null, null,
   132              tags,
   133              weblogRequest.getLocale(),
   134              sinceDays,
   135              pageNum, 
   136              length);
   137      }
   138      
   139         
   140      /**
   141       * Get pager ofWeblogEntry objects across all weblogs,
   142       * in reverse chrono order by pubTime.
   143       * @param queryWeblog Restrict to this weblog
   144       * @param sinceDays   Limit to past X days in past (or -1 for no limit)
   145       * @param length      Max number of results to return
   146       */   
   147      public Pager getWeblogEntriesPager(WeblogWrapper queryWeblog, int sinceDays, int length) {
                 /* 
    P/P           *  Method: Pager getWeblogEntriesPager(WeblogWrapper, int, int)
                  * 
                  *  Preconditions:
                  *    queryWeblog != null
                  *    init'ed(this.feedRequest)
                  *    init'ed(this.pageNum)
                  *    init'ed(this.tags)
                  *    this.urlStrategy != null
                  *    init'ed(this.weblog)
                  *    this.weblogRequest != null
                  *    (soft) length <= 232-2
                  *    (soft) org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesListPager.log != null
                  *    (soft) sinceDays <= 231
                  *    ...
                  * 
                  *  Postconditions:
                  *    return_value == &new WeblogEntriesListPager(getWeblogEntriesPager#1*)
                  *    new ArrayList(getItems#1) num objects == 1
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1*) num objects == 1
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1*).entries == &new ArrayList(getItems#1)
                  *    init'ed(new WeblogEntriesListPager(getWeblogEntriesPager#1*).lastUpdated)
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1*).length == length
                  *    (soft) new WeblogEntriesListPager(getWeblogEntriesPager#1*).length <= 232-2
                  *    init'ed(new WeblogEntriesListPager(getWeblogEntriesPager#1*).locale)
                  *    init'ed(new WeblogEntriesListPager(getWeblogEntriesPager#1*).more)
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1*).page == One-of{0, this.pageNum}
                  *    ...
                  */
   148          return getWeblogEntriesPager(queryWeblog, null, null, sinceDays, length);
   149      }
   150  
   151      /**
   152       * Get pager ofWeblogEntry objects across all weblogs,
   153       * in reverse chrono order by pubTime.
   154       * @param queryWeblog Restrict to this weblog
   155       * @param user        Restrict to this user
   156       * @param sinceDays   Limit to past X days in past (or -1 for no limit)
   157       * @param length      Max number of results to return
   158       */   
   159      public Pager getWeblogEntriesPager(WeblogWrapper queryWeblog, User user, int sinceDays, int length) {
                 /* 
    P/P           *  Method: Pager getWeblogEntriesPager(WeblogWrapper, User, int, int)
                  * 
                  *  Preconditions:
                  *    queryWeblog != null
                  *    init'ed(this.feedRequest)
                  *    init'ed(this.pageNum)
                  *    init'ed(this.tags)
                  *    this.urlStrategy != null
                  *    init'ed(this.weblog)
                  *    this.weblogRequest != null
                  *    (soft) length <= 232-2
                  *    (soft) org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesListPager.log != null
                  *    (soft) sinceDays <= 231
                  *    ...
                  * 
                  *  Postconditions:
                  *    return_value == &new WeblogEntriesListPager(getWeblogEntriesPager#1*)
                  *    new ArrayList(getItems#1) num objects == 1
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1*) num objects == 1
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1*).entries == &new ArrayList(getItems#1)
                  *    init'ed(new WeblogEntriesListPager(getWeblogEntriesPager#1*).lastUpdated)
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1*).length == length
                  *    (soft) new WeblogEntriesListPager(getWeblogEntriesPager#1*).length <= 232-2
                  *    init'ed(new WeblogEntriesListPager(getWeblogEntriesPager#1*).locale)
                  *    init'ed(new WeblogEntriesListPager(getWeblogEntriesPager#1*).more)
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1*).page == One-of{0, this.pageNum}
                  *    ...
                  */
   160          return getWeblogEntriesPager(queryWeblog, user, null, sinceDays, length);
   161      }
   162  
   163      /**
   164       * Get pager ofWeblogEntry objects across all weblogs,
   165       * in reverse chrono order by pubTime.
   166       * @param queryWeblog Restrict to this weblog
   167       * @param user        Restrict to this user
   168       * @param cat         Restrict to this category
   169       * @param sinceDays   Limit to past X days in past (or -1 for no limit)
   170       * @param length      Max number of results to return
   171       */   
   172      public Pager getWeblogEntriesPager(WeblogWrapper queryWeblog, User user, String cat, int sinceDays, int length) {
   173          
                 /* 
    P/P           *  Method: Pager getWeblogEntriesPager(WeblogWrapper, User, String, int, int)
                  * 
                  *  Preconditions:
                  *    queryWeblog != null
                  *    init'ed(this.feedRequest)
                  *    init'ed(this.pageNum)
                  *    init'ed(this.tags)
                  *    this.urlStrategy != null
                  *    init'ed(this.weblog)
                  *    this.weblogRequest != null
                  *    (soft) length <= 232-2
                  *    (soft) org/apache/roller/weblogger/ui/rendering/pagers/WeblogEntriesListPager.log != null
                  *    (soft) sinceDays <= 231
                  *    ...
                  * 
                  *  Postconditions:
                  *    return_value == &new WeblogEntriesListPager(getWeblogEntriesPager#1)
                  *    new ArrayList(getItems#1) num objects == 1
                  *    new WeblogEntriesListPager(getWeblogEntriesPager#1) num objects == 1
                  *    return_value.entries == &new ArrayList(getItems#1)
                  *    init'ed(return_value.lastUpdated)
                  *    return_value.length == length
                  *    (soft) return_value.length <= 232-2
                  *    init'ed(return_value.locale)
                  *    init'ed(return_value.more)
                  *    return_value.page == One-of{0, this.pageNum}
                  *    ...
                  * 
                  *  Test Vectors:
                  *    this.feedRequest: Addr_Set{null}, Inverse{null}
                  */
   174          String pagerUrl = null;
   175          if (feedRequest != null) {
   176              pagerUrl = urlStrategy.getWeblogFeedURL(weblog, 
   177                      weblogRequest.getLocale(), feedRequest.getType(),
   178                      feedRequest.getFormat(), feedRequest.getWeblogCategoryName(), null,
   179                      feedRequest.getTags(), feedRequest.isExcerpts(), true);
   180          } else {
   181              pagerUrl = urlStrategy.getWeblogPageURL(weblog, 
   182                  weblogRequest.getLocale(), pageLink, 
   183                  null, null, null, tags, 0, false);
   184          }
   185         
   186          return new WeblogEntriesListPager(
   187              urlStrategy,
   188              pagerUrl, queryWeblog.getPojo(), user, cat,
   189              tags,
   190              weblogRequest.getLocale(),
   191              sinceDays,
   192              pageNum, 
   193              length);
   194      }    
   195      
   196      
   197      /*
   198       * Get pager of most recent Comment objects across all weblogs,
   199       * in reverse chrono order by postTime.
   200       * @param offset   Offset into results (for paging)
   201       * @param len      Max number of results to return
   202       */
   203      public Pager getCommentsPager(int sinceDays, int length) {
   204          
                 /* 
    P/P           *  Method: Pager getCommentsPager(int, int)
                  * 
                  *  Preconditions:
                  *    init'ed(this.feedRequest)
                  *    init'ed(this.pageNum)
                  *    this.urlStrategy != null
                  *    init'ed(this.weblog)
                  *    this.weblogRequest != null
                  *    (soft) length <= 232-2
                  *    (soft) org/apache/roller/weblogger/ui/rendering/pagers/CommentsPager.log != null
                  *    (soft) sinceDays <= 231
                  *    (soft) init'ed(this.pageLink)
                  * 
                  *  Postconditions:
                  *    return_value == &new CommentsPager(getCommentsPager#1)
                  *    new ArrayList(getItems#1) num objects == 1
                  *    new CommentsPager(getCommentsPager#1) num objects == 1
                  *    return_value.comments == &new ArrayList(getItems#1)
                  *    init'ed(return_value.lastUpdated)
                  *    return_value.length == length
                  *    (soft) return_value.length <= 232-2
                  *    init'ed(return_value.locale)
                  *    init'ed(return_value.more)
                  *    return_value.page == One-of{0, this.pageNum}
                  *    ...
                  * 
                  *  Test Vectors:
                  *    this.feedRequest: Addr_Set{null}, Inverse{null}
                  */
   205          String pagerUrl = null;
   206          if (feedRequest != null) {
   207              pagerUrl = urlStrategy.getWeblogFeedURL(weblog, 
   208                      weblogRequest.getLocale(), feedRequest.getType(),
   209                      feedRequest.getFormat(), null, null, null,
   210                      feedRequest.isExcerpts(), true);
   211          } else {        
   212              pagerUrl = urlStrategy.getWeblogPageURL(weblog, 
   213                  weblogRequest.getLocale(), pageLink, 
   214                  null, null, null, null, 0, false);
   215          }
   216          
   217          return new CommentsPager(
   218              urlStrategy,
   219              pagerUrl,
   220              null,
   221              weblogRequest.getLocale(),
   222              sinceDays,
   223              pageNum, 
   224              length);
   225      }     
   226      
   227      
   228      /* Get pager of users whose names begin with specified letter */
   229      public Pager getUsersByLetterPager(String letter, int sinceDays, int length) {
   230          
                 /* 
    P/P           *  Method: Pager getUsersByLetterPager(String, int, int)
                  * 
                  *  Preconditions:
                  *    init'ed(this.feedRequest)
                  *    init'ed(this.pageNum)
                  *    this.urlStrategy != null
                  *    init'ed(this.weblog)
                  *    this.weblogRequest != null
                  *    (soft) length <= 232-2
                  *    (soft) org/apache/roller/weblogger/ui/rendering/pagers/UsersPager.log != null
                  *    (soft) init'ed(this.pageLink)
                  * 
                  *  Postconditions:
                  *    return_value == &new UsersPager(getUsersByLetterPager#1)
                  *    new ArrayList(getItems#1) num objects == 1
                  *    new UsersPager(getUsersByLetterPager#1) num objects == 1
                  *    return_value.length == length
                  *    (soft) return_value.length <= 232-2
                  *    return_value.letter == One-of{letter, null}
                  *    init'ed(return_value.letter)
                  *    init'ed(return_value.locale)
                  *    init'ed(return_value.more)
                  *    return_value.page == One-of{0, this.pageNum}
                  *    ...
                  * 
                  *  Test Vectors:
                  *    letter: Addr_Set{null}, Inverse{null}
                  *    this.feedRequest: Addr_Set{null}, Inverse{null}
                  *    org.apache.commons.lang.StringUtils:isEmpty(...)@242: {0}, {1}
                  */
   231          String pagerUrl = null;
   232          if (feedRequest != null) {
   233              pagerUrl = urlStrategy.getWeblogFeedURL(weblog, 
   234                      weblogRequest.getLocale(), feedRequest.getType(),
   235                      feedRequest.getFormat(), null, null, null, feedRequest.isExcerpts(), true);
   236          } else {        
   237              pagerUrl = urlStrategy.getWeblogPageURL(weblog, 
   238                  weblogRequest.getLocale(), pageLink, 
   239                  null, null, null, null, 0, false);
   240          }        
   241          
   242          if(letter != null && StringUtils.isEmpty(letter)) {
   243              letter = null;
   244          }
   245          
   246          return new UsersPager(
   247              urlStrategy,
   248              pagerUrl,
   249              letter,
   250              weblogRequest.getLocale(),
   251              sinceDays,
   252              pageNum, 
   253              length);
   254      }      
   255      
   256      
   257      /** Get pager of weblogs whose handles begin with specified letter */
   258      public Pager getWeblogsByLetterPager(String letter, int sinceDays, int length) {
   259          
                 /* 
    P/P           *  Method: Pager getWeblogsByLetterPager(String, int, int)
                  * 
                  *  Preconditions:
                  *    init'ed(this.pageLink)
                  *    init'ed(this.pageNum)
                  *    this.urlStrategy != null
                  *    init'ed(this.weblog)
                  *    this.weblogRequest != null
                  *    (soft) length <= 232-2
                  *    (soft) org/apache/roller/weblogger/ui/rendering/pagers/WeblogsPager.log != null
                  *    (soft) sinceDays <= 231
                  * 
                  *  Postconditions:
                  *    return_value == &new WeblogsPager(getWeblogsByLetterPager#1)
                  *    new ArrayList(getItems#1) num objects == 1
                  *    new WeblogsPager(getWeblogsByLetterPager#1) num objects == 1
                  *    return_value.length == length
                  *    (soft) return_value.length <= 232-2
                  *    return_value.letter == One-of{letter, null}
                  *    init'ed(return_value.letter)
                  *    init'ed(return_value.locale)
                  *    init'ed(return_value.more)
                  *    return_value.page == One-of{0, this.pageNum}
                  *    ...
                  * 
                  *  Test Vectors:
                  *    letter: Addr_Set{null}, Inverse{null}
                  *    org.apache.commons.lang.StringUtils:isEmpty(...)@264: {0}, {1}
                  */
   260          String pagerUrl = urlStrategy.getWeblogPageURL(weblog, 
   261                  weblogRequest.getLocale(), pageLink, 
   262                  null, null, null, null, 0, false);
   263          
   264          if(letter != null && StringUtils.isEmpty(letter)) {
   265              letter = null;
   266          }
   267          
   268          return new WeblogsPager(
   269              urlStrategy,
   270              pagerUrl,
   271              letter,
   272              weblogRequest.getLocale(),
   273              sinceDays,
   274              pageNum, 
   275              length);
   276      }   
   277      
   278      //--------------------------------------------------- User/weblog directory 
   279  
   280      /**
   281       * Get map with 26 entries, one for each letter A-Z and
   282       * containing integers reflecting the number of users whose
   283       * names start with each letter.
   284       */
   285      public Map getUserNameLetterMap() {
                 /* 
    P/P           *  Method: Map getUserNameLetterMap()
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@289 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@288 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  *    new HashMap(getUserNameLetterMap#1) num objects == 1
                  */
   286          Map results = new HashMap();
   287          try {            
   288              Weblogger roller = WebloggerFactory.getWeblogger();
   289              UserManager umgr = roller.getUserManager();
   290              results = umgr.getUserNameLetterMap();
   291          } catch (Exception e) {
   292              log.error("ERROR: fetching username letter map", e);
   293          }
   294          return results;
   295      }
   296      
   297      
   298      /**
   299       * Get map with 26 entries, one for each letter A-Z and
   300       * containing integers reflecting the number of weblogs whose
   301       * names start with each letter.
   302       */
   303      public Map getWeblogHandleLetterMap() {
                 /* 
    P/P           *  Method: Map getWeblogHandleLetterMap()
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@307 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@306 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  *    new HashMap(getWeblogHandleLetterMap#1) num objects == 1
                  */
   304          Map results = new HashMap();
   305          try {            
   306              Weblogger roller = WebloggerFactory.getWeblogger();
   307              UserManager umgr = roller.getUserManager();
   308              results = umgr.getWeblogHandleLetterMap();
   309          } catch (Exception e) {
   310              log.error("ERROR: fetching weblog handle letter map", e);
   311          }
   312          return results;
   313      }
   314      
   315  
   316      /** 
   317       * Return list of weblogs that user belongs to.
   318       */
   319      public List getUsersWeblogs(String userName) {
                 /* 
    P/P           *  Method: List getUsersWeblogs(String)
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    java.util.Iterator:next(...)@327 != null
                  *    org.apache.roller.weblogger.business.UserManager:getAllPermissions(...)@325 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@323 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@322 != null
                  * 
                  *  Postconditions:
                  *    return_value == &new ArrayList(getUsersWeblogs#1)
                  *    new ArrayList(getUsersWeblogs#1) num objects == 1
                  */
   320          List results = new ArrayList();
   321          try {            
   322              Weblogger roller = WebloggerFactory.getWeblogger();
   323              UserManager umgr = roller.getUserManager();
   324              User user = umgr.getUserByUserName(userName);
   325              List perms = umgr.getAllPermissions(user);
   326              for (Iterator it = perms.iterator(); it.hasNext();) {
   327                  WeblogPermission perm = (WeblogPermission) it.next();
   328                  results.add(WeblogWrapper.wrap(perm.getWebsite(), urlStrategy));
   329              }
   330          } catch (Exception e) {
   331              log.error("ERROR: fetching weblog list", e);
   332          }
   333          return results;
   334      }
   335      
   336      
   337      /** 
   338       * Return list of users that belong to website.
   339       */
   340      public List getWeblogsUsers(String handle) {
                 /* 
    P/P           *  Method: List getWeblogsUsers(String)
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    java.util.Iterator:next(...)@348 != null
                  *    org.apache.roller.weblogger.business.UserManager:getAllPermissions(...)@346 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@344 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@343 != null
                  * 
                  *  Postconditions:
                  *    return_value == &new ArrayList(getWeblogsUsers#1)
                  *    new ArrayList(getWeblogsUsers#1) num objects == 1
                  */
   341          List results = new ArrayList();
   342          try {            
   343              Weblogger roller = WebloggerFactory.getWeblogger();
   344              UserManager umgr = roller.getUserManager();
   345              Weblog website = umgr.getWebsiteByHandle(handle);
   346              List perms = umgr.getAllPermissions(website);
   347              for (Iterator it = perms.iterator(); it.hasNext();) {
   348                  WeblogPermission perm = (WeblogPermission) it.next();
   349                  results.add(UserWrapper.wrap(perm.getUser()));
   350              }
   351          } catch (Exception e) {
   352              log.error("ERROR: fetching weblog list", e);
   353          }
   354          return results;
   355      }
   356      
   357      
   358      
   359      /** Get User object by username */
   360      public UserWrapper getUser(String username) {
                 /* 
    P/P           *  Method: UserWrapper getUser(String)
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    init'ed(java.lang.Boolean.TRUE)
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@364 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@363 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  */
   361          UserWrapper wrappedUser = null;
   362          try {            
   363              Weblogger roller = WebloggerFactory.getWeblogger();
   364              UserManager umgr = roller.getUserManager();
   365              User user = umgr.getUserByUserName(username, Boolean.TRUE);
   366              wrappedUser = UserWrapper.wrap(user);
   367          } catch (Exception e) {
   368              log.error("ERROR: fetching users by letter", e);
   369          }
   370          return wrappedUser;
   371      }
   372      
   373      
   374      /** Get Website object by handle */
   375      public WeblogWrapper getWeblog(String handle) {
                 /* 
    P/P           *  Method: WeblogWrapper getWeblog(String)
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@379 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@378 != null
                  * 
                  *  Postconditions:
                  *    return_value == One-of{&new WeblogWrapper(wrap#1), null}
                  *    return_value in Addr_Set{null,&new WeblogWrapper(wrap#1)}
                  *    new WeblogWrapper(wrap#1) num objects <= 1
                  *    new WeblogWrapper(wrap#1).pojo != null
                  *    new WeblogWrapper(wrap#1).urlStrategy == this.urlStrategy
                  *    init'ed(new WeblogWrapper(wrap#1).urlStrategy)
                  */
   376          WeblogWrapper wrappedWebsite = null;
   377          try {            
   378              Weblogger roller = WebloggerFactory.getWeblogger();
   379              UserManager umgr = roller.getUserManager();
   380              Weblog website = umgr.getWebsiteByHandle(handle);
   381              wrappedWebsite = WeblogWrapper.wrap(website, urlStrategy);
   382          } catch (Exception e) {
   383              log.error("ERROR: fetching users by letter", e);
   384          }
   385          return wrappedWebsite;
   386      }
   387      
   388          
   389      //------------------------------------------------------- Small collections
   390      
   391      /*
   392       * Get most collection of Website objects,
   393       * in reverse chrono order by creationDate.
   394       * @param offset   Offset into results (for paging)
   395       * @param len      Max number of results to return
   396       */
   397      public List getNewWeblogs(int sinceDays, int length) {
                 /* 
    P/P           *  Method: List getNewWeblogs(int, int)
                  * 
                  *  Preconditions:
                  *    sinceDays <= 231
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    init'ed(java.lang.Boolean.TRUE)
                  *    java.util.Calendar:getInstance(...)@399 != null
                  *    org.apache.roller.weblogger.business.UserManager:getWebsites(...)@406 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@405 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@404 != null
                  * 
                  *  Postconditions:
                  *    return_value == &new ArrayList(getNewWeblogs#1)
                  *    new ArrayList(getNewWeblogs#1) num objects == 1
                  */
   398          List results = new ArrayList();
   399          Calendar cal = Calendar.getInstance();
   400          cal.setTime(new Date());
   401          cal.add(Calendar.DATE, -1 * sinceDays);
   402          Date startDate = cal.getTime();
   403          try {            
   404              Weblogger roller = WebloggerFactory.getWeblogger();
   405              UserManager umgr = roller.getUserManager();
   406              List weblogs = umgr.getWebsites(
   407                  null, Boolean.TRUE, Boolean.TRUE, startDate, null, 0, length);
   408              for (Iterator it = weblogs.iterator(); it.hasNext();) {
   409                  Weblog website = (Weblog) it.next();
   410                  results.add(WeblogWrapper.wrap(website, urlStrategy));
   411              }
   412          } catch (Exception e) {
   413              log.error("ERROR: fetching weblog list", e);
   414          }
   415          return results;
   416      }
   417             
   418  
   419      /*
   420       * Get most recent User objects, in reverse chrono order by creationDate.
   421       * @param offset   Offset into results (for paging)
   422       * @param len      Max number of results to return
   423       */
   424      public List getNewUsers(int sinceDays, int length) {
                 /* 
    P/P           *  Method: List getNewUsers(int, int)
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    init'ed(java.lang.Boolean.TRUE)
                  *    org.apache.roller.weblogger.business.UserManager:getUsers(...)@429 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@428 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@427 != null
                  * 
                  *  Postconditions:
                  *    return_value == &new ArrayList(getNewUsers#1)
                  *    new ArrayList(getNewUsers#1) num objects == 1
                  */
   425          List results = new ArrayList();
   426          try {            
   427              Weblogger roller = WebloggerFactory.getWeblogger();
   428              UserManager umgr = roller.getUserManager();
   429              List users = umgr.getUsers(null, Boolean.TRUE, null, null, 0, length);
   430              for (Iterator it = users.iterator(); it.hasNext();) {
   431                  User user = (User) it.next();
   432                  results.add(UserWrapper.wrap(user));
   433              }
   434          } catch (Exception e) {
   435              log.error("ERROR: fetching weblog list", e);
   436          }
   437          return results;
   438      }   
   439      
   440      
   441      /**
   442       * Get list of WebsiteDisplay objects, ordered by number of hits.
   443       * @param sinceDays Only consider weblogs updated in the last sinceDays
   444       * @param len      Max number of results to return
   445       */
   446      public List getHotWeblogs(int sinceDays, int length) {
   447          
                 /* 
    P/P           *  Method: List getHotWeblogs(int, int)
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    java.util.Iterator:next(...)@455 != null
                  *    org.apache.roller.weblogger.business.WeblogManager:getHotWeblogs(...)@451 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@450 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@450 != null
                  *    org.apache.roller.weblogger.pojos.WeblogHitCount:getWeblog(...)@456 != null
                  *    ...
                  * 
                  *  Postconditions:
                  *    return_value == &new ArrayList(getHotWeblogs#1)
                  *    new ArrayList(getHotWeblogs#1) num objects == 1
                  */
   448          List results = new ArrayList();
   449          try {
   450              WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();
   451              List hotBlogs = mgr.getHotWeblogs(sinceDays, 0, length);
   452              
   453              Iterator hitCounts = hotBlogs.iterator();
   454              while (hitCounts.hasNext()) {
   455                  WeblogHitCount hitCount = (WeblogHitCount) hitCounts.next();
   456                  StatCount statCount = new StatCount(
   457                      hitCount.getWeblog().getId(),
   458                      hitCount.getWeblog().getHandle(),
   459                      hitCount.getWeblog().getName(),
   460                      "statCount.weblogDayHits",
   461                      hitCount.getDailyHits());
   462                  statCount.setWeblogHandle(hitCount.getWeblog().getHandle());
   463                  results.add(statCount);              
   464              }
   465              
   466          } catch (Exception e) {
   467              log.error("ERROR: fetching hot weblog list", e);
   468          }
   469          
   470          return results;
   471      }
   472      
   473      
   474      /**
   475       * Get most collection of most commented websites, as StatCount objects,
   476       * in descending order by number of comments.
   477       * @param sinceDays Only consider weblogs updated in the last sinceDays
   478       * @param offset   Offset into results (for paging)
   479       * @param length   Max number of results to return
   480       */
   481      public List getMostCommentedWeblogs(int sinceDays , int length) {
                 /* 
    P/P           *  Method: List getMostCommentedWeblogs(int, int)
                  * 
                  *  Preconditions:
                  *    sinceDays <= 231
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    java.util.Calendar:getInstance(...)@483 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@489 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@488 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  *    new ArrayList(getMostCommentedWeblogs#1) num objects == 1
                  */
   482          List results = new ArrayList();
   483          Calendar cal = Calendar.getInstance();
   484          cal.setTime(new Date());
   485          cal.add(Calendar.DATE, -1 * sinceDays);
   486          Date startDate = cal.getTime();
   487          try {            
   488              Weblogger roller = WebloggerFactory.getWeblogger();
   489              UserManager umgr = roller.getUserManager();
   490              results = umgr.getMostCommentedWebsites(
   491                      startDate, new Date(), 0, length);
   492          } catch (Exception e) {
   493              log.error("ERROR: fetching commented weblog list", e);
   494          }
   495          return results;
   496      }
   497      
   498      
   499      /**
   500       * Get most commented weblog entries across all weblogs, as StatCount 
   501       * objects, in descending order by number of comments.
   502       * @param sinceDays Only consider weblogs updated in the last sinceDays
   503       * @param cats     To limit results to list of category names
   504       * @param len      Max number of results to return
   505       */
   506      public List getMostCommentedWeblogEntries(
   507              List cats, int sinceDays, int length) {
                 /* 
    P/P           *  Method: List getMostCommentedWeblogEntries(List, int, int)
                  * 
                  *  Preconditions:
                  *    sinceDays <= 231
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    java.util.Calendar:getInstance(...)@509 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@515 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@514 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  *    new ArrayList(getMostCommentedWeblogEntries#1) num objects == 1
                  */
   508          List results = new ArrayList();
   509          Calendar cal = Calendar.getInstance();
   510          cal.setTime(new Date());
   511          cal.add(Calendar.DATE, -1 * sinceDays);
   512          Date startDate = cal.getTime();
   513          try {            
   514              Weblogger roller = WebloggerFactory.getWeblogger();
   515              WeblogManager wmgr = roller.getWeblogManager();
   516              results = wmgr.getMostCommentedWeblogEntries(
   517                      null, startDate, new Date(), 0, length);
   518          } catch (Exception e) {
   519              log.error("ERROR: fetching commented weblog entries list", e);
   520          }
   521          return results;
   522      }
   523      
   524      /**
   525       * Get pinned entries.
   526       * @param sinceDays Only consider weblogs updated in the last sinceDays
   527       * @param length    Max number of results to return
   528       */
   529      public List getPinnedWeblogEntries(int length) {
                 /* 
    P/P           *  Method: List getPinnedWeblogEntries(int)
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.WeblogManager:getWeblogEntriesPinnedToMain(...)@534 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@533 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@532 != null
                  * 
                  *  Postconditions:
                  *    return_value == &new ArrayList(getPinnedWeblogEntries#1)
                  *    new ArrayList(getPinnedWeblogEntries#1) num objects == 1
                  */
   530          List results = new ArrayList();
   531          try {            
   532              Weblogger roller = WebloggerFactory.getWeblogger();
   533              WeblogManager wmgr = roller.getWeblogManager();
   534              List weblogs = wmgr.getWeblogEntriesPinnedToMain(new Integer(length));
   535              for (Iterator it = weblogs.iterator(); it.hasNext();) {
   536                  WeblogEntry entry = (WeblogEntry) it.next();
   537                  results.add(WeblogEntryWrapper.wrap(entry, urlStrategy));
   538              }
   539          } catch (Exception e) {
   540              log.error("ERROR: fetching pinned weblog entries", e);
   541          }
   542          return results;
   543      }
   544          
   545      /**
   546       * 
   547       * @param sinceDays
   548       * @param length
   549       * @return
   550       */
   551      public List getPopularTags(int sinceDays, int length) {
                 /* 
    P/P           *  Method: List getPopularTags(int, int)
                  * 
                  *  Preconditions:
                  *    sinceDays <= 231
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    java.util.Calendar:getInstance(...)@555 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@563 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@562 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  *    new ArrayList(getPopularTags#1) num objects == 1
                  * 
                  *  Test Vectors:
                  *    sinceDays: {-231..0}, {1..231}
                  */
   552          List results = new ArrayList();
   553          Date startDate = null;
   554          if(sinceDays > 0) {
   555              Calendar cal = Calendar.getInstance();
   556              cal.setTime(new Date());
   557              cal.add(Calendar.DATE, -1 * sinceDays);        
   558              startDate = cal.getTime();     
   559          }
   560          
   561          try {            
   562              Weblogger roller = WebloggerFactory.getWeblogger();
   563              WeblogManager wmgr = roller.getWeblogManager();
   564              results = wmgr.getPopularTags(null, startDate, length);
   565          } catch (Exception e) {
   566              log.error("ERROR: fetching site tags list", e);
   567          }
   568          return results;
   569      }   
   570      
   571      
   572      public long getCommentCount() {
                 /* 
    P/P           *  Method: long getCommentCount()
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@576 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@575 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  */
   573          long count = 0;
   574          try {
   575              Weblogger roller = WebloggerFactory.getWeblogger();
   576              WeblogManager mgr = roller.getWeblogManager();
   577              count = mgr.getCommentCount();            
   578          } catch (WebloggerException e) {
   579              log.error("Error getting comment count for site ", e);
   580          }
   581          return count;
   582      }
   583      
   584      
   585      public long getEntryCount() {
                 /* 
    P/P           *  Method: long getEntryCount()
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@589 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@588 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  */
   586          long count = 0;
   587          try {
   588              Weblogger roller = WebloggerFactory.getWeblogger();
   589              WeblogManager mgr = roller.getWeblogManager();
   590              count = mgr.getEntryCount();            
   591          } catch (WebloggerException e) {
   592              log.error("Error getting entry count for site", e);
   593          }
   594          return count;
   595      }
   596      
   597      
   598      public long getWeblogCount() {
                 /* 
    P/P           *  Method: long getWeblogCount()
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@602 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@601 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  */
   599          long count = 0;
   600          try {
   601              Weblogger roller = WebloggerFactory.getWeblogger();
   602              UserManager mgr = roller.getUserManager();
   603              count = mgr.getWeblogCount();            
   604          } catch (WebloggerException e) {
   605              log.error("Error getting weblog count for site", e);
   606          }
   607          return count;
   608      } 
   609      
   610      
   611      public long getUserCount() {
                 /* 
    P/P           *  Method: long getUserCount()
                  * 
                  *  Preconditions:
                  *    (soft) log != null
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@615 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@614 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  */
   612          long count = 0;
   613          try {
   614              Weblogger roller = WebloggerFactory.getWeblogger();
   615              UserManager mgr = roller.getUserManager();
   616              count = mgr.getUserCount();            
   617          } catch (WebloggerException e) {
   618              log.error("Error getting user count for site", e);
   619          }
   620          return count;
   621      }
   622      
   623  }








SofCheck Inspector Build Version : 2.18479
SiteModel.java 2009-Jan-02 14:25:08
SiteModel.class 2009-Sep-04 03:12:44