You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2007/02/20 09:48:17 UTC
svn commit: r509464 - in /tiles/framework/trunk:
tiles-api/src/main/java/org/apache/tiles/mgmt/
tiles-core/src/main/java/org/apache/tiles/impl/mgmt/
tiles-core/src/main/java/org/apache/tiles/taglib/definition/
Author: apetrelli
Date: Tue Feb 20 00:48:16 2007
New Revision: 509464
URL: http://svn.apache.org/viewvc?view=rev&rev=509464
Log:
TILES-115
Split the "MutableTilesContainer.register" method in two with request/response and PageContext parameters.
TILES-116
Now the definitions are stored in request scope.
TILES-117
Now the correct DefinitionsManager is called for each key.
Modified:
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/mgmt/MutableTilesContainer.java
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainer.java
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java
Modified: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/mgmt/MutableTilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/mgmt/MutableTilesContainer.java?view=diff&rev=509464&r1=509463&r2=509464
==============================================================================
--- tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/mgmt/MutableTilesContainer.java (original)
+++ tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/mgmt/MutableTilesContainer.java Tue Feb 20 00:48:16 2007
@@ -21,6 +21,8 @@
*/
package org.apache.tiles.mgmt;
+import javax.servlet.jsp.PageContext;
+
import org.apache.tiles.TilesContainer;
import org.apache.tiles.TilesException;
@@ -34,8 +36,20 @@
/**
* Register a new definition with the container.
+ *
+ * @param definition
+ * @param context The PageContext to use
+ */
+ void register(TileDefinition definition, PageContext context)
+ throws TilesException;
+
+ /**
+ * Register a new definition with the container.
+ *
* @param definition
+ * @param request The request object to use.
+ * @param response The response object to use.
*/
- void register(TileDefinition definition) throws TilesException;
-
+ void register(TileDefinition definition, Object request, Object response)
+ throws TilesException;
}
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainer.java?view=diff&rev=509464&r1=509463&r2=509464
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingKeyedDefinitionsFactoryTilesContainer.java Tue Feb 20 00:48:16 2007
@@ -25,6 +25,8 @@
import java.util.HashMap;
import java.util.Map;
+import javax.servlet.jsp.PageContext;
+
import org.apache.tiles.TilesException;
import org.apache.tiles.context.TilesRequestContext;
import org.apache.tiles.definition.ComponentDefinition;
@@ -45,15 +47,30 @@
public class CachingKeyedDefinitionsFactoryTilesContainer extends
KeyedDefinitionsFactoryTilesContainer implements MutableTilesContainer {
+ private static final String DEFINITIONS_ATTRIBUTE_NAME_BASE =
+ "org.apache.tiles.impl.mgmt.CachingKeyedDefinitionsFactoryTilesContainer.DEFINITIONS.";
+
private DefinitionManager mgr = new DefinitionManager();
private Map<String, DefinitionManager> key2definitionManager
= new HashMap<String, DefinitionManager>();
- public void register(TileDefinition definition)
+ public void register(TileDefinition definition, PageContext context)
throws TilesException {
- ComponentDefinition def = new ComponentDefinition(definition);
- mgr.addDefinition(def);
+ TilesRequestContext requestContext = getContextFactory().createRequestContext(
+ getApplicationContext(), context
+ );
+ register(definition, requestContext);
+ }
+
+ public void register(TileDefinition definition, Object request,
+ Object response) throws TilesException {
+ TilesRequestContext requestContext = getContextFactory().createRequestContext(
+ getApplicationContext(),
+ request,
+ response
+ );
+ register(definition, requestContext);
}
@Override
@@ -93,6 +110,14 @@
mgr.setFactory(definitionsFactory);
}
+ protected void register(TileDefinition definition,
+ TilesRequestContext request) throws DefinitionsFactoryException {
+ DefinitionManager mgr = getProperDefinitionManager(
+ getDefinitionsFactoryKey(request));
+ ComponentDefinition def = new ComponentDefinition(definition);
+ mgr.addDefinition(def, request);
+ }
+
/**
* Returns a definition manager if found, otherwise it will create a new
* one.
@@ -103,7 +128,7 @@
protected DefinitionManager getOrCreateDefinitionManager(String key) {
DefinitionManager mgr = key2definitionManager.get(key);
if (mgr == null) {
- mgr = new DefinitionManager();
+ mgr = new DefinitionManager(DEFINITIONS_ATTRIBUTE_NAME_BASE + key);
key2definitionManager.put(key, mgr);
}
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java?view=diff&rev=509464&r1=509463&r2=509464
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/CachingTilesContainer.java Tue Feb 20 00:48:16 2007
@@ -21,6 +21,8 @@
*/
package org.apache.tiles.impl.mgmt;
+import javax.servlet.jsp.PageContext;
+
import org.apache.tiles.TilesException;
import org.apache.tiles.context.TilesRequestContext;
import org.apache.tiles.definition.ComponentDefinition;
@@ -43,10 +45,22 @@
private DefinitionManager mgr = new DefinitionManager();
- public void register(TileDefinition definition)
+ public void register(TileDefinition definition, PageContext context)
throws TilesException {
- ComponentDefinition def = new ComponentDefinition(definition);
- mgr.addDefinition(def);
+ TilesRequestContext requestContext = getContextFactory().createRequestContext(
+ getApplicationContext(), context
+ );
+ register(definition, requestContext);
+ }
+
+ public void register(TileDefinition definition, Object request,
+ Object response) throws TilesException {
+ TilesRequestContext requestContext = getContextFactory().createRequestContext(
+ getApplicationContext(),
+ request,
+ response
+ );
+ register(definition, requestContext);
}
protected ComponentDefinition getDefinition(String definition,
@@ -63,5 +77,11 @@
public void setDefinitionsFactory(DefinitionsFactory definitionsFactory) {
super.setDefinitionsFactory(definitionsFactory);
mgr.setFactory(definitionsFactory);
+ }
+
+ protected void register(TileDefinition definition,
+ TilesRequestContext request) throws DefinitionsFactoryException {
+ ComponentDefinition def = new ComponentDefinition(definition);
+ mgr.addDefinition(def, request);
}
}
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java?view=diff&rev=509464&r1=509463&r2=509464
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/impl/mgmt/DefinitionManager.java Tue Feb 20 00:48:16 2007
@@ -42,13 +42,23 @@
private static final Log LOG =
LogFactory.getLog(DefinitionManager.class);
- private Map<String, ComponentDefinition> definitions;
+ private static final String DEFAULT_DEFINITIONS_ATTRIBUTE_NAME =
+ "org.apache.tiles.impl.mgmt.DefinitionManager.DEFINITIONS";
+
private DefinitionsFactory factory;
+
+ private String definitionsAttributeName;
public DefinitionManager() {
- definitions = new HashMap<String, ComponentDefinition>();
+ definitionsAttributeName = DEFAULT_DEFINITIONS_ATTRIBUTE_NAME;
}
+ public DefinitionManager(String definitionsAttributeName) {
+ this.definitionsAttributeName = definitionsAttributeName;
+ if (this.definitionsAttributeName == null) {
+ this.definitionsAttributeName = DEFAULT_DEFINITIONS_ATTRIBUTE_NAME;
+ }
+ }
public DefinitionsFactory getFactory() {
return factory;
@@ -60,13 +70,16 @@
public ComponentDefinition getDefinition(String definition, TilesRequestContext request)
throws DefinitionsFactoryException {
- if (definitions.containsKey(definition)) {
+ Map<String, ComponentDefinition> definitions =
+ getDefinitions(request);
+ if (definitions != null && definitions.containsKey(definition)) {
return definitions.get(definition);
}
return getFactory().getDefinition(definition, request);
}
- public void addDefinition(ComponentDefinition definition)
+ public void addDefinition(ComponentDefinition definition,
+ TilesRequestContext request)
throws DefinitionsFactoryException {
validate(definition);
@@ -75,19 +88,20 @@
}
for(ComponentAttribute attr : definition.getAttributes().values()) {
- if(isDefinition(attr)) {
- ComponentDefinition d = getDefinition(attr.getValue().toString(), null);
+ if(isDefinition(attr, request)) {
+ ComponentDefinition d = getDefinition(attr.getValue().toString(), request);
attr.setAttributes(d.getAttributes());
}
}
- definitions.put(definition.getName(), definition);
+ getOrCreateDefinitions(request).put(definition.getName(), definition);
}
- private boolean isDefinition(ComponentAttribute attribute) throws DefinitionsFactoryException {
+ private boolean isDefinition(ComponentAttribute attribute,
+ TilesRequestContext request) throws DefinitionsFactoryException {
boolean explicit = ComponentAttribute.DEFINITION.equals(attribute.getType());
boolean implicit = attribute.getType() == null &&
- (getDefinition((String)attribute.getValue(), null) != null);
+ (getDefinition((String)attribute.getValue(), request) != null);
return explicit || implicit;
}
@@ -177,5 +191,27 @@
if (child.getPreparer() == null) {
child.setPreparer(parent.getPreparer());
}
+ }
+
+ @SuppressWarnings("unchecked")
+ protected Map<String, ComponentDefinition> getDefinitions(
+ TilesRequestContext request) {
+ return (Map<String, ComponentDefinition>) request.getRequestScope()
+ .get(definitionsAttributeName);
+ }
+
+ @SuppressWarnings("unchecked")
+ protected Map<String, ComponentDefinition> getOrCreateDefinitions(
+ TilesRequestContext request) {
+ Map<String, ComponentDefinition> definitions =
+ (Map<String, ComponentDefinition>) request
+ .getRequestScope().get(definitionsAttributeName);
+ if (definitions == null) {
+ definitions = new HashMap<String, ComponentDefinition>();
+ request.getRequestScope()
+ .put(definitionsAttributeName, definitions);
+ }
+
+ return definitions;
}
}
Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java?view=diff&rev=509464&r1=509463&r2=509464
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DefinitionTag.java Tue Feb 20 00:48:16 2007
@@ -137,7 +137,7 @@
d.getAttributes().putAll(attributes);
try {
- container.register(d);
+ container.register(d, pageContext);
} catch (TilesException e) {
throw new JspException("Unable to add definition. " ,e);
}