1 package org.apache.turbine.util.template; 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 java.util.HashMap; 25 import java.util.Map; 26 27 import org.apache.turbine.services.template.TurbineTemplate; 28 import org.apache.turbine.util.RunData; 29 import org.apache.turbine.util.uri.URIConstants; 30 31 32 /** 33 * This is a wrapper for Template specific information. It's part of 34 * the RunData object and can extract the information it needs to do 35 * the job directly from the data.getParameters(). 36 * 37 * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a> 38 * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a> 39 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> 40 * @version $Id: TemplateInfo.java 1706239 2015-10-01 13:18:35Z tv $ 41 */ 42 public class TemplateInfo 43 { 44 45 /** Constants for tempStorage hash map. */ 46 public static final String NAVIGATION_TEMPLATE = "00navigation_template00"; 47 /** Constants for tempStorage hash map. */ 48 public static final String LAYOUT_TEMPLATE = "00layout_template00"; 49 /** Constants for tempStorage hash map. */ 50 public static final String SERVICE_NAME = "template_service"; 51 52 /* Handle to the RunData object. */ 53 private RunData data = null; 54 55 /* Place to store information about templates. */ 56 private Map<String, Object> tempStorage = null; 57 58 /** 59 * Constructor 60 * 61 * @param data A Turbine RunData object. 62 */ 63 public TemplateInfo(RunData data) 64 { 65 this.data = data; 66 tempStorage = new HashMap<String, Object>(10); 67 } 68 69 /** 70 * Get the value of navigationTemplate. 71 * 72 * @return A String with the value of navigationTemplate. 73 */ 74 public String getNavigationTemplate() 75 { 76 return getString(TemplateInfo.NAVIGATION_TEMPLATE); 77 } 78 79 /** 80 * Set the value of navigationTemplate. 81 * 82 * @param v Value to assign to navigationTemplate. 83 */ 84 public void setNavigationTemplate(String v) 85 { 86 setTemp(TemplateInfo.NAVIGATION_TEMPLATE, v); 87 } 88 89 /** 90 * Get the value of screen for the RunData parameters. This 91 * information comes from PathInfo or a QueryString. 92 * 93 * @return A String with the value of screen. 94 */ 95 public String getScreenTemplate() 96 { 97 return data.getParameters().getString(URIConstants.CGI_TEMPLATE_PARAM, null); 98 } 99 100 /** 101 * Set the value of screen. This is really just a method to hide 102 * using the RunData Parameter. 103 * 104 * @param v Value to assign to screen. 105 */ 106 public void setScreenTemplate(String v) 107 { 108 data.getParameters().setString(URIConstants.CGI_TEMPLATE_PARAM, v); 109 110 // We have changed the screen template so 111 // we should now update the layout template 112 // as well. We will use the template service 113 // to help us out. 114 try 115 { 116 setLayoutTemplate(TurbineTemplate.getLayoutTemplateName(v)); 117 } 118 catch (Exception e) 119 { 120 /* 121 * do nothing. 122 */ 123 } 124 } 125 126 /** 127 * Get the value of layout. 128 * 129 * @return A String with the value of layout. 130 */ 131 public String getLayoutTemplate() 132 { 133 String value = getString(TemplateInfo.LAYOUT_TEMPLATE); 134 return value; 135 } 136 137 /** 138 * Set the value of layout. 139 * 140 * @param v Value to assign to layout. 141 */ 142 public void setLayoutTemplate(String v) 143 { 144 setTemp(TemplateInfo.LAYOUT_TEMPLATE, v); 145 } 146 147 /** 148 * Get the value of Template context. This will be cast to the 149 * proper Context by its Service. 150 * 151 * @param name The name of the template context. 152 * @return An Object with the Value of context. 153 */ 154 public Object getTemplateContext(String name) 155 { 156 return getTemp(name); 157 } 158 159 /** 160 * Set the value of context. 161 * 162 * @param name The name of the template context. 163 * @param v Value to assign to context. 164 */ 165 public void setTemplateContext(String name, Object v) 166 { 167 setTemp(name, v); 168 } 169 170 /** 171 * Get the value of service. 172 * 173 * @return A String with the value of service. 174 */ 175 public String getService() 176 { 177 return getString(TemplateInfo.SERVICE_NAME); 178 } 179 180 /** 181 * Set the value of service. 182 * 183 * @param v Value to assign to service. 184 */ 185 public void setService(String v) 186 { 187 setTemp(TemplateInfo.SERVICE_NAME, v); 188 } 189 190 /** 191 * Get an object from temporary storage. 192 * 193 * @param name A String with the name of the object. 194 * @return An Object. 195 */ 196 public Object getTemp(String name) 197 { 198 return tempStorage.get(name); 199 } 200 201 /** 202 * Get an object from temporary storage, or a default value. 203 * 204 * @param name A String with the name of the object. 205 * @param def An Object, the default value. 206 * @return An Object. 207 */ 208 public Object getTemp(String name, Object def) 209 { 210 try 211 { 212 Object val = tempStorage.get(name); 213 return (val != null) ? val : def; 214 } 215 catch (Exception e) 216 { 217 return def; 218 } 219 } 220 221 /** 222 * Put an object into temporary storage. 223 * 224 * @param name A String with the name of the object. 225 * @param value An Object, the value. 226 */ 227 public void setTemp(String name, Object value) 228 { 229 tempStorage.put(name, value); 230 } 231 232 /** 233 * Return a String[] from the temp hash map. 234 * 235 * @param name A String with the name of the object. 236 * @return A String[]. 237 */ 238 public String[] getStringArray(String name) 239 { 240 String[] value = null; 241 Object object = getTemp(name, null); 242 if (object != null) 243 { 244 value = (String[]) object; 245 } 246 return value; 247 } 248 249 /** 250 * Return a String from the temp hash map. 251 * 252 * @param name A String with the name of the object. 253 * @return A String. 254 */ 255 public String getString(String name) 256 { 257 String value = null; 258 Object object = getTemp(name, null); 259 if (object != null) 260 { 261 value = (String) object; 262 } 263 return value; 264 } 265 266 /** 267 * Remove an object from the temporary storage. 268 * 269 * @param name A String with the name of the object. 270 * @return The object that was removed or <code>null</code> 271 * if the name was not a key. 272 */ 273 public Object removeTemp(String name) 274 { 275 return tempStorage.remove(name); 276 } 277 278 /** 279 * Returns all the available names in the temporary storage. 280 * 281 * @return A object array with the keys. 282 */ 283 public Object[] getTempKeys() 284 { 285 return tempStorage.keySet().toArray(); 286 } 287 }