KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > roller > ui > rendering > model > SiteModel


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.ui.rendering.model;
20
21 import java.util.ArrayList JavaDoc;
22 import java.util.Calendar JavaDoc;
23 import java.util.Date JavaDoc;
24 import java.util.HashMap JavaDoc;
25 import java.util.Iterator JavaDoc;
26 import java.util.List JavaDoc;
27 import java.util.Map JavaDoc;
28 import org.apache.commons.lang.StringUtils;
29 import org.apache.commons.logging.Log;
30 import org.apache.commons.logging.LogFactory;
31 import org.apache.roller.RollerException;
32 import org.apache.roller.model.RefererManager;
33 import org.apache.roller.model.Roller;
34 import org.apache.roller.model.RollerFactory;
35 import org.apache.roller.model.UserManager;
36 import org.apache.roller.model.WeblogManager;
37 import org.apache.roller.pojos.PermissionsData;
38 import org.apache.roller.pojos.Template;
39 import org.apache.roller.pojos.UserData;
40 import org.apache.roller.pojos.WeblogEntryData;
41 import org.apache.roller.pojos.WebsiteData;
42 import org.apache.roller.pojos.wrapper.UserDataWrapper;
43 import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper;
44 import org.apache.roller.pojos.wrapper.WebsiteDataWrapper;
45 import org.apache.roller.ui.rendering.pagers.CommentsPager;
46 import org.apache.roller.ui.rendering.pagers.Pager;
47 import org.apache.roller.ui.rendering.pagers.UsersPager;
48 import org.apache.roller.ui.rendering.pagers.WeblogEntriesListPager;
49 import org.apache.roller.ui.rendering.pagers.WeblogsPager;
50 import org.apache.roller.ui.rendering.util.WeblogPageRequest;
51 import org.apache.roller.ui.rendering.util.WeblogRequest;
52 import org.apache.roller.util.URLUtilities;
53
54
55 /**
56  * Page model that provides access to site-wide users, weblogs and entries.
57  */

58 public class SiteModel implements Model {
59     
60     private static Log log = LogFactory.getLog(SiteModel.class);
61     
62     private WebsiteData weblog = null;
63     private WeblogRequest weblogRequest = null;
64     private String JavaDoc pageLink = null;
65     private int pageNum = 0;
66     
67     
68     public String JavaDoc getModelName() {
69         return "site";
70     }
71     
72     public void init(Map JavaDoc initData) throws RollerException {
73         
74         // we expect the init data to contain a weblogRequest object
75
this.weblogRequest = (WeblogRequest) initData.get("weblogRequest");
76         if(this.weblogRequest == null) {
77             throw new RollerException("expected weblogRequest from init data");
78         }
79         
80         if (weblogRequest instanceof WeblogPageRequest) {
81             Template weblogPage = ((WeblogPageRequest)weblogRequest).getWeblogPage();
82             pageLink = (weblogPage != null) ? weblogPage.getLink() : null;
83             pageNum = ((WeblogPageRequest)weblogRequest).getPageNum();
84         }
85         
86         // extract weblog object
87
weblog = weblogRequest.getWeblog();
88     }
89     
90     //----------------------------------------------------------------- Pagers
91

92     /**
93      * Get pager ofWeblogEntry objects across all weblogs, in reverse chrono order by pubTime.
94      * @param sinceDays Limit to past X days in past (or -1 for no limit)
95      * @param length Max number of results to return
96      */

97     public Pager getWeblogEntriesPager(int sinceDays, int length) {
98         
99         String JavaDoc pagerUrl = URLUtilities.getWeblogPageURL(weblog,
100                 weblogRequest.getLocale(), pageLink,
101                 null, null, null, 0, false);
102         
103         return new WeblogEntriesListPager(
104             pagerUrl, null, null, null,
105             weblogRequest.getLocale(),
106             sinceDays,
107             pageNum,
108             length);
109     }
110     
111        
112     /**
113      * Get pager ofWeblogEntry objects across all weblogs,
114      * in reverse chrono order by pubTime.
115      * @param queryWeblog Restrict to this weblog
116      * @param sinceDays Limit to past X days in past (or -1 for no limit)
117      * @param length Max number of results to return
118      */

119     public Pager getWeblogEntriesPager(WebsiteData queryWeblog, int sinceDays, int length) {
120         return getWeblogEntriesPager(queryWeblog, null, null, sinceDays, length);
121     }
122
123     /**
124      * Get pager ofWeblogEntry objects across all weblogs,
125      * in reverse chrono order by pubTime.
126      * @param queryWeblog Restrict to this weblog
127      * @param user Restrict to this user
128      * @param sinceDays Limit to past X days in past (or -1 for no limit)
129      * @param length Max number of results to return
130      */

131     public Pager getWeblogEntriesPager(WebsiteData queryWeblog, UserData user, int sinceDays, int length) {
132         return getWeblogEntriesPager(queryWeblog, user, null, sinceDays, length);
133     }
134
135     /**
136      * Get pager ofWeblogEntry objects across all weblogs,
137      * in reverse chrono order by pubTime.
138      * @param queryWeblog Restrict to this weblog
139      * @param user Restrict to this user
140      * @param cat Restrict to this category
141      * @param sinceDays Limit to past X days in past (or -1 for no limit)
142      * @param length Max number of results to return
143      */

144     public Pager getWeblogEntriesPager(WebsiteData queryWeblog, UserData user, String JavaDoc cat, int sinceDays, int length) {
145         
146         String JavaDoc pagerUrl = URLUtilities.getWeblogPageURL(weblog,
147                 weblogRequest.getLocale(), pageLink,
148                 null, null, null, 0, false);
149         
150         return new WeblogEntriesListPager(
151             pagerUrl, queryWeblog, user, cat,
152             weblogRequest.getLocale(),
153             sinceDays,
154             pageNum,
155             length);
156     }
157     
158     
159     /*
160      * Get pager of most recent Comment objects across all weblogs,
161      * in reverse chrono order by postTime.
162      * @param offset Offset into results (for paging)
163      * @param len Max number of results to return
164      */

165     public Pager getCommentsPager(int sinceDays, int length) {
166         
167         String JavaDoc pagerUrl = URLUtilities.getWeblogPageURL(weblog,
168                 weblogRequest.getLocale(), pageLink,
169                 null, null, null, 0, false);
170         
171         return new CommentsPager(
172             pagerUrl,
173             weblogRequest.getLocale(),
174             sinceDays,
175             pageNum,
176             length);
177     }
178     
179     
180     /* Get pager of users whose names begin with specified letter */
181     public Pager getUsersByLetterPager(String JavaDoc letter, int sinceDays, int length) {
182         
183         String JavaDoc pagerUrl = URLUtilities.getWeblogPageURL(weblog,
184                 weblogRequest.getLocale(), pageLink,
185                 null, null, null, 0, false);
186         
187         if(letter != null && StringUtils.isEmpty(letter)) {
188             letter = null;
189         }
190         
191         return new UsersPager(
192             pagerUrl,
193             letter,
194             weblogRequest.getLocale(),
195             sinceDays,
196             pageNum,
197             length);
198     }
199     
200     
201     /** Get pager of weblogs whose handles begin with specified letter */
202     public Pager getWeblogsByLetterPager(String JavaDoc letter, int sinceDays, int length) {
203         
204         String JavaDoc pagerUrl = URLUtilities.getWeblogPageURL(weblog,
205                 weblogRequest.getLocale(), pageLink,
206                 null, null, null, 0, false);
207         
208         if(letter != null && StringUtils.isEmpty(letter)) {
209             letter = null;
210         }
211         
212         return new WeblogsPager(
213             pagerUrl,
214             letter,
215             weblogRequest.getLocale(),
216             sinceDays,
217             pageNum,
218             length);
219     }
220     
221     //--------------------------------------------------- User/weblog directory
222

223     /**
224      * Get map with 26 entries, one for each letter A-Z and
225      * containing integers reflecting the number of users whose
226      * names start with each letter.
227      */

228     public Map JavaDoc getUserNameLetterMap() {
229         Map JavaDoc results = new HashMap JavaDoc();
230         try {
231             Roller roller = RollerFactory.getRoller();
232             UserManager umgr = roller.getUserManager();
233             results = umgr.getUserNameLetterMap();
234         } catch (Exception JavaDoc e) {
235             log.error("ERROR: fetching username letter map", e);
236         }
237         return results;
238     }
239     
240     
241     /**
242      * Get map with 26 entries, one for each letter A-Z and
243      * containing integers reflecting the number of weblogs whose
244      * names start with each letter.
245      */

246     public Map JavaDoc getWeblogHandleLetterMap() {
247         Map JavaDoc results = new HashMap JavaDoc();
248         try {
249             Roller roller = RollerFactory.getRoller();
250             UserManager umgr = roller.getUserManager();
251             results = umgr.getWeblogHandleLetterMap();
252         } catch (Exception JavaDoc e) {
253             log.error("ERROR: fetching weblog handle letter map", e);
254         }
255         return results;
256     }
257     
258
259     /**
260      * Return list of weblogs that user belongs to.
261      */

262     public List JavaDoc getUsersWeblogs(String JavaDoc userName) {
263         List JavaDoc results = new ArrayList JavaDoc();
264         try {
265             Roller roller = RollerFactory.getRoller();
266             UserManager umgr = roller.getUserManager();
267             UserData user = umgr.getUserByUserName(userName);
268             List JavaDoc perms = umgr.getAllPermissions(user);
269             for (Iterator JavaDoc it = perms.iterator(); it.hasNext();) {
270                 PermissionsData perm = (PermissionsData) it.next();
271                 results.add(WebsiteDataWrapper.wrap(perm.getWebsite()));
272             }
273         } catch (Exception JavaDoc e) {
274             log.error("ERROR: fetching weblog list", e);
275         }
276         return results;
277     }
278     
279     
280     /**
281      * Return list of users that belong to website.
282      */

283     public List JavaDoc getWeblogsUsers(String JavaDoc handle) {
284         List JavaDoc results = new ArrayList JavaDoc();
285         try {
286             Roller roller = RollerFactory.getRoller();
287             UserManager umgr = roller.getUserManager();
288             WebsiteData website = umgr.getWebsiteByHandle(handle);
289             List JavaDoc perms = umgr.getAllPermissions(website);
290             for (Iterator JavaDoc it = perms.iterator(); it.hasNext();) {
291                 PermissionsData perm = (PermissionsData) it.next();
292                 results.add(UserDataWrapper.wrap(perm.getUser()));
293             }
294         } catch (Exception JavaDoc e) {
295             log.error("ERROR: fetching weblog list", e);
296         }
297         return results;
298     }
299     
300     
301     
302     /** Get User object by username */
303     public UserDataWrapper getUser(String JavaDoc username) {
304         UserDataWrapper wrappedUser = null;
305         try {
306             Roller roller = RollerFactory.getRoller();
307             UserManager umgr = roller.getUserManager();
308             UserData user = umgr.getUserByUserName(username, Boolean.TRUE);
309             wrappedUser = UserDataWrapper.wrap(user);
310         } catch (Exception JavaDoc e) {
311             log.error("ERROR: fetching users by letter", e);
312         }
313         return wrappedUser;
314     }
315     
316     
317     /** Get Website object by handle */
318     public WebsiteDataWrapper getWeblog(String JavaDoc handle) {
319         WebsiteDataWrapper wrappedWebsite = null;
320         try {
321             Roller roller = RollerFactory.getRoller();
322             UserManager umgr = roller.getUserManager();
323             WebsiteData website = umgr.getWebsiteByHandle(handle);
324             wrappedWebsite = WebsiteDataWrapper.wrap(website);
325         } catch (Exception JavaDoc e) {
326             log.error("ERROR: fetching users by letter", e);
327         }
328         return wrappedWebsite;
329     }
330     
331         
332     //------------------------------------------------------- Small collections
333

334     /*
335      * Get most collection of Website objects,
336      * in reverse chrono order by creationDate.
337      * @param offset Offset into results (for paging)
338      * @param len Max number of results to return
339      */

340     public List JavaDoc getNewWeblogs(int sinceDays, int length) {
341         List JavaDoc results = new ArrayList JavaDoc();
342         Calendar JavaDoc cal = Calendar.getInstance();
343         cal.setTime(new Date JavaDoc());
344         cal.add(Calendar.DATE, -1 * sinceDays);
345         Date JavaDoc startDate = cal.getTime();
346         try {
347             Roller roller = RollerFactory.getRoller();
348             UserManager umgr = roller.getUserManager();
349             List JavaDoc weblogs = umgr.getWebsites(
350                 null, Boolean.TRUE, Boolean.TRUE, startDate, null, 0, length);
351             for (Iterator JavaDoc it = weblogs.iterator(); it.hasNext();) {
352                 WebsiteData website = (WebsiteData) it.next();
353                 results.add(WebsiteDataWrapper.wrap(website));
354             }
355         } catch (Exception JavaDoc e) {
356             log.error("ERROR: fetching weblog list", e);
357         }
358         return results;
359     }
360            
361
362     /*
363      * Get most recent User objects, in reverse chrono order by creationDate.
364      * @param offset Offset into results (for paging)
365      * @param len Max number of results to return
366      */

367     public List JavaDoc getNewUsers(int sinceDays, int length) {
368         List JavaDoc results = new ArrayList JavaDoc();
369         try {
370             Roller roller = RollerFactory.getRoller();
371             UserManager umgr = roller.getUserManager();
372             List JavaDoc users = umgr.getUsers(0, length);
373             for (Iterator JavaDoc it = users.iterator(); it.hasNext();) {
374                 UserData user = (UserData) it.next();
375                 results.add(UserDataWrapper.wrap(user));
376             }
377         } catch (Exception JavaDoc e) {
378             log.error("ERROR: fetching weblog list", e);
379         }
380         return results;
381     }
382     
383     
384     /**
385      * Get list of WebsiteDisplay objects, ordered by number of hits.
386      * @param sinceDays Only consider weblogs updated in the last sinceDays
387      * @param len Max number of results to return
388      */

389     public List JavaDoc getHotWeblogs(int sinceDays, int length) {
390         List JavaDoc results = new ArrayList JavaDoc();
391         try {
392             Roller roller = RollerFactory.getRoller();
393             RefererManager rmgr = roller.getRefererManager();
394             results = rmgr.getHotWeblogs(sinceDays, 0, length);
395         } catch (Exception JavaDoc e) {
396             log.error("ERROR: fetching hot weblog list", e);
397         }
398         return results;
399     }
400     
401     
402     /**
403      * Get most collection of most commented websites, as StatCount objects,
404      * in descending order by number of comments.
405      * @param sinceDays Only consider weblogs updated in the last sinceDays
406      * @param offset Offset into results (for paging)
407      * @param length Max number of results to return
408      */

409     public List JavaDoc getMostCommentedWeblogs(int sinceDays , int length) {
410         List JavaDoc results = new ArrayList JavaDoc();
411         Calendar JavaDoc cal = Calendar.getInstance();
412         cal.setTime(new Date JavaDoc());
413         cal.add(Calendar.DATE, -1 * sinceDays);
414         Date JavaDoc startDate = cal.getTime();
415         try {
416             Roller roller = RollerFactory.getRoller();
417             UserManager umgr = roller.getUserManager();
418             results = umgr.getMostCommentedWebsites(
419                     startDate, new Date JavaDoc(), 0, length);
420         } catch (Exception JavaDoc e) {
421             log.error("ERROR: fetching commented weblog list", e);
422         }
423         return results;
424     }
425     
426     
427     /**
428      * Get most commented weblog entries across all weblogs, as StatCount
429      * objects, in descending order by number of comments.
430      * @param sinceDays Only consider weblogs updated in the last sinceDays
431      * @param cats To limit results to list of category names
432      * @param len Max number of results to return
433      */

434     public List JavaDoc getMostCommentedWeblogEntries(
435             List JavaDoc cats, int sinceDays, int length) {
436         List JavaDoc results = new ArrayList JavaDoc();
437         Calendar JavaDoc cal = Calendar.getInstance();
438         cal.setTime(new Date JavaDoc());
439         cal.add(Calendar.DATE, -1 * sinceDays);
440         Date JavaDoc startDate = cal.getTime();
441         try {
442             Roller roller = RollerFactory.getRoller();
443             WeblogManager wmgr = roller.getWeblogManager();
444             results = wmgr.getMostCommentedWeblogEntries(
445                     null, startDate, new Date JavaDoc(), 0, length);
446         } catch (Exception JavaDoc e) {
447             log.error("ERROR: fetching commented weblog entries list", e);
448         }
449         return results;
450     }
451     
452     /**
453      * Get pinned entries.
454      * @param sinceDays Only consider weblogs updated in the last sinceDays
455      * @param length Max number of results to return
456      */

457     public List JavaDoc getPinnedWeblogEntries(int length) {
458         List JavaDoc results = new ArrayList JavaDoc();
459         try {
460             Roller roller = RollerFactory.getRoller();
461             WeblogManager wmgr = roller.getWeblogManager();
462             List JavaDoc weblogs = wmgr.getWeblogEntriesPinnedToMain(new Integer JavaDoc(length));
463             for (Iterator JavaDoc it = weblogs.iterator(); it.hasNext();) {
464                 WeblogEntryData entry = (WeblogEntryData) it.next();
465                 results.add(WeblogEntryDataWrapper.wrap(entry));
466             }
467         } catch (Exception JavaDoc e) {
468             log.error("ERROR: fetching pinned weblog entries", e);
469         }
470         return results;
471     }
472 }
473
Popular Tags