001 package org.apache.turbine.util.uri; 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 org.apache.turbine.util.RunData; 025 import org.apache.turbine.util.ServerData; 026 027 /** 028 * This class can convert a simple link into a turbine relative 029 * URL. It should be used to convert references for images, style 030 * sheets and similar references. 031 * 032 * The resulting links have no query data or path info. If you need 033 * this, use TurbineURI or TemplateURI. 034 * 035 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> 036 * @version $Id: DataURI.java 938645 2010-04-27 20:57:51Z tv $ 037 * 038 */ 039 040 public class DataURI 041 extends BaseURI 042 implements URIConstants 043 { 044 /** 045 * Empty C'tor. Uses Turbine.getDefaultServerData(). 046 * 047 */ 048 public DataURI() 049 { 050 super(); 051 } 052 053 /** 054 * Constructor with a RunData object 055 * 056 * @param runData A RunData object 057 */ 058 public DataURI(RunData runData) 059 { 060 super(runData); 061 } 062 063 /** 064 * Constructor, set explicit redirection 065 * 066 * @param runData A RunData object 067 * @param redirect True if redirection allowed. 068 */ 069 public DataURI(RunData runData, boolean redirect) 070 { 071 super(runData, redirect); 072 } 073 074 /** 075 * Constructor with a ServerData object 076 * 077 * @param serverData A ServerData object 078 */ 079 public DataURI(ServerData serverData) 080 { 081 super(serverData); 082 } 083 084 /** 085 * Constructor, set explicit redirection 086 * 087 * @param serverData A ServerData object 088 * @param redirect True if redirection allowed. 089 */ 090 public DataURI(ServerData serverData, boolean redirect) 091 { 092 super(serverData, redirect); 093 } 094 095 096 /** 097 * Content Tool wants to be able to turn the encoding 098 * of the servlet container off. After calling this method, 099 * 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 }