/*
 * $Id$
 *
 * Created on 11/09/2005
 *
 * Copyright (c) 2005, Ben Fortuna
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  o Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *
 *  o Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 *
 *  o Neither the name of Ben Fortuna nor the names of any other contributors
 * may be used to endorse or promote products derived from this software
 * without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package net.fortuna.ical4j.util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Utility methods for working with URIs.
 * @author Ben Fortuna
 */
public final class Uris {

    private static final String ENCODING_CHARSET = "UTF-8";
    
    private static Log log = LogFactory.getLog(Uris.class);
    
    /**
     * Constructor made private to enforce static nature.
     */
    private Uris() {
    }

    /**
     * Encodes the specified URI string using the UTF-8 charset. In the
     * event that an exception is thrown, the specifed URI string is
     * returned unmodified.
     * @param s a URI string
     * @return an encoded URI string
     */
    public static String encode(final String s) {
        try {
            return URLEncoder.encode(s, ENCODING_CHARSET);
        }
        catch (UnsupportedEncodingException use) {
            log.error("Error ocurred encoding URI [" + s + "]", use);
        }
        return s;
    }
    
    /**
     * Decodes the specified URI string using the UTF-8 charset. In the
     * event that an exception is thrown, the specifed URI string is
     * returned unmodified.
     * @param s a URI string
     * @return an encoded URI string
     */
    public static String decode(final String s) {
        try {
            return URLDecoder.decode(s, ENCODING_CHARSET);
        }
        catch (UnsupportedEncodingException use) {
            log.error("Error ocurred decoding URI [" + s + "]", use);
        }
        return s;
    }
}

@@ -1638,195 +1638,8 @@
 l;%0A%0A
-import java.io.UnsupportedEncodingException;%0Aimport java.net.URLDecoder;%0Aimport java.net.URLEncoder;%0A%0Aimport org.apache.commons.logging.Log;%0Aimport org.apache.commons.logging.LogFactory;%0A
 %0A/**
@@ -1735,16 +1735,18 @@
 Uris %7B%0A%0A
+//
     priv
@@ -1798,24 +1798,26 @@
 TF-8%22;%0A    %0A
+//
     private 
@@ -2264,32 +2264,43 @@
 nal String s) %7B%0A
+        /*%0A
         try %7B%0A  
@@ -2489,32 +2489,1034 @@
 use);%0A        %7D%0A
+        */%0A        %0A        /*%0A         * Lotus Notes does not correctly strip angle brackets from cid uris.%0A         * From RFC2932:%0A         * %0A         * A %22cid%22 URL is converted to the corresponding Content-ID message%0A         * header %5BMIME%5D by removing the %22cid:%22 prefix, converting the %25 encoded%0A         * character to their equivalent US-ASCII characters, and enclosing the%0A         * remaining parts with an angle bracket pair, %22%3C%22 and %22%3E%22.  For%0A         * example, %22cid:foo4%2525foo1@bar.net%22 corresponds to%0A         * %0A         * Content-ID: %3Cfoo4%2525foo1@bar.net%3E%0A         * %0A         * Reversing the process and converting URL special characters to their%0A         * %25 encodings produces the original cid.%0A         * %0A         * A %22mid%22 URL is converted to a Message-ID or Message-ID/Content-ID%0A         * pair in a similar fashion.%0A         */%0A        if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_NOTES_COMPATIBILITY)) %7B%0A            return s.replaceAll(%22%5B%3C%3E%5D%22, %22%22);%0A        %7D%0A
         return s
@@ -3821,32 +3821,43 @@
 nal String s) %7B%0A
+        /*%0A
         try %7B%0A  
@@ -4046,32 +4046,43 @@
 use);%0A        %7D%0A
+        */%0A
         return s

Remove angle brackets from URIs when Lotus Notes compatibility is enabled