Author: jvdrean
Date: 2008-02-14 19:18:12 +0100 (Thu, 14 Feb 2008)
New Revision: 7732

Added:
   
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/XWikiCompatibilityAspect.aj
   
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/api/
   
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/api/XWikiCompatibilityAspect.aj
Removed:
   
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/aspect/
Modified:
   xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/Util.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/XWiki.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/export/html/HtmlPackager.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/charts/actions/ChartingAction.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/render/XWikiRadeoxRenderEngine.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/TOCGenerator.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAttachmentAction.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DotAction.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DownloadAction.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DownloadRevAction.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SVGAction.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SkinAction.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/Utils.java
   
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ViewAttachRevAction.java
   
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/XWikiTest.java
Log:
XWIKI-2103 : Add encodeURI and decodeURI to Util, deprecate 
XWiki.getURLEncoded, Utils.encode, Utils.decode

Added: 
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/XWikiCompatibilityAspect.aj
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/XWikiCompatibilityAspect.aj
                                (rev 0)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/XWikiCompatibilityAspect.aj
        2008-02-14 18:18:12 UTC (rev 7732)
@@ -0,0 +1,51 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ *
+ */
+package com.xpn.xwiki;
+
+import com.xpn.xwiki.XWiki;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.*;
+
+/**
+ * Add a backward compatibility layer to the [EMAIL PROTECTED] 
com.xpn.xwiki.XWiki} class.
+ *
+ * @version $Id: $
+ */
+public privileged aspect XWikiCompatibilityAspect
+{
+    /**
+     * Transform a text in a URL compatible text
+     *
+     * @param content text to transform
+     * @return encoded result
+     * @deprecated replaced by Util#encodeURI since 1.3M2
+     */
+    public String XWiki.getURLEncoded(String content)
+    {
+        try {
+            return URLEncoder.encode(content, this.getEncoding());            
+        } catch (UnsupportedEncodingException e) {
+            return content;
+        }
+    }
+}

Copied: 
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/api/XWikiCompatibilityAspect.aj
 (from rev 7725, 
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/aspect/compatibility/XWikiCompatibilityAspect.aj)
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/api/XWikiCompatibilityAspect.aj
                            (rev 0)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/aspect/compatibility/com/xpn/xwiki/api/XWikiCompatibilityAspect.aj
    2008-02-14 18:18:12 UTC (rev 7732)
@@ -0,0 +1,465 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ *
+ */
+package com.xpn.xwiki.api;
+
+import com.xpn.xwiki.api.XWiki;
+import com.xpn.xwiki.api.Util;
+import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.stats.api.XWikiStatsService;
+
+import java.io.IOException;
+import java.awt.image.BufferedImage;
+import java.util.*;
+
+/**
+ * Add a backward compatibility layer to the [EMAIL PROTECTED] 
com.xpn.xwiki.api.XWiki} class.
+ *
+ * @version $Id: $
+ */
+public privileged aspect XWikiCompatibilityAspect
+{
+    /**
+     * Utility methods have been moved in version 1.3 Milestone 2 to the 
[EMAIL PROTECTED] Util} class.
+     * However to preserve backward compatibility we have deprecated them in 
this class and
+     * not removed them yet. All calls are funnelled through this class 
variable.
+     */
+    private Util XWiki.util;
+
+    /**
+     * Capture the api.XWiki constructor so that we can initialize this.util.
+     */
+    private pointcut xwikiCreation(XWiki x): this(x) && execution( public 
XWiki.new(..) );
+
+    after(XWiki x): xwikiCreation(x)
+    {
+        x.util = new Util(x.xwiki, x.context);
+    }
+
+    /**
+     * API to protect Text from Wiki transformation
+     * @param text
+     * @return escaped text
+     * @deprecated replaced by Util#escapeText since 1.3M2
+     */
+    public String XWiki.escapeText(String text)
+    {
+        return this.util.escapeText(text);
+    }
+
+    /**
+     * API to protect URLs from Wiki transformation
+     * @param url
+     * @return encoded URL
+     * @deprecated replaced by Util#escapeURL since 1.3M2
+     */
+    public String XWiki.escapeURL(String url)
+    {
+        return this.util.escapeURL(url);
+    }
+
+    /**
+     * @deprecated use [EMAIL PROTECTED] #getLanguagePreference()} instead
+     */
+    public String XWiki.getDocLanguagePreference()
+    {
+        return xwiki.getDocLanguagePreference(getXWikiContext());
+    }
+
+    /**
+     * Privileged API to send a message to an email address
+     *
+     * @param sender email of the sender of the message
+     * @param recipient email of the recipient of the message
+     * @param message Message to send
+     * @throws XWikiException if the mail was not send successfully
+     * @deprecated replaced by the
+     *   <a 
href="http://code.xwiki.org/xwiki/bin/view/Plugins/MailSenderPlugin";>Mail Sender
+     *   Plugin</a> since 1.3M2
+     */
+    public void XWiki.sendMessage(String sender, String recipient, String 
message)
+        throws XWikiException
+    {
+        if (hasProgrammingRights())
+            xwiki.sendMessage(sender, recipient, message, getXWikiContext());
+    }
+
+    /**
+     * Privileged API to send a message to an email address
+     *
+     * @param sender email of the sender of the message
+     * @param recipient emails of the recipients of the message
+     * @param message Message to send
+     * @throws XWikiException if the mail was not send successfully
+     * @deprecated replaced by the
+     *   <a 
href="http://code.xwiki.org/xwiki/bin/view/Plugins/MailSenderPlugin";>Mail Sender
+     *   Plugin</a> since 1.3M2
+     */
+    public void XWiki.sendMessage(String sender, String[] recipient, String 
message)
+        throws XWikiException
+    {
+        if (hasProgrammingRights())
+            xwiki.sendMessage(sender, recipient, message, getXWikiContext());
+    }
+
+    /**
+     * @return the current date
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#getDate()} since 1.3M2
+     */
+    public Date XWiki.getCurrentDate()
+    {
+        return this.util.getDate();
+    }
+
+    /**
+     * @return the current date
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#getDate()} since 1.3M2
+     */
+    public Date XWiki.getDate()
+    {
+        return this.util.getDate();
+    }
+
+    /**
+     * @param time the time in milliseconds
+     * @return the time delta in milliseconds between the current date and the 
time passed
+     *         as parameter
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#getTimeDelta(long)} since 1.3M2
+     */
+    public int XWiki.getTimeDelta(long time)
+    {
+        return this.util.getTimeDelta(time);
+    }
+
+    /**
+     * @param time time in milliseconds since 1970, 00:00:00 GMT
+     * @return Date a date from a time in milliseconds since 01/01/1970 as a
+     *         Java [EMAIL PROTECTED] Date} Object
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#getDate(long)} since 1.3M2
+     */
+    public Date XWiki.getDate(long time)
+    {
+        return this.util.getDate(time);
+    }
+
+    /**
+     * Split a text to an array of texts, according to a separator.
+     *
+     * @param text the original text
+     * @param sep the separator characters. The separator is one or more of the
+     *        separator characters
+     * @return An array containing the split text
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#split(String, String)} since 1.3M2
+     */
+    public String[] XWiki.split(String text, String sep)
+    {
+        return this.util.split(text, sep);
+    }
+
+    /**
+     * Get a stack trace as a String
+     *
+     * @param e the exception to convert to a String
+     * @return the exception stack trace as a String
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#printStrackTrace(Throwable)}
+                   since 1.3M2
+     */
+    public String XWiki.printStrackTrace(Throwable e)
+    {
+        return this.util.printStrackTrace(e);
+    }
+
+    /**
+     * Get a Null object. This is useful in Velocity where there is no real 
null object
+     * for comparaisons.
+     *
+     * @return a Null Object
+     * @deprecated replaced by [EMAIL PROTECTED] Util#getNull()} since 1.3M2
+     */
+    public Object XWiki.getNull()
+    {
+        return this.util.getNull();
+    }
+
+    /**
+     * Get a New Line character. This is useful in Velocity where there is no 
real new
+     * line character for inclusion in texts.
+     *
+     * @return a new line character
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#getNewline()} since 1.3M2
+     */
+    public String XWiki.getNl()
+    {
+        return this.util.getNewline();
+    }
+
+    /**
+     * @see #getExoService(String)
+     * @deprecated use [EMAIL PROTECTED] #getExoService(String)} instead
+     */
+    public java.lang.Object XWiki.getService(String className) throws 
XWikiException
+    {
+        return getExoService(className);
+    }
+
+    /**
+     * @see #getExoPortalService(String)
+     * @deprecated use [EMAIL PROTECTED] #getExoPortalService(String)} instead
+     */
+    public java.lang.Object XWiki.getPortalService(String className) throws 
XWikiException
+    {
+        return getExoPortalService(className);
+    }
+
+    /**
+     * Creates an Array List. This is useful from Velocity since you cannot
+     * create Object from Velocity with our secure uberspector.
+     *
+     * @return a [EMAIL PROTECTED] ArrayList} object
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#getArrayList()} since 1.3M2
+     */
+    public List XWiki.getArrayList()
+    {
+        return this.util.getArrayList();
+    }
+
+    /**
+     * Creates a Hash Map. This is useful from Velocity since you cannot
+     * create Object from Velocity with our secure uberspector.
+     *
+     * @return a [EMAIL PROTECTED] HashMap} object
+     * @deprecated replaced by [EMAIL PROTECTED] Util#getHashMap()} since 1.3M2
+     */
+    public Map XWiki.getHashMap()
+    {
+        return this.util.getHashMap();
+    }
+
+    /**
+     * Creates a Tree Map. This is useful from Velocity since you cannot
+     * create Object from Velocity with our secure uberspector.
+     *
+     * @return a [EMAIL PROTECTED] TreeMap} object
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#getTreeMap()} since 1.3M2
+     */
+    public Map XWiki.getTreeMap()
+    {
+        return this.util.getTreeMap();
+    }
+
+    /**
+     * Sort a list using a standard comparator. Elements need to be mutally 
comparable and
+     * implement the Comparable interface.
+     *
+     * @param list the list to sort
+     * @return the sorted list (as the same oject reference)
+     * @see [EMAIL PROTECTED] java.util.Collections#sort(java.util.List)}
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#sort(java.util.List)} since 1.3M2
+     */
+    public List XWiki.sort(List list)
+    {
+        return this.util.sort(list);
+    }
+
+    /**
+     * Convert an Object to a number and return null if the object is not a 
Number.
+     *
+     * @param object the object to convert
+     * @return the object as a [EMAIL PROTECTED] Number}
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#toNumber(Object)} since 1.3M2
+     */
+    public Number XWiki.toNumber(Object object)
+    {
+        return this.util.toNumber(object);
+    }
+
+    /**
+     * Generate a random string.
+     *
+     * @param size the desired size of the string
+     * @return the randomly generated string
+     * @deprecated replaced by [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#generateRandomString(int)}
+                   since 1.3M2
+     */
+    public String XWiki.generateRandomString(int size)
+    {
+        return this.util.generateRandomString(size);
+    }
+
+    /**
+     * Output a BufferedImage object into the response outputstream.
+     * Once this method has been called, not further action is possible.
+     * Users should set $context.setFinished(true) to
+     * avoid template output The image is outpout as image/jpeg.
+     *
+     * @param image the BufferedImage to output
+     * @throws java.io.IOException if the output fails
+     * @deprecated replaced by
+     *             [EMAIL PROTECTED] 
com.xpn.xwiki.api.Util#outputImage(java.awt.image.BufferedImage)}
+     *             since 1.3M2
+     */
+    public void XWiki.outputImage(BufferedImage image) throws IOException
+    {
+        this.util.outputImage(image);
+    }
+
+    /**
+     * Returns the recently visited pages for a specific action
+     *
+     * @param action ("view" or "edit")
+     * @param size how many recent actions to retrieve
+     * @return a ArrayList of document names
+     * @deprecated use [EMAIL PROTECTED] #getStatsService()} instead
+     */
+    public java.util.Collection XWiki.getRecentActions(String action, int size)
+    {
+        XWikiStatsService stats = 
getXWikiContext().getWiki().getStatsService(getXWikiContext());
+        if (stats == null)
+            return Collections.EMPTY_LIST;
+        return stats.getRecentActions(action, size, getXWikiContext());
+    }
+
+    /**
+     * @param str the String to convert to an integer
+     * @return the parsed integer or zero in case of exception
+     * @deprecated replaced by [EMAIL PROTECTED] Util#parseInt(String)} since 
1.3M2
+     */
+    public int XWiki.parseInt(String str)
+    {
+        return this.util.parseInt(str);
+    }
+
+    /**
+     * @param str the String to convert to an Integer Object
+     * @return the parsed integer or zero in case of exception
+     * @deprecated replaced by [EMAIL PROTECTED] Util#parseInteger(String)} 
since 1.3M2
+     */
+    public Integer XWiki.parseInteger(String str)
+    {
+        return this.util.parseInteger(str);
+    }
+
+    /**
+     * @param str the String to convert to a long
+     * @return the parsed long or zero in case of exception
+     * @deprecated replaced by [EMAIL PROTECTED] Util#parseLong(String)} since 
1.3M2
+     */
+    public long XWiki.parseLong(String str)
+    {
+        return this.util.parseLong(str);
+    }
+
+    /**
+     * @param str the String to convert to a float
+     * @return the parsed float or zero in case of exception
+     * @deprecated replaced by [EMAIL PROTECTED] Util#parseFloat(String)} 
since 1.3M2
+     */
+    public float XWiki.parseFloat(String str)
+    {
+        return this.util.parseFloat(str);
+    }
+
+    /**
+     * @param str the String to convert to a double
+     * @return the parsed double or zero in case of exception
+     * @deprecated replaced by [EMAIL PROTECTED] Util#parseDouble(String)} 
since 1.3M2
+     */
+    public double XWiki.parseDouble(String str)
+    {
+        return this.util.parseDouble(str);
+    }
+
+    /**
+     * Escape text so that it can be used in a like clause or in a test for 
equality clause.
+     * For example it escapes single quote characters.
+     *
+     * @param text the text to escape
+     * @return filtered text
+     * @deprecated replaced by [EMAIL PROTECTED] Util#escapeSQL(String)} since 
1.3M2
+     */
+    public String XWiki.sqlfilter(String text)
+    {
+        return this.util.escapeSQL(text);
+    }
+
+    /**
+     * Cleans up the passed text by removing all accents and special 
characters to make it
+     * a valid page name.
+     *
+     * @param name the page name to normalize
+     * @return the valid page name
+     * @deprecated replaced by [EMAIL PROTECTED] Util#clearName(String)} since 
1.3M2
+     */
+    public String XWiki.clearName(String name)
+    {
+        return this.util.clearName(name);
+    }
+
+    /**
+     * Replace all accents by their alpha equivalent.
+     *
+     * @param text the text to parse
+     * @return a string with accents replaced with their alpha equivalent
+     * @deprecated replaced by [EMAIL PROTECTED] Util#clearAccents(String)} 
since 1.3M2
+     */
+    public String XWiki.clearAccents(String text)
+    {
+        return this.util.clearAccents(text);
+    }
+
+    /**
+     * Add a and b because Velocity operations are not always working.
+     *
+     * @param a an integer to add
+     * @param b an integer to add
+     * @return the sum of a and b
+     * @deprecated replaced by [EMAIL PROTECTED] Util#add(int, int)} since 
1.3M2
+     */
+    public int XWiki.add(int a, int b)
+    {
+        return this.util.add(a, b);
+    }
+
+    /**
+     * Add a and b because Velocity operations are not working with longs.
+     *
+     * @param a a long to add
+     * @param b a long to add
+     * @return the sum of a and b
+     * @deprecated replaced by [EMAIL PROTECTED] Util#add(long, long)} since 
1.3M2
+     */
+    public long XWiki.add(long a, long b)
+    {
+        return this.util.add(a, b);
+    }
+
+    /**
+     * Add a and b where a and b are non decimal numbers specified as Strings.
+     *
+     * @param a a string representing a non decimal number
+     * @param b a string representing a non decimal number
+     * @return the sum of a and b as a String
+     * @deprecated replaced by [EMAIL PROTECTED] Util#add(String, String)} 
since 1.3M2
+     */
+    public String XWiki.add(String a, String b)
+    {
+        return this.util.add(a,  b);
+    }
+}
\ No newline at end of file

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
===================================================================
--- xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java 
2008-02-14 14:38:39 UTC (rev 7731)
+++ xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java 
2008-02-14 18:18:12 UTC (rev 7732)
@@ -33,7 +33,6 @@
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.net.URLEncoder;
 import java.text.DateFormatSymbols;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -1181,8 +1180,8 @@
         if (name.equals(""))
             name = "WebHome";
 
-        web = Utils.decode(web, context);
-        name = Utils.decode(name, context);
+        web = Util.decodeURI(web, context);
+        name = Util.decodeURI(name, context);
         String fullname = web + "." + name;
         return fullname;
     }
@@ -1247,15 +1246,6 @@
         return scontent;
     }
 
-    public String getURLEncoded(String content)
-    {
-        try {
-            return URLEncoder.encode(content, this.getEncoding());
-        } catch (UnsupportedEncodingException e) {
-            return content;
-        }
-    }
-
     public static String getXMLEncoded(String content)
     {
         Filter filter = new CharacterFilter();

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/Util.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/Util.java  
    2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/Util.java  
    2008-02-14 18:18:12 UTC (rev 7732)
@@ -80,6 +80,29 @@
     }
 
     /**
+     * Make a text URI compliant
+     * @param text the non encoded text
+     * @return encoded text
+     * @since 1.3 Milestone 2
+     */
+    public String encodeURI(String text)
+    {
+        return com.xpn.xwiki.util.Util.encodeURI(text, context);
+    }
+
+    /**
+     * Make an URI compliant text readable
+     * @param text the encoded text
+     * @return decoded text
+     * @since 1.3 Milestone 2
+     */
+    public String decodeURI(String text)
+    {
+        return com.xpn.xwiki.util.Util.decodeURI(text, context);
+    }
+    
+
+    /**
      * Creates an Array List. This is useful from Velocity since you cannot 
create Object from
      * Velocity with our secure uberspector.
      * 

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/XWiki.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/XWiki.java 
    2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/api/XWiki.java 
    2008-02-14 18:18:12 UTC (rev 7732)
@@ -238,18 +238,6 @@
     }
 
     /**
-     * Transform a text in a URL compatible text
-     * 
-     * @param content text to transform
-     * @return encoded result
-     */
-
-    public String getURLEncoded(String content)
-    {
-        return xwiki.getURLEncoded(content);
-    }
-
-    /**
      * Transform a text in a XML compatible text
      * 
      * @param content text to transform

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/export/html/HtmlPackager.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/export/html/HtmlPackager.java
      2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/export/html/HtmlPackager.java
      2008-02-14 18:18:12 UTC (rev 7732)
@@ -15,6 +15,7 @@
 
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.util.Util;
 import com.xpn.xwiki.api.Document;
 import com.xpn.xwiki.doc.XWikiDocument;
 import com.xpn.xwiki.render.XWikiVelocityRenderer;
@@ -229,7 +230,7 @@
     {
         context.getResponse().setContentType("application/zip");
         context.getResponse().addHeader("Content-disposition",
-            "attachment; filename=" + context.getWiki().getURLEncoded(name) + 
".zip");
+            "attachment; filename=" + Util.encodeURI(name, context) + ".zip");
         context.setFinished(true);
 
         ZipOutputStream zos = new 
ZipOutputStream(context.getResponse().getOutputStream());

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/charts/actions/ChartingAction.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/charts/actions/ChartingAction.java
  2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/charts/actions/ChartingAction.java
  2008-02-14 18:18:12 UTC (rev 7732)
@@ -23,7 +23,7 @@
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
 import com.xpn.xwiki.plugin.charts.ChartingPluginApi;
-import com.xpn.xwiki.web.Utils;
+import com.xpn.xwiki.util.Util;
 import com.xpn.xwiki.web.XWikiAction;
 import com.xpn.xwiki.web.XWikiRequest;
 
@@ -33,7 +33,7 @@
        public String render(XWikiContext context) throws XWikiException {
         XWikiRequest request = context.getRequest();
         String path = request.getRequestURI();
-        String filename = 
Utils.decode(path.substring(path.lastIndexOf("/")+1),context);
+        String filename = 
Util.decodeURI(path.substring(path.lastIndexOf("/")+1),context);
         try {
            
((ChartingPluginApi)context.getWiki().getPluginApi("charting",context)).outputFile(filename,
 context);
         } catch (IOException e) {

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
   2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
   2008-02-14 18:18:12 UTC (rev 7732)
@@ -21,10 +21,10 @@
 
 package com.xpn.xwiki.plugin.packaging;
 
-import com.xpn.xwiki.XWiki;
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
 import com.xpn.xwiki.api.Api;
+import com.xpn.xwiki.util.Util;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -164,7 +164,7 @@
     public String export() throws IOException, XWikiException {
         getXWikiContext().getResponse().setContentType("application/zip");
         getXWikiContext().getResponse().addHeader("Content-disposition", 
"attachment; filename="
-            + getXWikiContext().getWiki().getURLEncoded(plugin.getName()) + 
".xar");
+            + Util.encodeURI(plugin.getName(), context) + ".xar");
         getXWikiContext().setFinished(true);
         return  
plugin.export(getXWikiContext().getResponse().getOutputStream(), 
getXWikiContext());
     }

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/render/XWikiRadeoxRenderEngine.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/render/XWikiRadeoxRenderEngine.java
        2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/render/XWikiRadeoxRenderEngine.java
        2008-02-14 18:18:12 UTC (rev 7732)
@@ -262,7 +262,7 @@
         buffer.append("<span class=\"wikilink\"><a href=\"#");
         buffer.append(anchor);
         buffer.append("\">");
-        if (view.length() == 0) view = Utils.decode(anchor, getXWikiContext());
+        if (view.length() == 0) view = Util.decodeURI(anchor, 
getXWikiContext());
         buffer.append(cleanText(view));
         buffer.append("</a></span>");
     }

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/TOCGenerator.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/TOCGenerator.java
     2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/TOCGenerator.java
     2008-02-14 18:18:12 UTC (rev 7732)
@@ -107,7 +107,7 @@
   }
 
   public static String makeHeadingID (String text, int occurence, XWikiContext 
context) {
-    text = "H" + context.getWiki().getURLEncoded(text);
+    text = "H" + Util.encodeURI(text, context);
     text = text.replaceAll("[^a-zA-Z0-9]", "");
         
     if (occurence > 0) {

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java 
    2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java 
    2008-02-14 18:18:12 UTC (rev 7732)
@@ -33,7 +33,8 @@
 import java.io.StreamTokenizer;
 import java.io.StringReader;
 import java.util.*;
-
+import java.net.URLEncoder;
+import java.net.URLDecoder;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -62,6 +63,7 @@
 import com.xpn.xwiki.monitor.api.MonitorPlugin;
 import com.xpn.xwiki.render.WikiSubstitution;
 import com.xpn.xwiki.web.XWikiRequest;
+import com.novell.ldap.util.Base64;
 
 public class Util {
 
@@ -698,6 +700,46 @@
     }
 
     /**
+     * API to make a text URI compliant
+     * @param text
+     * @param context
+     * @return encoded text
+     */
+    public static String encodeURI(String text, XWikiContext context)
+    {
+        try {
+            return URLEncoder.encode(text, context.getWiki().getEncoding());
+        } catch (Exception e) {
+            return text;
+        }
+    }
+
+    /**
+     * API to make readable an URI compliant text
+     * @param text
+     * @param context
+     * @return decoded text
+     */
+    public static String decodeURI(String text, XWikiContext context)
+    {
+        try {
+            // Make sure + is considered as a space
+            String result = text.replaceAll("\\+", " ");
+
+            // It seems Internet Explorer can send us back UTF-8
+            // instead of ISO-8859-1 for URLs
+            if (Base64.isValidUTF8(result.getBytes(), false)) {
+                result = new String(result.getBytes(), "UTF-8");
+            }
+
+            // Still need to decode URLs
+            return URLDecoder.decode(result, context.getWiki().getEncoding());
+        } catch (Exception e) {
+            return text;
+        }
+    }
+
+    /**
      * Removes all non alpha numerical characters from the passed text. First 
tries to convert
      * accented chars to their alpha numeric representation.
      *

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAttachmentAction.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAttachmentAction.java
    2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteAttachmentAction.java
    2008-02-14 18:18:12 UTC (rev 7732)
@@ -23,6 +23,7 @@
 import com.xpn.xwiki.XWikiException;
 import com.xpn.xwiki.doc.XWikiAttachment;
 import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.util.Util;
 
 import java.util.ArrayList;
 
@@ -41,7 +42,7 @@
             // Note: We use getRequestURI() because the spec says the server 
doesn't decode it, as
             // we want to use our own decoding.
             String requestUri = request.getRequestURI();
-            filename = 
Utils.decode(requestUri.substring(requestUri.lastIndexOf("/") + 1), context);
+            filename = 
Util.decodeURI(requestUri.substring(requestUri.lastIndexOf("/") + 1), context);
         }
 
         XWikiDocument newdoc = (XWikiDocument) doc.clone();

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DotAction.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DotAction.java
 2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DotAction.java
 2008-02-14 18:18:12 UTC (rev 7732)
@@ -23,6 +23,7 @@
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
 import com.xpn.xwiki.plugin.graphviz.GraphVizPlugin;
+import com.xpn.xwiki.util.Util;
 
 import java.io.IOException;
 
@@ -31,7 +32,7 @@
         XWikiRequest request = context.getRequest();
         XWikiResponse response = context.getResponse();
         String path = request.getRequestURI();
-        String filename = 
Utils.decode(path.substring(path.lastIndexOf("/")+1),context);
+        String filename = 
Util.decodeURI(path.substring(path.lastIndexOf("/")+1),context);
         try {
            
((GraphVizPlugin)context.getWiki().getPlugin("graphviz",context)).outputDotImageFromFile(filename,
 context);
         } catch (IOException e) {

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DownloadAction.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DownloadAction.java
    2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DownloadAction.java
    2008-02-14 18:18:12 UTC (rev 7732)
@@ -19,14 +19,15 @@
  */
 package com.xpn.xwiki.web;
 
-import java.io.IOException;
-
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
 import com.xpn.xwiki.doc.XWikiAttachment;
 import com.xpn.xwiki.doc.XWikiDocument;
 import com.xpn.xwiki.plugin.XWikiPluginManager;
+import com.xpn.xwiki.util.Util;
 
+import java.io.IOException;
+
 public class DownloadAction extends XWikiAction
 {
     public String getFileName(String path, String action)
@@ -48,7 +49,7 @@
         XWikiResponse response = context.getResponse();
         XWikiDocument doc = context.getDoc();
         String path = request.getRequestURI();
-        String filename = Utils.decode(getFileName(path, "download"), context);
+        String filename = Util.decodeURI(getFileName(path, "download"), 
context);
         XWikiAttachment attachment;
 
         if (request.getParameter("id") != null) {
@@ -74,7 +75,7 @@
         response.setContentType(mimetype);
 
         String ofilename =
-            
context.getWiki().getURLEncoded(attachment.getFilename()).replaceAll("\\+", " 
");
+            Util.encodeURI(attachment.getFilename(), 
context).replaceAll("\\+", " ");
 
         // The inline attribute of Content-Disposition tells the browser that 
they should display
         // the downloaded file in the page (see 
http://www.ietf.org/rfc/rfc1806.txt for more

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DownloadRevAction.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DownloadRevAction.java
 2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DownloadRevAction.java
 2008-02-14 18:18:12 UTC (rev 7732)
@@ -5,6 +5,7 @@
 import com.xpn.xwiki.doc.XWikiAttachment;
 import com.xpn.xwiki.doc.XWikiDocument;
 import com.xpn.xwiki.plugin.XWikiPluginManager;
+import com.xpn.xwiki.util.Util;
 
 import java.io.IOException;
 
@@ -15,7 +16,7 @@
         XWikiDocument doc = context.getDoc();
         String rev = request.getParameter("rev");
         String path = request.getRequestURI();
-        String filename = 
Utils.decode(path.substring(path.lastIndexOf("/")+1),context);
+        String filename = 
Util.decodeURI(path.substring(path.lastIndexOf("/")+1),context);
         XWikiAttachment attachment = null;
 
         if (request.getParameter("id")!=null) {

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SVGAction.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SVGAction.java
 2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SVGAction.java
 2008-02-14 18:18:12 UTC (rev 7732)
@@ -22,6 +22,7 @@
 
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.util.Util;
 import com.xpn.xwiki.plugin.svg.SVGPlugin;
 
 import java.io.IOException;
@@ -31,7 +32,7 @@
         XWikiRequest request = context.getRequest();
         XWikiResponse response = context.getResponse();
         String path = request.getRequestURI();
-        String filename = 
Utils.decode(path.substring(path.lastIndexOf("/")+1),context);
+        String filename = 
Util.decodeURI(path.substring(path.lastIndexOf("/")+1),context);
         try {
            
((SVGPlugin)context.getWiki().getPlugin("svg",context)).outputSVGImageFromFile(filename,
 context);
         } catch (IOException e) {

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SkinAction.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SkinAction.java
        2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/SkinAction.java
        2008-02-14 18:18:12 UTC (rev 7732)
@@ -20,20 +20,20 @@
  */
 package com.xpn.xwiki.web;
 
-import java.io.IOException;
-import java.util.Date;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
 import com.xpn.xwiki.XWiki;
 import com.xpn.xwiki.XWikiContext;
 import com.xpn.xwiki.XWikiException;
 import com.xpn.xwiki.doc.XWikiAttachment;
 import com.xpn.xwiki.doc.XWikiDocument;
 import com.xpn.xwiki.objects.BaseObject;
+import com.xpn.xwiki.util.Util;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
+import java.io.IOException;
+import java.util.Date;
+
 /**
  * <p>
  * Action for serving skin files. It allows skins to be defined using 
XDocuments as skins, by
@@ -80,7 +80,7 @@
         boolean found = false;
         while (idx > 0) {
             try {
-                String filename = Utils.decode(path.substring(idx + 1), 
context);
+                String filename = Util.decodeURI(path.substring(idx + 1), 
context);
                 LOG.debug("Trying '" + filename + "'");
 
                 if (renderSkin(filename, doc, context)) {

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/Utils.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/Utils.java 
    2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/Utils.java 
    2008-02-14 18:18:12 UTC (rev 7732)
@@ -424,7 +424,10 @@
         }
     }
 
-    // TODO: Duplicate of XWiki.getURLEncoded(). Keep only one
+    // TODO: Duplicate of Util.encodeURI(). Keep only one
+    /**
+     * @deprecated replaced by Util#encodeURI since 1.3M2
+     */
     public static String encode(String name, XWikiContext context)
     {
         try {
@@ -434,6 +437,10 @@
         }
     }
 
+    // TODO: Duplicate of Util.decodeURI(). Keep only one
+    /**
+     * @deprecated replaced by Util#decodeURI since 1.3M2
+     */
     public static String decode(String name, XWikiContext context)
     {
         try {

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ViewAttachRevAction.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ViewAttachRevAction.java
       2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/ViewAttachRevAction.java
       2008-02-14 18:18:12 UTC (rev 7732)
@@ -26,6 +26,7 @@
 import com.xpn.xwiki.api.Document;
 import com.xpn.xwiki.doc.XWikiAttachment;
 import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.util.Util;
 import org.apache.velocity.VelocityContext;
 
 public class ViewAttachRevAction extends XWikiAction {
@@ -38,7 +39,7 @@
         if (context.getMode() == XWikiContext.MODE_PORTLET)
             filename = request.getParameter("filename");
         else
-            filename = Utils.decode(path.substring(path.lastIndexOf("/") + 1), 
context);
+            filename = Util.decodeURI(path.substring(path.lastIndexOf("/") + 
1), context);
 
         XWikiAttachment attachment = null;
         if (request.getParameter("id") != null) {

Modified: 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/XWikiTest.java
===================================================================
--- 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/XWikiTest.java 
    2008-02-14 14:38:39 UTC (rev 7731)
+++ 
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/XWikiTest.java 
    2008-02-14 18:18:12 UTC (rev 7732)
@@ -201,25 +201,25 @@
         assertFalse(xwiki.getDocument("XWiki.Skin", context).isNew());
         assertEquals(skin, xwiki.getDocument("XWiki.Skin", context));
         assertEquals("parsing a field", xwiki.parseTemplate("template.vm", 
context));
-    }
-    
-    public void testClearNameWithoutStripDotsWithoutAscii()
-    {
-        assertEquals("ee{&.txt", this.xwiki.clearName("\u00E9\u00EA{&.txt", 
false, false, context));
-    }
-
-    public void testClearNameWithoutStripDotsWithAscii()
-    {
-        assertEquals("ee.txt", this.xwiki.clearName("\u00E9\u00EA{&.txt", 
false, true, context));
-    }
-
-    public void testClearNameWithStripDotsWithoutAscii()
-    {
-        assertEquals("ee{&txt", this.xwiki.clearName("\u00E9\u00EA{&.txt", 
true, false, context));
-    }
-
-    public void testClearNameWithStripDotsWithAscii()
-    {
-        assertEquals("eetxt", this.xwiki.clearName("\u00E9\u00EA{&.txt", true, 
true, context));
     }
+    
+    public void testClearNameWithoutStripDotsWithoutAscii()
+    {
+        assertEquals("ee{&.txt", this.xwiki.clearName("\u00E9\u00EA{&.txt", 
false, false, context));
+    }
+
+    public void testClearNameWithoutStripDotsWithAscii()
+    {
+        assertEquals("ee.txt", this.xwiki.clearName("\u00E9\u00EA{&.txt", 
false, true, context));
+    }
+
+    public void testClearNameWithStripDotsWithoutAscii()
+    {
+        assertEquals("ee{&txt", this.xwiki.clearName("\u00E9\u00EA{&.txt", 
true, false, context));
+    }
+
+    public void testClearNameWithStripDotsWithAscii()
+    {
+        assertEquals("eetxt", this.xwiki.clearName("\u00E9\u00EA{&.txt", true, 
true, context));
+    }
 }

_______________________________________________
notifications mailing list
notifications@xwiki.org
http://lists.xwiki.org/mailman/listinfo/notifications

Reply via email to