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 2008/10/24 20:41:57 UTC

svn commit: r707708 - /velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/LinkTool.java

Author: nbubna
Date: Fri Oct 24 11:41:56 2008
New Revision: 707708

URL: http://svn.apache.org/viewvc?rev=707708&view=rev
Log:
fix a String[] param bug and prepare to have other LinkTools extend this

Modified:
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/LinkTool.java

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/LinkTool.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/LinkTool.java?rev=707708&r1=707707&r2=707708&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/LinkTool.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/LinkTool.java Fri Oct 24 11:41:56 2008
@@ -116,9 +116,8 @@
     protected String queryDelim;
     protected boolean appendParams;
     protected boolean forceRelative;
-
-    private boolean opaque;
-    private final LinkTool self;
+    protected boolean opaque;
+    protected final LinkTool self;
 
 
     /**
@@ -141,6 +140,11 @@
         self = this;
     }
 
+    protected final void debug(String msg, Object... args)
+    {
+        debug(msg, null, args);
+    }
+
     protected final void debug(String msg, Throwable t, Object... args)
     {
         if (LOG != null && LOG.isDebugEnabled())
@@ -523,7 +527,7 @@
         if (this.query == null)
         {
             this.query = new LinkedHashMap();
-            query.put(key, value);
+            putParam(key, value);
         }
         else if (append)
         {
@@ -531,7 +535,7 @@
         }
         else
         {
-            query.put(key, value);
+            putParam(key, value);
         }
     }
 
@@ -549,15 +553,29 @@
                 List vals = new ArrayList();
                 vals.add(cur);
                 addToList(vals, value);
-                query.put(key, vals);
+                putParam(key, vals);
             }
         }
         else
         {
-            query.put(key, value);
+            putParam(key, value);
         }
     }
 
+    private void putParam(Object key, Object value)
+    {
+        if (value instanceof Object[])
+        {
+            List vals = new ArrayList();
+            for (Object v : ((Object[])value))
+            {
+                vals.add(v);
+            }
+            value = vals;
+        }
+        query.put(key, value);
+    }
+
     private void addToList(List vals, Object value)
     {
         if (value instanceof List)
@@ -1253,17 +1271,29 @@
         String pth;
         if (obj == null)
         {
-            pth = getDirectory();
+            pth = getContextPath();
         }
         else
         {
-            pth = combinePath(getDirectory(), String.valueOf(obj));
+            pth = combinePath(getContextPath(), String.valueOf(obj));
         }
         copy.setPath(pth);
         return copy;
     }
 
     /**
+     * At this level, this only returns the result of {@link #getDirectory}.
+     * It is here as an extension hook for subclasses to change the
+     * "context" for relative links.
+     * @see #relative(Object)
+     * @see #getDirectory
+     */
+    public String getContextPath()
+    {
+        return getDirectory();
+    }
+
+    /**
      * Returns true if this instance has a scheme value
      * and is not being forced to create relative URIs.
      */