Revision: 590
          http://svn.sourceforge.net/stripes/?rev=590&view=rev
Author:   bengunter
Date:     2007-07-22 19:58:20 -0700 (Sun, 22 Jul 2007)

Log Message:
-----------
Added support for special parameter name $event in clean URLs.

Modified Paths:
--------------
    trunk/stripes/src/net/sourceforge/stripes/action/OnwardResolution.java
    trunk/stripes/src/net/sourceforge/stripes/controller/StripesFilter.java
    
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
    trunk/stripes/src/net/sourceforge/stripes/tag/LinkTagSupport.java
    trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java

Modified: trunk/stripes/src/net/sourceforge/stripes/action/OnwardResolution.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/action/OnwardResolution.java      
2007-07-22 17:58:26 UTC (rev 589)
+++ trunk/stripes/src/net/sourceforge/stripes/action/OnwardResolution.java      
2007-07-23 02:58:20 UTC (rev 590)
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import net.sourceforge.stripes.controller.StripesFilter;
-import net.sourceforge.stripes.format.Formatter;
 import net.sourceforge.stripes.util.UrlBuilder;
 
 /**
@@ -37,6 +36,7 @@
  */
 public abstract class OnwardResolution<T extends OnwardResolution<T>> {
     private String path;
+    private String event;
     private Map<String,Object> parameters = new HashMap<String,Object>();
 
     /**
@@ -67,7 +67,7 @@
      */
     public OnwardResolution(Class<? extends ActionBean> beanType, String 
event) {
         this(beanType);
-        addParameter(event);
+        this.event = event;
     }
 
     /** Accessor for the path that the user should be sent to. */
@@ -173,6 +173,9 @@
      */
     public String getUrl(Locale locale) {
         UrlBuilder builder = new UrlBuilder(locale, path, false);
+        if (event != null) {
+            builder.setEvent(event);
+        }
         builder.addParameters(this.parameters);
         return builder.toString();
     }

Modified: 
trunk/stripes/src/net/sourceforge/stripes/controller/StripesFilter.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/controller/StripesFilter.java     
2007-07-22 17:58:26 UTC (rev 589)
+++ trunk/stripes/src/net/sourceforge/stripes/controller/StripesFilter.java     
2007-07-23 02:58:20 UTC (rev 590)
@@ -305,7 +305,11 @@
                 String name = p.getName();
                 if (name != null) {
                     String value = p.getValue();
-                    if (value != null) {
+                    if (UrlBindingParameter.PARAMETER_NAME_EVENT.equals(name)) 
{
+                        name = value;
+                        value = "";
+                    }
+                    if (name != null && value != null) {
                         name = URLEncoder.encode(name, "UTF-8");
                         value = URLEncoder.encode(value, "UTF-8");
                         
url.append(separator).append(name).append('=').append(value);

Modified: 
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java
===================================================================
--- 
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java   
    2007-07-22 17:58:26 UTC (rev 589)
+++ 
trunk/stripes/src/net/sourceforge/stripes/controller/UrlBindingParameter.java   
    2007-07-23 02:58:20 UTC (rev 590)
@@ -21,6 +21,9 @@
  * @since Stripes 1.5
  */
 public class UrlBindingParameter {
+    /** The special parameter name for the event to execute */
+    public static final String PARAMETER_NAME_EVENT = "$event";
+
     protected String name;
     protected String value;
     protected String defaultValue;

Modified: trunk/stripes/src/net/sourceforge/stripes/tag/LinkTagSupport.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/tag/LinkTagSupport.java   
2007-07-22 17:58:26 UTC (rev 589)
+++ trunk/stripes/src/net/sourceforge/stripes/tag/LinkTagSupport.java   
2007-07-23 02:58:20 UTC (rev 590)
@@ -159,7 +159,7 @@
         String base = getPreferredBaseUrl();
         UrlBuilder builder = new 
UrlBuilder(pageContext.getRequest().getLocale(), base, false);
         if (this.event != null) {
-            builder.addParameter(this.event);
+            builder.setEvent(this.event);
         }
         if (addSourcePage) {
             builder.addParameter(StripesConstants.URL_KEY_SOURCE_PAGE, 
request.getServletPath());

Modified: trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java      
2007-07-22 17:58:26 UTC (rev 589)
+++ trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java      
2007-07-23 02:58:20 UTC (rev 590)
@@ -66,6 +66,7 @@
     private String anchor;
     private Locale locale;
     private String parameterSeparator;
+    private Parameter event;
     private List<Parameter> parameters = new ArrayList<Parameter>();
     private String url;
 
@@ -146,6 +147,22 @@
     }
 
     /**
+     * Get the name of the event to be executed by this URL.
+     */
+    public String getEvent() {
+        return (String) (event == null ? null : event.value);
+    }
+
+    /**
+     * Set the name of the event to be executed by this URL.
+     * 
+     * @param event the event name
+     */
+    public void setEvent(String event) {
+        this.event = new Parameter(UrlBindingParameter.PARAMETER_NAME_EVENT, 
event);
+    }
+
+    /**
      * Returns the string that will be used to separate parameters in the 
query string.
      * Will usually be either '&amp;' for query strings that will be embedded 
in HTML
      * pages and '&' otherwise.
@@ -315,6 +332,17 @@
      */
     protected String build() {
         try {
+            // special handling for event parameter
+            List<Parameter> parameters;
+            if (event == null || (event != null && !event.skip)) {
+                parameters = this.parameters;
+            }
+            else {
+                parameters = new ArrayList<Parameter>(this.parameters.size() + 
1);
+                parameters.add(new Parameter((String) this.event.value, ""));
+                parameters.addAll(this.parameters);
+            }
+
             StringBuilder buffer = new StringBuilder(256);
             buffer.append(getBaseURL());
             boolean seenQuestionMark = buffer.indexOf("?") != -1;
@@ -365,6 +393,10 @@
             if (!map.containsKey(p.name))
                 map.put(p.name, p);
         }
+        if (event != null) {
+            map.put(event.name, event);
+            event.skip = false;
+        }
 
         StringBuilder buf = new StringBuilder(256);
         buf.append(binding.getPath());


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to