File Source: WeblogsPager.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.pagers;
    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.logging.Log;
    29  import org.apache.commons.logging.LogFactory;
    30  import org.apache.roller.weblogger.business.URLStrategy;
    31  import org.apache.roller.weblogger.business.Weblogger;
    32  import org.apache.roller.weblogger.business.WebloggerFactory;
    33  import org.apache.roller.weblogger.business.UserManager;
    34  import org.apache.roller.weblogger.pojos.Weblog;
    35  import org.apache.roller.weblogger.pojos.wrapper.WeblogWrapper;
    36  
    37  
    38  /**
    39   * Paging through a collection of weblogs.
    40   */
    41  public class WeblogsPager extends AbstractPager {
    42      
             /* 
    P/P       *  Method: org.apache.roller.weblogger.ui.rendering.pagers.WeblogsPager__static_init
              * 
              *  Postconditions:
              *    init'ed(log)
              */
    43      private static Log log = LogFactory.getLog(WeblogsPager.class);
    44      
    45      private String letter = null;
    46      private String locale = null;
    47      private int sinceDays = -1;
    48      private int length = 0;
    49      
    50      // collection for the pager
    51      private List weblogs;
    52      
    53      // are there more items?
    54      private boolean more = false;
    55      
    56      
    57      public WeblogsPager(
    58              URLStrategy    strat,
    59              String         baseUrl,
    60              String         locale,
    61              int            sinceDays,
    62              int            page,
    63              int            length) {
    64          
                 /* 
    P/P           *  Method: void org.apache.roller.weblogger.ui.rendering.pagers.WeblogsPager(URLStrategy, String, String, int, int, int)
                  * 
                  *  Preconditions:
                  *    (soft) length <= 232-2
                  *    (soft) log != null
                  *    (soft) sinceDays <= 231
                  * 
                  *  Postconditions:
                  *    this.length == length
                  *    (soft) this.length <= 232-2
                  *    init'ed(this.letter)
                  *    this.locale == locale
                  *    init'ed(this.locale)
                  *    init'ed(this.more)
                  *    this.page == One-of{0, page}
                  *    this.page >= 0
                  *    this.sinceDays == sinceDays
                  *    (soft) this.sinceDays <= 231
                  *    ...
                  */
    65          super(strat, baseUrl, page);
    66          
    67          this.locale = locale;
    68          this.sinceDays = sinceDays;
    69          this.length = length;
    70          
    71          // initialize the collection
    72          getItems();
    73      }
    74      
    75      
    76      public WeblogsPager(
    77              URLStrategy    strat,
    78              String         baseUrl,
    79              String         letter,
    80              String         locale,
    81              int            sinceDays,
    82              int            page,
    83              int            length) {
    84          
                 /* 
    P/P           *  Method: void org.apache.roller.weblogger.ui.rendering.pagers.WeblogsPager(URLStrategy, String, String, String, int, int, int)
                  * 
                  *  Preconditions:
                  *    (soft) length <= 232-2
                  *    (soft) log != null
                  *    (soft) sinceDays <= 231
                  * 
                  *  Postconditions:
                  *    this.length == length
                  *    (soft) this.length <= 232-2
                  *    this.letter == letter
                  *    init'ed(this.letter)
                  *    this.locale == locale
                  *    init'ed(this.locale)
                  *    init'ed(this.more)
                  *    this.page == One-of{0, page}
                  *    this.page >= 0
                  *    this.sinceDays == sinceDays
                  *    ...
                  */
    85          super(strat, baseUrl, page);
    86          
    87          this.letter = letter;
    88          this.locale = locale;
    89          this.sinceDays = sinceDays;
    90          this.length = length;
    91          
    92          // initialize the collection
    93          getItems();
    94      }
    95      
    96      
    97      public String getNextLink() {
    98          // need to add letter param if it exists
                 /* 
    P/P           *  Method: String getNextLink()
                  * 
                  *  Preconditions:
                  *    init'ed(this.letter)
                  *    (soft) init'ed(this.more)
                  *    (soft) this.page <= 232-2
                  *    (soft) init'ed(this.url)
                  * 
                  *  Postconditions:
                  *    init'ed(java.lang.StringBuilder:toString(...)._tainted)
                  *    return_value in Addr_Set{null,&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...)}
                  * 
                  *  Test Vectors:
                  *    this.letter: Addr_Set{null}, Inverse{null}
                  *    this.more: {0}, {1}
                  */
    99          if(letter != null) {
   100              int page = getPage() + 1;
   101              if(hasMoreItems()) {
   102                  Map params = new HashMap();
   103                  params.put("page", ""+page);
   104                  params.put("letter", letter);
   105                  return createURL(getUrl(), params);
   106              }
   107              return null;
   108          } else {
   109              return super.getNextLink();
   110          }
   111      }
   112      
   113      
   114      public String getPrevLink() {
   115          // need to add letter param if it exists
                 /* 
    P/P           *  Method: String getPrevLink()
                  * 
                  *  Preconditions:
                  *    init'ed(this.letter)
                  *    (soft) this.page >= -231+1
                  *    (soft) init'ed(this.url)
                  * 
                  *  Postconditions:
                  *    init'ed(java.lang.StringBuilder:toString(...)._tainted)
                  *    return_value in Addr_Set{null,&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...),&java.lang.StringBuilder:toString(...)}
                  * 
                  *  Test Vectors:
                  *    this.letter: Addr_Set{null}, Inverse{null}
                  *    this.page: {-231+1..0}, {1..232-1}
                  */
   116          if(letter != null) {
   117              int page = getPage() - 1;
   118              if (page >= 0) {
   119                  Map params = new HashMap();
   120                  params.put("page", ""+page);
   121                  params.put("letter", letter);
   122                  return createURL(getUrl(), params);
   123              }
   124              return null;
   125          } else {
   126              return super.getPrevLink();
   127          }
   128      }
   129      
   130      
   131      public List getItems() {
   132          
                 /* 
    P/P           *  Method: List getItems()
                  * 
                  *  Preconditions:
                  *    init'ed(this.weblogs)
                  *    (soft) log != null
                  *    (soft) this.length <= 232-2
                  *    (soft) this.length*this.page in -231..232-1
                  *    (soft) init'ed(this.letter)
                  *    (soft) init'ed(this.page)
                  *    (soft) this.sinceDays <= 231
                  * 
                  *  Presumptions:
                  *    init'ed(java.lang.Boolean.TRUE)
                  *    java.util.Calendar:getInstance(...)@140 != null
                  *    org.apache.roller.weblogger.business.UserManager:getWeblogsByLetter(...)@152 != null
                  *    org.apache.roller.weblogger.business.UserManager:getWebsites(...)@150 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getUserManager(...)@147 != null
                  *    ...
                  * 
                  *  Postconditions:
                  *    return_value == One-of{old this.weblogs, &new ArrayList(getItems#1)}
                  *    return_value != null
                  *    this.weblogs == return_value
                  *    possibly_updated(this.more)
                  *    new ArrayList(getItems#1) num objects <= 1
                  * 
                  *  Test Vectors:
                  *    this.weblogs: Inverse{null}, Addr_Set{null}
                  *    this.letter: Inverse{null}, Addr_Set{null}
                  *    this.sinceDays: {-1}, {-231..-2, 0..231}
                  */
   133          if (weblogs == null) {
   134              // calculate offset
   135              int offset = getPage() * length;
   136              
   137              List results = new ArrayList();
   138              Date startDate = null;
   139              if (sinceDays != -1) {
   140                  Calendar cal = Calendar.getInstance();
   141                  cal.setTime(new Date());
   142                  cal.add(Calendar.DATE, -1 * sinceDays);
   143                  startDate = cal.getTime();
   144              }
   145              try {
   146                  Weblogger roller = WebloggerFactory.getWeblogger();
   147                  UserManager umgr = roller.getUserManager();
   148                  List rawWeblogs = null;
   149                  if (letter == null) {
   150                      rawWeblogs = umgr.getWebsites(null, Boolean.TRUE, Boolean.TRUE, startDate, null, offset, length + 1);
   151                  } else {
   152                      rawWeblogs = umgr.getWeblogsByLetter(letter.charAt(0), offset, length + 1);
   153                  }
   154                  
   155                  // wrap the results
   156                  int count = 0;
   157                  for (Iterator it = rawWeblogs.iterator(); it.hasNext();) {
   158                      Weblog website = (Weblog) it.next();
+  159                      if (count++ < length) {
   160                          results.add(WeblogWrapper.wrap(website, urlStrategy));                    
   161                      } else {
   162                          more = true;
   163                      }
   164                  }
   165                  
   166              } catch (Exception e) {
   167                  log.error("ERROR: fetching weblog list", e);
   168              }
   169              
   170              weblogs = results;
   171          }
   172          
   173          return weblogs;
   174      }
   175      
   176      
   177      public boolean hasMoreItems() {
                 /* 
    P/P           *  Method: bool hasMoreItems()
                  * 
                  *  Preconditions:
                  *    init'ed(this.more)
                  * 
                  *  Postconditions:
                  *    return_value == this.more
                  *    init'ed(return_value)
                  */
   178          return more;
   179      }
   180      
   181  }








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