1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. 2 * 3 * This program and the accompanying materials are made available under 4 * the terms of the Common Public License v1.0 which accompanies this distribution, 5 * and is available at http://www.eclipse.org/legal/cpl-v10.html 6 * 7 * $Id: HTMLDocument.java,v 1.1.1.1 2004/05/09 16:57:41 vlad_r Exp $ 8 */ 9 package com.vladium.emma.report.html.doc; 10 11 import com.vladium.util.IConstants; 12 13 // ---------------------------------------------------------------------------- 14 /** 15 * @author Vlad Roubtsov, (C) 2003 16 */ 17 public 18 final class HTMLDocument extends IElement.Factory.ElementImpl 19 { 20 // public: ................................................................ 21 22 HTMLDocument()23 public HTMLDocument () 24 { 25 this (null, null); 26 } 27 HTMLDocument(final String title, final String encoding)28 public HTMLDocument (final String title, final String encoding) 29 { 30 super (Tag.HTML, AttributeSet.create ()); 31 32 super.add (m_head = IElement.Factory.create (Tag.HEAD)); 33 super.add (m_body = IElement.Factory.create (Tag.BODY)); 34 35 // specify encoding META before anything else: 36 if ((encoding != null) && (encoding.length () != 0)) 37 { 38 final ISimpleElement meta = ISimpleElement.Factory.create (Tag.META); 39 40 meta.getAttributes () 41 .set (Attribute.HTTP_EQUIV, "Content-Type") 42 .set (Attribute.CONTENT, "text/html; charset=" + encoding); 43 44 m_head.add (meta); 45 } 46 47 if (title != null) 48 { 49 // TODO: escape 50 //getAttributes ().set (Attribute.TITLE, title); 51 52 final IElement titleElement = IElement.Factory.create (Tag.TITLE).setText (title, false); 53 m_head.add (titleElement); 54 } 55 56 m_title = title; 57 } 58 getTitle()59 public String getTitle () 60 { 61 return m_title; 62 } 63 getHead()64 public IElement getHead () 65 { 66 return m_head; 67 } 68 getBody()69 public IElement getBody () 70 { 71 return m_body; 72 } 73 getHeader()74 public IContent getHeader () 75 { 76 return m_header; 77 } 78 getFooter()79 public IContent getFooter () 80 { 81 return m_footer; 82 } 83 84 setHeader(final IContent header)85 public void setHeader (final IContent header) 86 { 87 if (header != null) m_header = header; 88 } 89 setFooter(final IContent footer)90 public void setFooter (final IContent footer) 91 { 92 if (footer != null) m_footer = footer; 93 } 94 95 /** 96 * Overridden to ensure header/footer appear first/last in the body. 97 */ emit(HTMLWriter out)98 public void emit (HTMLWriter out) 99 { 100 if (m_header != null) m_body.add (0, m_header); 101 if (m_footer != null) m_body.add (m_body.size (), m_footer); 102 103 super.emit(out); 104 } 105 106 /** 107 * Overridden to add to the doc body. 108 */ add(final IContent content)109 public IElementList add (final IContent content) 110 { 111 m_body.add (content); 112 113 return this; 114 } 115 addStyle(final String css)116 public void addStyle (final String css) 117 { 118 if (css != null) 119 { 120 final IElement style = IElement.Factory.create (Tag.STYLE); 121 style.getAttributes ().set (Attribute.TYPE, "text/css"); 122 123 final StringBuffer def = new StringBuffer ("<!--"); 124 def.append (IConstants.EOL); 125 126 style.setText (css, false); 127 128 def.append (IConstants.EOL); 129 def.append ("-->"); 130 131 m_head.add (style); 132 } 133 } 134 135 /** 136 * Adds a <LINK> to the head. 137 */ addLINK(final String type, final String href)138 public void addLINK (final String type, final String href) 139 { 140 final ISimpleElement link = ISimpleElement.Factory.create (Tag.LINK); 141 142 // TODO: add REL="STYLESHEET" 143 144 link.getAttributes ().set (Attribute.TYPE, type); // TODO: escape 145 link.getAttributes ().set (Attribute.HREF, href); // TODO: escape 146 link.getAttributes ().set (Attribute.SRC, href); // TODO: escape 147 148 m_head.add (link); 149 } 150 addH(final int level, final String text, final String classID)151 public void addH (final int level, final String text, final String classID) 152 { 153 final Tag Hl = Tag.Hs [level]; 154 155 final IElement h = IElement.Factory.create (Hl); 156 h.setText (text, true); 157 h.setClass (classID); 158 159 add (h); 160 } 161 addH(final int level, final IContent text, final String classID)162 public void addH (final int level, final IContent text, final String classID) 163 { 164 final Tag Hl = Tag.Hs [level]; 165 166 final IElement h = IElement.Factory.create (Hl); 167 h.add (text); 168 h.setClass (classID); 169 170 add (h); 171 } 172 addHR(final int size)173 public void addHR (final int size) 174 { 175 final IElement hr = IElement.Factory.create (Tag.HR); 176 hr.getAttributes ().set (Attribute.SIZE, size); 177 178 add (hr); 179 } 180 addEmptyP()181 public void addEmptyP () 182 { 183 add (IElement.Factory.create (Tag.P)); 184 } 185 186 // protected: ............................................................. 187 188 // package: ............................................................... 189 190 // private: ............................................................... 191 192 193 private final String m_title; 194 private final IElement m_head; 195 private final IElement m_body; 196 197 private IContent m_header, m_footer; 198 199 } // end of class 200 // ----------------------------------------------------------------------------