Revision: 593
          http://stripes.svn.sourceforge.net/stripes/?rev=593&view=rev
Author:   bengunter
Date:     2007-07-25 14:38:08 -0700 (Wed, 25 Jul 2007)

Log Message:
-----------
Changed getBaseURL(...) so it makes more sense. The original base URL is passed 
in, as is a collection of Parameters. Parameters that should not be appended to 
the query string by build() will be removed from the parameters collection. 
Removed the Parameter.skip flag because it was bad form.

Modified Paths:
--------------
    trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java

Modified: trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java      
2007-07-25 19:20:49 UTC (rev 592)
+++ trunk/stripes/src/net/sourceforge/stripes/util/UrlBuilder.java      
2007-07-25 21:38:08 UTC (rev 593)
@@ -54,12 +54,15 @@
     private static class Parameter {
         String name;
         Object value;
-        boolean skip;
 
         Parameter(String name, Object value) {
             this.name = name;
             this.value = value;
         }
+
+        public String toString() {
+            return "" + this.name + "=" + this.value;
+        }
     }
 
     private String baseUrl;
@@ -333,22 +336,19 @@
     protected String build() {
         try {
             // special handling for event parameter
-            List<Parameter> parameters;
-            if (event == null || event.skip) {
-                parameters = this.parameters;
+            List<Parameter> parameters = new 
ArrayList<Parameter>(this.parameters.size() + 1);
+            if (this.event != null) {
+                parameters.add(this.event);
             }
-            else {
-                parameters = new ArrayList<Parameter>(this.parameters.size() + 
1);
-                parameters.add(new Parameter((String) this.event.value, ""));
-                parameters.addAll(this.parameters);
-            }
+            parameters.addAll(this.parameters);
 
             StringBuilder buffer = new StringBuilder(256);
-            buffer.append(getBaseURL());
+            buffer.append(getBaseURL(this.baseUrl, parameters));
             boolean seenQuestionMark = buffer.indexOf("?") != -1;
-            for (Parameter pair : parameters) {
-                if (pair.skip)
-                    continue;
+            for (Parameter param : parameters) {
+                // special handling for event parameter
+                if (param == this.event)
+                    param = new Parameter((String) this.event.value, "");
 
                 // Figure out whether we already have params or not
                 if (!seenQuestionMark) {
@@ -358,9 +358,9 @@
                 else {
                     buffer.append(getParameterSeparator());
                 }
-                buffer.append(URLEncoder.encode(pair.name, 
"UTF-8")).append('=');
-                if (pair.value != null) {
-                    buffer.append(URLEncoder.encode(format(pair.value), 
"UTF-8"));
+                buffer.append(URLEncoder.encode(param.name, 
"UTF-8")).append('=');
+                if (param.value != null) {
+                    buffer.append(URLEncoder.encode(format(param.value), 
"UTF-8"));
                 }
             }
             return buffer.toString();
@@ -377,11 +377,16 @@
      * [EMAIL PROTECTED] #addParameter(String, Object[])} or [EMAIL PROTECTED] 
#addParameters(Map)}. Otherwise, it
      * returns the original base URL.
      * 
+     * @param baseUrl The base URL to start with. In many cases, this value 
will be returned
+     *            unchanged.
+     * @param parameters The query parameters. Any parameters that should not 
be appended to the
+     *            query string by [EMAIL PROTECTED] #build()} (e.g., because 
they are embedded in the URL)
+     *            should be removed from the collection before this method 
returns.
      * @return the base URL, without a query string
      * @see #UrlBuilder(Locale, Class, boolean)
      * @see #UrlBuilder(Locale, String, boolean)
      */
-    protected String getBaseURL() {
+    protected String getBaseURL(String baseUrl, Collection<Parameter> 
parameters) {
         UrlBinding binding = 
UrlBindingFactory.getInstance().getBindingPrototype(baseUrl);
         if (binding == null || binding.getParameters().size() == 0) {
             return baseUrl;
@@ -389,14 +394,9 @@
 
         Map<String, Parameter> map = new HashMap<String, Parameter>();
         for (Parameter p : parameters) {
-            p.skip = false;
             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());
@@ -418,7 +418,7 @@
                         }
 
                         buf.append(value);
-                        assigned.skip = true;
+                        parameters.remove(assigned);
                         ok = true;
                     }
                 }


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