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








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