001 package org.trails.page;
002
003 import org.apache.commons.logging.Log;
004 import org.apache.commons.logging.LogFactory;
005 import org.apache.hivemind.impl.MessageFormatter;
006 import org.apache.hivemind.util.Defense;
007 import org.apache.tapestry.IPage;
008 import org.apache.tapestry.IRequestCycle;
009 import org.apache.tapestry.PageNotFoundException;
010
011 import java.util.HashMap;
012 import java.util.Map;
013
014 public class DefaultPageResolver implements PageResolver
015 {
016 private static final Log LOG = LogFactory.getLog(DefaultPageResolver.class);
017
018 private String defaultPrefix = "Default";
019
020 private boolean cacheDisabled = System.getProperty("org.apache.tapestry.disable-caching") != null;
021
022 private Map<PageType, String> postFixMap;
023
024 public String getPostFix(PageType pageType)
025 {
026 return getPostFixMap().get(pageType);
027 }
028
029 public IPage resolvePage(IRequestCycle cycle, Class type, PageType pageType)
030 {
031 Defense.notNull(type, "type");
032 Defense.notNull(pageType, "pageType");
033
034 String pageName = type.getSimpleName() + getPostFix(pageType);
035 IPage page = null;
036 try
037 {
038 page = cycle.getPage(pageName);
039
040 } catch (PageNotFoundException ae)
041 {
042 page = cycle.getPage(getDefaultPrefix() + getPostFix(pageType));
043
044 if (!cacheDisabled)
045 {
046 if (LOG.isDebugEnabled())
047 LOG.debug(_formatter.format("installing-page", pageName, page.getNamespace(), page.getSpecification()));
048 page.getNamespace().installPageSpecification(pageName, page.getSpecification());
049 page = cycle.getPage(pageName);
050 }
051 }
052 return page;
053 }
054
055 public Map<PageType, String> getPostFixMap()
056 {
057 return postFixMap;
058 }
059
060 public void setPostFixMap(Map<PageType, String> postFixMap)
061 {
062 this.postFixMap = postFixMap;
063 }
064
065 public DefaultPageResolver()
066 {
067 postFixMap = new HashMap<PageType, String>();
068 for (PageType pageType : PageType.values())
069 {
070 postFixMap.put(pageType, pageType.toString());
071 }
072 }
073
074 public String getDefaultPrefix()
075 {
076 return defaultPrefix;
077 }
078
079 public void setDefaultPrefix(String defaultPostfix)
080 {
081 this.defaultPrefix = defaultPostfix;
082 }
083
084 public void setCacheDisabled(boolean cacheDisabled)
085 {
086 this.cacheDisabled = cacheDisabled;
087 }
088
089 private static final MessageFormatter _formatter = new MessageFormatter(LOG, "org.apache.tapestry.resolver.ResolverStrings");
090 }