You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ap...@apache.org on 2007/01/04 14:12:29 UTC

svn commit: r492554 - in /struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2: TilesPlugin.java TilesRequestProcessor.java commands/TilesPreProcessor.java

Author: apetrelli
Date: Thu Jan  4 05:12:28 2007
New Revision: 492554

URL: http://svn.apache.org/viewvc?view=rev&rev=492554
Log:
STR-2986
Added module-aware code to provide different definitions with different modules.

Modified:
    struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesPlugin.java
    struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesRequestProcessor.java
    struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/commands/TilesPreProcessor.java

Modified: struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesPlugin.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesPlugin.java?view=diff&rev=492554&r1=492553&r2=492554
==============================================================================
--- struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesPlugin.java (original)
+++ struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesPlugin.java Thu Jan  4 05:12:28 2007
@@ -21,6 +21,9 @@
 
 package org.apache.struts.tiles2;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.servlet.ServletException;
 
 import org.apache.commons.logging.Log;
@@ -37,7 +40,14 @@
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.TilesException;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.context.BasicTilesContextFactory;
+import org.apache.tiles.definition.DefinitionsFactory;
+import org.apache.tiles.definition.UrlDefinitionsFactory;
+import org.apache.tiles.factory.KeyedDefinitionsFactoryTilesContainerFactory;
 import org.apache.tiles.factory.TilesContainerFactory;
+import org.apache.tiles.impl.BasicTilesContainer;
+import org.apache.tiles.impl.KeyedDefinitionsFactoryTilesContainer;
+import org.apache.tiles.preparer.BasicPreparerFactory;
 
 /**
  * Tiles Plugin used to initialize Tiles.
@@ -67,6 +77,24 @@
 // TODO Complete the plugin to be module-aware.
 public class TilesPlugin implements PlugIn {
 
+    private static final Map<String, String> MODULE_AWARE_DEFAULTS =
+        new HashMap<String, String>();
+
+    static {
+        MODULE_AWARE_DEFAULTS.put(TilesContainerFactory
+                .CONTAINER_FACTORY_INIT_PARAM,
+                KeyedDefinitionsFactoryTilesContainerFactory.class.getName());
+        MODULE_AWARE_DEFAULTS.put(TilesContainerFactory
+                .CONTEXT_FACTORY_INIT_PARAM,
+                BasicTilesContextFactory.class.getName());
+        MODULE_AWARE_DEFAULTS.put(TilesContainerFactory
+                .DEFINITIONS_FACTORY_INIT_PARAM,
+                UrlDefinitionsFactory.class.getName());
+        MODULE_AWARE_DEFAULTS.put(TilesContainerFactory
+                .PREPARER_FACTORY_INIT_PARAM,
+                BasicPreparerFactory.class.getName());
+    }
+
     /**
      * Commons Logging instance.
      */
@@ -132,12 +160,58 @@
         
         // Initialize Tiles
         try {
-            TilesContainerFactory factory = TilesContainerFactory
-                    .getFactory(currentPlugInConfigContextAdapter);
-            TilesContainer container = factory.createContainer(
-                    currentPlugInConfigContextAdapter);
-            TilesAccess.setContainer(currentPlugInConfigContextAdapter,
-                    container);
+            TilesContainerFactory factory;
+            TilesContainer container;
+            if (moduleAware) {
+                factory = TilesContainerFactory.getFactory(
+                        currentPlugInConfigContextAdapter,
+                        MODULE_AWARE_DEFAULTS);
+                container = TilesAccess.getContainer(
+                        currentPlugInConfigContextAdapter);
+                if (container == null) {
+                    container = factory.createContainer(
+                            currentPlugInConfigContextAdapter);
+                    TilesAccess.setContainer(currentPlugInConfigContextAdapter,
+                            container);
+                }
+                if (container instanceof KeyedDefinitionsFactoryTilesContainer) {
+                    if (factory instanceof KeyedDefinitionsFactoryTilesContainerFactory) {
+                        DefinitionsFactory defsFactory =
+                            ((KeyedDefinitionsFactoryTilesContainerFactory) factory)
+                            .createDefinitionsFactory(currentPlugInConfigContextAdapter);
+                        Map<String, String> initParameters = new HashMap<String, String>();
+                        String param = (String) currentPlugInConfigObject
+                                .getProperties().get(BasicTilesContainer
+                                        .DEFINITIONS_CONFIG);
+                        if (param == null) {
+                            param = (String) currentPlugInConfigObject
+                                .getProperties().get("definitions-config");
+                        }
+                        if (param != null) {
+                            initParameters.put(BasicTilesContainer
+                                    .DEFINITIONS_CONFIG, param);
+                        }
+                        ((KeyedDefinitionsFactoryTilesContainer) container)
+                                .setDefinitionsFactory(moduleConfig.getPrefix(),
+                                        defsFactory, initParameters);
+                    } else {
+                        log.warn("The created factory is not instance of "
+                                + "KeyedDefinitionsFactoryTilesContainerFactory"
+                                + " and cannot be configured correctly");
+                    }
+                } else {
+                    log.warn("The created container is not instance of "
+                            + "KeyedDefinitionsFactoryTilesContainer"
+                            + " and cannot be configured correctly");
+                }
+            } else {
+                factory = TilesContainerFactory
+                        .getFactory(currentPlugInConfigContextAdapter);
+                container = factory.createContainer(
+                        currentPlugInConfigContextAdapter);
+                TilesAccess.setContainer(currentPlugInConfigContextAdapter,
+                        container);
+            }
         } catch (TilesException e) {
             log.fatal("Unable to retrieve tiles factory.", e);
             throw new IllegalStateException("Unable to instantiate container.");

Modified: struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesRequestProcessor.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesRequestProcessor.java?view=diff&rev=492554&r1=492553&r2=492554
==============================================================================
--- struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesRequestProcessor.java (original)
+++ struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/TilesRequestProcessor.java Thu Jan  4 05:12:28 2007
@@ -37,6 +37,7 @@
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.TilesException;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.impl.KeyedDefinitionsFactoryTilesContainer;
 
 /**
  * <p><strong>RequestProcessor</strong> contains the processing logic that
@@ -105,6 +106,12 @@
         }
         
         boolean retValue = false;
+        
+        if (moduleConfig.getPrefix() != null) {
+            request.setAttribute(KeyedDefinitionsFactoryTilesContainer
+                    .DEFINITIONS_FACTORY_KEY_ATTRIBUTE_NAME,
+                    moduleConfig.getPrefix());
+        }
         
         if (container.isValidDefinition(request, response, definitionName)) {
             retValue = response.isCommitted();

Modified: struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/commands/TilesPreProcessor.java
URL: http://svn.apache.org/viewvc/struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/commands/TilesPreProcessor.java?view=diff&rev=492554&r1=492553&r2=492554
==============================================================================
--- struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/commands/TilesPreProcessor.java (original)
+++ struts/struts1/trunk/tiles2/src/main/java/org/apache/struts/tiles2/commands/TilesPreProcessor.java Thu Jan  4 05:12:28 2007
@@ -28,6 +28,7 @@
 import org.apache.struts.config.ForwardConfig;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.impl.KeyedDefinitionsFactoryTilesContainer;
 
 
 /**
@@ -103,6 +104,12 @@
         }
         
         boolean retValue = false;
+        
+        if (sacontext.getModuleConfig().getPrefix() != null) {
+            sacontext.getRequest().setAttribute(KeyedDefinitionsFactoryTilesContainer
+                    .DEFINITIONS_FACTORY_KEY_ATTRIBUTE_NAME,
+                    sacontext.getModuleConfig().getPrefix());
+        }
         
         if (container.isValidDefinition(sacontext.getRequest(),
         		sacontext.getResponse(), forwardConfig.getPath())) {