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);
         }