Utils.java Source code

Java tutorial

Introduction

Here is the source code for Utils.java

Source

// 
// Copyright 2004-2005 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at 
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// 

/**
 * URI Holder. This class assists with the decoding and encoding or HTTP URI's.
 * It differs from the java.net.URL class as it does not provide communications
 * ability, but it does assist with query string formatting.
 * <P>
 * UTF-8 encoding is used by default for % encoded characters. This may be
 * overridden with the org.mortbay.util.URI.charset system property.
 * 
 * @see UrlEncoded
 * @author Greg Wilkins (gregw)
 */
public class Utils {
    public static final String SLASH = "/";

    /**
     * Add two URI path segments. Handles null and empty paths, path and query
     * params (eg ?a=b or ;JSESSIONID=xxx) and avoids duplicate '/'
     * 
     * @param p1
     *          URI path segment
     * @param p2
     *          URI path segment
     * @return Legally combined path segments.
     */
    public static String addPaths(String p1, String p2) {
        if (p1 == null || p1.length() == 0) {
            if (p1 != null && p2 == null)
                return p1;
            return p2;
        }
        if (p2 == null || p2.length() == 0)
            return p1;

        int split = p1.indexOf(';');
        if (split < 0)
            split = p1.indexOf('?');
        if (split == 0)
            return p2 + p1;
        if (split < 0)
            split = p1.length();

        StringBuffer buf = new StringBuffer(p1.length() + p2.length() + 2);
        buf.append(p1);

        if (buf.charAt(split - 1) == '/') {
            if (p2.startsWith(SLASH)) {
                buf.deleteCharAt(split - 1);
                buf.insert(split - 1, p2);
            } else
                buf.insert(split, p2);
        } else {
            if (p2.startsWith(SLASH))
                buf.insert(split, p2);
            else {
                buf.insert(split, '/');
                buf.insert(split + 1, p2);
            }
        }

        return buf.toString();
    }
}