001 package org.apache.turbine.services.pull.tools; 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 025 import org.apache.commons.configuration.Configuration; 026 import org.apache.turbine.Turbine; 027 import org.apache.turbine.pipeline.PipelineData; 028 import org.apache.turbine.services.pull.ApplicationTool; 029 import org.apache.turbine.util.RunData; 030 import org.apache.turbine.util.uri.DataURI; 031 032 /** 033 * Terribly simple tool to translate URIs into Turbine Links. 034 * Equivalent to URIUtils.getAbsoluteLink() in a pull tool. 035 * 036 * <p> 037 * If you're missing any routines from the 'old' $content tool concerning 038 * path_info or query data, you did use the wrong tool then. You should've used 039 * the TemplateLink tool which should be available as "$link" in your context. 040 * <p> 041 * 042 * This is an application pull tool for the template system. You should <b>not</b> 043 * use it in a normal application! 044 * 045 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> 046 * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a> 047 * @version $Id: ContentTool.java 1078552 2011-03-06 19:58:46Z tv $ 048 */ 049 050 public class ContentTool 051 implements ApplicationTool 052 { 053 /** Prefix for Parameters for this tool */ 054 public static final String CONTENT_TOOL_PREFIX = "tool.content"; 055 056 /** 057 * Should this tool add Container Encoding to the URIs returned? 058 * True might cause trouble e.g. if you run with Apache HTTP Daemon / Tomcat Combo. 059 * 060 * Default is false (like Turbine 2.2) 061 */ 062 public static final String CONTENT_TOOL_ENCODING_KEY = "want.encoding"; 063 064 /** Default Value for CONTENT_TOOL_ENCODING_KEY */ 065 public static final boolean CONTENT_TOOL_ENCODING_DEFAULT = false; 066 067 /** Should this tool return relative URIs or absolute? Default: Absolute. */ 068 public static final String CONTENT_TOOL_RELATIVE_KEY = "want.relative"; 069 070 /** Default Value for CONTENT_TOOL_RELATIVE_KEY */ 071 public static final boolean CONTENT_TOOL_RELATIVE_DEFAULT = false; 072 073 /** Do we want the container to encode the response? */ 074 boolean wantEncoding = false; 075 076 /** Do we want a relative link? */ 077 boolean wantRelative = false; 078 079 /** Caches a DataURI object which provides the translation routines */ 080 private DataURI dataURI = null; 081 082 /** 083 * C'tor 084 */ 085 public ContentTool() 086 { 087 // empty 088 } 089 090 /* 091 * ======================================================================== 092 * 093 * Application Tool Interface 094 * 095 * ======================================================================== 096 * 097 */ 098 099 /** 100 * This will initialise a ContentTool object that was 101 * constructed with the default constructor (ApplicationTool 102 * method). 103 * 104 * @param data assumed to be a RunData object 105 */ 106 public void init(Object data) 107 { 108 // we just blithely cast to RunData as if another object 109 // or null is passed in we'll throw an appropriate runtime 110 // exception. 111 if (data instanceof PipelineData) 112 { 113 PipelineData pipelineData = (PipelineData) data; 114 RunData runData = (RunData)pipelineData; 115 dataURI = new DataURI(runData); 116 } 117 else 118 { 119 dataURI = new DataURI((RunData) data); 120 121 } 122 123 Configuration conf = 124 Turbine.getConfiguration().subset(CONTENT_TOOL_PREFIX); 125 126 if (conf != null) 127 { 128 wantRelative = conf.getBoolean(CONTENT_TOOL_RELATIVE_KEY, 129 CONTENT_TOOL_RELATIVE_DEFAULT); 130 131 wantEncoding = conf.getBoolean(CONTENT_TOOL_ENCODING_KEY, 132 CONTENT_TOOL_ENCODING_DEFAULT); 133 } 134 135 if (!wantEncoding) 136 { 137 dataURI.clearResponse(); 138 } 139 } 140 141 /** 142 * Refresh method - does nothing 143 */ 144 public void refresh() 145 { 146 // empty 147 } 148 149 /** 150 * Returns the Turbine URI of a given Path 151 * 152 * @param path The path to translate 153 * 154 * @return Turbine translated absolute path 155 */ 156 public String getURI(String path) 157 { 158 dataURI.setScriptName(path); 159 160 return wantRelative ? 161 dataURI.getRelativeLink() : dataURI.getAbsoluteLink(); 162 } 163 164 /** 165 * Returns the Turbine URI of a given Path. The 166 * result is always an absolute path starting with 167 * the server scheme (http/https). 168 * 169 * @param path The path to translate 170 * 171 * @return Turbine translated absolute path 172 */ 173 public String getAbsoluteURI(String path) 174 { 175 dataURI.setScriptName(path); 176 177 return dataURI.getAbsoluteLink(); 178 } 179 180 /** 181 * Returns the Turbine URI of a given Path. The 182 * result is always relative to the context of 183 * the application. 184 * 185 * @param path The path to translate 186 * 187 * @return Turbine translated absolute path 188 */ 189 public String getRelativeURI(String path) 190 { 191 dataURI.setScriptName(path); 192 193 return dataURI.getRelativeLink(); 194 } 195 196 }