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 |