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 &lt;LINK&gt; 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// ----------------------------------------------------------------------------