You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2011/07/28 06:12:17 UTC
svn commit: r1151728 - in /velocity/tools/branches/2.0.x:
src/main/java/org/apache/velocity/tools/generic/LinkTool.java
xdocs/changes.xml
Author: nbubna
Date: Thu Jul 28 04:12:16 2011
New Revision: 1151728
URL: http://svn.apache.org/viewvc?rev=1151728&view=rev
Log:
VELTOOLS-146 absolute(uri) and friends no longer encode query strings or fragments
Modified:
velocity/tools/branches/2.0.x/src/main/java/org/apache/velocity/tools/generic/LinkTool.java
velocity/tools/branches/2.0.x/xdocs/changes.xml
Modified: velocity/tools/branches/2.0.x/src/main/java/org/apache/velocity/tools/generic/LinkTool.java
URL: http://svn.apache.org/viewvc/velocity/tools/branches/2.0.x/src/main/java/org/apache/velocity/tools/generic/LinkTool.java?rev=1151728&r1=1151727&r2=1151728&view=diff
==============================================================================
--- velocity/tools/branches/2.0.x/src/main/java/org/apache/velocity/tools/generic/LinkTool.java (original)
+++ velocity/tools/branches/2.0.x/src/main/java/org/apache/velocity/tools/generic/LinkTool.java Thu Jul 28 04:12:16 2011
@@ -365,7 +365,7 @@ public class LinkTool extends SafeConfig
}
catch (NumberFormatException nfe)
{
- debug("Could convert '%s' to int", nfe, obj);
+ debug("Could not convert '%s' to int", nfe, obj);
this.port = -2; // use this to mean error
}
}
@@ -831,7 +831,9 @@ public class LinkTool extends SafeConfig
* host, port, path, query, and fragment all to their null-equivalent
* values. Otherwise, this will
* convert the specified object into a {@link URI}, then those same
- * values from the URI object to this instance.
+ * values from the URI object to this instance, when not null or empty.
+ * In other words, when given a URI this will only set values present
+ * in the URI.
*/
protected boolean setFromURI(Object obj)
{
@@ -853,27 +855,51 @@ public class LinkTool extends SafeConfig
{
return false;
}
- setScheme(uri.getScheme());
+ if (uri.getScheme() != null)
+ {
+ setScheme(uri.getScheme());
+ }
if (uri.isOpaque())
{
this.opaque = true;
- // path is used as scheme-specific part
- setPath(uri.getSchemeSpecificPart());
+ if (uri.getSchemeSpecificPart() != null)
+ {
+ // path is used as scheme-specific part
+ setPath(uri.getSchemeSpecificPart());
+ }
}
else
{
- setUserInfo(uri.getUserInfo());
- setHost(uri.getHost());
- setPort(uri.getPort());
+ if (uri.getUserInfo() != null)
+ {
+ setUserInfo(uri.getUserInfo());
+ }
+ if (uri.getHost() != null)
+ {
+ setHost(uri.getHost());
+ }
+ if (uri.getPort() > -1)
+ {
+ setPort(uri.getPort());
+ }
String pth = uri.getPath();
- if (pth.equals("/") || pth.length() == 0)
+ if (pth != null)
{
- pth = null;
+ if (pth.equals("/") || pth.length() == 0)
+ {
+ pth = null;
+ }
+ setPath(pth);
}
- setPath(pth);
+ }
+ if (uri.getQuery() != null)
+ {
setQuery(uri.getQuery());
}
- setFragment(uri.getFragment());
+ if (uri.getFragment() != null)
+ {
+ setFragment(uri.getFragment());
+ }
return true;
}
@@ -894,7 +920,7 @@ public class LinkTool extends SafeConfig
}
catch (Exception e)
{
- debug("Could convert '%s' to URI", e, obj);
+ debug("Could not convert '%s' to URI", e, obj);
return null;
}
}
@@ -1272,8 +1298,11 @@ public class LinkTool extends SafeConfig
{
pth = combinePath(getContextPath(), String.valueOf(obj));
}
- copy.setPath(pth);
- return copy;
+ if (copy.setFromURI(pth))
+ {
+ return copy;
+ }
+ return null;
}
/**
@@ -1340,52 +1369,25 @@ public class LinkTool extends SafeConfig
{
// assume it's just a path value to go with current scheme/host/port
LinkTool copy = absolute();
- String pth;
if (obj == null)
{
// just use the current directory path, if any
- pth = getDirectory();
+ copy.setPath(getDirectory());
}
else
{
- pth = String.valueOf(obj);
- if (pth.startsWith(DEFAULT_SCHEME))
+ String pth = String.valueOf(obj);
+ // paths that don't start with '/'
+ // are considered relative to the current directory
+ if (!pth.startsWith(DEFAULT_SCHEME) && !pth.startsWith("/"))
{
- // looks absolute already
- URI uri = toURI(pth);
- if (uri == null)
- {
- return null;
- }
- copy.setScheme(uri.getScheme());
- copy.setUserInfo(uri.getUserInfo());
- copy.setHost(uri.getHost());
- copy.setPort(uri.getPort());
- // handle path, query and fragment with care
- pth = uri.getPath();
- if (pth.equals("/") || pth.length() == 0)
- {
- pth = null;
- }
- copy.setPath(pth);
- if (uri.getQuery() != null)
- {
- copy.setQuery(uri.getQuery());
- }
- if (uri.getFragment() != null)
- {
- copy.setFragment(uri.getFragment());
- }
- return copy;
+ pth = combinePath(getDirectory(), pth);
}
- else if (!pth.startsWith("/"))
+ if (!copy.setFromURI(pth))
{
- // paths that don't start with '/'
- // are considered relative to the current directory
- pth = combinePath(getDirectory(), pth);
+ return null;
}
}
- copy.setPath(pth);
return copy;
}
Modified: velocity/tools/branches/2.0.x/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/velocity/tools/branches/2.0.x/xdocs/changes.xml?rev=1151728&r1=1151727&r2=1151728&view=diff
==============================================================================
--- velocity/tools/branches/2.0.x/xdocs/changes.xml (original)
+++ velocity/tools/branches/2.0.x/xdocs/changes.xml Thu Jul 28 04:12:16 2011
@@ -41,6 +41,7 @@
<li>fixed VELTOOLS-148 - fixed a LinkTool bug with parametersToIgnore management (schultz)</li>
<li>fixed VELTOOLS-149 - changed LinkTool.addRequestParams to accept Object[] (schultz)</li>
<li>Added StrutsLinkTool.action and StrutsLinkTool.forward methods as replacements for StrutsLinkTool.setAction ant StrutsLinkTool.setForward to match other new LinkTool methods like LinkTool.relative and LinkTool.absolute (schultz)
+ <li>fixed VELTOOLS-146 $link.absolute($uri) should not encode query strings in the argument</li>
</ul>
</subsection>