1 24 package org.riotfamily.pages.riot.chooser; 25 26 import java.util.ArrayList ; 27 import java.util.Collection ; 28 import java.util.HashMap ; 29 import java.util.Iterator ; 30 import java.util.List ; 31 import java.util.Locale ; 32 33 import javax.servlet.http.HttpServletRequest ; 34 import javax.servlet.http.HttpServletResponse ; 35 36 import org.riotfamily.common.util.ResourceUtils; 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.PageLocationResolver; 41 import org.springframework.util.StringUtils; 42 import org.springframework.web.bind.ServletRequestUtils; 43 import org.springframework.web.servlet.ModelAndView; 44 import org.springframework.web.servlet.mvc.Controller; 45 import org.springframework.web.servlet.support.RequestContextUtils; 46 47 public class PageChooserController implements Controller { 48 49 private PageDao pageDao; 50 51 private PageLocationResolver resolver; 52 53 private String viewName = ResourceUtils.getPath( 54 PageChooserController.class, "PageChooserView.ftl"); 55 56 57 public PageChooserController(PageDao pageDao, PageLocationResolver resolver) { 58 this.pageDao = pageDao; 59 this.resolver = resolver; 60 } 61 62 private Locale getLocale(HttpServletRequest request) { 63 String localeString = request.getParameter("locale"); 64 if (localeString != null) { 65 return StringUtils.parseLocaleString(localeString); 66 } 67 List locales = pageDao.getLocales(); 68 if (locales != null && !locales.isEmpty()) { 69 if (locales.size() == 1) { 70 return (Locale ) locales.get(0); 71 } 72 Locale locale = RequestContextUtils.getLocale(request); 73 if (!locales.contains(locale)) { 74 locale = (Locale ) locales.get(0); 75 } 76 return locale; 77 } 78 return null; 79 } 80 81 public ModelAndView handleRequest(HttpServletRequest request, 82 HttpServletResponse response) throws Exception { 83 84 Long siteId = ServletRequestUtils.getLongParameter(request, "site"); 85 Site site = siteId != null 86 ? pageDao.loadSite(siteId) 87 : pageDao.getDefaultSite(); 88 89 Locale locale = getLocale(request); 90 91 HashMap model = new HashMap (); 92 model.put("mode", ServletRequestUtils.getStringParameter( 93 request, "mode", "forms")); 94 95 model.put("locales", pageDao.getLocales()); 96 model.put("selectedLocale", locale); 97 model.put("sites", pageDao.listSites()); 98 model.put("selectedSite", site); 99 model.put("pages", createpageLinks( 100 pageDao.findRootNode(site).getChildPages(locale))); 101 102 return new ModelAndView(viewName, model); 103 } 104 105 private List createpageLinks(Collection pages) { 106 ArrayList links = new ArrayList (); 107 Iterator it = pages.iterator(); 108 while (it.hasNext()) { 109 Page page = (Page) it.next(); 110 if (!page.isWildcardInPath()) { 111 PageLink link = new PageLink(); 112 link.setPathComponent(page.getPathComponent()); 113 link.setLink(resolver.getUrl(page)); 114 link.setTitle(page.getProperty("title", true)); 115 link.setPublished(page.isPublished()); 116 link.setChildPages(createpageLinks(page.getChildPages())); 117 links.add(link); 118 } 119 } 120 return links; 121 } 122 } 123 | Popular Tags |