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