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