Mega Code Archive

 
Categories / Java / Network Protocol
 

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