##### Coverage Report - org.apache.turbine.util.template.HtmlPageAttributes

Classes in this File | Line Coverage | Branch Coverage | Complexity
HtmlPageAttributes |
20% | 18/89
0% | 0/8
| 1.2142857142857142;1,214
HtmlPageAttributes$LinkTag |
0% | 0/19
0% | 0/8
| 1.2142857142857142;1,214

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.ArrayList;
25 |  |
     import java.util.LinkedHashMap;
26 |  |
     import java.util.List;
27 |  |
     import java.util.Map;
28 |  |
29 |  |
     import org.apache.commons.configuration.Configuration;
30 |  |
     import org.apache.commons.lang.StringUtils;
31 |  |
     import org.apache.turbine.Turbine;
32 |  |
     import org.apache.turbine.TurbineConstants;
33 |  |
     import org.apache.turbine.services.pull.ApplicationTool;
34 |  |
35 |  |
     /**
36 |  |
      * Template context tool that can be used to set various attributes of a
37 |  |
      * HTML page.  This tool does not automatically make the changes in the HTML
38 |  |
      * page for you.  You must use this tool in your layout template to retrieve
39 |  |
      * the attributes.
40 |  |
      * <p>
41 |  |
      * The set/add methods are can be used from a screen template, action, screen
42 |  |
      * class, layour template, or anywhere else.  The get methods should be used in
43 |  |
      * your layout template(s) to construct the appropriate HTML tags.
44 |  |
      *<p>
45 |  |
      * Example usage of this tool to build the HEAD and BODY tags in your layout
46 |  |
      * templates:
47 |  |
      * <p>
48 |  |
      *  <code>
49 |  |
      *  ## Set defaults for all pages using this layout.  Anything set here can<br>
50 |  |
      *  ## be overridden in the screen template.<br>
51 |  |
      *  $page.setTitle("My default page title");<br>
52 |  |
      *  $page.setHttpEquiv("Content-Style-Type","text/css")<br>
53 |  |
      *  $page.addStyleSheet($content.getURI("myStyleSheet.css"))<br>
54 |  |
      *  $page.addScript($content.getURI("globalJavascriptCode.js"))<br>
55 |  |
      *  <br>
56 |  |
      *  ## build the HTML, HEAD, and BODY tags dynamically<br>
57 |  |
      *  &lt;html&gt;<br>
58 |  |
      *    &lt;head&gt;<br>
59 |  |
      *      #if( $page.Title != "" )<br>
60 |  |
      *      &lt;title&gt;$page.Title&lt;/title&gt;<br>
61 |  |
      *      #end<br>
62 |  |
      *      #foreach($metaTag in $page.MetaTags.keySet())<br>
63 |  |
      *      &lt;meta name="$metaTag" content="$page.MetaTags.get($metaTag)"&gt;<br>
64 |  |
      *      #end<br>
65 |  |
      *      #foreach($httpEquiv in $page.HttpEquivs.keySet())<br>
66 |  |
      *      &lt;meta http-equiv="$httpEquiv" content="$page.HttpEquivs.get($httpEquiv)"&gt;<br>
67 |  |
      *      #end<br>
68 |  |
      *      #foreach( $styleSheet in $page.StyleSheets )<br>
69 |  |
      *        &lt;link rel="stylesheet" href="$styleSheet.Url"<br>
70 |  |
      *          #if($styleSheet.Type != "" ) type="$styleSheet.Type" #end<br>
71 |  |
      *          #if($styleSheet.Media != "") media="$styleSheet.Media" #end<br>
72 |  |
      *          #if($styleSheet.Title != "") title="$styleSheet.Title" #end<br>
73 |  |
      *        &gt;<br>
74 |  |
      *      #end<br>
75 |  |
      *      #foreach( $script in $page.Scripts )<br>
76 |  |
      *        &lt;script type="text/javascript" src="$script" language="JavaScript"&gt;&lt;/script&gt;<br>
77 |  |
      *      #end<br>
78 |  |
      *    &lt;/head&gt;<br>
79 |  |
      *<br>
80 |  |
      *    ## Construct the body tag.  Iterate through the body attributes to build the opening tag<br>
81 |  |
      *    &lt;body<br>
82 |  |
      *      #foreach( $attributeName in $page.BodyAttributes.keySet() )<br>
83 |  |
      *        $attributeName = "$page.BodyAttributes.get($attributeName)"<br>
84 |  |
      *      #end<br>
85 |  |
      *     &gt;
86 |  |
      * </code>
87 |  |
      * <p>
88 |  |
      * Example usages of this tool in your screen templates:<br>
89 |  |
      *   <code>$page.addScript($content.getURI("myJavascript.js")<br>
90 |  |
      *   $page.setTitle("My page title")<br>
91 |  |
      *   $page.setHttpEquiv("refresh","5; URL=http://localhost/nextpage.html")</code>
92 |  |
      *
93 |  |
      * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
94 |  |
      * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
95 |  |
      * @version $Id: HtmlPageAttributes.java 1709648 2015-10-20 17:08:10Z tv $
96 |  |
      */
97 |  |
     public class HtmlPageAttributes
98 |  |
             implements ApplicationTool
99 |  |
     {
100 |  |
         /** The title */
101 |  |
         private String title;
102 |  |
103 |  |
         /** Body Attributes */
104 | 8 |
         private final Map<String, String> bodyAttributes = new LinkedHashMap<String, String>();
105 |  |
106 |  |
         /** Script references */
107 | 8 |
         private final List<String> scripts = new ArrayList<String>();
108 |  |
109 |  |
         /** External references */
110 | 8 |
         private final List<LinkTag> linkTags = new ArrayList<LinkTag>();
111 |  |
112 |  |
         /** Inline styles */
113 | 8 |
         private final List<String> styles = new ArrayList<String>();
114 |  |
115 |  |
         /** Meta tags for the HEAD */
116 | 8 |
         private final Map<String, String> metaTags = new LinkedHashMap<String, String>();
117 |  |
118 |  |
         /** http-equiv tags */
119 | 8 |
         private final Map<String, String> httpEquivs = new LinkedHashMap<String, String>();
120 |  |
121 |  |
         /** Doctype */
122 | 8 |
         private String doctype = null;
123 |  |
124 |  |
         /**
125 |  |
          * Construct a new instance
126 |  |
          */
127 |  |
         public HtmlPageAttributes()
128 | 8 |
         {
129 | 8 |
             init(null);
130 | 8 |
         }
131 |  |
132 |  |
         /**
133 |  |
          * Initialize this instance.
134 |  |
          * (ApplicationTool method)
135 |  |
          *
136 |  |
          * @param data not used
137 |  |
          */
138 |  |
         @Override
139 |  |
         public void init(Object data)
140 |  |
         {
141 | 17 |
             this.title = null;
142 | 17 |
             this.bodyAttributes.clear();
143 | 17 |
             this.scripts.clear();
144 | 17 |
             this.linkTags.clear();
145 | 17 |
             this.styles.clear();
146 | 17 |
             this.metaTags.clear();
147 | 17 |
             this.httpEquivs.clear();
148 | 17 |
         }
149 |  |
150 |  |
         /**
151 |  |
          * Refresh method - does nothing
152 |  |
          */
153 |  |
         @Override
154 |  |
         public void refresh()
155 |  |
         {
156 |  |
             // empty
157 | 0 |
         }
158 |  |
159 |  |
         /**
160 |  |
          * Set the title in the page.  This returns an empty String so
161 |  |
          * that the template doesn't complain about getting a null return
162 |  |
          * value.  Subsequent calls to this method will replace the current
163 |  |
          * title.
164 |  |
          *
165 |  |
          * @param title A String with the title.
166 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
167 |  |
          */
168 |  |
         public HtmlPageAttributes setTitle(String title)
169 |  |
         {
170 | 0 |
             this.title = title;
171 | 0 |
             return this;
172 |  |
         }
173 |  |
174 |  |
         /**
175 |  |
          * Get the title in the page.  This returns an empty String if
176 |  |
          * empty so that the template doesn't complain about getting a null
177 |  |
          * return value.
178 |  |
          *
179 |  |
          * @return A String with the title.
180 |  |
          */
181 |  |
         public String getTitle()
182 |  |
         {
183 | 0 |
             if (StringUtils.isEmpty(this.title))
184 |  |
             {
185 | 0 |
                 return "";
186 |  |
             }
187 | 0 |
             return title;
188 |  |
         }
189 |  |
190 |  |
         /**
191 |  |
          * Adds an attribute to the BODY tag.
192 |  |
          *
193 |  |
          * @param name A String.
194 |  |
          * @param value A String.
195 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
196 |  |
          */
197 |  |
         public HtmlPageAttributes addBodyAttribute(String name, String value)
198 |  |
         {
199 | 0 |
             this.bodyAttributes.put(name, value);
200 | 0 |
             return this;
201 |  |
         }
202 |  |
203 |  |
         /**
204 |  |
          * Returns the map of body attributes
205 |  |
          *
206 |  |
          * @return the map
207 |  |
          */
208 |  |
         public Map<String, String> getBodyAttributes()
209 |  |
         {
210 | 0 |
             return this.bodyAttributes;
211 |  |
         }
212 |  |
213 |  |
         /**
214 |  |
          * Adds a script reference
215 |  |
          *
216 |  |
          * @param scriptURL
217 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
218 |  |
          */
219 |  |
         public HtmlPageAttributes addScript(String scriptURL)
220 |  |
         {
221 | 0 |
             this.scripts.add(scriptURL);
222 | 0 |
             return this;
223 |  |
         }
224 |  |
225 |  |
         /**
226 |  |
          * Returns a collection of script URLs
227 |  |
          *
228 |  |
          * @return list of String objects containing URLs of javascript files
229 |  |
          * to include
230 |  |
          */
231 |  |
         public List<String> getScripts()
232 |  |
         {
233 | 0 |
             return this.scripts;
234 |  |
         }
235 |  |
236 |  |
         /**
237 |  |
          * Adds a style sheet reference
238 |  |
          *
239 |  |
          * @param styleSheetURL URL of the style sheet
240 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
241 |  |
          */
242 |  |
         public HtmlPageAttributes addStyleSheet(String styleSheetURL)
243 |  |
         {
244 | 0 |
             addStyleSheet(styleSheetURL, "screen", null, "text/css");
245 | 0 |
             return this;
246 |  |
         }
247 |  |
248 |  |
         /**
249 |  |
          * Adds a style sheet reference
250 |  |
          *
251 |  |
          * @param styleSheetURL URL of the style sheet
252 |  |
          * @param media name of the media
253 |  |
          * @param title title of the stylesheet
254 |  |
          * @param type content type
255 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
256 |  |
          */
257 |  |
         public HtmlPageAttributes addStyleSheet(String styleSheetURL,
258 |  |
                                                 String media, String title, String type)
259 |  |
         {
260 | 0 |
             LinkTag ss = new LinkTag("stylesheet", styleSheetURL);
261 | 0 |
             ss.setMedia(media);
262 | 0 |
             ss.setTitle(title);
263 | 0 |
             ss.setType(type);
264 | 0 |
             this.linkTags.add(ss);
265 | 0 |
             return this;
266 |  |
         }
267 |  |
268 |  |
         /**
269 |  |
          * Adds a generic external reference
270 |  |
          *
271 |  |
          * @param relation type of the reference (prev, next, first, last, top, etc.)
272 |  |
          * @param linkURL URL of the reference
273 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
274 |  |
          */
275 |  |
         public HtmlPageAttributes addLink(String relation, String linkURL)
276 |  |
         {
277 | 0 |
             return addLink(relation, linkURL, null, null);
278 |  |
         }
279 |  |
280 |  |
         /**
281 |  |
          * Adds a generic external reference
282 |  |
          *
283 |  |
          * @param relation type of the reference (prev, next, first, last, top, etc.)
284 |  |
          * @param linkURL URL of the reference
285 |  |
          * @param title title of the reference
286 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
287 |  |
          */
288 |  |
         public HtmlPageAttributes addLink(String relation, String linkURL, String title)
289 |  |
         {
290 | 0 |
             return addLink(relation, linkURL, title, null);
291 |  |
         }
292 |  |
293 |  |
         /**
294 |  |
          * Adds a generic external reference
295 |  |
          *
296 |  |
          * @param relation type of the reference (prev, next, first, last, top, etc.)
297 |  |
          * @param linkURL URL of the reference
298 |  |
          * @param title title of the reference
299 |  |
          * @param type content type
300 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
301 |  |
          */
302 |  |
         public HtmlPageAttributes addLink(String relation, String linkURL, String title,
303 |  |
                                             String type)
304 |  |
         {
305 | 0 |
             LinkTag ss = new LinkTag(relation, linkURL);
306 | 0 |
             ss.setTitle(title);
307 | 0 |
             ss.setType(type);
308 | 0 |
             this.linkTags.add(ss);
309 | 0 |
             return this;
310 |  |
         }
311 |  |
312 |  |
         /**
313 |  |
          * Returns a collection of link URLs
314 |  |
          *
315 |  |
          * @return list LinkTag objects (inner class)
316 |  |
          */
317 |  |
         public List<LinkTag> getLinks()
318 |  |
         {
319 | 0 |
             return this.linkTags;
320 |  |
         }
321 |  |
322 |  |
         /**
323 |  |
          * Adds a STYLE element to the HEAD of the page with the provided content.
324 |  |
          *
325 |  |
          * @param styleText The contents of the <code>style</code> tag.
326 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
327 |  |
          */
328 |  |
         public HtmlPageAttributes addStyle(String styleText)
329 |  |
         {
330 | 0 |
             this.styles.add(styleText);
331 | 0 |
             return this;
332 |  |
         }
333 |  |
334 |  |
         /**
335 |  |
          * Returns a collection of styles
336 |  |
          *
337 |  |
          * @return list of String objects containing the contents of style tags
338 |  |
          */
339 |  |
         public List<String> getStyles()
340 |  |
         {
341 | 0 |
             return this.styles;
342 |  |
         }
343 |  |
344 |  |
         /**
345 |  |
          * Set a keywords META tag in the HEAD of the page.
346 |  |
          *
347 |  |
          * @param keywords A String.
348 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
349 |  |
          */
350 |  |
         public HtmlPageAttributes setKeywords(String keywords)
351 |  |
         {
352 | 0 |
             this.metaTags.put("keywords", keywords);
353 | 0 |
             return this;
354 |  |
         }
355 |  |
356 |  |
         /**
357 |  |
          * Sets a HttpEquiv META tag in the HEAD of the page, usage:
358 |  |
          * <br><code>setHttpEquiv("refresh", "5; URL=http://localhost/nextpage.html")</code>
359 |  |
          * <br><code>setHttpEquiv("Expires", "Tue, 20 Aug 1996 14:25:27 GMT")</code>
360 |  |
          *
361 |  |
          * @param httpEquiv The value to use for the http-equiv attribute.
362 |  |
          * @param content   The text for the content attribute of the meta tag.
363 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
364 |  |
          */
365 |  |
         public HtmlPageAttributes setHttpEquiv(String httpEquiv, String content)
366 |  |
         {
367 | 0 |
             this.httpEquivs.put(httpEquiv, content);
368 | 0 |
             return this;
369 |  |
         }
370 |  |
371 |  |
         /**
372 |  |
          * Add a description META tag to the HEAD of the page.
373 |  |
          *
374 |  |
          * @param description A String.
375 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
376 |  |
          */
377 |  |
         public HtmlPageAttributes setDescription(String description)
378 |  |
         {
379 | 0 |
             this.metaTags.put("description", description);
380 | 0 |
             return this;
381 |  |
         }
382 |  |
383 |  |
         /**
384 |  |
          * Set the background image for the BODY tag.
385 |  |
          *
386 |  |
          * @param url A String.
387 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
388 |  |
          */
389 |  |
         public HtmlPageAttributes setBackground(String url)
390 |  |
         {
391 | 0 |
             this.bodyAttributes.put("background", url);
392 | 0 |
             return this;
393 |  |
         }
394 |  |
395 |  |
         /**
396 |  |
          * Set the background color for the BODY tag.  You can use either
397 |  |
          * color names or color values (e.g. "white" or "#ffffff" or
398 |  |
          * "ffffff").
399 |  |
          *
400 |  |
          * @param color A String.
401 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
402 |  |
          */
403 |  |
         public HtmlPageAttributes setBgColor(String color)
404 |  |
         {
405 | 0 |
             this.bodyAttributes.put("BGCOLOR", color);
406 | 0 |
             return this;
407 |  |
         }
408 |  |
409 |  |
         /**
410 |  |
          * Set the text color for the BODY tag.  You can use either color
411 |  |
          * names or color values (e.g. "white" or "#ffffff" or "ffffff").
412 |  |
          *
413 |  |
          * @param color A String.
414 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
415 |  |
          */
416 |  |
         public HtmlPageAttributes setTextColor(String color)
417 |  |
         {
418 | 0 |
             this.bodyAttributes.put("TEXT", color);
419 | 0 |
             return this;
420 |  |
         }
421 |  |
422 |  |
         /**
423 |  |
          * Set the link color for the BODY tag.  You can use either color
424 |  |
          * names or color values (e.g. "white" or "#ffffff" or "ffffff").
425 |  |
          *
426 |  |
          * @param color A String.
427 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
428 |  |
          */
429 |  |
         public HtmlPageAttributes setLinkColor(String color)
430 |  |
         {
431 | 0 |
             this.bodyAttributes.put("LINK", color);
432 | 0 |
             return this;
433 |  |
         }
434 |  |
435 |  |
         /**
436 |  |
          * Set the visited link color for the BODY tag.
437 |  |
          *
438 |  |
          * @param color A String.
439 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
440 |  |
          */
441 |  |
         public HtmlPageAttributes setVlinkColor(String color)
442 |  |
         {
443 | 0 |
             this.bodyAttributes.put("VLINK", color);
444 | 0 |
             return this;
445 |  |
         }
446 |  |
447 |  |
         /**
448 |  |
          * Set the active link color for the BODY tag.
449 |  |
          *
450 |  |
          * @param color A String.
451 |  |
          * @return a <code>HtmlPageAttributes</code> (self).
452 |  |
          */
453 |  |
         public HtmlPageAttributes setAlinkColor(String color)
454 |  |
         {
455 | 0 |
             this.bodyAttributes.put("ALINK", color);
456 | 0 |
             return this;
457 |  |
         }
458 |  |
459 |  |
         /**
460 |  |
          * Gets the map of http equiv tags
461 |  |
          *
462 |  |
          * @return Map of http equiv names to the contents
463 |  |
          */
464 |  |
         public Map<String, String> getHttpEquivs()
465 |  |
         {
466 | 0 |
             return this.httpEquivs;
467 |  |
         }
468 |  |
469 |  |
         /**
470 |  |
          * Gets the map of meta tags
471 |  |
          *
472 |  |
          * @return Map of http equiv names to the contents
473 |  |
          */
474 |  |
         public Map<String, String> getMetaTags()
475 |  |
         {
476 | 0 |
             return this.metaTags;
477 |  |
         }
478 |  |
479 |  |
         /**
480 |  |
          * A dummy toString method that returns an empty string.
481 |  |
          *
482 |  |
          * @return An empty String ("").
483 |  |
          */
484 |  |
         @Override
485 |  |
         public String toString()
486 |  |
         {
487 | 0 |
             return "";
488 |  |
         }
489 |  |
490 |  |
         /**
491 |  |
          * Helper class to hold data about a &lt;link ... /&gt; html header tag
492 |  |
          */
493 |  |
         public static class LinkTag
494 |  |
         {
495 |  |
             private String relation;
496 |  |
             private String url;
497 |  |
             private String title;
498 |  |
             private String media;
499 |  |
             private String type;
500 |  |
501 |  |
             /**
502 |  |
              * Constructor requiring the URL and relation to be set
503 |  |
              *
504 |  |
              * @param relation Relation type the external link such as prev, next,
505 |  |
              *        stylesheet, shortcut icon
506 |  |
              * @param url URL of the external link
507 |  |
              */
508 |  |
             public LinkTag(String relation, String url)
509 | 0 |
             {
510 | 0 |
                 setRelation(relation);
511 | 0 |
                 setUrl(url);
512 | 0 |
             }
513 |  |
514 |  |
             /**
515 |  |
              * Gets the content type of the style sheet
516 |  |
              *
517 |  |
              * @return content type
518 |  |
              */
519 |  |
             public String getType()
520 |  |
             {
521 | 0 |
                 return (StringUtils.isEmpty(type) ? "" : type);
522 |  |
             }
523 |  |
524 |  |
             /**
525 |  |
              * Sets the content type of the style sheet
526 |  |
              *
527 |  |
              * @param type content type
528 |  |
              */
529 |  |
             public void setType(String type)
530 |  |
             {
531 | 0 |
                 this.type = type;
532 | 0 |
             }
533 |  |
534 |  |
             /**
535 |  |
              * @return String representation of the URL
536 |  |
              */
537 |  |
             public String getUrl()
538 |  |
             {
539 | 0 |
                 return url;
540 |  |
             }
541 |  |
542 |  |
             /**
543 |  |
              * Sets the URL of the external style sheet
544 |  |
              *
545 |  |
              * @param url The URL of the stylesheet
546 |  |
              */
547 |  |
             private void setUrl(String url)
548 |  |
             {
549 | 0 |
                 this.url = url;
550 | 0 |
             }
551 |  |
552 |  |
             /**
553 |  |
              * Gets the title of the style sheet
554 |  |
              *
555 |  |
              * @return title
556 |  |
              */
557 |  |
             public String getTitle()
558 |  |
             {
559 | 0 |
                 return (StringUtils.isEmpty(title) ? "" : title);
560 |  |
             }
561 |  |
562 |  |
             /**
563 |  |
              * Sets the title of the stylesheet
564 |  |
              *
565 |  |
              * @param title
566 |  |
              */
567 |  |
             public void setTitle(String title)
568 |  |
             {
569 | 0 |
                 this.title = title;
570 | 0 |
             }
571 |  |
572 |  |
             /**
573 |  |
              * Gets the media for which the stylesheet should be applied.
574 |  |
              *
575 |  |
              * @return name of the media
576 |  |
              */
577 |  |
             public String getMedia()
578 |  |
             {
579 | 0 |
                 return (StringUtils.isEmpty(media) ? "" : media);
580 |  |
             }
581 |  |
582 |  |
             /**
583 |  |
              * Sets the media for which the stylesheet should be applied.
584 |  |
              *
585 |  |
              * @param media name of the media
586 |  |
              */
587 |  |
             public void setMedia(String media)
588 |  |
             {
589 | 0 |
                 this.media = media;
590 | 0 |
             }
591 |  |
592 |  |
             /**
593 |  |
              * Gets the relation type of the tag.
594 |  |
              *
595 |  |
              * @return name of the relation
596 |  |
              */
597 |  |
             public String getRelation()
598 |  |
             {
599 | 0 |
                 return (StringUtils.isEmpty(relation) ? "" : relation);
600 |  |
             }
601 |  |
602 |  |
             /**
603 |  |
              * Sets the relation type of the tag.
604 |  |
              *
605 |  |
              * @param relation name of the relation
606 |  |
              */
607 |  |
             public void setRelation(String relation)
608 |  |
             {
609 | 0 |
                 this.relation = relation;
610 | 0 |
             }
611 |  |
         }
612 |  |
613 |  |
         /**
614 |  |
          * Retrieve the default Doctype as configured by the
615 |  |
          * TurbineResources.peoperties
616 |  |
          * default.doctype.root.element, default.doctype.identifier and
617 |  |
          * default.doctype.url properties (defaults are "HTML",
618 |  |
          * "-//W3C//DTD HTML 4.01 Transitional//EN" and
619 |  |
          * "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd" respectively).
620 |  |
          *
621 |  |
          * @return the DOCTYPE tag constructed from the properties in
622 |  |
          * TurbineResources.properties.
623 |  |
          */
624 |  |
         public String getDefaultDoctype()
625 |  |
         {
626 | 0 |
             if (doctype == null)
627 |  |
             {
628 | 0 |
                 Configuration conf = Turbine.getConfiguration();
629 | 0 |
                 String tag = conf.getString(
630 |  |
                         TurbineConstants.DEFAULT_HTML_DOCTYPE_ROOT_ELEMENT_KEY,
631 |  |
                         TurbineConstants.DEFAULT_HTML_DOCTYPE_ROOT_ELEMENT_DEFAULT);
632 |  |
633 | 0 |
                 if (StringUtils.isEmpty(tag))
634 |  |
                 {
635 | 0 |
                     doctype = "";
636 |  |
                 }
637 |  |
                 else
638 |  |
                 {
639 | 0 |
                     String identifier = conf.getString(
640 |  |
                             TurbineConstants.DEFAULT_HTML_DOCTYPE_IDENTIFIER_KEY,
641 |  |
                             TurbineConstants.DEFAULT_HTML_DOCTYPE_IDENTIFIER_DEFAULT);
642 |  |
643 | 0 |
                     String uri = conf.getString(
644 |  |
                             TurbineConstants.DEFAULT_HTML_DOCTYPE_URI_KEY,
645 |  |
                             TurbineConstants.DEFAULT_HTML_DOCTYPE_URI_DEFAULT);
646 |  |
647 | 0 |
                     doctype = buildDoctype(tag, identifier, uri);
648 |  |
                 }
649 |  |
             }
650 |  |
651 | 0 |
             return doctype;
652 |  |
         }
653 |  |
654 |  |
         /**
655 |  |
          * Build the doctype element.
656 |  |
          *
657 |  |
          * @param tag the tag whose DTD is being declared.
658 |  |
          * @param identifier the identifier for the doctype declaration.
659 |  |
          * @param uri the uri for the doctype declaration.
660 |  |
          * @return the doctype.
661 |  |
          */
662 |  |
         private String buildDoctype(String tag, String identifier, String uri)
663 |  |
         {
664 | 0 |
             StringBuilder doctypeBuf = new StringBuilder("<!DOCTYPE ");
665 | 0 |
             doctypeBuf.append(tag);
666 |  |
667 | 0 |
             if (StringUtils.isNotEmpty(identifier))
668 |  |
             {
669 | 0 |
                 doctypeBuf.append(" PUBLIC \"");
670 | 0 |
                 doctypeBuf.append(identifier);
671 | 0 |
                 doctypeBuf.append("\" \"");
672 |  |
             }
673 |  |
             else
674 |  |
             {
675 | 0 |
                 doctypeBuf.append(" SYSTEM \"");
676 |  |
             }
677 |  |
678 | 0 |
             doctypeBuf.append(uri);
679 | 0 |
             doctypeBuf.append("\">");
680 |  |
681 | 0 |
             return doctypeBuf.toString();
682 |  |
         }
683 |  |
     }