Index: RequestParamAction.java
===================================================================
RCS file: /home/cvspublic/xml-cocoon2/src/java/org/apache/cocoon/acting/RequestParamAction.java,v
retrieving revision 1.6
diff -u -r1.6 RequestParamAction.java
--- RequestParamAction.java	22 Feb 2002 06:59:26 -0000	1.6
+++ RequestParamAction.java	21 May 2002 11:15:37 -0000
@@ -69,6 +69,8 @@
  * This action makes some request details available to the sitemap via parameter
  * substitution.
  *
+ * 
+ *
  * {context}      - is the context path of the servlet (usually "/cocoon")
  * {requestURI}   - is the requested URI without parameters
  * {requestQuery} - is the query string like "?param1=test" if there is one
@@ -81,6 +83,12 @@
  * Default values can be set for request parameters, by including sitemap parameters
  * named "default.<parameter-name>".
  *
+ * Sitemap parameters can be added to request attributes by including sitemap parameters 
+ * named "attr.<parameter-name>".
+ * It might be useful in situations where actual content is aggregated from 
+ * different sources and you want to pass some parameters from sitemap to them. 
+ * 
+ * 
  * Sitemap definition:
  *
  * <pre>
@@ -104,10 +112,11 @@
  * Redirection is only one example, another use:
  *
  * <pre>
- * &lt;map:match pattern="some-resource"&gt;
+ * &lt;map:match pattern="some-resource/*"&gt;
  *  &lt;map:act type="request"&gt;
  *     &lt;map:parameter name="parameters" value="true"/&gt;
  *     &lt;map:generate src="users/menu-{id}.xml"/&gt;
+ *     &lt;map:parameter name="attr.location" value="{1}"/&gt;
  *  &lt;/map:act&gt;
  *  &lt;map:transform src="menus/personalisation.xsl"/&gt;
  *  &lt;map:serialize/&gt;
@@ -116,6 +125,7 @@
  *
  * etc, etc.
  *
+ * @author <a href="mailto:lassi.immonen@valkeus.com">Lassi Immonen</a>
  * @author <a href="mailto:Marcus.Crafter@osa.de">Marcus Crafter</a>
  * @author <a href="mailto:tcurdt@dff.st">Torsten Curdt</a>
  * @version CVS $Id: RequestParamAction.java,v 1.6 2002/02/22 06:59:26 cziegeler Exp $
@@ -129,6 +139,7 @@
     public final static String PARAM_PARAMETERS = "parameters";
     public final static String PARAM_DEFAULT_PREFIX = "default.";
 
+    public final static String PARAM_ADDATTR_PREFIX = "attr.";
 
     public Map act( Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters param )
         throws Exception
@@ -136,8 +147,8 @@
 
         Request request = ObjectModelHelper.getRequest(objectModel);
         if (request == null) {
-          getLogger().error("RequestInfoAction: no request object!");
-          return(null);
+            getLogger().error("RequestInfoAction: no request object!");
+            return(null);
         }
 
         Map map = new HashMap();
@@ -146,34 +157,47 @@
 
         String query = request.getQueryString();
         if (query != null && query.length() > 0){
-          map.put(MAP_QUERY, "?" + query);
+            map.put(MAP_QUERY, "?" + query);
         }
         else{
-          map.put(MAP_QUERY, "");
+            map.put(MAP_QUERY, "");
         }
 
         map.put(MAP_CONTEXTPATH, request.getContextPath());
 
         if ("true".equalsIgnoreCase(param.getParameter(PARAM_PARAMETERS, null))){
-          Enumeration e = request.getParameterNames();
-          while(e.hasMoreElements()){
-            String name = (String) e.nextElement();
-            String value = request.getParameter(name);
-
-            if (value != null && !map.containsKey(name)){
-              map.put(name, value);
+            Enumeration e = request.getParameterNames();
+            while(e.hasMoreElements()){
+                String name = (String) e.nextElement();
+                String value = request.getParameter(name);
+
+                if (value != null && !map.containsKey(name)){
+                    map.put(name, value);
+                }
+            }
+            String[] paramNames = param.getNames();      
+            for (int i=0; i< paramNames.length; i++) {
+                if (paramNames[i].startsWith(PARAM_DEFAULT_PREFIX) &&
+                        (request.getParameter(paramNames[i].substring(PARAM_DEFAULT_PREFIX.length())) == null)) {
+                    map.put(paramNames[i].substring(PARAM_DEFAULT_PREFIX.length()), 
+                            param.getParameter(paramNames[i]));
+                }else if (paramNames[i].startsWith(PARAM_ADDATTR_PREFIX)) {
+                    request.setAttribute(
+                            paramNames[i].substring(PARAM_ADDATTR_PREFIX.length()), 
+                            param.getParameter(paramNames[i])
+                            );
+                }
+            }
+        }else {
+            String[] paramNames = param.getNames();      
+            for (int i=0; i< paramNames.length; i++) {
+                if (paramNames[i].startsWith(PARAM_ADDATTR_PREFIX)) {
+                    request.setAttribute(
+                            paramNames[i].substring(PARAM_ADDATTR_PREFIX.length()), 
+                            param.getParameter(paramNames[i])
+                            );
+                }
             }
-          }
-
-      String[] paramNames = param.getNames();
-          for (int i=0; i< paramNames.length; i++) {
-          if (paramNames[i].startsWith(PARAM_DEFAULT_PREFIX) &&
-          (request.getParameter(paramNames[i].substring(PARAM_DEFAULT_PREFIX.length())) == null)) {
-          map.put(paramNames[i].substring(PARAM_DEFAULT_PREFIX.length()), param.getParameter(paramNames[i]));
-          }
-      }
-
-
         }
 
         return(map);

