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/13 21:24:16 UTC
svn commit: r486826 - in /struts/sandbox/trunk/tiles: tiles-api/
tiles-api/src/main/java/org/apache/tiles/access/
tiles-api/src/main/java/org/apache/tiles/web/
tiles-api/src/test/java/org/apache/tiles/access/
tiles-core/src/main/java/org/apache/tiles/a...
Author: ddewolf
Date: Wed Dec 13 12:24:14 2006
New Revision: 486826
URL: http://svn.apache.org/viewvc?view=rev&rev=486826
Log:
Moving TilesAccess to API; Implementing decoration filter to reduce the amount of configuration required
Added:
struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/access/
struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java (with props)
struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/
struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java (with props)
struts/sandbox/trunk/tiles/tiles-api/src/test/java/org/apache/tiles/access/
struts/sandbox/trunk/tiles/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java (contents, props changed)
- copied, changed from r486806, struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java
struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesDecorationFilter.java (with props)
struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testdecorationfilter.jsp (with props)
Removed:
struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/
struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/
Modified:
struts/sandbox/trunk/tiles/tiles-api/pom.xml
struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesFilter.java
struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml
Modified: struts/sandbox/trunk/tiles/tiles-api/pom.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-api/pom.xml?view=diff&rev=486826&r1=486825&r2=486826
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-api/pom.xml (original)
+++ struts/sandbox/trunk/tiles/tiles-api/pom.xml Wed Dec 13 12:24:14 2006
@@ -23,152 +23,167 @@
*/
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <parent>
- <groupId>org.apache.struts.tiles</groupId>
- <artifactId>tiles-parent</artifactId>
- <version>2.0-SNAPSHOT</version>
- </parent>
-
- <modelVersion>4.0.0</modelVersion>
- <artifactId>tiles-api</artifactId>
- <packaging>jar</packaging>
- <name>Tiles - API </name>
-
- <build>
-
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- <resource>
- <directory>.</directory>
- <includes>
- <include>LICENSE.txt</include>
- <include>NOTICE.txt</include>
- </includes>
- <targetPath>META-INF</targetPath>
- </resource>
- </resources>
-
- <testResources>
- <testResource>
- <directory>src/test/java</directory>
- <includes>
- <include>**/*.xml</include>
- <include>**/*.properties</include>
- </includes>
- </testResource>
- </testResources>
-
- <plugins>
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration>
- <archive>
- <manifest>
- </manifest>
- </archive>
- </configuration>
- </plugin>
- </plugins>
+ <parent>
+ <groupId>org.apache.struts.tiles</groupId>
+ <artifactId>tiles-parent</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>tiles-api</artifactId>
+ <packaging>jar</packaging>
+ <name>Tiles - API</name>
+
+ <build>
+
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>LICENSE.txt</include>
+ <include>NOTICE.txt</include>
+ </includes>
+ <targetPath>META-INF</targetPath>
+ </resource>
+ </resources>
+
+ <testResources>
+ <testResource>
+ <directory>src/test/java</directory>
+ <includes>
+ <include>**/*.xml</include>
+ <include>**/*.properties</include>
+ </includes>
+ </testResource>
+ </testResources>
+
+ <plugins>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
- </build>
+ </build>
- <profiles>
+ <profiles>
<profile>
- <!--
- Run the translator for Java 1.4 compatiblity
+ <!--
+ Run the translator for Java 1.4 compatiblity
- Sample:
- $ cd tiles-core/
- $ mvn clean install -Papps,j4 -Djava14.jar=$JAVA_HOME/../Classes/classes.jar
-
- -->
- <id>j4</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>retrotranslator-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>retrotranslate</id>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <executions>
- <execution>
- <id>create-j4-jar</id>
- <goals><goal>jar</goal></goals>
- <configuration>
- <classesDirectory>${project.build.directory}/classes-retro</classesDirectory>
- <classifier>j4</classifier>
- <archive>
- <manifestEntries>
- <Extension-Name>${project.artifactId}-j4</Extension-Name>
- <Specification-Vendor>${project.organization.name}</Specification-Vendor>
- <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
- <Implementation-Title>${project.description}</Implementation-Title>
- <Implementation-Version>${project.version}</Implementation-Version>
- <Revision>${scm.revision}</Revision>
- </manifestEntries>
- </archive>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <dependency>
- <groupId>sun.jdk</groupId>
- <artifactId>rt</artifactId>
- <version>1.4.0</version>
- <scope>system</scope>
- <!-- path to rt.jar (on OSX, it's classes.jar) -->
- <systemPath>${java14.jar}</systemPath>
- </dependency>
- <dependency>
- <groupId>net.sf.retrotranslator</groupId>
- <artifactId>retrotranslator-runtime</artifactId>
- <version>1.0.8</version>
- </dependency>
- </dependencies>
- </profile>
+ Sample:
+ $ cd tiles-core/
+ $ mvn clean install -Papps,j4 -Djava14.jar=$JAVA_HOME/../Classes/classes.jar
+
+ -->
+ <id>j4</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>retrotranslator-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>retrotranslate</id>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>create-j4-jar</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ <configuration>
+ <classesDirectory>${project.build.directory}/classes-retro</classesDirectory>
+ <classifier>j4</classifier>
+ <archive>
+ <manifestEntries>
+ <Extension-Name>${project.artifactId}-j4</Extension-Name>
+ <Specification-Vendor>${project.organization.name}</Specification-Vendor>
+ <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
+ <Implementation-Title>${project.description}</Implementation-Title>
+ <Implementation-Version>${project.version}</Implementation-Version>
+ <Revision>${scm.revision}</Revision>
+ </manifestEntries>
+ </archive>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>sun.jdk</groupId>
+ <artifactId>rt</artifactId>
+ <version>1.4.0</version>
+ <scope>system</scope>
+ <!-- path to rt.jar (on OSX, it's classes.jar) -->
+ <systemPath>${java14.jar}</systemPath>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.retrotranslator</groupId>
+ <artifactId>retrotranslator-runtime</artifactId>
+ <version>1.0.8</version>
+ </dependency>
+ </dependencies>
+ </profile>
</profiles>
<dependencies>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.4</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jsp-api</artifactId>
- <version>2.0</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>javax.portlet</groupId>
- <artifactId>portlet-api</artifactId>
- <version>1.0</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jsp-api</artifactId>
+ <version>2.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.portlet</groupId>
+ <artifactId>portlet-api</artifactId>
+ <version>1.0</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>2.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
</project>
Added: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java?view=auto&rev=486826
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java (added)
+++ struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java Wed Dec 13 12:24:14 2006
@@ -0,0 +1,108 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.tiles.access;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.TilesException;
+
+import java.lang.reflect.Method;
+
+
+/**
+ * Provides static access to the tiles container.
+ *
+ * @version $Rev$ $Date$
+ */
+public class TilesAccess {
+
+ private static final Log LOG =
+ LogFactory.getLog(TilesAccess.class);
+
+ public static final String CONTAINER_ATTRIBUTE =
+ "org.apache.tiles.CONTAINER";
+
+ private static final String CONTEXT_ATTRIBUTE =
+ "org.apache.tiles.APPLICATION_CONTEXT";
+
+ public static TilesContainer getContainer(Object context) {
+ return (TilesContainer) getAttribute(context, CONTAINER_ATTRIBUTE);
+ }
+
+ public static void setContainer(Object context, TilesContainer container)
+ throws TilesException {
+
+ if (container == null) {
+ if(LOG.isInfoEnabled()) {
+ LOG.info("Removing TilesContext for context: " + context.getClass().getName());
+ }
+ removeAttribute(context, CONTAINER_ATTRIBUTE);
+ }
+ if (container != null && LOG.isInfoEnabled()) {
+ LOG.info("Publishing TilesContext for context: " + context.getClass().getName());
+ }
+ setAttribute(context, CONTAINER_ATTRIBUTE, container);
+ }
+
+ public static TilesApplicationContext getApplicationContext(Object context) {
+ TilesContainer container = getContainer(context);
+ if (container != null) {
+ return container.getApplicationContext();
+ }
+ return (TilesApplicationContext) getAttribute(context, CONTEXT_ATTRIBUTE);
+ }
+
+ private static Object getAttribute(Object context, String attributeName) {
+ try {
+ Class contextClass = context.getClass();
+ Method attrMethod = contextClass.getMethod("getAttribute", String.class);
+ return attrMethod.invoke(context, attributeName);
+ } catch (Exception e) {
+ LOG.warn("Unable to retrieve container from specified context: '" + context + "'", e);
+ return null;
+ }
+ }
+
+ private static void setAttribute(Object context, String name, Object value)
+ throws TilesException {
+ try {
+ Class contextClass = context.getClass();
+ Method attrMethod = contextClass.getMethod("setAttribute", String.class, Object.class);
+ attrMethod.invoke(context, name, value);
+ } catch (Exception e) {
+ throw new TilesException("Unable to set attribute for specified context: '" + context + "'");
+ }
+ }
+
+ private static void removeAttribute(Object context, String name)
+ throws TilesException {
+ try {
+ Class contextClass = context.getClass();
+ Method attrMethod = contextClass.getMethod("removeAttribute", String.class);
+ attrMethod.invoke(context, name);
+ } catch (Exception e) {
+ throw new TilesException("Unable to remove attribute for specified context: '" + context + "'");
+ }
+ }
+}
Propchange: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Added: 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=auto&rev=486826
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java (added)
+++ struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java Wed Dec 13 12:24:14 2006
@@ -0,0 +1,149 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.tiles.web;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tiles.ComponentAttribute;
+import org.apache.tiles.ComponentContext;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.TilesException;
+import org.apache.tiles.access.TilesAccess;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+/**
+ * Decoration Filter. Intercepts all requests and decorates them
+ * with the configured definition.
+ *
+ * For example, given the following config:
+ * <xmp>
+ <filter>
+ <filter-name>Tiles Decoration Filter</filter-name>
+ <filter-class>org.apache.tiles.web.TilesDecorationFilter</filter-class>
+ <init-param>
+ <param-name>definition</param-name>
+ <param-value>test.definition</param-value>
+ </init-param>
+ <init-param>
+ <param-name>attribute-name</param-name>
+ <param-value>body</param-value>
+ </init-param>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>Tiles Decoration Filter</filter-name>
+ <url-pattern>/testdecorationfilter.jsp</url-pattern>
+ <dispatcher>REQUEST</dispatcher>
+ </filter-mapping>
+ * </xmp>
+ * The filter will intercept all requests to the indicated url pattern
+ * store the initial request path as the "body" component attribute
+ * and then render the "test.definition" definition.
+ *
+ */
+public class TilesDecorationFilter implements Filter {
+
+ private static final Log LOG =
+ LogFactory.getLog(TilesDecorationFilter.class);
+
+ /**
+ * Filter configuration.
+ */
+ private FilterConfig filterConfig;
+
+ /**
+ * The name of the component attribute used to
+ * pass on the request.
+ */
+ private String componentAttributeName = "content";
+
+ private String definitionName = "layout";
+
+
+ public FilterConfig getFilterConfig() {
+ return filterConfig;
+ }
+
+ public ServletContext getServletContext() {
+ return filterConfig.getServletContext();
+ }
+
+ public void init(FilterConfig config) throws ServletException {
+ filterConfig = config;
+ String temp = config.getInitParameter("attribute-name");
+ if(temp != null) {
+ componentAttributeName = temp;
+ }
+
+ temp = config.getInitParameter("definition");
+ if(temp != null) {
+ definitionName = temp;
+ }
+ }
+
+ public void destroy() {
+ filterConfig = null;
+ }
+
+
+ public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain)
+ throws IOException, ServletException {
+ TilesContainer container = TilesAccess.getContainer(getServletContext());
+ prepareComponentAttributes(req, container.getComponentContext(req, res));
+ try {
+ container.render(req, res, definitionName);
+ } catch (TilesException e) {
+ throw new ServletException("Error wrapping jsp with tile definition.", e);
+ }
+ }
+
+ protected void prepareComponentAttributes(ServletRequest req, ComponentContext ctx) {
+ ComponentAttribute attr = new ComponentAttribute();
+ attr.setType(ComponentAttribute.TEMPLATE);
+ attr.setName(componentAttributeName);
+ attr.setValue(getRequestBase(req));
+ ctx.putAttribute(componentAttributeName, attr);
+ }
+
+
+ private String getRequestBase(ServletRequest request) {
+ // Included Path
+ String include = (String) request.getAttribute("javax.servlet.include.request_uri");
+ if (include != null) {
+ return include;
+ }
+
+ // As opposed to includes, if a forward occurs, it will update the servletPath property
+ // and include the original as the request attribute.
+ return ((HttpServletRequest) request).getServletPath();
+ }
+
+}
Propchange: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/web/TilesDecorationFilter.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Copied: struts/sandbox/trunk/tiles/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java (from r486806, struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java)
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java?view=diff&rev=486826&p1=struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java&r1=486806&p2=struts/sandbox/trunk/tiles/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java&r2=486826
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/access/TilesAccessTest.java (original)
+++ struts/sandbox/trunk/tiles/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java Wed Dec 13 12:24:14 2006
@@ -24,7 +24,6 @@
import org.easymock.EasyMock;
import org.apache.tiles.TilesContainer;
import org.apache.tiles.TilesException;
-import org.apache.tiles.impl.BasicTilesContainer;
import javax.servlet.ServletContext;
@@ -42,7 +41,7 @@
}
public void testSetContext() throws TilesException {
- TilesContainer container = new BasicTilesContainer();
+ TilesContainer container = EasyMock.createMock(TilesContainer.class);
context.setAttribute(TilesAccess.CONTAINER_ATTRIBUTE,container);
EasyMock.replay(context);
TilesAccess.setContainer(context, container);
@@ -50,7 +49,7 @@
}
public void testGetContext() throws TilesException {
- TilesContainer container = new BasicTilesContainer();
+ TilesContainer container = EasyMock.createMock(TilesContainer.class);
EasyMock.expect(context.getAttribute(TilesAccess.CONTAINER_ATTRIBUTE)).andReturn(container);
EasyMock.replay(context);
assertEquals(container, TilesAccess.getContainer(context));
Propchange: struts/sandbox/trunk/tiles/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/sandbox/trunk/tiles/tiles-api/src/test/java/org/apache/tiles/access/TilesAccessTest.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date
Added: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesDecorationFilter.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesDecorationFilter.java?view=auto&rev=486826
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesDecorationFilter.java (added)
+++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesDecorationFilter.java Wed Dec 13 12:24:14 2006
@@ -0,0 +1,120 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.tiles.filter;
+
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.ComponentContext;
+import org.apache.tiles.ComponentAttribute;
+import org.apache.tiles.TilesException;
+import org.apache.tiles.access.TilesAccess;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+/**
+ * Processes Reloadable Tiles Definitions.
+ *
+ * @version $Rev$ $Date$
+ */
+
+public class TilesDecorationFilter implements Filter {
+
+ private static final Log LOG = LogFactory.getLog(TilesDecorationFilter.class);
+
+ /**
+ * The filter configuration object we are associated with. If
+ * this value is null, this filter instance is not currently
+ * configured.
+ */
+ private FilterConfig filterConfig = null;
+
+ private ServletContext servletContext = null;
+
+ private String targetAttributeName = "body";
+
+ private String definition = "layout";
+
+
+ /**
+ * Checks whether Tiles Definitions need to be reloaded.
+ *
+ * @param request The servlet request we are processing
+ * @param response The servlet response we are creating
+ * @param chain The filter chain we are processing
+ * @throws java.io.IOException if an input/output error occurs
+ * @throws javax.servlet.ServletException if a servlet error occurs
+ */
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain)
+ throws IOException, ServletException {
+
+ TilesContainer container = TilesAccess.getContainer(servletContext);
+ ComponentContext ctx = container.getComponentContext(request, response);
+
+ ComponentAttribute attr = new ComponentAttribute();
+ attr.setType(ComponentAttribute.TEMPLATE);
+ attr.setName(targetAttributeName);
+ attr.setValue(getTargetResource(request));
+ ctx.putAttribute(targetAttributeName, attr);
+
+ try {
+ container.render(request, response, definition);
+ } catch (TilesException e) {
+ throw new ServletException("Error wrapping jsp with tile definition.", e);
+ }
+ }
+
+ private String getTargetResource(ServletRequest request) {
+ HttpServletRequest req = (HttpServletRequest)request;
+ String includePath = (String)req.getAttribute("");
+ return includePath == null ? req.getServletPath() : includePath;
+
+ }
+
+ public void init(FilterConfig filterConfig) throws ServletException {
+ this.filterConfig = filterConfig;
+ String name = filterConfig.getInitParameter("target-attribute-name");
+ if(name != null) {
+ targetAttributeName = name;
+ }
+ }
+
+ /**
+ * Destroy method for this filter
+ */
+ public void destroy() {
+ this.filterConfig = null;
+ this.servletContext = null;
+ this.targetAttributeName = "body";
+ }
+
+
+}
Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesDecorationFilter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesDecorationFilter.java
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev
Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesFilter.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesFilter.java?view=diff&rev=486826&r1=486825&r2=486826
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesFilter.java (original)
+++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/filter/TilesFilter.java Wed Dec 13 12:24:14 2006
@@ -24,12 +24,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.tiles.TilesContainer;
-import org.apache.tiles.access.TilesAccess;
-import org.apache.tiles.definition.DefinitionsFactory;
-import org.apache.tiles.definition.ReloadableDefinitionsFactory;
import org.apache.tiles.definition.util.DefinitionsFactoryUtil;
-import org.apache.tiles.impl.BasicTilesContainer;
import org.apache.tiles.servlet.TilesServlet;
import javax.servlet.*;
@@ -113,7 +108,7 @@
super.init(createServletConfig());
if (debug) {
- log("TilesFilter:Initializing filter");
+ log("TilesDecorationFilter:Initializing filter");
}
}
Modified: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml?view=diff&rev=486826&r1=486825&r2=486826
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml (original)
+++ struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml Wed Dec 13 12:24:14 2006
@@ -39,6 +39,25 @@
<param-name>org.apache.tiles.CONTAINER_FACTORY.mutable</param-name>
<param-value>true</param-value>
</context-param>
+
+ <filter>
+ <filter-name>Tiles Decoration Filter</filter-name>
+ <filter-class>org.apache.tiles.web.TilesDecorationFilter</filter-class>
+ <init-param>
+ <param-name>definition</param-name>
+ <param-value>test.definition</param-value>
+ </init-param>
+ <init-param>
+ <param-name>attribute-name</param-name>
+ <param-value>body</param-value>
+ </init-param>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>Tiles Decoration Filter</filter-name>
+ <url-pattern>/testdecorationfilter.jsp</url-pattern>
+ <dispatcher>REQUEST</dispatcher>
+ </filter-mapping>
<!-- Standard Action Servlet Configuration -->
<servlet>
Added: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testdecorationfilter.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testdecorationfilter.jsp?view=auto&rev=486826
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testdecorationfilter.jsp (added)
+++ struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testdecorationfilter.jsp Wed Dec 13 12:24:14 2006
@@ -0,0 +1 @@
+<i>This Content should be wrapped with the standard layout.</i>
\ No newline at end of file
Propchange: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testdecorationfilter.jsp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testdecorationfilter.jsp
------------------------------------------------------------------------------
svn:keywords = Id Author Date Rev