Author: apetrelli
Date: Fri Jan  9 05:22:54 2009
New Revision: 733033

URL: http://svn.apache.org/viewvc?rev=733033&view=rev
Log:
TILES-346
The initializer can be made generic, not tied to Servlet environment.

Added:
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/BasicTilesInitializer.java
      - copied, changed from r732697, 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/BasicTilesServletInitializer.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/TilesInitializer.java
   (contents, props changed)
      - copied, changed from r732697, 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServletInitializer.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/package.html
   (with props)
Removed:
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/BasicTilesServletInitializer.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServletInitializer.java
Modified:
    
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java
    
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java

Modified: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java?rev=733033&r1=733032&r2=733033&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
 (original)
+++ 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
 Fri Jan  9 05:22:54 2009
@@ -96,6 +96,48 @@
     /**
      * Configures the default container to be used in the application.
      *
+     * @param context The Tiles application context object to use.
+     * @param container The container object to set.
+     * @throws TilesAccessException If something goes wrong during 
manipulation of the
+     * context.
+     * @since 2.1.2
+     */
+    public static void setContainer(TilesApplicationContext context,
+            TilesContainer container) {
+        setContainer(context, container, CONTAINER_ATTRIBUTE);
+    }
+
+    /**
+     * Configures the container to be used in the application.
+     *
+     * @param context The Tiles application context object to use.
+     * @param container The container object to set.
+     * @param key The key under which the container will be stored.
+     * @throws TilesAccessException If something goes wrong during 
manipulation of the
+     * context.
+     * @since 2.1.2
+     */
+    public static void setContainer(TilesApplicationContext context,
+            TilesContainer container, String key) {
+        if (key == null) {
+            key = CONTAINER_ATTRIBUTE;
+        }
+
+        if (container == null) {
+            if (LOG.isInfoEnabled()) {
+                LOG.info("Removing TilesContext for context: " + 
context.getClass().getName());
+            }
+            context.getApplicationScope().remove(key);
+        }
+        if (container != null && LOG.isInfoEnabled()) {
+            LOG.info("Publishing TilesContext for context: " + 
context.getClass().getName());
+        }
+        context.getApplicationScope().put(key, container);
+    }
+
+    /**
+     * Configures the default container to be used in the application.
+     *
      * @param context The (application) context object to use.
      * @param container The container object to set.
      * @throws TilesAccessException If something goes wrong during 
manipulation of the

Copied: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/BasicTilesInitializer.java
 (from r732697, 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/BasicTilesServletInitializer.java)
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/BasicTilesInitializer.java?p2=tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/BasicTilesInitializer.java&p1=tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/BasicTilesServletInitializer.java&r1=732697&r2=733033&rev=733033&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/BasicTilesServletInitializer.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/BasicTilesInitializer.java
 Fri Jan  9 05:22:54 2009
@@ -18,9 +18,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tiles.web.startup;
-
-import javax.servlet.ServletContext;
+package org.apache.tiles.startup;
 
 import org.apache.tiles.Initializable;
 import org.apache.tiles.TilesApplicationContext;
@@ -28,7 +26,6 @@
 import org.apache.tiles.access.TilesAccess;
 import org.apache.tiles.context.AbstractTilesApplicationContextFactory;
 import org.apache.tiles.factory.AbstractTilesContainerFactory;
-import org.apache.tiles.servlet.context.ServletTilesApplicationContext;
 
 /**
  * Default Tiles initialization delegate implementation under a servlet
@@ -38,7 +35,7 @@
  * @version $Rev: 531864 $ $Date: 2007-04-24 12:24:30 +0200 (mar, 24 apr 2007) 
$
  * @since 2.1.2
  */
-public class BasicTilesServletInitializer implements TilesServletInitializer {
+public class BasicTilesInitializer implements TilesInitializer {
 
     /**
      * Init parameter to define the key under which the container will be
@@ -50,32 +47,29 @@
         "org.apache.tiles.web.startup.TilesServletInitializer.CONTAINER_KEY";
 
     /** {...@inheritdoc} */
-    public void initialize(ServletContext servletContext) {
-        TilesApplicationContext applicationContext = 
createTilesApplicationContext(servletContext);
+    public void initialize(TilesApplicationContext applicationContext) {
+        applicationContext = createTilesApplicationContext(applicationContext);
         String key = getContainerKey(applicationContext);
         TilesContainer container = createContainer(applicationContext);
-        TilesAccess.setContainer(servletContext, container, key);
+        TilesAccess.setContainer(applicationContext, container, key);
     }
 
     /**
      * Creates the Tiles application context, to be used across all the
      * Tiles-based application.
      *
-     * @param context The Servlet context to use.
+     * @param preliminaryContext The preliminary application context to use.
      * @return The Tiles application context.
      * @since 2.1.2
      */
     protected TilesApplicationContext createTilesApplicationContext(
-            ServletContext context) {
-        TilesApplicationContext applicationContext = new 
ServletTilesApplicationContext(
-                context);
+            TilesApplicationContext preliminaryContext) {
         AbstractTilesApplicationContextFactory acFactory = 
AbstractTilesApplicationContextFactory
-                .createFactory(applicationContext);
+                .createFactory(preliminaryContext);
         if (acFactory instanceof Initializable) {
-            ((Initializable) 
acFactory).init(applicationContext.getInitParams());
+            ((Initializable) 
acFactory).init(preliminaryContext.getInitParams());
         }
-        applicationContext = acFactory.createApplicationContext(context);
-        return applicationContext;
+        return 
acFactory.createApplicationContext(preliminaryContext.getContext());
     }
 
     /**
@@ -87,7 +81,7 @@
      */
     protected String getContainerKey(TilesApplicationContext 
applicationContext) {
         String key = applicationContext.getInitParams().get(
-                BasicTilesServletInitializer.CONTAINER_KEY_INIT_PARAMETER);
+                CONTAINER_KEY_INIT_PARAMETER);
         return key;
     }
 

Copied: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/TilesInitializer.java
 (from r732697, 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServletInitializer.java)
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/TilesInitializer.java?p2=tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/TilesInitializer.java&p1=tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServletInitializer.java&r1=732697&r2=733033&rev=733033&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServletInitializer.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/TilesInitializer.java
 Fri Jan  9 05:22:54 2009
@@ -18,21 +18,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tiles.web.startup;
+package org.apache.tiles.startup;
 
-import javax.servlet.ServletContext;
+import org.apache.tiles.TilesApplicationContext;
 
 /**
- * Tiles initialization delegate under a servlet environment.
+ * Tiles initialization delegate. It initializes Tiles container(s) and the
+ * application context to use across all the application.
  *
  * @version $Rev$ $Date$
  */
-public interface TilesServletInitializer {
+public interface TilesInitializer {
 
     /**
      * Initializes Tiles.
      *
-     * @param servletContext The servlet context to use.
+     * @param preliminaryContext The preliminary application context to use. It
+     * will be overwritten with the real instance later. Use a context usable
+     * under your current environment, like ServletTilesApplicationContext or
+     * PortletTilesApplicationContext.
      */
-    void initialize(ServletContext servletContext);
+    void initialize(TilesApplicationContext preliminaryContext);
 }

Propchange: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/TilesInitializer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/TilesInitializer.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/TilesInitializer.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/package.html
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/package.html?rev=733033&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/package.html
 (added)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/package.html
 Fri Jan  9 05:22:54 2009
@@ -0,0 +1,32 @@
+<!--
+/*
+ * $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.
+ */
+-->
+<html>
+<head>
+    <title>Generic start-up classes</title>
+</head>
+<body>
+Classes to start the Tiles engine up. Use these classes in your environment by
+using a preliminary TilesApplicationContext that expose at least the needed
+initialization parameters.
+</body>
+</html>
\ No newline at end of file

Propchange: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/startup/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java?rev=733033&r1=733032&r2=733033&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesFilter.java
 Fri Jan  9 05:22:54 2009
@@ -36,6 +36,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.definition.util.DefinitionsFactoryUtil;
+import org.apache.tiles.startup.BasicTilesInitializer;
 
 /**
  * Processes Reloadable Tiles Definitions.
@@ -125,7 +126,7 @@
         super.init(createServletConfig());
 
         containerKey = filterConfig.getInitParameter(
-                BasicTilesServletInitializer.CONTAINER_KEY_INIT_PARAMETER);
+                BasicTilesInitializer.CONTAINER_KEY_INIT_PARAMETER);
 
         if (DEBUG) {
             log("TilesDecorationFilter:Initializing filter");

Modified: 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java?rev=733033&r1=733032&r2=733033&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesListener.java
 Fri Jan  9 05:22:54 2009
@@ -22,10 +22,14 @@
 
 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 org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.factory.AbstractTilesContainerFactory;
 import org.apache.tiles.servlet.context.ServletTilesApplicationContext;
+import org.apache.tiles.startup.BasicTilesInitializer;
+import org.apache.tiles.startup.TilesInitializer;
 
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
@@ -50,7 +54,7 @@
      *
      * @since 2.1.2
      */
-    protected TilesServletInitializer initializer;
+    protected TilesInitializer initializer;
 
     /**
      * Constructor.
@@ -62,15 +66,6 @@
     }
 
     /**
-     * Constructor with injected initializer.
-     *
-     * @param initializer The initializer to use.
-     */
-    public TilesListener(TilesServletInitializer initializer) {
-        this.initializer = initializer;
-    }
-
-    /**
      * Initialize the TilesContainer and place it
      * into service.
      *
@@ -78,7 +73,8 @@
      */
     public void contextInitialized(ServletContextEvent event) {
         ServletContext servletContext = event.getServletContext();
-        initializer.initialize(servletContext);
+        initializer.initialize(new ServletTilesApplicationContext(
+                servletContext));
     }
 
     /**
@@ -96,13 +92,13 @@
     }
 
     /**
-     * Creates a new instance of {...@link BasicTilesServletInitializer}. 
Override it to use a different initializer.
+     * Creates a new instance of {...@link BasicTilesInitializer}. Override it 
to use a different initializer.
      *
      * @return The Tiles servlet-based initializer.
      * @since 2.1.2
      */
-    protected TilesServletInitializer createTilesServletInitializer() {
-        return new BasicTilesServletInitializer();
+    protected TilesInitializer createTilesServletInitializer() {
+        return new BasicTilesInitializer();
     }
 
     /**
@@ -110,11 +106,14 @@
      *
      * @param context The servlet context to use.
      * @return The created container.
-     * @deprecated Use {...@link 
BasicTilesServletInitializer#createContainer(org.apache.tiles.TilesApplicationContext)}
+     * @deprecated Use {...@link 
BasicTilesInitializer#createContainer(org.apache.tiles.TilesApplicationContext)}
      * instead.
      */
     protected TilesContainer createContainer(ServletContext context) {
-        return new BasicTilesServletInitializer()
-                .createContainer(new ServletTilesApplicationContext(context));
+        TilesApplicationContext applicationContext = new 
ServletTilesApplicationContext(
+                context);
+        AbstractTilesContainerFactory factory = AbstractTilesContainerFactory
+                .getTilesContainerFactory(applicationContext);
+        return factory.createContainer(applicationContext);
     }
 }

Modified: 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java?rev=733033&r1=733032&r2=733033&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java
 (original)
+++ 
tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/web/startup/TilesServlet.java
 Fri Jan  9 05:22:54 2009
@@ -24,9 +24,13 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.TilesException;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.servlet.context.ServletTilesApplicationContext;
+import org.apache.tiles.startup.BasicTilesInitializer;
+import org.apache.tiles.startup.TilesInitializer;
 import org.apache.tiles.web.util.ServletContextAdapter;
 
 import javax.servlet.http.HttpServlet;
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 
 /**
@@ -47,7 +51,7 @@
      * The private listener instance, that is used to initialize Tiles
      * container.
      */
-    private TilesServletInitializer initializer;
+    private TilesInitializer initializer;
 
     /**
      * Constructor.
@@ -58,15 +62,6 @@
         initializer = createTilesServletInitializer();
     }
 
-    /**
-     * Constructor with injected initializer.
-     *
-     * @param initializer The initializer to use.
-     */
-    public TilesServlet(TilesServletInitializer initializer) {
-        this.initializer = initializer;
-    }
-
     /** {...@inheritdoc} */
     @Override
     public void destroy() {
@@ -80,16 +75,20 @@
     /** {...@inheritdoc} */
     @Override
     public void init() throws ServletException {
-        initializer.initialize(new ServletContextAdapter(getServletConfig()));
+        ServletContext adaptedContext = new ServletContextAdapter(
+                getServletConfig());
+        ServletTilesApplicationContext preliminaryContext = new 
ServletTilesApplicationContext(
+                adaptedContext);
+        initializer.initialize(preliminaryContext);
     }
 
     /**
-     * Creates a new instance of {...@link BasicTilesServletInitializer}. 
Override it to use a different initializer.
+     * Creates a new instance of {...@link BasicTilesInitializer}. Override it 
to use a different initializer.
      *
      * @return The Tiles servlet-based initializer.
      * @since 2.1.2
      */
-    protected TilesServletInitializer createTilesServletInitializer() {
-        return new BasicTilesServletInitializer();
+    protected TilesInitializer createTilesServletInitializer() {
+        return new BasicTilesInitializer();
     }
 }


Reply via email to