1 package org.apache.turbine.util.uri; 2 3 4 /* 5 * Licensed to the Apache Software Foundation (ASF) under one 6 * or more contributor license agreements. See the NOTICE file 7 * distributed with this work for additional information 8 * regarding copyright ownership. The ASF licenses this file 9 * to you under the Apache License, Version 2.0 (the 10 * "License"); you may not use this file except in compliance 11 * with the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, 16 * software distributed under the License is distributed on an 17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18 * KIND, either express or implied. See the License for the 19 * specific language governing permissions and limitations 20 * under the License. 21 */ 22 23 24 import org.apache.turbine.util.RunData; 25 import org.apache.turbine.util.ServerData; 26 27 /** 28 * This class can convert a simple link into a turbine relative 29 * URL. It should be used to convert references for images, style 30 * sheets and similar references. 31 * 32 * The resulting links have no query data or path info. If you need 33 * this, use TurbineURI or TemplateURI. 34 * 35 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> 36 * @version $Id: DataURI.java 938645 2010-04-27 20:57:51Z tv $ 37 * 38 */ 39 40 public class DataURI 41 extends BaseURI 42 implements URIConstants 43 { 44 /** 45 * Empty C'tor. Uses Turbine.getDefaultServerData(). 46 * 47 */ 48 public DataURI() 49 { 50 super(); 51 } 52 53 /** 54 * Constructor with a RunData object 55 * 56 * @param runData A RunData object 57 */ 58 public DataURI(RunData runData) 59 { 60 super(runData); 61 } 62 63 /** 64 * Constructor, set explicit redirection 65 * 66 * @param runData A RunData object 67 * @param redirect True if redirection allowed. 68 */ 69 public DataURI(RunData runData, boolean redirect) 70 { 71 super(runData, redirect); 72 } 73 74 /** 75 * Constructor with a ServerData object 76 * 77 * @param serverData A ServerData object 78 */ 79 public DataURI(ServerData serverData) 80 { 81 super(serverData); 82 } 83 84 /** 85 * Constructor, set explicit redirection 86 * 87 * @param serverData A ServerData object 88 * @param redirect True if redirection allowed. 89 */ 90 public DataURI(ServerData serverData, boolean redirect) 91 { 92 super(serverData, redirect); 93 } 94 95 96 /** 97 * Content Tool wants to be able to turn the encoding 98 * of the servlet container off. After calling this method, 99 * the encoding will not happen any longer. 100 */ 101 public void clearResponse() 102 { 103 setResponse(null); 104 } 105 106 /** 107 * Builds the URL with all of the data URL-encoded as well as 108 * encoded using HttpServletResponse.encodeUrl(). The resulting 109 * URL is absolute; it starts with http/https... 110 * 111 * <p> 112 * <code><pre> 113 * TurbineURI tui = new TurbineURI (data, "UserScreen"); 114 * tui.addPathInfo("user","jon"); 115 * tui.getAbsoluteLink(); 116 * </pre></code> 117 * 118 * The above call to getAbsoluteLink() would return the String: 119 * 120 * <p> 121 * http://www.server.com/servlets/Turbine/screen/UserScreen/user/jon 122 * 123 * @return A String with the built URL. 124 */ 125 public String getAbsoluteLink() 126 { 127 StringBuffer output = new StringBuffer(); 128 129 getSchemeAndPort(output); 130 getContextAndScript(output); 131 132 if (hasReference()) 133 { 134 output.append('#'); 135 output.append(getReference()); 136 } 137 138 // 139 // Encode Response does all the fixup for the Servlet Container 140 // 141 return encodeResponse(output.toString()); 142 } 143 144 /** 145 * Builds the URL with all of the data URL-encoded as well as 146 * encoded using HttpServletResponse.encodeUrl(). The resulting 147 * URL is relative to the webserver root. 148 * 149 * <p> 150 * <code><pre> 151 * TurbineURI tui = new TurbineURI (data, "UserScreen"); 152 * tui.addPathInfo("user","jon"); 153 * tui.getRelativeLink(); 154 * </pre></code> 155 * 156 * The above call to getRelativeLink() would return the String: 157 * 158 * <p> 159 * /servlets/Turbine/screen/UserScreen/user/jon 160 * 161 * @return A String with the built URL. 162 */ 163 public String getRelativeLink() 164 { 165 StringBuffer output = new StringBuffer(); 166 167 getContextAndScript(output); 168 169 if (hasReference()) 170 { 171 output.append('#'); 172 output.append(getReference()); 173 } 174 175 // 176 // Encode Response does all the fixup for the Servlet Container 177 // 178 return encodeResponse(output.toString()); 179 } 180 181 /** 182 * toString() simply calls getAbsoluteLink. You should not use this in your 183 * code unless you have to. Use getAbsoluteLink. 184 * 185 * @return This URI as a String 186 * 187 */ 188 public String toString() 189 { 190 return getAbsoluteLink(); 191 } 192 }