1 18 19 package org.apache.roller.ui.rendering.velocity.deprecated; 20 21 import java.util.ArrayList ; 22 import java.util.Calendar ; 23 import java.util.Collection ; 24 import java.util.Collections ; 25 import java.util.Date ; 26 import java.util.HashMap ; 27 import java.util.Iterator ; 28 import java.util.List ; 29 import java.util.Map ; 30 import java.util.TimeZone ; 31 import javax.servlet.http.HttpServletRequest ; 32 import org.apache.commons.logging.Log; 33 import org.apache.commons.logging.LogFactory; 34 import org.apache.roller.RollerException; 35 import org.apache.roller.config.RollerRuntimeConfig; 36 import org.apache.roller.model.BookmarkManager; 37 import org.apache.roller.model.RefererManager; 38 import org.apache.roller.model.RollerFactory; 39 import org.apache.roller.pojos.Template; 40 import org.apache.roller.model.UserManager; 41 import org.apache.roller.model.WeblogManager; 42 import org.apache.roller.pojos.CommentData; 43 import org.apache.roller.pojos.FolderData; 44 import org.apache.roller.pojos.RefererData; 45 import org.apache.roller.pojos.WeblogCategoryData; 46 import org.apache.roller.pojos.WeblogEntryData; 47 import org.apache.roller.pojos.WebsiteData; 48 import org.apache.roller.pojos.wrapper.CommentDataWrapper; 49 import org.apache.roller.pojos.wrapper.FolderDataWrapper; 50 import org.apache.roller.pojos.wrapper.RefererDataWrapper; 51 import org.apache.roller.pojos.wrapper.TemplateWrapper; 52 import org.apache.roller.pojos.wrapper.WeblogCategoryDataWrapper; 53 import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper; 54 import org.apache.roller.pojos.wrapper.WebsiteDataWrapper; 55 import org.apache.roller.ui.core.RollerSession; 56 import org.apache.roller.util.DateUtil; 57 import org.apache.commons.lang.StringUtils; 58 59 60 63 public class OldWeblogPageModel { 64 public final static String VELOCITY_NULL = "nil"; 65 66 protected static Log mLogger = 67 LogFactory.getFactory().getInstance(OldWeblogPageModel.class); 68 69 private BookmarkManager mBookmarkMgr = null; 70 private WeblogManager mWeblogMgr = null; 71 private UserManager mUserMgr = null; 72 private RefererManager mRefererMgr = null; 73 74 private Map mCategories = new HashMap (); 75 private HashMap mPageMap = new HashMap (); 76 private HttpServletRequest mRequest = null; 77 private WebsiteData mWebsite = null; 78 private WeblogEntryData mEntry = null; 79 private WeblogCategoryData mCategory = null; 80 private Date mDate = null; 81 private boolean mIsDaySpecified = false; 82 private boolean mIsMonthSpecified = false; 83 private String mLocale = null; 84 private WeblogEntryDataWrapper mNextEntry = null; 85 private WeblogEntryDataWrapper mPreviousEntry = null; 86 private WeblogEntryDataWrapper mLastEntry = null; 87 private WeblogEntryDataWrapper mFirstEntry = null; 88 89 91 92 public OldWeblogPageModel() {} 93 94 public String getModelName() { 95 return "pageModel"; 96 } 97 98 101 public void init(HttpServletRequest request, 102 WebsiteData website, 103 WeblogEntryData entry, 104 WeblogCategoryData category, 105 Date date, 106 boolean isDay, 107 boolean isMonth, 108 String locale) { 109 110 mRequest = request; 111 112 mWebsite = website; 114 mEntry = entry; 115 mCategory = category; 116 mDate = date; 117 mIsDaySpecified = isDay; 118 mIsMonthSpecified = isMonth; 119 mLocale = locale; 120 121 try { 122 mBookmarkMgr = RollerFactory.getRoller().getBookmarkManager(); 123 mRefererMgr = RollerFactory.getRoller().getRefererManager(); 124 mUserMgr = RollerFactory.getRoller().getUserManager(); 125 mWeblogMgr = RollerFactory.getRoller().getWeblogManager(); 126 127 130 if (mWebsite != null) { 132 133 List pages = mWebsite.getPages(); 135 Iterator pageIter = pages.iterator(); 136 while (pageIter.hasNext()) { 137 Template page = (Template) pageIter.next(); 138 mPageMap.put(page.getName(), TemplateWrapper.wrap(page)); 139 } 140 } 141 142 } catch (RollerException e) { 143 mLogger.error("PageModel Roller get*Manager Exception", e); 144 } 145 } 146 147 149 150 public Collection getBookmarks(FolderDataWrapper folder) { 151 Collection bookmarks = null; 152 if (folder != null) { 153 mLogger.debug("Getting bookmarks for folder : "+folder.getName()); 154 155 bookmarks = folder.getBookmarks(); 158 159 } 163 return bookmarks; 164 } 165 166 168 169 public Collection getTopLevelFolders() { 170 List tops = null; 171 try { 172 Collection mTops = mBookmarkMgr.getRootFolder( 173 mUserMgr.getWebsiteByHandle(mWebsite.getHandle())).getFolders(); 174 175 tops = new ArrayList (mTops.size()); 177 Iterator it = mTops.iterator(); 178 int i=0; 179 while(it.hasNext()) { 180 tops.add(i, FolderDataWrapper.wrap((FolderData) it.next())); 181 i++; 182 } 183 } catch (RollerException e) { 184 tops = new ArrayList (); 185 } 186 return tops; 187 } 188 189 191 192 public int getCommentCount(String entryId) { 193 return getCommentCount(entryId, true, true); 194 } 195 196 197 public int getCommentCount(String entryId, boolean noSpam, boolean approvedOnly) { 198 try { 199 WeblogEntryData entry = mWeblogMgr.getWeblogEntry(entryId); 200 return entry.getComments(noSpam, approvedOnly).size(); 201 } catch (RollerException alreadyLogged) {} 202 return 0; 203 } 204 205 207 208 public List getComments(WeblogEntryDataWrapper entry) { 209 return getComments(entry, true, true); 210 } 211 212 213 public List getComments(WeblogEntryDataWrapper wrapper, boolean noSpam, boolean approvedOnly) { 214 WeblogEntryData entry = wrapper.getPojo(); 215 List comments = new ArrayList (); 216 List unwrappped = entry.getComments(noSpam, approvedOnly); 217 comments = new ArrayList (unwrappped.size()); 218 Iterator it = unwrappped.iterator(); 219 while(it.hasNext()) { 220 comments.add(CommentDataWrapper.wrap((CommentData)it.next())); 221 } 222 return comments; 223 } 224 225 227 228 public int getDayHits() { 229 try { 230 return mRefererMgr.getDayHits(mWebsite); 231 } catch (RollerException e) { 232 mLogger.error("PageModel getDayHits()", e); 233 } 234 return 0; 235 } 236 237 239 240 public FolderDataWrapper getFolder(String folderPath) { 241 try { 242 return FolderDataWrapper.wrap( 243 mBookmarkMgr.getFolder( 244 mUserMgr.getWebsiteByHandle(mWebsite.getHandle()), folderPath)); 245 } catch (RollerException e) { 246 mLogger.error("PageModel getFolder()", e); 247 } 248 return null; 249 } 250 251 253 254 public TemplateWrapper getUsersPageByName(WebsiteDataWrapper wrapper, String pageName) { 255 WebsiteData website = wrapper.getPojo(); 256 TemplateWrapper page = null; 257 try { 258 if (website == null) 259 throw new NullPointerException ("website is null"); 260 261 if (pageName == null) 262 throw new NullPointerException ("pageName is null"); 263 264 page = TemplateWrapper.wrap(website.getPageByName(pageName)); 265 } catch (NullPointerException npe) { 266 mLogger.warn(npe.getMessage()); 267 } catch (RollerException e) { 268 mLogger.error("ERROR getting user's page by name: " + e.getMessage(),e); 269 } 270 return page; 271 } 272 273 275 276 public TemplateWrapper getPageByName(String pageName) { 277 return (TemplateWrapper) mPageMap.get(pageName); 278 } 279 280 282 283 public String getPageIdByName(String pageName) { 284 mLogger.debug("looking up page ["+pageName+"]"); 285 286 String template_id = null; 287 288 try { 289 Template pd = mWebsite.getPageByName(pageName); 290 if(pd != null) { 291 template_id = pd.getId(); 292 } 293 } catch(Exception e) { 294 mLogger.error(e); 295 } 296 297 mLogger.debug("returning template id ["+template_id+"]"); 298 299 return template_id; 300 } 301 302 304 308 public Object getPages() { 309 return mPageMap.values(); 310 } 311 312 314 337 public Map getRecentWeblogEntries(int maxEntries, String catName) { 338 if (VELOCITY_NULL.equals(catName)) catName = null; 339 Map ret = new HashMap (); 340 try { 341 String catParam = null; 343 if (mCategory != null) { 344 catParam = mCategory.getPath(); 345 } else if (catName != null) { 346 catParam = catName; 348 } else if (mWebsite != null) { 350 catParam = mWebsite.getDefaultCategory().getPath(); 351 if (catParam.equals("/")) { 352 catParam = null; 353 } 354 } 355 356 Calendar cal = null; 357 if (mWebsite != null) { 358 TimeZone tz = mWebsite.getTimeZoneInstance(); 359 cal = Calendar.getInstance(tz); 360 } else { 361 cal = Calendar.getInstance(); 362 } 363 int limit = mWebsite.getEntryDisplayCount(); 364 Date startDate = null; 365 Date endDate = mDate; 366 if (endDate == null) endDate = new Date (); 367 if (mIsDaySpecified) { 368 endDate = DateUtil.getEndOfDay(endDate, cal); 371 startDate = DateUtil.getStartOfDay(endDate, cal); 372 limit = -1; 374 } else if (mIsMonthSpecified) { 375 endDate = DateUtil.getEndOfMonth(endDate, cal); 376 } 377 Map mRet = RollerFactory.getRoller().getWeblogManager().getWeblogEntryObjectMap( 378 mWebsite, 379 startDate, endDate, catParam, WeblogEntryData.PUBLISHED, mLocale, 0, limit); 384 385 java.util.Date key = null; 387 Iterator days = mRet.keySet().iterator(); 388 while(days.hasNext()) { 389 key = (java.util.Date )days.next(); 390 391 List wrappedEntries = new ArrayList (); 393 List entries = (List ) mRet.get(key); 394 for(int i=0; i < entries.size(); i++) { 395 wrappedEntries.add(i, 396 WeblogEntryDataWrapper.wrap((WeblogEntryData)entries.get(i))); 397 } 398 mRet.put(key, wrappedEntries); 399 } 400 401 ret = mRet; 402 403 setFirstAndLastEntries( ret ); 404 } catch (Exception e) { 405 mLogger.error("PageModel getRecentWeblogEntries()", e); 406 } 407 return ret; 408 } 409 410 412 416 private void setFirstAndLastEntries(Map days) { 417 int numDays = days.keySet().size(); 418 if (numDays > 0) { 420 Object [] keys = days.keySet().toArray(new Object [numDays]); 422 List vals = (List )days.get( keys[0] ); 423 int valSize = vals.size(); 424 if (valSize > 0) { 425 mFirstEntry = (WeblogEntryDataWrapper)vals.get(0); 426 } 427 428 vals = (List )days.get( keys[--numDays] ); 430 valSize = vals.size(); 431 if (valSize > 0) { 432 mLastEntry = (WeblogEntryDataWrapper)vals.get(--valSize); 433 } 434 } 435 } 436 437 439 452 public List getRecentWeblogEntriesArray(int maxEntries, String categoryName) { 453 if (VELOCITY_NULL.equals(categoryName)) categoryName = null; 454 List ret = new ArrayList (); 455 try { 456 Date day = mDate; 457 if (day == null) day = new Date (); 458 459 String catParam = null; 461 if (mCategory != null) { 462 catParam = mCategory.getPath(); 463 } else if (categoryName != null) { 464 catParam = categoryName; 466 } else if (mWebsite != null) { 468 catParam = mWebsite.getDefaultCategory().getPath(); 469 if (catParam.equals("/")) { 470 catParam = null; 471 } 472 } 473 WeblogManager mgr = RollerFactory.getRoller().getWeblogManager(); 474 475 478 List mEntries = mgr.getWeblogEntries( 479 mWebsite, 480 null, 481 null, day, catParam, WeblogEntryData.PUBLISHED, null, mLocale, 0, mWebsite.getEntryDisplayCount()); 487 488 ret = new ArrayList (mEntries.size()); 490 Iterator it = mEntries.iterator(); 491 int i=0; 492 while(it.hasNext()) { 493 ret.add(i, WeblogEntryDataWrapper.wrap((WeblogEntryData) it.next())); 494 i++; 495 } 496 } catch (Exception e) { 497 mLogger.error("PageModel getRecentWeblogEntries()", e); 498 } 499 return ret; 500 } 501 502 504 505 public List getReferers(String date) { 506 date = date.trim(); 507 ArrayList referers = new ArrayList (); 508 try { 509 List refs = 510 mRefererMgr.getReferersToDate(mWebsite, date); 511 RollerSession rses = 512 RollerSession.getRollerSession(mRequest); 513 514 for (Iterator rdItr = refs.iterator(); rdItr.hasNext();) { 515 RefererData referer = (RefererData) rdItr.next(); 516 String title =referer.getTitle(); 517 String excerpt = referer.getExcerpt(); 518 if ( StringUtils.isNotEmpty(title) 519 && StringUtils.isNotEmpty(excerpt) ) { 520 if ( referer.getVisible().booleanValue() 521 || rses.isUserAuthorizedToAdmin(referer.getWebsite()) ) { 522 referers.add(RefererDataWrapper.wrap(referer)); 523 } 524 } 525 } 526 527 } catch (Exception e) { 528 mLogger.error("PageModel getReferersToDate() fails with URL" 529 + mRequest.getRequestURL(), e); 530 } 531 return referers; 532 } 533 534 535 public List getEntryReferers(WeblogEntryDataWrapper entry) { 536 ArrayList referers = new ArrayList (); 537 try { 538 List refs = mRefererMgr.getReferersToEntry(entry.getId()); 539 RollerSession rses = 540 RollerSession.getRollerSession(mRequest); 541 542 for (Iterator rdItr = refs.iterator(); rdItr.hasNext();) { 543 RefererData referer = (RefererData) rdItr.next(); 544 String title =referer.getTitle(); 545 String excerpt = referer.getExcerpt(); 546 if ( StringUtils.isNotEmpty(title) 547 && StringUtils.isNotEmpty(excerpt) ) { 548 if (referer.getVisible().booleanValue() 549 || rses.isUserAuthorizedToAdmin(referer.getWebsite()) ) { 550 referers.add(RefererDataWrapper.wrap(referer)); 551 } 552 } 553 } 554 555 } catch (Exception e) { 556 mLogger.error("PageModel getReferersToDate() fails with URL" 557 + mRequest.getRequestURL(), e); 558 } 559 return referers; 560 } 561 562 564 565 public List getTodaysReferers() { 566 return mWebsite.getTodaysReferrers(); 567 } 568 569 571 572 public int getTotalHits() { 573 return mWebsite.getTodaysHits(); 574 } 575 576 582 public static Date getUpdateTime( ArrayList weblogEntries ) { 583 Date updateTime = null; 584 Iterator iter = weblogEntries.iterator(); 585 while (iter.hasNext()) { 586 WeblogEntryData wd = (WeblogEntryData)iter.next(); 588 if ( updateTime == null ) { 589 updateTime = wd.getUpdateTime(); 590 } 591 else if (updateTime.before( wd.getUpdateTime() )) { 593 updateTime = wd.getUpdateTime(); 594 } 595 } 596 return updateTime; 597 } 598 599 601 602 public List getWeblogCategories(String categoryName) { 603 List ret = null; 604 if (VELOCITY_NULL.equals(categoryName)) categoryName = null; 605 606 if (categoryName != null) { 608 ret = (List )mCategories.get(categoryName); 609 } else { 610 ret = (List )mCategories.get("zzz_null_zzz"); 611 } 612 613 if (null == ret) { 614 try { 615 WeblogCategoryData category = null; 616 if (categoryName != null) { 617 category = mWeblogMgr.getWeblogCategoryByPath( 618 mWebsite, null, categoryName); 619 } else { 620 category = mWebsite.getDefaultCategory(); 621 } 622 623 List mRet = category.getWeblogCategories(); 624 625 ret = new ArrayList (mRet.size()); 627 Iterator it = mRet.iterator(); 628 int i=0; 629 while(it.hasNext()) { 630 ret.add(i, WeblogCategoryDataWrapper.wrap((WeblogCategoryData)it.next())); 631 i++; 632 } 633 if (categoryName != null) { 634 mCategories.put(categoryName, ret); 635 } else { 636 mCategories.put("zzz_null_zzz", ret); 637 } 638 } catch (RollerException e) { 639 mLogger.error(e); 640 } 641 } 642 return ret; 643 } 644 645 647 648 public WeblogEntryDataWrapper getWeblogEntry() { 649 650 if(mEntry != null && mEntry.getStatus().equals(WeblogEntryData.PUBLISHED)) 651 return WeblogEntryDataWrapper.wrap(mEntry); 652 else 653 return null; 654 } 655 656 658 661 public WeblogEntryDataWrapper getNextEntry() { 662 WeblogEntryDataWrapper currentEntry = getWeblogEntry(); 663 if (mFirstEntry != null) currentEntry = mFirstEntry; 664 if (mNextEntry == null && currentEntry != null) { 665 String catName = null; 666 if (mCategory != null) { 667 catName = mCategory.getName(); 668 } 669 try { 670 WeblogEntryData nextEntry = 671 mWeblogMgr.getNextEntry(currentEntry.getPojo(), catName, mLocale); 672 673 if(nextEntry != null) 674 mNextEntry = WeblogEntryDataWrapper.wrap(nextEntry); 675 676 if (mNextEntry != null && 678 mNextEntry.getPubTime().after( new Date () )) { 679 mNextEntry = null; 680 } 681 } catch (RollerException e) { 682 mLogger.error("PageModel.getNextEntry)", e); 683 } 684 } 685 return mNextEntry; 686 } 687 688 690 693 public WeblogEntryDataWrapper getPreviousEntry() { 694 WeblogEntryDataWrapper currentEntry = getWeblogEntry(); 695 if (mLastEntry != null) currentEntry = mLastEntry; 696 if (mPreviousEntry == null && currentEntry != null ) { 697 String catName = null; 698 if (mCategory != null) { 699 catName = mCategory.getName(); 700 } 701 try { 702 WeblogEntryData prevEntry = 703 mWeblogMgr.getPreviousEntry(currentEntry.getPojo(), catName, mLocale); 704 705 if(prevEntry != null) 706 mPreviousEntry = WeblogEntryDataWrapper.wrap(prevEntry); 707 } catch (RollerException e) { 708 mLogger.error("PageModel.getPreviousEntry)", e); 709 } 710 } 711 return mPreviousEntry; 712 } 713 714 716 public boolean isUserAuthorizedToEdit() { 717 try { 718 RollerSession rses = 719 RollerSession.getRollerSession(mRequest); 720 if (rses.getAuthenticatedUser() != null && mWebsite != null) { 721 return rses.isUserAuthorizedToAuthor(mWebsite); 722 } 723 } catch (Exception e) { 724 mLogger.warn("PageModel.isUserAuthorizedToEdit()", e); 725 } 726 return false; 727 } 728 729 731 public boolean isUserAuthorizedToAdmin() { 732 try { 733 RollerSession rses = 734 RollerSession.getRollerSession(mRequest); 735 if (rses.getAuthenticatedUser() != null && mWebsite != null) { 736 return rses.isUserAuthorizedToAdmin(mWebsite); 737 } 738 } catch (Exception e) { 739 mLogger.warn("PageModel.isUserAuthorizedToAdmin()", e); 740 } 741 return false; 742 } 743 744 746 public boolean isUserAuthenticated() { 747 return (mRequest.getUserPrincipal() != null); 748 } 749 750 752 public String getRequestParameter(String key) { 753 return mRequest.getParameter(key); 754 } 755 756 public int getIntRequestParameter(String key) { 757 return Integer.parseInt(mRequest.getParameter(key)); 758 } 759 760 762 public FolderDataWrapper getFolderByPath(String path) { 763 try { 764 FolderData folder = mBookmarkMgr.getFolderByPath( 765 mWebsite, null, path); 766 767 if(folder != null) 768 return FolderDataWrapper.wrap(folder); 769 } catch (RollerException e) { 770 mLogger.error(e); 771 } 772 773 return null; 774 } 775 776 782 public List getRecentComments(int maxCount) { 783 List recentComments = new ArrayList (); 784 try { 785 WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager(); 786 List recent = wmgr.getComments( 787 mWebsite, 788 null, null, null, null, null, Boolean.TRUE, Boolean.FALSE, true, 0, maxCount); 799 recentComments = new ArrayList (recent.size()); 801 Iterator it = recent.iterator(); 802 while(it.hasNext()) { 803 recentComments.add(CommentDataWrapper.wrap((CommentData) it.next())); 804 } 805 } catch (RollerException e) { 806 mLogger.error(e); 807 } 808 return recentComments; 809 } 810 811 public boolean getEmailComments() { 812 if (mWebsite != null) { 813 boolean emailComments = RollerRuntimeConfig.getBooleanProperty("users.comments.emailnotify"); 814 return (mWebsite.getEmailComments().booleanValue() && emailComments); 815 } 816 return false; 817 } 818 } 819 | Popular Tags |