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