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

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