File Source: WeblogEntriesListPager.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.sql.Timestamp;
    22  import java.util.ArrayList;
    23  import java.util.Calendar;
    24  import java.util.Date;
    25  import java.util.Iterator;
    26  import java.util.List;
    27  import org.apache.commons.logging.Log;
    28  import org.apache.commons.logging.LogFactory;
    29  import org.apache.roller.weblogger.business.URLStrategy;
    30  import org.apache.roller.weblogger.business.Weblogger;
    31  import org.apache.roller.weblogger.business.WebloggerFactory;
    32  import org.apache.roller.weblogger.business.UserManager;
    33  import org.apache.roller.weblogger.business.WeblogManager;
    34  import org.apache.roller.weblogger.pojos.User;
    35  import org.apache.roller.weblogger.pojos.WeblogEntry;
    36  import org.apache.roller.weblogger.pojos.Weblog;
    37  import org.apache.roller.weblogger.pojos.wrapper.WeblogEntryWrapper;
    38  
    39  
    40  /**
    41   * Simple pager for list of weblog entries.
    42   */
    43  public class WeblogEntriesListPager extends AbstractPager {
    44      
             /* 
    P/P       *  Method: org.apache.roller.weblogger.ui.rendering.pagers.WeblogEntriesListPager__static_init
              * 
              *  Postconditions:
              *    init'ed(log)
              */
    45      private static Log log = LogFactory.getLog(WeblogEntriesListPager.class);
    46      
    47      private String locale = null;
    48      private int sinceDays = -1;
    49      private int length = 0;
    50      
    51      private Weblog queryWeblog = null;
    52      private User queryUser = null;
    53      private String queryCat = null;
    54      private List queryTags = null;
    55      
    56      // entries for the pager
    57      private List entries;
    58      
    59      // are there more entries?
    60      private boolean more = false;
    61      
    62      // most recent update time of current set of entries
    63      private Date lastUpdated = null;    
    64      
    65      
    66      public WeblogEntriesListPager(
    67              URLStrategy    strat,
    68              String         baseUrl,
    69              Weblog         queryWeblog,
    70              User           queryUser,
    71              String         queryCat,
    72              List           queryTags,
    73              String         locale,
    74              int            sinceDays,
    75              int            pageNum,
    76              int            length) {
    77          
                 /* 
    P/P           *  Method: void org.apache.roller.weblogger.ui.rendering.pagers.WeblogEntriesListPager(URLStrategy, String, Weblog, User, String, List, String, int, int, int)
                  * 
                  *  Preconditions:
                  *    (soft) length <= 232-2
                  *    (soft) log != null
                  *    (soft) sinceDays <= 231
                  * 
                  *  Postconditions:
                  *    this.entries == &new ArrayList(getItems#1)
                  *    init'ed(this.lastUpdated)
                  *    this.length == length
                  *    (soft) this.length <= 232-2
                  *    this.locale == locale
                  *    init'ed(this.locale)
                  *    init'ed(this.more)
                  *    this.page == One-of{0, pageNum}
                  *    this.page >= 0
                  *    this.queryCat == queryCat
                  *    ...
                  */
    78          super(strat, baseUrl, pageNum);
    79          
    80          // store the data
    81          this.queryWeblog = queryWeblog;
    82          this.queryUser = queryUser;
    83          this.queryCat = queryCat;
    84          this.queryTags = queryTags;
    85          this.locale = locale;
    86          this.sinceDays = sinceDays;
    87          this.length = length;
    88          
    89          // initialize the pager collection
    90          getItems();
    91      }
    92      
    93      
    94      public List getItems() {
    95          
                 /* 
    P/P           *  Method: List getItems()
                  * 
                  *  Preconditions:
                  *    init'ed(this.entries)
                  *    (soft) log != null
                  *    (soft) this.length <= 232-2
                  *    (soft) this.length*this.page in -231..232-1
                  *    (soft) init'ed(this.locale)
                  *    (soft) init'ed(this.page)
                  *    (soft) init'ed(this.queryCat)
                  *    (soft) init'ed(this.queryTags)
                  *    (soft) init'ed(this.queryUser)
                  *    (soft) init'ed(this.queryWeblog)
                  *    ...
                  * 
                  *  Presumptions:
                  *    java.util.Calendar:getInstance(...)@104 != null
                  *    org.apache.roller.weblogger.business.WeblogManager:getWeblogEntries(...)@114 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@112 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@111 != null
                  * 
                  *  Postconditions:
                  *    return_value == One-of{old this.entries, &new ArrayList(getItems#1)}
                  *    return_value != null
                  *    this.entries == return_value
                  *    possibly_updated(this.more)
                  *    new ArrayList(getItems#1) num objects <= 1
                  * 
                  *  Test Vectors:
                  *    this.entries: Inverse{null}, Addr_Set{null}
                  *    this.sinceDays: {-231..0}, {1..231}
                  *    java.util.Iterator:hasNext(...)@131: {0}, {1}
                  */
    96          if (entries == null) {
    97              // calculate offset
    98              int offset = getPage() * length;
    99              
   100              List results = new ArrayList();
   101              
   102              Date startDate = null;
   103              if(sinceDays > 0) {
   104                  Calendar cal = Calendar.getInstance();
   105                  cal.setTime(new Date());
   106                  cal.add(Calendar.DATE, -1 * sinceDays);
   107                  startDate = cal.getTime();
   108              }
   109              
   110              try {
   111                  Weblogger roller = WebloggerFactory.getWeblogger();
   112                  WeblogManager wmgr = roller.getWeblogManager();
+  113                  UserManager umgr = roller.getUserManager();
   114                  List rawEntries = wmgr.getWeblogEntries(
   115                          
   116                          queryWeblog,
   117                          queryUser,
   118                          startDate,
   119                          null,
   120                          queryCat,
   121                          queryTags,WeblogEntry.PUBLISHED,
   122                          null,
   123                          "pubTime",
   124                          null,
   125                          locale,
   126                          offset,
   127                          length + 1);
   128                                  
   129                  // wrap the results
   130                  int count = 0;
   131                  for (Iterator it = rawEntries.iterator(); it.hasNext();) {
   132                      WeblogEntry entry = (WeblogEntry) it.next();
+  133                      if (count++ < length) {
   134                          results.add(WeblogEntryWrapper.wrap(entry, urlStrategy));
   135                      }
   136                  }
   137                  if (rawEntries.size() > length) more = true;
   138                  
   139              } catch (Exception e) {
   140                  log.error("ERROR: fetching weblog entries list", e);
   141              }
   142              
   143              entries = results;
   144          }
   145          
   146          return entries;
   147      }
   148      
   149      
   150      public boolean hasMoreItems() {
                 /* 
    P/P           *  Method: bool hasMoreItems()
                  * 
                  *  Preconditions:
                  *    init'ed(this.more)
                  * 
                  *  Postconditions:
                  *    return_value == this.more
                  *    init'ed(return_value)
                  */
   151          return more;
   152      }
   153  
   154      /** Get last updated time from items in pager */
   155      public Date getLastUpdated() {
                 /* 
    P/P           *  Method: Date getLastUpdated()
                  * 
                  *  Preconditions:
                  *    init'ed(this.lastUpdated)
                  *    (soft) log != null
                  *    (soft) init'ed(this.entries)
                  *    (soft) this.length <= 232-2
                  *    (soft) this.length*this.page in -231..232-1
                  *    (soft) init'ed(this.locale)
                  *    (soft) init'ed(this.page)
                  *    (soft) init'ed(this.queryCat)
                  *    (soft) init'ed(this.queryTags)
                  *    (soft) init'ed(this.queryUser)
                  *    ...
                  * 
                  *  Presumptions:
                  *    e.pojo@161 != null
                  *    java.util.Iterator:next(...)@161 != null
                  *    java.util.List:get(...).pojo@160 != null
                  *    java.util.List:get(...)@160 != null
                  *    org.apache.roller.weblogger.pojos.WeblogEntry:getUpdateTime(...)@164 != null
                  * 
                  *  Postconditions:
                  *    return_value == One-of{old this.lastUpdated, &new Date(getLastUpdated#1), &new Date(getLastUpdated#2)}
                  *    return_value != null
                  *    this.lastUpdated == return_value
                  *    this.entries == One-of{old this.entries, &new ArrayList(getItems#1)}
                  *    (soft) init'ed(this.entries)
                  *    possibly_updated(this.more)
                  *    new ArrayList(getItems#1) num objects <= 1
                  *    new Date(getLastUpdated#1) num objects <= 1
                  *    new Date(getLastUpdated#2) num objects <= 1
                  * 
                  *  Test Vectors:
                  *    this.lastUpdated: Inverse{null}, Addr_Set{null}
                  *    java.sql.Timestamp:after(...)@162: {0}, {1}
                  *    java.util.Iterator:hasNext(...)@161: {0}, {1}
                  *    java.util.List:size(...)@159: {-231..0}, {1..232-1}
                  */
   156          if (lastUpdated == null) {
   157              // feeds are sorted by pubtime, so first might not be last updated
   158              List<WeblogEntryWrapper> items = (List<WeblogEntryWrapper>)getItems();
+  159              if (getItems() != null && getItems().size() > 0) {
   160                  Timestamp newest = ((WeblogEntryWrapper)getItems().get(0)).getUpdateTime();
   161                  for (WeblogEntryWrapper e : items) {
   162                      if (e.getUpdateTime().after(newest)) {
   163                          newest = e.getPubTime();
   164                      }
   165                  }
   166                  lastUpdated = new Date(newest.getTime());
   167              } else {
   168                  // no update so we assume it's brand new
   169                  lastUpdated = new Date();
   170              }
   171          }
   172          return lastUpdated;
   173      }
   174  }








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