Add two URI path segments : URI « Network Protocol « Java






Add two URI path segments

       
// 
// 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();
  }
}

   
    
    
    
    
    
    
  








Related examples in the same category

1.Encode a URI path
2.Remove parameters from a uri.
3.Remove any authorisation details from a URI
4.A class to represent a Uniform Resource Identifier (URI).
5.Utility to convert File to URL.
6.Return True if the uri has a scheme
7.Normalize a uri containing ../ and ./ paths.
8.URI Support
9.URI utilities
10.Get Parent URI
11.Create and resolve URI
12.Add parameters stored in the Map to the uri string.
13.Make a URL from the given string
14.Is Equal URI
15.Resolves the specified URI, and returns the file represented by the URI.
16.Returns the filename for the specified URI.