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