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 2006/12/20 14:06:46 UTC
svn commit: r489080 - in
/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl:
KeyedDefinitionsFactoryTilesContainer.java
mgmt/CachingKeyedDefinitionsFactoryTilesContainerFactory.java
Author: apetrelli
Date: Wed Dec 20 05:06:46 2006
New Revision: 489080
URL: http://svn.apache.org/viewvc?view=rev&rev=489080
Log:
SB-101
Initialization of keyed definitions factory must happen after they are set.
Added connection between the request and the key of the chosen definitions factory.
Modified:
struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainer.java
struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainerFactory.java
Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainer.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainer.java?view=diff&rev=489080&r1=489079&r2=489080
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainer.java (original)
+++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/KeyedDefinitionsFactoryTilesContainer.java Wed Dec 20 05:06:46 2006
@@ -26,29 +26,20 @@
import java.util.Map;
import org.apache.tiles.TilesException;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.definition.ComponentDefinition;
import org.apache.tiles.definition.DefinitionsFactory;
+import org.apache.tiles.definition.DefinitionsFactoryException;
public class KeyedDefinitionsFactoryTilesContainer extends BasicTilesContainer {
+
+ public static final String DEFINITIONS_FACTORY_KEY_ATTRIBUTE_NAME =
+ "org.apache.tiles.DEFINITIONS_FACTORY.key";
protected Map<String, DefinitionsFactory> key2definitionsFactory;
-
- protected Map<String, Map<String, String>> key2initParams;
public KeyedDefinitionsFactoryTilesContainer() {
key2definitionsFactory = new HashMap<String, DefinitionsFactory>();
- key2initParams = new HashMap<String, Map<String,String>>();
- }
-
- @Override
- public void init(Map<String, String> initParameters) throws TilesException {
- super.init(initParameters);
-
- for (Map.Entry<String, DefinitionsFactory> entry:
- key2definitionsFactory.entrySet()) {
- String key = entry.getKey();
- initializeDefinitionsFactory(entry.getValue(),
- getResourceString(initParameters), key2initParams.get(key));
- }
}
/**
@@ -74,16 +65,48 @@
* that the container has not yet been initialized.
*
* @param definitionsFactory the definitions factory for this instance.
+ * @throws TilesException If something goes wrong during initialization of
+ * the definitions factory.
*/
public void setDefinitionsFactory(String key,
DefinitionsFactory definitionsFactory,
- Map<String, String> initParameters) {
+ Map<String, String> initParameters) throws TilesException {
if (key != null) {
- checkInit();
key2definitionsFactory.put(key, definitionsFactory);
- key2initParams.put(key, initParameters);
+ initializeDefinitionsFactory(definitionsFactory,
+ getResourceString(initParameters), initParameters);
} else {
setDefinitionsFactory(definitionsFactory);
}
+ }
+
+ @Override
+ protected ComponentDefinition getDefinition(String definitionName,
+ TilesRequestContext request) throws DefinitionsFactoryException {
+ ComponentDefinition retValue = null;
+ String key = getDefinitionsFactoryKey(request);
+ if (key != null) {
+ DefinitionsFactory definitionsFactory =
+ key2definitionsFactory.get(key);
+ if (definitionsFactory != null) {
+ retValue = definitionsFactory.getDefinition(definitionName,
+ request);
+ }
+ }
+ if (retValue == null) {
+ retValue = super.getDefinition(definitionName, request);
+ }
+ return retValue;
+ }
+
+ protected String getDefinitionsFactoryKey(TilesRequestContext request) {
+ String retValue = null;
+ Map requestScope = request.getRequestScope();
+ if (requestScope != null) { // Probably the request scope does not exist
+ retValue = (String) requestScope.get(
+ DEFINITIONS_FACTORY_KEY_ATTRIBUTE_NAME);
+ }
+
+ return retValue;
}
}
Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainerFactory.java?view=diff&rev=489080&r1=489079&r2=489080
==============================================================================
--- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainerFactory.java (original)
+++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainerFactory.java Wed Dec 20 05:06:46 2006
@@ -52,6 +52,8 @@
protected ComponentDefinition getDefinition(String definition,
TilesRequestContext context)
throws DefinitionsFactoryException {
+ DefinitionManager mgr = getAppropriateDefinitionManager(
+ getDefinitionsFactoryKey(context));
return mgr.getDefinition(definition, context);
}
@@ -62,12 +64,8 @@
@Override
public DefinitionsFactory getDefinitionsFactory(String key) {
- DefinitionsFactory factory = key2definitionsFactory.get(key);
- if (factory == null) {
- factory = mgr.getFactory();
- }
-
- return factory;
+ DefinitionManager mgr = getAppropriateDefinitionManager(key);
+ return mgr.getFactory();
}
@Override
@@ -78,12 +76,30 @@
@Override
public void setDefinitionsFactory(String key, DefinitionsFactory definitionsFactory, Map<String, String> initParameters) {
+ DefinitionManager mgr = getOrCreateDefinitionManager(key);
+ mgr.setFactory(definitionsFactory);
+ }
+
+ protected DefinitionManager getOrCreateDefinitionManager(String key) {
DefinitionManager mgr = key2definitionManager.get(key);
if (mgr == null) {
mgr = new DefinitionManager();
key2definitionManager.put(key, mgr);
}
- mgr.setFactory(definitionsFactory);
+
+ return mgr;
+ }
+
+ protected DefinitionManager getAppropriateDefinitionManager(String key) {
+ DefinitionManager mgr = null;
+
+ if (key != null) {
+ mgr = key2definitionManager.get(key);
+ }
+ if (mgr == null) {
+ mgr = this.mgr;
+ }
+
+ return mgr;
}
-
}