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/11/03 18:32:27 UTC

svn commit: r470918 - in /struts/sandbox/trunk/tiles: tiles-core/src/main/java/org/apache/tiles/context/ tiles-core/src/main/java/org/apache/tiles/context/enhanced/ tiles-core/src/main/java/org/apache/tiles/impl/ tiles-test/src/main/resources/ tiles-te...

Author: ddewolf
Date: Fri Nov  3 09:32:25 2006
New Revision: 470918

URL: http://svn.apache.org/viewvc?view=rev&rev=470918
Log:
Adding support for classpath definitions

Added:
    struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedContextFactory.java   (with props)
    struts/sandbox/trunk/tiles/tiles-test/src/main/resources/
    struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/
    struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/apache/
    struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/apache/tiles/
    struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/apache/tiles/classpath-defs.xml   (with props)
    struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinsertdefinition_classpath.jsp   (with props)
Modified:
    struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java
    struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedTilesApplicationContext.java
    struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
    struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml
    struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp

Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java?view=diff&rev=470918&r1=470917&r2=470918
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java (original)
+++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/BasicTilesContextFactory.java Fri Nov  3 09:32:25 2006
@@ -67,13 +67,13 @@
     public TilesRequestContext createRequestContext(TilesApplicationContext context,
                                                     Object request,
                                                     Object response) {
-        if (context instanceof ServletTilesApplicationContext) {
-            ServletTilesApplicationContext app = (ServletTilesApplicationContext) context;
-
-            return new ServletTilesRequestContext(app.getServletContext(),
+        ServletContext servletContext = getServletContext(context);
+        PortletContext portletContext = getPortletContext(context);
+        if (servletContext != null) {
+            return new ServletTilesRequestContext(servletContext,
                 (HttpServletRequest) request,
                 (HttpServletResponse) response);
-        } else if (context instanceof PortletContext) {
+        } else if (portletContext != null) {
             PortletTilesApplicationContext app = (PortletTilesApplicationContext) context;
             return new PortletTilesRequestContext(app.getPortletContext(),
                 (PortletRequest) request,
@@ -86,10 +86,27 @@
 
     public TilesRequestContext createRequestContext(TilesApplicationContext context,
                                                     PageContext pageContext) {
+        ServletContext servletContext = getServletContext(context);
+        if (servletContext != null) {
+            return new JspTilesRequestContext(servletContext, pageContext);
+        }
+        throw new IllegalArgumentException("The context/pageContext combination is not supported.");
+    }
+
+    protected ServletContext getServletContext(TilesApplicationContext context) {
         if (context instanceof ServletTilesApplicationContext) {
             ServletTilesApplicationContext app = (ServletTilesApplicationContext) context;
-            return new JspTilesRequestContext(app.getServletContext(), pageContext);
+            return app.getServletContext();
         }
-        throw new IllegalArgumentException("The context/pageContext combination is not supported.");
+        return null;
+
+    }
+
+    protected PortletContext getPortletContext(TilesApplicationContext context) {
+        if (context instanceof PortletTilesApplicationContext) {
+            PortletTilesApplicationContext app = (PortletTilesApplicationContext) context;
+            return app.getPortletContext();
+        }
+        return null;
     }
 }

Added: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedContextFactory.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedContextFactory.java?view=auto&rev=470918
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedContextFactory.java (added)
+++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedContextFactory.java Fri Nov  3 09:32:25 2006
@@ -0,0 +1,49 @@
+/*
+ * 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.context.enhanced;
+
+import org.apache.tiles.TilesApplicationContext;
+import org.apache.tiles.TilesRequestContext;
+import org.apache.tiles.context.BasicTilesContextFactory;
+
+import javax.servlet.jsp.PageContext;
+
+public class EnhancedContextFactory extends BasicTilesContextFactory {
+
+    public TilesApplicationContext createApplicationContext(Object context) {
+        TilesApplicationContext root = super.createApplicationContext(context);
+        return new EnhancedTilesApplicationContext(root);
+    }
+
+
+    public TilesRequestContext createRequestContext(TilesApplicationContext context, Object request, Object response) {
+        if (context instanceof EnhancedTilesApplicationContext) {
+            context = ((EnhancedTilesApplicationContext) context).getRootContext();
+        }
+        return super.createRequestContext(context, request, response);
+    }
+
+    public TilesRequestContext createRequestContext(TilesApplicationContext context, PageContext pageContext) {
+        if (context instanceof EnhancedTilesApplicationContext) {
+            context = ((EnhancedTilesApplicationContext) context).getRootContext();
+        }
+        return super.createRequestContext(context, pageContext);
+    }
+}

Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedContextFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedContextFactory.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Rev

Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedTilesApplicationContext.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedTilesApplicationContext.java?view=diff&rev=470918&r1=470917&r2=470918
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedTilesApplicationContext.java (original)
+++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/context/enhanced/EnhancedTilesApplicationContext.java Fri Nov  3 09:32:25 2006
@@ -57,6 +57,15 @@
         this.rootContext = rootContext;
     }
 
+
+    public TilesApplicationContext getRootContext() {
+        return rootContext;
+    }
+
+    public void setRootContext(TilesApplicationContext rootContext) {
+        this.rootContext = rootContext;
+    }
+
     public Map<String, Object> getApplicationScope() {
         return rootContext.getApplicationScope();
     }
@@ -69,6 +78,7 @@
         URL rootUrl = rootContext.getResource(path);
         if(rootUrl == null) {
             Set<URL> resources = getResources(path);
+            resources.remove(null);
             if(resources.size() > 0) {
                 rootUrl = resources.toArray(new URL[resources.size()])[0];
             }
@@ -79,11 +89,21 @@
     public Set<URL> getResources(String path) throws IOException {
         Set<URL> resources = new HashSet<URL>();
         resources.addAll(rootContext.getResources(path));
+        resources.addAll(getClasspathResources(path));
+        return resources;
+    }
+
+    public Set<URL> getClasspathResources(String path) throws IOException {
+        Set<URL> resources = new HashSet<URL>();
         resources.addAll(searchResources(getClass().getClassLoader(), path));
 
         ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
         if(contextLoader != null) {
             resources.addAll(searchResources(contextLoader, path));
+        }
+
+        if(resources.size() == 0 && path.startsWith("/")) {
+            return getClasspathResources(path.substring(1));
         }
 
         return resources;

Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java?view=diff&rev=470918&r1=470917&r2=470918
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java (original)
+++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java Fri Nov  3 09:32:25 2006
@@ -106,6 +106,9 @@
                     }
                     definitionsFactory.addSource(resourceUrl);
                 }
+                else {
+                    LOG.warn("Unable to find configured definition '"+resource+"'");
+                }
             }
         } catch (IOException e) {
             throw new DefinitionsFactoryException("Unable to parse definitions from "

Added: struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/apache/tiles/classpath-defs.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/apache/tiles/classpath-defs.xml?view=auto&rev=470918
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/apache/tiles/classpath-defs.xml (added)
+++ struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/apache/tiles/classpath-defs.xml Fri Nov  3 09:32:25 2006
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!DOCTYPE tiles-definitions PUBLIC
+    "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
+    "http://struts.apache.org/dtds/tiles-config_2_0.dtd">
+
+<!-- Definitions for Tiles documentation   -->
+
+<tiles-definitions>
+    <definition name="classpath.definition" template="/layout.jsp">
+        <put name="title" value="This is the title."/>
+        <put name="header" value="/header.jsp"/>
+        <put name="body" value="/body.jsp"/>
+    </definition>
+</tiles-definitions>
\ No newline at end of file

Propchange: struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/apache/tiles/classpath-defs.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/sandbox/trunk/tiles/tiles-test/src/main/resources/org/apache/tiles/classpath-defs.xml
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Rev

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=470918&r1=470917&r2=470918
==============================================================================
--- 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 Fri Nov  3 09:32:25 2006
@@ -6,6 +6,11 @@
     version="2.4">
 
   <display-name>Tiles 2 Test Application</display-name>
+
+    <context-param>
+        <param-name>org.apache.tiles.CONTEXT_FACTORY</param-name>
+        <param-value>org.apache.tiles.context.enhanced.EnhancedContextFactory</param-value>
+    </context-param>
   
   <!-- Standard Action Servlet Configuration -->
   <servlet>
@@ -13,7 +18,7 @@
     <servlet-class>org.apache.tiles.servlet.TilesServlet</servlet-class>
     <init-param>
       <param-name>definitions-config</param-name>
-      <param-value>/WEB-INF/tiles-defs.xml</param-value>
+      <param-value>/WEB-INF/tiles-defs.xml,/org/apache/tiles/classpath-defs.xml</param-value>
     </init-param>
     <load-on-startup>2</load-on-startup>
  </servlet>

Modified: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp?view=diff&rev=470918&r1=470917&r2=470918
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp (original)
+++ struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp Fri Nov  3 09:32:25 2006
@@ -26,6 +26,7 @@
     
     <h2>Currently working tests</h2>
     <a href="testinsertdefinition.jsp">Test Insert Configured Definition</a><br/>
+    <a href="testinsertdefinition_classpath.jsp">Test Insert Configured Classpath Definition</a><br/>
     <a href="testinsertdefinition_notype.jsp">Test Insert Configured Definition with no type specified</a><br/>
     <a href="testinsertdefinition_override.jsp">Test Insert Configured Definition with an overridden content</a><br/>
     <a href="testinsertdefinition_inline.jsp">Test Insert Configured Definition with an inline content</a><br/>

Added: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinsertdefinition_classpath.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinsertdefinition_classpath.jsp?view=auto&rev=470918
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinsertdefinition_classpath.jsp (added)
+++ struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinsertdefinition_classpath.jsp Fri Nov  3 09:32:25 2006
@@ -0,0 +1,3 @@
+<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
+
+<tiles:insertDefinition name="classpath.definition" />

Propchange: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinsertdefinition_classpath.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinsertdefinition_classpath.jsp
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Rev