001 package org.apache.turbine.util;
002
003
004 /*
005 * Licensed to the Apache Software Foundation (ASF) under one
006 * or more contributor license agreements. See the NOTICE file
007 * distributed with this work for additional information
008 * regarding copyright ownership. The ASF licenses this file
009 * to you under the Apache License, Version 2.0 (the
010 * "License"); you may not use this file except in compliance
011 * with the License. You may obtain a copy of the License at
012 *
013 * http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing,
016 * software distributed under the License is distributed on an
017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
018 * KIND, either express or implied. See the License for the
019 * specific language governing permissions and limitations
020 * under the License.
021 */
022
023
024 import java.util.StringTokenizer;
025
026 import javax.servlet.ServletConfig;
027 import javax.servlet.ServletContext;
028
029 import org.apache.commons.lang.StringUtils;
030 import org.apache.turbine.Turbine;
031
032 /**
033 * This is where common Servlet manipulation routines should go.
034 *
035 * @author <a href="mailto:gonzalo.diethelm@sonda.com">Gonzalo Diethelm</a>
036 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
037 * @version $Id: ServletUtils.java 1073174 2011-02-21 22:18:45Z tv $
038 */
039 public class ServletUtils
040 {
041 /**
042 * Expands a string that points to a relative path or path list,
043 * leaving it as an absolute path based on the servlet context.
044 * It will return null if the text is empty or the config object
045 * is null.
046 *
047 * @param config The ServletConfig.
048 * @param text The String containing a path or path list.
049 * @return A String with the expanded path or path list.
050 */
051 public static String expandRelative(ServletConfig config,
052 String text)
053 {
054 if (StringUtils.isEmpty(text))
055 {
056 return text;
057 }
058
059 if (config == null)
060 {
061 return null;
062 }
063
064 // attempt to make it relative
065 if (!text.startsWith("/") && !text.startsWith("./")
066 && !text.startsWith("\\") && !text.startsWith(".\\"))
067 {
068 StringBuffer sb = new StringBuffer();
069 sb.append("./");
070 sb.append(text);
071 text = sb.toString();
072 }
073
074 ServletContext context = config.getServletContext();
075 String base = context.getRealPath("/");
076
077 base = (StringUtils.isEmpty(base))
078 ? config.getInitParameter(Turbine.BASEDIR_KEY)
079 : base;
080
081 if (StringUtils.isEmpty(base))
082 {
083 return text;
084 }
085
086 String separator = System.getProperty("path.separator");
087
088 StringTokenizer tokenizer = new StringTokenizer(text,
089 separator);
090 StringBuffer buffer = new StringBuffer();
091 while (tokenizer.hasMoreTokens())
092 {
093 buffer.append(base).append(tokenizer.nextToken());
094 if (tokenizer.hasMoreTokens())
095 {
096 buffer.append(separator);
097 }
098 }
099 return buffer.toString();
100 }
101 }