You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by dd...@apache.org on 2006/12/18 22:54:38 UTC
svn commit: r488435 -
/struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java
Author: ddewolf
Date: Mon Dec 18 13:54:38 2006
New Revision: 488435
URL: http://svn.apache.org/viewvc?view=rev&rev=488435
Log:
adding flexibility to apply different tiles to different subtrees
Modified:
struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java
Modified: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java?view=diff&rev=488435&r1=488434&r2=488435
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java (original)
+++ struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java Mon Dec 18 13:54:38 2006
@@ -38,6 +38,9 @@
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
+import java.util.Map;
+import java.util.Enumeration;
+import java.util.HashMap;
/**
* Decoration Filter. Intercepts all requests and decorates them
@@ -86,6 +89,8 @@
private String definitionName = "layout";
+ private Map<String, String> alternateDefinitions;
+
private ComponentContextMutator mutator = null;
public FilterConfig getFilterConfig() {
@@ -108,6 +113,8 @@
definitionName = temp;
}
+ alternateDefinitions = parseAlternateDefinitions();
+
temp = config.getInitParameter("mutator");
if(temp != null) {
try {
@@ -120,6 +127,22 @@
}
}
+ protected Map<String, String> parseAlternateDefinitions() {
+ Map<String, String> map = new HashMap<String, String>();
+ Enumeration<String> e = filterConfig.getInitParameterNames();
+ while(e.hasMoreElements()) {
+ String parm = e.nextElement();
+ if(parm.startsWith("definition(") && parm.endsWith("*)")) {
+ String value = filterConfig.getInitParameter(parm);
+ String mask = parm.substring("definition(".length());
+ mask = mask.substring(0, mask.lastIndexOf("*)"));
+ map.put(mask, value);
+ LOG.info("Mapping all requests matching '"+mask+"*' to definition '"+value+"'");
+ }
+ }
+ return map;
+ }
+
public void destroy() {
filterConfig = null;
}
@@ -130,13 +153,25 @@
TilesContainer container = TilesAccess.getContainer(getServletContext());
mutator.mutate(container.getComponentContext(req, res), req);
try {
+ String definitionName = getDefinitionForRequest(req);
container.render(req, res, definitionName);
} catch (TilesException e) {
- throw new ServletException("Error wrapping jsp with tile definition.", e);
+ throw new ServletException("Error wrapping jsp with tile definition. "+e.getMessage(), e);
}
}
-
+ private String getDefinitionForRequest(ServletRequest request) {
+ if(alternateDefinitions.size() < 1) {
+ return definitionName;
+ }
+ String base = getRequestBase(request);
+ for(Map.Entry<String, String> pair : alternateDefinitions.entrySet()) {
+ if(base.startsWith(pair.getKey())) {
+ return pair.getValue();
+ }
+ }
+ return definitionName;
+ }
private String getRequestBase(ServletRequest request) {
// Included Path