1 25 package org.riotfamily.pages.macro; 26 27 import java.util.ArrayList ; 28 import java.util.Collection ; 29 import java.util.Iterator ; 30 import java.util.List ; 31 import java.util.Locale ; 32 33 import javax.servlet.http.HttpServletRequest ; 34 35 import org.riotfamily.components.context.PageRequestUtils; 36 import org.riotfamily.components.editor.EditModeUtils; 37 import org.riotfamily.pages.Page; 38 import org.riotfamily.pages.Site; 39 import org.riotfamily.pages.dao.PageDao; 40 import org.riotfamily.pages.mapping.PageHandlerMapping; 41 import org.riotfamily.pages.mapping.PageLocationResolver; 42 import org.springframework.util.StringUtils; 43 44 48 public class PageMacroHelper { 49 50 private static final String PAGE_REFRESHED = PageMacroHelper.class.getName() 51 + ".refreshedPage"; 52 53 private PageDao pageDao; 54 55 private PageLocationResolver resolver; 56 57 private HttpServletRequest request; 58 59 public PageMacroHelper(PageDao pageDao, PageLocationResolver resolver, 60 HttpServletRequest request) { 61 62 this.pageDao = pageDao; 63 this.resolver = resolver; 64 this.request = request; 65 } 66 67 public Page getCurrentPage() { 68 Page page = PageHandlerMapping.getPage(request); 69 if (PageRequestUtils.isPartialRequest(request) 70 && request.getAttribute(PAGE_REFRESHED) == null) { 71 72 pageDao.refreshPage(page); 73 request.setAttribute(PAGE_REFRESHED, Boolean.TRUE); 74 } 75 return page; 76 } 77 78 public Page getPageForHandler(String handlerName, String localeString) { 79 Locale locale = StringUtils.parseLocaleString(localeString); 80 return getPageForHandler(handlerName, locale); 81 } 82 83 public Page getPageForHandler(String handlerName, Locale locale) { 84 return pageDao.findPageForHandler(handlerName, locale); 85 } 86 87 public List getPagesForHandler(String handlerName, Locale locale) { 88 return pageDao.findPagesForHandler(handlerName, locale); 89 } 90 91 public Collection getTopLevelPages(Locale locale) { 92 Site site = getCurrentPage().getNode().getSite(); 93 return pageDao.findRootNode(site).getChildPages(locale); 94 } 95 96 public String getUrl(Page page) { 97 if (page != null) { 98 return resolver.getUrl(page); 99 } 100 return null; 101 } 102 103 public boolean isVisible(Page page) { 104 return !page.isHidden() && !page.getNode().isHidden() 105 && (page.isEnabled() || EditModeUtils.isEditMode(request)); 106 } 107 108 public Collection getVisiblePages(Collection pages) { 109 ArrayList result = new ArrayList (); 110 Iterator it = pages.iterator(); 111 while (it.hasNext()) { 112 Page page = (Page) it.next(); 113 if (isVisible(page)) { 114 result.add(page); 115 } 116 } 117 return result; 118 } 119 120 public List group(Collection pages, int size) { 121 ArrayList groups = new ArrayList (); 122 int i = 0; 123 ArrayList group = null; 124 Iterator it = pages.iterator(); 125 while (it.hasNext()) { 126 Page page = (Page) it.next(); 127 if (isVisible(page)) { 128 if (i++ % size == 0) { 129 group = new ArrayList (); 130 groups.add(group); 131 } 132 group.add(page); 133 } 134 } 135 return groups; 136 } 137 } 138 | Popular Tags |