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/10/31 20:52:17 UTC

svn commit: r469624 - in /struts/sandbox/trunk/tiles: tiles-api/src/main/java/org/apache/tiles/ tiles-container-test/src/main/webapp/WEB-INF/ tiles-core/src/main/java/org/apache/tiles/impl/ tiles-core/src/test/java/org/apache/tiles/factory/

Author: ddewolf
Date: Tue Oct 31 11:52:16 2006
New Revision: 469624

URL: http://svn.apache.org/viewvc?view=rev&rev=469624
Log:
Adding container initialization of tiles-defs

Added:
    struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/test-defs.xml   (with props)
Modified:
    struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesApplicationContext.java
    struts/sandbox/trunk/tiles/tiles-container-test/src/main/webapp/WEB-INF/web.xml
    struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java
    struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java

Modified: struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesApplicationContext.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesApplicationContext.java?view=diff&rev=469624&r1=469623&r2=469624
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesApplicationContext.java (original)
+++ struts/sandbox/trunk/tiles/tiles-api/src/main/java/org/apache/tiles/TilesApplicationContext.java Tue Oct 31 11:52:16 2006
@@ -35,22 +35,34 @@
     /**
      * Returns a mutable Map that maps application scope attribute names to
      * their values.
+     *
+     * @return Map of key value pairs.
      */
-    public Map getApplicationScope();
+    Map<String, Object> getApplicationScope();
 
     /**
      * Return an immutable Map that maps context application initialization
      * parameters to their values.
+     *
+     * @return initialization parameters
      */
-    public Map getInitParams();
+    Map<String, String> getInitParams();
 
     /**
      * Return a URL for the application resource mapped to the specified path.
+     *
+     * @param path to the desired resource.
+     * @return the first located resource which matches the given path.
+     * @throws java.net.MalformedURLException if the path is malformed
      */
-    public URL getResource(String path) throws MalformedURLException;
+    URL getResource(String path) throws MalformedURLException;
 
     /**
      * Return a URL for the application resource mapped to the specified path.
+     *
+     * @param path to the desired resource.
+     * @return all resources which match the given path.
+     * @throws java.net.MalformedURLException if the url is illegal
      */
-    public URL[] getResources(String path) throws MalformedURLException;
+    URL[] getResources(String path) throws MalformedURLException;
 }

Modified: struts/sandbox/trunk/tiles/tiles-container-test/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-container-test/src/main/webapp/WEB-INF/web.xml?view=diff&rev=469624&r1=469623&r2=469624
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-container-test/src/main/webapp/WEB-INF/web.xml (original)
+++ struts/sandbox/trunk/tiles/tiles-container-test/src/main/webapp/WEB-INF/web.xml Tue Oct 31 11:52:16 2006
@@ -1,40 +1,38 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 
 <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
-    version="2.4">
-
-  <display-name>Tiles 2 Test Application</display-name>
-  
-  <!-- Standard Action Servlet Configuration -->
-  <servlet>
-    <servlet-name>tiles</servlet-name>
-    <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>
-    </init-param>
-    <load-on-startup>2</load-on-startup>
- </servlet>
-  
-  <!-- Standard Action Servlet Configuration -->
-  <servlet>
-    <servlet-name>layoutServlet</servlet-name>
-    <servlet-class>org.apache.tiles.test.servlet.IncludingServlet</servlet-class>
-    <init-param>
-      <param-name>include</param-name>
-      <param-value>/layout.jsp</param-value>
-    </init-param>
- </servlet>
-
-  <welcome-file-list>
-    <welcome-file>index.jsp</welcome-file>
-  </welcome-file-list>
-  
-  <servlet-mapping>
-    <servlet-name>layoutServlet</servlet-name>
-    <url-pattern>/servlets/layoutServlet</url-pattern>
-  </servlet-mapping>
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+         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.BasicTilesContextFactory</param-value>
+    </context-param>
+
+    <listener>
+        <listener-class>org.apache.tiles.listener.TilesContainerListener</listener-class>
+    </listener>
+
+    <!-- Standard Action Servlet Configuration -->
+    <servlet>
+        <servlet-name>layoutServlet</servlet-name>
+        <servlet-class>org.apache.tiles.test.servlet.IncludingServlet</servlet-class>
+        <init-param>
+            <param-name>include</param-name>
+            <param-value>/layout.jsp</param-value>
+        </init-param>
+    </servlet>
+
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+
+    <servlet-mapping>
+        <servlet-name>layoutServlet</servlet-name>
+        <url-pattern>/servlets/layoutServlet</url-pattern>
+    </servlet-mapping>
 
 </web-app>

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=469624&r1=469623&r2=469624
==============================================================================
--- 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 Tue Oct 31 11:52:16 2006
@@ -19,11 +19,14 @@
 
 import org.apache.tiles.*;
 import org.apache.tiles.context.TilesContextFactory;
-import org.apache.tiles.definition.UrlDefinitionsFactory;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.Log;
 
 import java.util.Map;
+import java.util.List;
+import java.util.StringTokenizer;
+import java.util.ArrayList;
+import java.net.MalformedURLException;
 
 /**
  * Basic implementation of the tiles container interface.
@@ -31,13 +34,25 @@
  * injecting customized services, not necessarily by
  * override the container
  *
- * @since 2.0
  * @version $Rev$
- *
+ * @since 2.0
  */
 public class BasicTilesContainer implements TilesContainer {
 
     /**
+     * Constant representing the configuration parameter
+     * used to define the tiles definition resources.
+     */
+    public static final String DEFINITIONS_CONFIG = "tiles-definitions-config";
+
+    /**
+     * Compatibility constant.
+     *
+     * @deprecated use {@link #DEFINITIONS_CONFIG} to avoid namespace collisions.
+     */
+    private static final String LEGACY_DEFINITIONS_CONFIG = "definitions-config";
+
+    /**
      * Log instance for all BasicTilesContainer
      * instances.
      */
@@ -51,7 +66,7 @@
     /**
      * Initialize the Container with the given configuration.
      *
-     * @param context
+     * @param context application context for this container
      * @throws TilesException
      */
     public void init(TilesApplicationContext context) throws TilesException {
@@ -59,6 +74,19 @@
         this.context = context;
         contextFactory.init(context.getInitParams());
         definitionsFactory.init(context.getInitParams());
+
+        //Everything is now initialized.  We will populate
+        // our definitions
+        String resourceString = getResourceString();
+        List<String> resources = getResourceNames(resourceString);
+        try {
+            for(String resource : resources) {
+                definitionsFactory.addSource(context.getResource(resource));
+            }
+        } catch (MalformedURLException e) {
+            throw new DefinitionsFactoryException("Unable to parse definitions from "
+                    +resourceString, e);
+        }
     }
 
     /**
@@ -66,16 +94,18 @@
      * initialized. Utility method used for methods which
      * can not be invoked after the container has been
      * started.
-     * @throws  IllegalStateException if the container has already been initialized.
+     *
+     * @throws IllegalStateException if the container has already been initialized.
      */
     private void checkInit() {
-        if(context != null) {
+        if (context != null) {
             throw new IllegalStateException("Container allready initialized");
         }
     }
 
     /**
      * Standard Getter
+     *
      * @return the application context for this container.
      */
     public TilesApplicationContext getApplicationContext() {
@@ -85,6 +115,7 @@
 
     /**
      * Standard Getter
+     *
      * @return the definitions factory used by this container.
      */
     public DefinitionsFactory getDefinitionsFactory() {
@@ -93,6 +124,7 @@
 
     /**
      * Standard Setter
+     *
      * @param definitionsFactory the definitions factory for this instance.
      */
     public void setDefinitionsFactory(DefinitionsFactory definitionsFactory) {
@@ -124,7 +156,7 @@
                 definitionsFactory.getDefinition(definitionName, request);
 
         if (definition == null) {
-            if(LOG.isWarnEnabled()) {
+            if (LOG.isWarnEnabled()) {
                 String message = "Unable to find the definition '" + definitionName + "'";
                 LOG.warn(message);
             }
@@ -165,6 +197,42 @@
             context.addMissing(definition.getAttributes());
         }
         return context;
+    }
+
+    /**
+     * Derive the resource string from the initialization parameters.
+     * If no parameter {@link #DEFINITIONS_CONFIG} is available, attempts
+     * to retrieve {@link #LEGACY_DEFINITIONS_CONFIG}.  If niether are
+     * available, returns "/WEB-INF/tiles.xml".
+     *
+     * @return resource string to be parsed.
+     */
+    protected String getResourceString() {
+        Map<String, String> parms = context.getInitParams();
+        String resourceStr = parms.get(DEFINITIONS_CONFIG);
+        if (resourceStr == null) {
+            resourceStr = parms.get(LEGACY_DEFINITIONS_CONFIG);
+        }
+        if (resourceStr == null) {
+            resourceStr = "/WEB-INF/tiles.xml";
+        }
+        return resourceStr;
+    }
+
+    /**
+     * Parse the resourceString into a list of resource paths
+     * which can be loaded by the application context.
+     *
+     * @param resourceString comma seperated resources
+     * @return parsed resources
+     */
+    protected List<String> getResourceNames(String resourceString) {
+        StringTokenizer tokenizer = new StringTokenizer(resourceString, ",");
+        List<String> filenames = new ArrayList<String>(tokenizer.countTokens());
+        while (tokenizer.hasMoreTokens()) {
+            filenames.add(tokenizer.nextToken().trim());
+        }
+        return filenames;
     }
 
 }

Modified: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java?view=diff&rev=469624&r1=469623&r2=469624
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java (original)
+++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/TilesContainerFactoryTest.java Tue Oct 31 11:52:16 2006
@@ -30,6 +30,8 @@
 
 import java.util.Map;
 import java.util.Vector;
+import java.net.URL;
+import java.net.MalformedURLException;
 
 
 public class TilesContainerFactoryTest extends TestCase {
@@ -65,11 +67,13 @@
         }
     }
 
-    public void testCreateContainer() throws TilesException {
+    public void testCreateContainer() throws TilesException, MalformedURLException {
+        URL url = getClass().getResource("test-defs.xml");
         EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTAINER_FACTORY_INIT_PARAM)).andReturn(null);
         EasyMock.expect(context.getInitParameter(TilesContainerFactory.CONTEXT_FACTORY_INIT_PARAM)).andReturn(null);
         EasyMock.expect(context.getInitParameter(TilesContainerFactory.DEFINITIONS_FACTORY_INIT_PARAM)).andReturn(null);
         EasyMock.expect(context.getInitParameter(EasyMock.isA(String.class))).andReturn(null).anyTimes();
+        EasyMock.expect(context.getResource("/WEB-INF/tiles.xml")).andReturn(url);
         EasyMock.replay(context);
 
         TilesContainerFactory factory = TilesContainerFactory.getFactory(context);

Added: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/test-defs.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/test-defs.xml?view=auto&rev=469624
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/test-defs.xml (added)
+++ struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/test-defs.xml Tue Oct 31 11:52:16 2006
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+ <!DOCTYPE tiles-definitions PUBLIC
+       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
+       "http://struts.apache.org/dtds/tiles-config_1_1.dtd">
+
+<tiles-definitions>
+  <definition name="test.def1" path="/test.jsp">
+          <put name="country" value="default"/>
+	  <put name="title"  value="Tiles Library Documentation" />
+	  <put name="header" value="/common/header.jsp" />
+	  <put name="menu"   value="doc.menu.main" />
+	  <put name="footer" value="/common/footer.jsp" />
+	  <put name="body"   value="doc.portal.body" />
+  </definition>
+
+</tiles-definitions>

Propchange: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/test-defs.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: struts/sandbox/trunk/tiles/tiles-core/src/test/java/org/apache/tiles/factory/test-defs.xml
------------------------------------------------------------------------------
    svn:keywords = Id Author Date