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 |