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 |