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())) {